You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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线级别的平仓结果,看起来止损位置离高点近,实际是内部价格波动触发的。

修正建议

  1. 匹配品种点值:根据交易品种的“点”定义设置参数,比如外汇直接写trail_offset=0.005、trail_points=0.005(对应50点)。
  2. 开启逐笔回测:在策略设置中勾选“每笔成交”模式,查看K线内部的价格变动和止损触发的具体时刻,避免K线级别数据的误导。
  3. 调整开仓价:如果想在K线开盘价开仓,修改strategy.entry为strategy.entry("My Long Entry "+str.tostring(bar_index), strategy.long, limit=open),避免开仓价贴近K线高点。

内容的提问来源于stack exchange,提问作者ailauli69

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:43:26