如题,实盘出现的现象。幸好是23点,AL的信号,其他品种因为收盘都没成功。CTA模块不可以一个策略多个品种设置不同参数同时运行么?
如题,实盘出现的现象。幸好是23点,AL的信号,其他品种因为收盘都没成功。CTA模块不可以一个策略多个品种设置不同参数同时运行么?
可以的,请问策略实例名有重复吗?请问发出信号的其他品种的策略实例收盘后停止了吗?
策略实例没有重复。发出信号的其他品种策略实例收盘后发出去的单子全都是撤销状态。还有白银和铜因为没有收盘也发出了单子,但是价格非法,所以也撤销了。
我在策略的on_trade里面设置了成交后记录开仓价、开仓手数到两个分别的list,结果在strategy_data.json里面全部实例的list里面,都记录了这个信息。。。
所以感觉好像是on_trade函数在各个实例中是相通的,因为其他品种并未触发on_trade,结果也更新在on_trade里面才会更新的list了,而且更新的信息全部一样。
按照你的描述,很有可能,你这个list是定义在了策略的这个部分:
class classname:
定义到这里了吧,在这个位置的list,所有实例的都会有!!!!!!
def init(self,xxx)
这个事情是因为py的特性决定的。
任何涉及到可以引用的类型,比如list,dict等,都会在所有策略实例中共用。
而数值、布尔、字符串等不会被公用。
正确的方法应该是把策略不通用部分的内容,放到
def init(self,xxx):
这里。
发现回了好几次,不过总归是说清楚了。
以上。
kingmo888 wrote:
任何涉及到可以引用的类型,比如list,dict等,都会在所有策略实例中共用。
而数值、布尔、字符串等不会被公用。
正确的方法应该是把策略不通用部分的内容,放到
def init(self,xxx):
这里。
确实是在class下面定义的,思考了一下,问题确实是在这儿,类变量和类参数是可以被所有实例更新的,应该设置成实例的变量。但variables就得换个方法去设置了,不能直接在上面定义了
variables放到init下
或者variables中不包含list等不就可以了吗。
不过,真想不到什么策略场景下会遇到你说的这种情况。
kingmo888 wrote:
variables放到init下
或者variables中不包含list等不就可以了吗。不过,真想不到什么策略场景下会遇到你说的这种情况。
哈,个性化需求吧,按照CTAtemplate的方式,insert进variables,也能实现。谢谢!