TradingView历史K线使用追踪止损平仓异常问题咨询
追踪止损未按预期生效的问题分析
我写了一个简单策略:在偶数索引K线开多单,同时设置追踪止损平仓。
//@version=5 strategy("TEST STRATEGY 2", overlay=true) backtestStartDate = input.time(timestamp("01 Apr 2023 12:05:00 GMT+02:00"), title="Start Date", group="Backtest Time Period") backtestEndDate = input.time(timestamp("01 Apr 2023 16:15:00 GMT+02:00"), title="End Date", group="Backtest Time Period") inTradeWindow = time > backtestStartDate and time <= backtestEndDate longCondition = bar_index % 2 == 0 if inTradeWindow if longCondition strategy.entry("My Long Entry "+str.tostring(bar_index), strategy.long) strategy.exit("My Short Entry "+str.tostring(bar_index), from_entry = "My Long Entry "+str.tostring(bar_index), trail_offset=50, trail_points=50)
如图所示,12:58的K线(红色大箭头指向处),平仓位置仅略低于K线高点,差值仅为-1.05点!但我设置的trail_offset是50点,按道理应该在更低的位置平仓,这是为什么?
[编辑] 我已经修改为trail_offset=50*syminfo.mintick , trail_points=50*syminfo.mintick,但还是有疑问。
核心原因分析
追踪止损逻辑理解偏差
trail_offset是从开仓价(或多头持仓后的最高价)向下偏移的初始止损阈值,不是直接从K线高点减50点。如果开仓价本身就贴近该K线高点,初始止损位置自然离高点很近。只有当价格后续创出新高,trail_points才会触发止损跟随上移,开仓后没冲高的话,止损不会主动下调。单位换算错误
乘以syminfo.mintick时要对应品种的点值:比如EURUSD的mintick是0.00001,50*mintick仅为0.0005,也就是0.5个标准点(外汇中1点=0.0001),和你预期的50点完全不符。正确做法是直接用对应品种的点值数值,比如外汇50点就设为0.005,无需乘以mintick。K线周期与回测精度问题
你用的是1分钟K线,12:58的K线如果是冲高后快速回落,止损可能在K线内部就已触发,但回测默认只显示K线级别的平仓结果,看起来止损位置离高点近,实际是内部价格波动触发的。
修正建议
- 匹配品种点值:根据交易品种的“点”定义设置参数,比如外汇直接写
trail_offset=0.005、trail_points=0.005(对应50点)。 - 开启逐笔回测:在策略设置中勾选“每笔成交”模式,查看K线内部的价格变动和止损触发的具体时刻,避免K线级别数据的误导。
- 调整开仓价:如果想在K线开盘价开仓,修改
strategy.entry为strategy.entry("My Long Entry "+str.tostring(bar_index), strategy.long, limit=open),避免开仓价贴近K线高点。
内容的提问来源于stack exchange,提问作者ailauli69
相关产品推荐
相关产品推荐

