Pine Script:我如何在这个脚本中添加一个空头头寸?


``//@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=9, minval=1, group="Moving Average")
SlowPeriod = input(title="Slow MA Period", type=input.integer, defval=50, minval=1, group="Moving Average")

TP1Perc = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=0.5, group="TP & SL") 
TP2Perc = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=1, group="TP & SL") 
SLPerc = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=0.5, 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
fastSMA = ema(close, FastPeriod)
slowSMA = ema(close, SlowPeriod)
// Calculate trading conditions
enterLong  = crossover(fastSMA, slowSMA)
enterShort  = crossunder(fastSMA, slowSMA)
// Plot moving averages
plot(series=fastSMA, color=color.green, title="Fase MA")
plot(series=slowSMA, 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)

// Submit 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")
`
`

我试图增加一个空头头寸,但每当我去调整空头的SL和TP时,即使我确实放了它的策略。position_size & lt;似乎什么都没有发生或改变。请帮帮我。我对短条件做了完全相同的操作,但将TP1更改为TP1_S,并在编辑时识别所有这些参数。


// Submit entry orders
if (enterLong) 
strategy.entry("Long", strategy.long)  
if (enterShort) 
strategy.entry("Short", strategy.short)
// STEP 3:
// Submit exit orders based on take profit price
if strategy.position_size > 0 
strategy.exit("TP1_LONG", from_entry="Long", qty = initial_position_size * TP1_Ratio, limit = TP1, stop = SL)
strategy.exit("TP2_LONG", from_entry="Long", limit = TP2, stop = SL) 

if strategy.position_size < 0 
strategy.exit("TP1_SHORT", from_entry="Short", qty = initial_position_size * TP1_Ratio, limit = TP1, stop = SL)
strategy.exit("TP2_SHORT", from_entry="Short", limit = TP2, stop = SL) 

最新更新