vn.py官网
开源量化社区
Member
avatar
加入于:
帖子: 52
声望: 1

如题,实盘出现的现象。幸好是23点,AL的信号,其他品种因为收盘都没成功。CTA模块不可以一个策略多个品种设置不同参数同时运行么?

Member
avatar
加入于:
帖子: 3124
声望: 182

可以的,请问策略实例名有重复吗?请问发出信号的其他品种的策略实例收盘后停止了吗?

Member
avatar
加入于:
帖子: 52
声望: 1

策略实例没有重复。发出信号的其他品种策略实例收盘后发出去的单子全都是撤销状态。还有白银和铜因为没有收盘也发出了单子,但是价格非法,所以也撤销了。
我在策略的on_trade里面设置了成交后记录开仓价、开仓手数到两个分别的list,结果在strategy_data.json里面全部实例的list里面,都记录了这个信息。。。
所以感觉好像是on_trade函数在各个实例中是相通的,因为其他品种并未触发on_trade,结果也更新在on_trade里面才会更新的list了,而且更新的信息全部一样。

Member
avatar
加入于:
帖子: 140
声望: 13

按照你的描述,很有可能,你这个list是定义在了策略的这个部分:
class classname:
定义到这里了吧,在这个位置的list,所有实例的都会有!!!!!!
def init(self,xxx)

Member
avatar
加入于:
帖子: 140
声望: 13

这个事情是因为py的特性决定的。

Member
avatar
加入于:
帖子: 140
声望: 13

任何涉及到可以引用的类型,比如list,dict等,都会在所有策略实例中共用。

而数值、布尔、字符串等不会被公用。

正确的方法应该是把策略不通用部分的内容,放到
def init(self,xxx):
这里。

Member
avatar
加入于:
帖子: 140
声望: 13

发现回了好几次,不过总归是说清楚了。
以上。

Member
avatar
加入于:
帖子: 52
声望: 1

kingmo888 wrote:

任何涉及到可以引用的类型,比如list,dict等,都会在所有策略实例中共用。

而数值、布尔、字符串等不会被公用。

正确的方法应该是把策略不通用部分的内容,放到
def init(self,xxx):
这里。

确实是在class下面定义的,思考了一下,问题确实是在这儿,类变量和类参数是可以被所有实例更新的,应该设置成实例的变量。但variables就得换个方法去设置了,不能直接在上面定义了

Member
avatar
加入于:
帖子: 140
声望: 13

variables放到init下
或者variables中不包含list等不就可以了吗。

不过,真想不到什么策略场景下会遇到你说的这种情况。

Member
avatar
加入于:
帖子: 52
声望: 1

kingmo888 wrote:

variables放到init下
或者variables中不包含list等不就可以了吗。

不过,真想不到什么策略场景下会遇到你说的这种情况。

哈,个性化需求吧,按照CTAtemplate的方式,insert进variables,也能实现。谢谢!

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

沪公网安备 31011502017034号