TradingView止损订单实时执行延迟及范围图计算优化咨询
问题背景
我有一个TradingView策略,通过止损价格开仓,核心开仓代码如下:
strategy.entry("Long", strategy.long, stop=LongEntryPrice, alert_message = alert_string_open)
回测阶段订单能精准在止损价位bar内成交(并非下一根K线的开盘/收盘价成交),但实时数据运行时策略表现异常:订单成交存在明显延迟/滑点,看起来像是在下一根K线收盘价成交;不过刷新页面后,所有入场点又恢复正常(bar内成交且价位准确)。
我的需求是:实现实时数据下订单在bar内精准触发止损价成交,虽理解实盘可能存在滑点,但要求TradingView在价格达标时无延迟触发警报。
已尝试的解决方法
- 设置
calc_on_every_tick=true - 移除所有绘图元素,脚本更新速度有所提升,但未解决核心延迟问题
- 将原策略的范围图切换至传统K线测试,问题依然存在
- 检查滑点设置,已设置为0
问题定位与优化进展
更新:
已定位问题根源:TradingView的止损订单执行依赖脚本重计算速度,我已开启逐tick计算:
calc_on_every_tick=true
我添加了一段代码绘制标签,用于展示最新订单价格及当前标的价格:
var label lb = na label.delete(lb) entry_price= strategy.opentrades.entry_price(0) lb := label.new(bar_index, math.max(high, ta.highest(5)[1]), color=posCol, text="Pos: "+ posDir + "\nPnL:" + str.tostring(posProfit, "#.##")+"%" + "\nClose: "+str.tostring(close, "#.##")+"\nOrder_price:"+str.tostring(order_price, "#.##"))
添加后发现标签上的close价格并非逐tick更新,对比价格轴的价格更新频率后,我创建了一个极简策略(仅在当前价格上方设止损单并绘制相同标签),发现该极简脚本的标签更新频率更高,止损订单执行正常。
由此得出结论:我的原脚本过于繁重,重计算耗时过长导致滑点。我已移除所有非必要代码(绘图、未使用功能等),止损订单执行情况有所改善。
核心疑问
该策略设计用于范围图,也支持传统K线,但我的目标是基于范围图实现自动化实盘交易。我发现范围图的计算速度慢很多,传统K线的延迟尚可接受,但切换至范围图后重计算耗时极长。我理解原因:传统K线TradingView直接使用OHLC数据绘图,而范围图需要计算所有K线。
我想知道:能否在TradingView中限制范围图的K线数量?推测TradingView基于10000/20000根K线计算脚本,而我仅需最近100根K线用于交易。我已调研但未找到解决方案。
另外我认为TradingView的止损订单实现逻辑不合理,应独立于脚本重计算触发。
内容的提问来源于stack exchange,提问作者Dmitry Karavaev

