VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 16
声望: 0

请教回测中如何设定手续费:
第一是期货不同品种的手续费不一定根据%设定的;
第二是平金的手续费会double

回测模块中是否可以加载json文件设定?

Super Moderator
avatar
加入于:
帖子: 91
声望: 8

在回测模块中,手续费的设定可以通过以下方式实现:


1. 手续费基础配置

根据知识库内容,CtaBacktester支持以下手续费设置:

  • 百分比手续费:直接填写数字(如0.001表示0.1%);
  • 固定比手续费:将手续费除以合约乘数后,加到滑点中。

但默认配置不支持按品种动态调整手续费平今仓手续费加倍,需通过自定义逻辑实现。


2. 按品种设置手续费

方案:通过策略参数动态调整

  1. 准备JSON配置文件
    定义不同品种的手续费规则,例如:

    {
      "rb2401": {"open_fee": 3, "close_fee": 3, "close_today_fee": 6},
      "cu2402": {"open_fee": 5, "close_fee": 5, "close_today_fee": 10}
    }
    
  2. 在策略中加载JSON并应用
    在策略初始化时读取配置,并根据合约代码动态设置手续费:

    import json
    
    class MyStrategy(CtaTemplate):
        def __init__(self, name):
            super().__init__(name)
            # 加载手续费配置
            with open("fee_config.json", "r") as f:
                self.fee_config = json.load(f)
    
        def on_tick(self, tick):
            # 获取当前合约的手续费规则
            contract = tick.symbol  # 假设symbol为"rb2401.SHFE"
            fee_rule = self.fee_config.get(contract, {"open_fee": 0, "close_fee": 0, "close_today_fee": 0})
    
            # 根据订单类型应用手续费(需结合持仓判断是否为平今)
            if self.is_open_order:  # 判断是否为开仓
                self.set_fee(fee_rule["open_fee"])
            elif self.is_close_today:  # 判断是否为平今
                self.set_fee(fee_rule["close_today_fee"])
            else:
                self.set_fee(fee_rule["close_fee"])
    
  3. 关键点

    • 需在策略中自行实现is_close_today的逻辑(如通过持仓记录判断是否为平今)。
    • set_fee()方法需参考回测引擎的API实现动态调整手续费。

3. 平今仓手续费加倍

方案:在策略逻辑中处理

  1. 判断平今仓条件
    根据持仓记录判断当前平仓是否为平今(如持仓天数为0)。
  2. 动态调整手续费
    在下单前根据条件设置手续费:
    def on_tick(self, tick):
        # 假设self.position记录当前持仓
        if self.position > 0 and self.is_close_today(tick):  # 判断平今
            fee = self.fee_config[tick.symbol]["close_today_fee"]
        else:
            fee = self.fee_config[tick.symbol]["close_fee"]
        self.send_order(price=tick.last_price, volume=1, direction="short", fee=fee)
    

4. 是否支持JSON文件加载?

  • 默认功能:CtaBacktester界面不支持直接加载JSON文件配置手续费。
  • 扩展方案
    可通过策略代码读取JSON文件(如上述示例),或修改回测引擎源码以支持外部配置文件。

总结

需求 实现方式
不同品种手续费 在策略中加载JSON配置,动态设置手续费
平今仓手续费加倍 在策略逻辑中判断平今条件,动态调整手续费
JSON配置文件支持 需通过策略代码实现,回测引擎默认不支持

如需更深度集成,可参考vnpy的扩展开发文档修改回测引擎源码。

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】