【问题标题】:Pine Editor TradingView Problem: Set Stop Loss and TP for EMA crossover strategyPine Editor TradingView 问题:为 EMA 交叉策略设置止损和 TP
【发布时间】:2021-12-04 08:45:37
【问题描述】:

对不起。我是 Pine 脚本编辑器的新手,如果有人能帮我解决这个问题,那就太好了。

我正在尝试基于 50 EMA 和 200 EMA 交叉做多空策略,并设置止损和止盈。

当 50 EMA 超过 200 EMA 时,该策略将做多,TP 设置为 2% 和 3%,SL 设置为 1.25%

当 50 EMA 下穿 200 EMA 时会做空,TP1 设置为 2%,TP2 设置为 3%,SL 设置为 1.25%。

但是,Tradingview 给我以下错误: https://i.stack.imgur.com/eU85h.png

        /@version=4
strategy(title="Take profit (% of instrument price)", overlay=true, pyramiding=1)

// STEP 1:
// Make inputs that set the take profit % (optional)

FastPeriod = input(title="Fast MA Period", type=input.integer, defval=50, minval=1, group="Moving Average")
SlowPeriod = input(title="Slow MA Period", type=input.integer, defval=200, minval=1, group="Moving Average")

TP1Perc = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=2, group="TP & SL") 
TP2Perc = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=3, group="TP & SL") 
SLPerc = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=1.25, group="TP & SL")

TP1_Ratio = input(title="Sell Postion Size % @ TP1", type=input.float, defval=50, step=1, group="TP & SL", tooltip="Example: 50 closing 50% of the position once TP1 is reached")/100


// Calculate moving averages
fastEMA = ema(close, FastPeriod)
slowEMA = ema(close, SlowPeriod)

// Calculate trading conditions
enterLong  = crossover(fastEMA, slowEMA)
entershort = crossover(slowEMA,fastEMA)

// Plot moving averages
plot(series=fastEMA, color=color.green, title="Fase MA")
plot(series=slowEMA, color=color.red, title="Slow MA")

// STEP 2:
// Figure out take profit price
percentAsPoints(pcnt) =>
    strategy.position_size != 0 ? round(pcnt / 100.0 * strategy.position_avg_price / syminfo.mintick) : float(na)

percentAsPrice(pcnt) =>
    strategy.position_size != 0 ? ((pcnt / 100.0) + 1.0) * strategy.position_avg_price : float(na)
 
current_position_size = abs(strategy.position_size)
initial_position_size = abs(valuewhen(strategy.position_size[1] == 0.0, strategy.position_size, 0))   
    
TP1  = strategy.position_avg_price + percentAsPoints(TP1Perc) * syminfo.mintick * strategy.position_size / abs(strategy.position_size)
TP2  = strategy.position_avg_price + percentAsPoints(TP2Perc) * syminfo.mintick * strategy.position_size / abs(strategy.position_size)
SL   = strategy.position_avg_price - percentAsPoints(SLPerc) * syminfo.mintick * strategy.position_size / abs(strategy.position_size)
STP1  = strategy.position_avg_price - percentAsPoints(TP1Perc) * syminfo.mintick * strategy.position_size / abs(strategy.position_size)
STP2  = strategy.position_avg_price - percentAsPoints(TP2Perc) * syminfo.mintick * strategy.position_size / abs(strategy.position_size)
SSL   = strategy.position_avg_price + percentAsPoints(SLPerc) * syminfo.mintick * strategy.position_size / abs(strategy.position_size)


// Submit long entry orders
if (enterLong) 
    strategy.entry(id="Long", long=true)  

// STEP 3:
// Submit exit orders based on take profit price

if strategy.position_size > 0 
    strategy.exit("TP1", from_entry="Long", qty = initial_position_size * TP1_Ratio, limit = TP1, stop = SL)
    strategy.exit("TP2", from_entry="Long", limit = TP2, stop = SL) 
    
    
// Plot take profit values for confirmation
plot(series=(strategy.position_size > 0) ? TP1 : na, color=color.green, style=plot.style_circles, linewidth=1, title="Take Profit 1")
plot(series=(strategy.position_size > 0) ? TP2 : na, color=color.green, style=plot.style_circles, linewidth=1, title=" Take Profit 2")
plot(series=(strategy.position_size > 0) ? SL : na, color=color.red, style=plot.style_circles, linewidth=1, title="Stop Loss")

// Submit short entry orders
if (entershort) 
    strategy.entry(id="short", long=false) 
    
if strategy.position_size > 0 
    strategy.exit("TP1", from_entry="short", qty = initial_position_size * STP1_Ratio, limit = STP1, stop = SSL)
    strategy.exit("TP2", from_entry="short", limit = STP2, stop = SSL) 
    
    
// Plot take profit values for confirmation
plot(series=(strategy.position_size > 0) ? STP1 : na, color=color.green, style=plot.style_circles, linewidth=1, title="Short TP 1")
plot(series=(strategy.position_size > 0) ? STP2 : na, color=color.green, style=plot.style_circles, linewidth=1, title="Short TP 2")
plot(series=(strategy.position_size > 0) ? SSL : na, color=color.red, style=plot.style_circles, linewidth=1, title="Short Stop Loss")

我做错了什么,谁能帮帮我? 谢谢!

【问题讨论】:

    标签: pine-script


    【解决方案1】:

    开头的版本声明应该有 2 个斜杠,而不是 1 个和一些制表符。示例:

    //@version=4
    strategy(title="Take profit (% of instrument price)", overlay=true, pyramiding=1)
    

    这会让您遇到第一个错误,并生成另一个未声明的标识符 STP1_Ratio,您没有包含在此代码中。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2020-01-28
      • 2020-02-10
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 2022-11-13
      • 2020-10-19
      • 1970-01-01
      相关资源
      最近更新 更多