我在修改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_STOP
和L_Trail
(L代表Long,bc表示买入)。我在图表上引用了这些ID,以帮助调试,并且只有L_STOP
似乎可以关闭订单。这使我相信L_TRAIL
退出条件从未被满足(不太可能)或从未被设置。我知道exitLong
布尔值设置为True,并且该行应该正在执行。
我可以通过在一次strategy.exit
呼叫中设置跟踪止损和止损来完全避免此问题,但是查看 L_STOP 或 L_TRAIL 非常有帮助>打印在屏幕上,以了解导致交易退出的原因。满足条件时,仅打印订单的ID,因此,一次调用它只会是 L_STOP ,而不会给出太多有关退出触发器的信息。
任何人和所有反馈都是有帮助的!如有必要,我还可以包括图表的屏幕截图。
答案 0 :(得分:2)
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的reference说:
“如果您使用止损和尾随止损,则它们的订单类型为'止损',因此只放置其中一个(应该首先执行)。”
这将解释为什么未设置第二个止损(第一个止损)。
您需要做的是重写策略代码,以使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)