我写了一个简单的5分钟策略用于回测,代码大致如下:
class MyStrategy(CtaTemplate):
author = "常山之蛇"
def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
""""""
super(ChanDingStrategy, self).__init__(
cta_engine, strategy_name, vt_symbol, setting
)
self.bg = BarGenerator(self.on_bar, 5, self.on_5min_bar)
self.am = ArrayManager()
def on_bar(self, bar: BarData):
self.bg.update_bar(bar)
def on_5min_bar(self, bar: BarData):
""""""
self.cancel_all()
am = self.am
am.update_bar(bar)
if not am.inited:
return
#条件判断
if ......:
self.x = -1
if ......:
self.x = 1
#持空仓
if self.pos == 0:
if self.x == -1:
self.buy(bar.close_price, 1,True)
self.settle_price = am.low_array[-2]
elif self.x == 1:
self.short(bar.close_price, 1,True)
self.settle_price = am.high_array[-2]
else:
pass
#持多仓
elif self.pos > 0:
if am.low_array[-1] < self.settle_price:
self.sell(am.low_array[-1], abs(self.pos),True)
elif self.x == 1:
self.sell(am.low_array[-1], abs(self.pos),True)
#持空仓
elif self.pos < 0:
if am.high_array[-1] > self.settle_price:
self.cover(am.high_array[-1], abs(self.pos),True)
elif self.x == -1:
self.cover(am.high_array[-2], abs(self.pos),True)
self.put_event()
def on_order(self, order: OrderData):
"""
Callback of new order data update.
"""
pass
def on_trade(self, trade: TradeData):
"""
Callback of new trade data update.
"""
self.put_event()
def on_stop_order(self, stop_order: StopOrder):
"""
Callback of stop order update.
"""
pass
可是回测的时候,这个self.pos > 0不发生作用,按理来说self.pos > 0,不会再买入,不过我通过查看记录,发现它不断的买入?
然后到后来,他又正常了
请问这是什么原因?如何解决?谢谢。