vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 17
声望: 1

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()
Administrator
avatar
加入于:
帖子: 4122
声望: 229

框架化的事件驱动回测,策略逻辑(策略负责)和回测委托成交判断(回测引擎负责)要严格分离。

  1. 因为使用了停止单入场,在价格突破时会自动发出委托。
  2. 发出的委托,下一根K线才能成交,所以不存在未来函数问题
Member
avatar
加入于:
帖子: 17
声望: 1

这么一说我就理解了,因为是停止单入场,停止单会在价格突破时发出委托,所以策略中就不用写条件判断了。真心感谢老师的解答,您真是太好了。

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