【问题标题】:How to store a value on PineScript after an entry?输入后如何在 PineScript 上存储值?
【发布时间】:2022-08-16 04:46:39
【问题描述】:

我将风险设置为 1:1 的止盈值。 它基于 ATR。一旦收盘价高于/低于 atr,它就会给我一个入场点,然后我计算入场价和 ATR 之间的距离。所以这个距离会和我的TP一样。但是发生的情况是,机器人不断从最后一个栏而不是从入口栏获取 ATR 级别。

这是代码示例和交易截图:

//@version=4
buy = crossover(close,atr)
sell = crossunder(close,atr)
    
 
strategy.entry(\"long\",   true, when = buy)
strategy.entry(\"short\", false, when = sell)


//calculate difference between entry and atr
differenceLong = strategy.position_avg_price - atr
differenceShort = atr - strategy.position_avg_price

//Calculate the TP price

longExitPrice  = strategy.position_avg_price + differenceLong
shortExitPrice  = strategy.position_avg_price - differenceShort

if (strategy.position_size > 0)
    strategy.exit(id=\"TP\", limit = longExitPrice)

        
if (strategy.position_size < 0)
    strategy.exit(id=\"TP\", limit = shortExitPrice)

    标签: pine-script pinescript-v5 pine-script-v4


    【解决方案1】:

    使用内置变量strategy.position_size 来确定您是否输入了新位置。然后使用var 来存储进入时的 ATR 值。通过使用 var,您可以确保它的值不会被更新,除非您特别这样做。

    atr = ta.atr(14)
    
    var float atr_at_entry = na
    
    is_new_long = (strategy.position_size > 0) and (strategy.position_size > strategy.position_size[1])
    is_new_short = (strategy.position_size < 0) and (strategy.position_size < strategy.position_size[1])
    is_new_entry = is_new_long or is_new_short
    
    atr_at_entry := is_new_entry ? atr : atr_at_entry
    

    在退出计算中使用atr_at_entry

    注意:如果你使用process_orders_on_close=true,你需要像这样获取之前的atr值:atr_at_entry := is_new_entry ? atr[1] : atr_at_entry

    【讨论】:

    • 太感谢了!我现在明白了!你太不可思议了
    【解决方案2】:

    这个策略做你想做的

    link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 2021-01-21
      • 1970-01-01
      相关资源
      最近更新 更多