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
相关产品推荐
相关产品推荐

