天天看点

策略类中在def __init__ 之前定义的list变量和在__init__中定义的list变量的区别

策略类中在def init 之前定义的list变量和在init中定义的list变量的区别是什么?

在def init 之前定义的list变量:

class stocktestStrategy(CtaTemplate):

"""基于布林通道的交易策略"""

className = 'stocktestStrategy'

author = u'dofish'

actionMark=[]

如果有两个策略使用同一个策略类:

actionMark会应为一个策略改变而同时改变

log:

{'Tora.10': <vnxtp.trader.app.ctaStrategy.strategy.strategyTest.stocktestStrategy object at 0x7f1cf9205450>}

(u'TickTest1111', 0, '510050', 'startegy in order', 'Tora.10', ['Tora.10', 0])

(u'TickTest1111', 0, '510050', 'startegy in order', 'Tora.10', ['Tora.10', 0])

(0, '601009', 46800L, [], 4, u'TickTest222', ['Tora.10', 0])

(0, '601009', 46800L, ['Tora.10'], 5, u'TickTest1111', ['Tora.10', 0])

(0, '510050', 305900L, [], 4, u'TickTest222', ['Tora.10', 0])

{'Tora.10': <vnxtp.trader.app.ctaStrategy.strategy.strategyTest.stocktestStrategy object at 0x7f1cf9205450>, 'Tora.11': <vnxtp.trader.app.ctaStrategy.strategy.strategyTest.stocktestStrategy object at 0x7f1cf9658b50>}

log中<tickTest1111>触发下单修改actionMark 这个list对象,结果同类的另外策略<u'TickTest222> actionMark同时也变更了。

在 init 中定义的变量list:

def __init__(self, ctaEngine, setting):
    """Constructor"""
    super(stocktestStrategy, self).__init__(ctaEngine, setting)

    self.actionMark = [0,0]

           

两个同类策略就不会有干扰

log:

{'Tora.30': <vnxtp.trader.app.ctaStrategy.strategy.strategyTest.stocktestStrategy object at 0x7f40133844d0>}

(u'TickTest1111', 0, '510050', 'startegy in order', 'Tora.30', ['Tora.30', 0])

(u'TickTest1111', 0, '510050', 'startegy in order', 'Tora.30', ['Tora.30', 0])

no tick data return

(0, '510050', 1725100L, ['Tora.30'], 5, u'TickTest1111', ['Tora.30', 0])

(0, '601009', 13800L, [], 4, u'TickTest222', [0, 0])

(0, '601009', 13800L, ['Tora.30'], 6, u'TickTest1111', ['Tora.30', 0])

而其他类型变量没有发现这种问题,只有list是发现是这样