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

Pine Script技术问询:如何将交易编号关联到trade_id并在图表显示?

解决Pine Script交易编号与策略测试器匹配并显示的问题

你的核心问题是错误使用了ta.cum(strategy.opentrades)计算交易编号,这个函数会累加当前未平仓的交易数量,和策略测试器里的全局交易编号完全不对应。下面是修正后的代码,同时实现开平仓点位显示对应交易编号的功能:

strategy("Market order strategy", overlay = true)

// 计算均线
float sma14 = ta.sma(close, 14)
float sma28 = ta.sma(close, 28)

// 输入参数
int profitDistanceInput = input.int(10000, "Profit distance, in ticks", 1)
int lossDistanceInput   = input.int(5000, "Loss distance, in ticks", 1)

// 开仓逻辑 - 多头
if ta.crossover(sma14, sma28)
    // 策略测试器的交易编号 = 已平仓交易数 + 1(新开交易的编号)
    newTradeId = strategy.closedtrades + 1
    strategy.entry("L" + str.tostring(newTradeId), strategy.long)
    strategy.exit("LE" + str.tostring(newTradeId), "L" + str.tostring(newTradeId), 
                  profit=profitDistanceInput, loss=lossDistanceInput)
    
    // 在开仓点位绘制交易编号标签
    label.new(bar_index, open, str.tostring(newTradeId), 
              color=color.green, textcolor=color.white, style=label.style_label_up)

// 开仓逻辑 - 空头
if ta.crossunder(sma14, sma28)
    newTradeId = strategy.closedtrades + 1
    strategy.entry("S" + str.tostring(newTradeId), strategy.short)
    strategy.exit("SE" + str.tostring(newTradeId), "S" + str.tostring(newTradeId), 
                  profit=profitDistanceInput, loss=lossDistanceInput)
    
    // 在开仓点位绘制交易编号标签
    label.new(bar_index, open, str.tostring(newTradeId), 
              color=color.red, textcolor=color.white, style=label.style_label_down)

// 平仓后绘制平仓点位的交易编号
if strategy.closedtrades > strategy.closedtrades[1]
    // 获取刚平仓的交易索引
    lastClosedIdx = strategy.closedtrades - 1
    // 获取该交易的编号、平仓价、方向
    closedTradeId = strategy.closedtrades[lastClosedIdx]
    closedPrice = strategy.closedtrades.exit_price(lastClosedIdx)
    closedSide = strategy.closedtrades.entry_type(lastClosedIdx)
    
    // 绘制平仓标签
    label.new(bar_index, closedPrice, str.tostring(closedTradeId), 
              color=closedSide == strategy.long ? color.green : color.red, 
              textcolor=color.white, 
              style=closedSide == strategy.long ? label.style_label_down : label.style_label_up)

关键修正点说明:

  • 交易编号计算:用strategy.closedtrades + 1作为新开交易的编号,这和策略测试器里的交易编号完全对应——测试器编号从1开始,每完成一笔平仓交易,strategy.closedtrades就加1,所以新开交易的编号就是已平仓数+1。
  • 开仓标签绘制:在开仓K线直接用label.new绘制编号,多头用向上绿色标签,空头用向下红色标签,直观区分方向。
  • 平仓标签绘制:通过检测strategy.closedtrades的变化(当它比前一根K线大时,说明有交易平仓),获取刚平仓交易的编号和价格,绘制对应标签。

额外提示:

  • 如果市价单实际成交价格和open有差异,可以换成strategy.opentrades.entry_price(strategy.opentrades - 1)获取真实开仓价(开仓后下一根K线生效)。
  • 标签样式可根据喜好调整style、color等参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:54:59