strategy.close 在触及 TP 时不平仓

strategy.close don't close position when TP is hit

提问人:Giorgio Partesana 提问时间:11/15/2023 最后编辑:TylerHGiorgio Partesana 更新时间:11/16/2023 访问量:24

问:

我预计此代码将以市价单平仓多头头寸

对于止损,如果低于止损 (SL_long) ,则在柱线收盘时low

对于止盈,当(实际价格,对吗?)大于止盈(TP_long)时立即报价close

if (inLong)
    if (low <= SL_long)
        strategy.close("Long Order", comment="Long SL Hit", qty=fullPosSize, alert_message = customAlert)
    if (close >= TP_long)
        strategy.close("Long Order", comment="Long TP Hit", qty=fullPosSize, alert_message = customAlert, immediately = true)

它似乎不起作用,请检查所附的图片

交易未正常退出

我尝试立即添加参数,但它没有帮助

松脚本 -v5

评论


答:

0赞 Whitebox.so 11/15/2023 #1

当您的脚本在历史蜡烛上运行时,它只会在每次蜡烛收盘时运行一次。因此,您的止盈比较代码会将蜡烛的收盘价与止盈价格进行比较;因此,它不会检测到 TP 被击中。

您发布的代码只有在实时蜡烛上才能按预期工作,并且只有在您在通话中启用时才会起作用。calc_on_every_tickstrategy()

与其在触及止盈/止损时手动平仓,不如使用设置为止盈/止损价格的 和 参数呢?strategy.exit()limitstop

if longConditionIsTrue and strategy.position_size == 0 and barstate.isconfirmed
    strategy.entry("Long Order", strategy.long)
    strategy.exit("Exit Long", "Long Order", limit = TP_long, stop = SL_long, alert_profit = customAlert, alert_loss = customAlert)

这样,当止盈或止损被击中时,TradingView的经纪商模拟器将自动将您从活动头寸中退出。

评论

0赞 Giorgio Partesana 11/15/2023
谢谢Whitebox,现在更清楚了。我使用的是strategy.exit,但将其更改为strategy.close以在交易所获取(更安全的)市场订单(通过webhook发出警报)。由于警报是由平仓函数发送的,如果我切换回strategy.exit,订单是否会像我预期的那样按时作为市价单执行(上述规则)
0赞 Whitebox.so 11/16/2023
您的退出订单在TradingView的经纪商模拟器中的执行方式不应影响您在交易所用于退出交易的订单类型。您只需要从脚本中发送警报,当价格达到您的止盈或止损时。如果您希望在 TP 或 SL 被击中时发送警报,则可以使用 和 参数来 .我更新了答案以使用警报参数。alert_profitalert_lossstrategy.exit()
0赞 Giorgio Partesana 11/16/2023
我以为电视模拟器会通过所有历史柱线价格,而不仅仅是 ohlc,至少模拟运动(没有真正的柱内价格变动)..在您的代码中,止损会立即触发,对吧?我想“忽略灯芯”,如果柱线收盘价高于/低于 SL 水平,则退出该位置也不允许在每根柱上执行 strategy.exit。还是我弄错了?strategy.position_size == 0
0赞 Giorgio Partesana 11/16/2023
所以我也在尝试这个代码,但没有成功,只是在下一根柱上退出 TP,而不是在正确的价格水平if (close >= TP_long)strategy.exit("Long Order", comment="Long TP Hit", qty=fullPosSize, alert_message = customAlert, limit = TP_long)
0赞 Giorgio Partesana 11/17/2023
嗯。.我想我应该分开退出订单..右?对于 SL,使用 strategy.close,对于 TP,使用 strategy.exit