trail_price、trail_offset 在 pinescript 中到底是如何工作的?

问题描述 投票:0回答:1

感谢大家迄今为止的帮助。到目前为止,我已经在 pinescript 中编写了许多不同的策略,并且我已经阅读了 pinescript 手册和许多谷歌文章,但我仍然对追踪止损在 pinescript 中如何工作感到困惑。

例如,对于strategy.exit,我有一个trail_price,它标记要激活的跟踪止损条目。然而,我所有的回溯测试都表明追踪止损位于该特定蜡烛线的最高点,即使 Trail_offset 尚未被触及。仅仅是因为 tradeview 回溯测试假设在一根蜡烛线中达到了最大利润,即使后续蜡烛线继续朝着您的目标方向发展?

例如,这是我的strategy.exit 的示例。 Strategy.exit("long_TP", "long", Trail_price = 入场价格 + ATR, Trail_offset = ATR, stop= 入场价格 - ATR).我注意到,只要在该特定交易收盘前获利,我就能赚取 2 到 3 倍的 Trail_offset(在这种情况下基于 ATR,即,如果 ATR 为 50 点,我将赚取 100 甚至 150 点)。蜡烛吧。任何后续的蜡烛图,即使做多,即使没有达到 Trail_offset 止损,也不会被纳入计算(即,即使我的 ATR 是 50 点,当蜡烛图收盘时我可能会赚取 70 点,即使随后的蜡烛继续做多)。

我的假设是否不正确(即我的代码),或者这只是回溯测试的限制,因为程序无法知道蜡烛条内部发生了什么,只能知道最高价、最低价、开盘价和收盘价?然而,我确实想知道这一点,因为有时即使蜡烛线处于最低点,trail_offset也没有达到,所以理论上利润应该继续积累,而不是在蜡烛线收盘后止损。

编辑:我添加了一些更多信息以进行澄清 - 这是带有一些解释的示例代码:

If condition == true
long = strategy.position_size[0] > strategy.position_size[1]  //go long if there is order entry
entry_price_long = valuewhen(long, open, 0) //entry price is the opening price, based off the closing price of the previous candle if condition is fulfilled
atr_long = valuewhen(long, atr, 0) //stop loss and 1st take profit based off the number of pips depending on average true range, period 14
long_TP = entry_price_long + atr_long //1st take profit limit
long_SL = entry_price_long - atr_long //stop loss

strategy.entry("long", strategy.long, when=go_long, comment="long", qty=positionSize) //enter a long position when condition fulfilled
if strategy.position_size[0] > strategy.position_size[1]
   strategy.exit("long_TP", "long", trail_price=long_TP, trail_offset=atr_long, stop=long_SL) //this is where I am confused. 

我的strategy.exit指出,如果触及初始止损,则退出多头头寸。但如果市场按照预期走多,则当触及第一个止盈限额(由 Trail_price 定义)时,追踪止损就会被激活。 Trail_offset(以点数为单位)基于 ATR。因此,如果触及 Trail_price,则应通过追踪止损持续获利。但实际情况是,利润会被提取到我进入交易的特定蜡烛的最高点。我附上了一张图片供参考。 在图中,我们看到已达到第一个利润限制,因此跟踪被激活。 ATR 约为 150 点,因此入场价与止盈位之间的距离约为 150 点。追踪止损设置为ATR,因此一旦达到第一个利润限制(利润=150点),理论上交易应该继续获利,直到触及追踪止损。但在图中我们看到,实际上,一旦触及蜡烛的高点,我的头寸就退出了,尽管持续上涨趋势,但没有获得任何进一步的利润(最终利润= 181 点)。这是为什么?

再次感谢您的帮助。 托马斯

pine-script algorithmic-trading trading forex back-testing
1个回答
0
投票

我不确定你是否有和我一样的问题,但就我而言,我忽略了

trail_offset
必须在刻度中指定!我的示例当然不是示例代码,但它说明了解决方案。 要点:

  • 获取
    syminfo.mintick
    (这似乎是v5中的刻度大小)并用它来计算
    tickFactor
  • trailOffset
    设置为查看图表时具有直观意义的值,在本例中为 2 日元(使用 USDJPY 作为符号)。
  • trail_offset
    设置为
    trailOffset * tickFactor
    。 <<=== THIS!
  • 绿线标记触发追踪止损激活的水平。
  • 红线显示追踪止损。
  • 根据需要更改第18行的进入条件。在撰写本文时(2023-09-04),该示例看起来很有趣。

这是 Pine 脚本:

//@version=5
// Try it on USDJPY
strategy("Trailing Stop Example", overlay=true)

varip float calculatedTrailingStop = na

tickSize = syminfo.mintick
tickFactor = 1/tickSize

if barstate.islastconfirmedhistory
    label.new(bar_index, high, "Tick Size (mintick): " + str.tostring(tickSize), yloc = yloc.abovebar, textcolor = color.white)

entryPrice = 140
trailPrice = entryPrice * 1.01
trailOffset = 2 // 2 Yen trailing stop

// Simulate a long entry order
if bar_index == last_bar_index - 80
    strategy.entry("Long", strategy.long)

// Simulate a trailing stop order
strategy.exit("Trailing Stop", "Long", trail_price = trailPrice, trail_offset = trailOffset*tickFactor)

if strategy.position_size > 0
    calculatedTrailingStop := math.max(high - trailOffset, na(calculatedTrailingStop) ? 0 : calculatedTrailingStop)
else
    calculatedTrailingStop := na

// Plot the trailing stop activation level
plot(strategy.position_size > 0 ? trailPrice : na, color = color.green, style = plot.style_line)
// Plot the trailing stop price
plot(calculatedTrailingStop, color = color.red, style = plot.style_line)
© www.soinside.com 2019 - 2024. All rights reserved.