4

我在修改 TradingView 的策略测试器中的未平仓头寸时遇到了一个奇怪的问题。让我先解释一下上下文:
以下行根据我的入场条件打开一个订单,entryLong

strategy.entry("ID", strategy.long, comment="L_Entry", when = entryLong)

这很好用,但是,在您关闭订单之前您无法赚钱;)因此:

strategy.exit( "L_STOP", "ID", loss = fixedSL * 10)

fixedSL这条线修改未平仓订单以在低于入场位置的价格添加止损。在这一点上,我唯一的退出条件是价格触及我的止损,这将始终导致失败的策略。为了解决这个问题,我包括:

if (exitLong) strategy.exit("L_TRAIL", "ID", trail_points = fixedTP * 10, trail_offset = trailSL * 10)

然后在达到设定利润添加追踪止损。这样,我可以安全地锁定利润,同时仍然留有增长空间。问题就在这里。每个退出条件都有一个 ID -L_STOPL_Trail(L 代表 Long,bc 这是买入)。我在我的图表上引用这些 ID 以帮助调试,并且只有L_STOP曾经似乎关闭订单。这使我相信L_TRAIL退出条件要么从未满足(不太可能),要么从未设置。我知道 bool, exitLong, 设置为 True 并且该行应该正在执行。

我可以通过在一次调用中设置追踪止损和止损来完全避免这个问题strategy.exit,但是看到屏幕上打印的L_STOPL_TRAIL来判断导致交易退出的原因是非常有帮助的。当条件满足时,仅打印订单的 ID,因此只需一次调用,它只会是L_STOP,例如,它不会提供有关退出触发器的太多信息。

任何和所有的反馈都是有帮助的!如有必要,我还可以包含图表的屏幕截图。

4

2 回答 2

4

strategy.exit( "L_STOP", "ID", loss = fixedSL * 10)

...

strategy.exit("L_TRAIL", "ID", trail_points = fixedTP * 10, trail_offset = trailSL * 10)

...

我在我的图表上引用这些 ID 以帮助调试,并且只有 L_STOP 似乎会关闭订单。这使我相信 L_TRAIL 退出条件要么从未满足(不太可能),要么从未设置。

这里的问题是您使用该strategy.exit()函数两次,两次都设置止损(固定止损和追踪止损)。

但这不是如何strategy.exit()工作的。TradingView 的参考资料说:

“如果你使用止损和追踪止损,它们的订单类型是'止损',所以只放置其中一个(应该首先执行的那个)。”

这可以解释为什么您的第二个止损(跟踪一)没有设置。

相反,您需要做的是重写您的策略代码,以便一站式发送strategy.exit()。如果没有看到完整的代码,我无法提供太多实用的建议。但也许您可以将追踪止损trail_offset设置为正常止损设置的值?

我无法从你的问题中看出变量持有什么值,但也许这会起作用:

stopPrice = exitLong ? strategy.position_avg_price - (trailSL * 10) :
     strategy.position_avg_price - (fixedSL * 10)
     
strategy.exit("L_STOP", "ID", stop=stopPrice)
于 2018-07-31T06:17:27.513 回答
0

这对我有用。在“strategy.exit()”之前执行“strategy.cancel()”。

现在我得到了正确绘制在图表上的 id。

例子:

if (strategy.position_size > 0) //long position exists
    if strategy.position_avg_price < open //price is lower than my entry_price
        strategy.cancel(id="StopLoss")
        strategy.exit(id="TakePrft", limit= longLimit, stop = stopPrice)
    else if strategy.position_avg_price > open //price is higher than my entry_price
        strategy.cancel(id="TakePrft")
        strategy.exit(id="StopLoss", limit= longLimit, stop = stopPrice)
于 2022-03-04T22:47:31.563 回答