3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在进行期货量化策略回测时,保证金比例直接影响到策略的资金利用率、最大可开仓手数以及爆仓风险评估。默认情况下,ptrade 会使用交易所规定的基础保证金比例,但实际交易中,券商/期货公司通常会在交易所基础上加收一定比例。为了让回测更贴近真实交易环境,ptrade 提供了 set_margin_rate 接口,允许用户自定义不同期货品种的保证金比例。
set_margin_rate用于设置期货收取的保证金比例,该设置是按照**交易代码(品种)**进行设置的。
set_margin_rate(transaction_code, margin_rate)transaction_code (str):期货合约的交易代码(不带具体合约月份,如沪铜 "CU2112" 的交易代码为 "CU")。margin_rate (float):保证金比例。例如,将保证金比例设置为 8%,则输入 0.08。get_margin_rate用于获取当前策略中用户设置的保证金比例。
get_margin_rate(transaction_code)transaction_code (str):期货合约的交易代码,如 "CU"。以下是一个完整的 ptrade 期货策略示例。我们在初始化阶段将沪铜(CU)的保证金比例自定义设置为 8%,并在盘前打印验证,最后在盘中进行买入开仓操作。
def initialize(context):
# 1. 设置我们要操作的期货合约(以沪铜2112为例)
g.security = "CU2112.XSGE"
set_universe(g.security)
# 2. 设置沪铜品种(CU)的保证金比例为 8%
set_margin_rate("CU", 0.08)
# 记录是否已开仓
g.has_opened = False
def before_trading_start(context, data):
# 3. 在盘前获取并打印验证沪铜品种的保证金比例
margin_rate = get_margin_rate("CU")
log.info("当前沪铜(CU)的自定义保证金比例为: %s" % margin_rate)
def handle_data(context, data):
# 4. 盘中简单开仓逻辑
if not g.has_opened:
# 买入开仓 2 手沪铜
order_id = buy_open(g.security, 2)
if order_id:
log.info("成功发送买入开仓委托,合约: %s, 数量: 2手" % g.security)
g.has_opened = True
set_margin_rate 的第一个参数是交易代码(品种简称),如沪铜为 "CU",股指期货为 "IF",而不是具体的合约全称(如 "CU2112")。如果传入全称,设置将无法生效。set_future_commission 接口同步调整该品种的手续费率,以全面模拟真实交易成本。buy_open 时的资金占用会严格按照新比例执行。如果策略因资金不足无法开仓,请检查自定义比例是否设置过高。