app/cta_strategy/strategies/turtle_signal_strategy.py示例中,策略中的代码如下,我有几个疑问一直不明白,想请教各位老师:
1、这个策略是海龟策略,按理说onbar()中应该有判断上轨或下轨突破的语句才下单,可这个示例中没有看到这样的判断,而是直接写如果pos=0,就开仓。
使用self.send_buy_orders()和self.send_short_orders() 进行开仓买入和卖出?没有逻辑判断条件就开仓,是我理解错了么,还是另有隐情,我没有看明白呢?
2、按理来说,为避免未来函数出现,应该是先开仓或平仓,再重新计算指标。而本例中是先计算指标,然后再用这个指标进行short 或 buy,是不是我理解错了呢
def on_bar(self, bar: BarData):
"""
Callback of new bar data update.
"""
self.cancel_all()
self.am.update_bar(bar)
if not self.am.inited:
return
# Only calculates new entry channel when no position holding
if not self.pos:
self.entry_up, self.entry_down = self.am.donchian(
self.entry_window, 1
)
self.exit_up, self.exit_down = self.am.donchian(self.exit_window, 1)
if not self.pos:
self.atr_value = self.am.atr(self.atr_window)
self.long_entry = 0
self.short_entry = 0
self.long_stop = 0
self.short_stop = 0
self.send_buy_orders(self.entry_up)
self.send_short_orders(self.entry_down)
elif self.pos > 0:
self.send_buy_orders(self.entry_up)
sell_price = max(self.long_stop, self.exit_down)
self.sell(sell_price, abs(self.pos), True)
elif self.pos < 0:
self.send_short_orders(self.entry_down)
cover_price = min(self.short_stop, self.exit_up)
self.cover(cover_price, abs(self.pos), True)
self.put_event()