Untitled

mail@pastecode.io avatar
unknown
plain_text
a month ago
2.4 kB
1
Indexable
Never
//@version=5
strategy(title="Take profit (% of instrument price)",
     overlay=true, pyramiding=3, backtest_fill_limits_assumption=1)

// STEP 1:
// Make inputs that set the take profit % (optional)
longProfitPerc = input.float(0.3, title="Long Take Profit (%)",
     minval=0.0, step=0.1) * 0.01

shortProfitPerc = input.float(0.3, title="Short Take Profit (%)",
     minval=0.0, step=0.1) * 0.01

// Calculate moving averages
fastSMA = ta.sma(close, 20)
slowSMA = ta.sma(close, 60)

// Calculate trading conditions
enterLong  = ta.crossover(fastSMA, slowSMA)
enterShort = ta.crossunder(fastSMA, slowSMA)

// STEP 2:
// Figure out take profit price
// Check if it's the first bar of the position
isFirstBar = bar_index == strategy.opentrades.entry_bar_index(0)

// var float longExitPrice = na
// var float shortExitPrice = na

// if enterLong and strategy.position_size == 0
firstBarLongTP = (close * longProfitPerc) / syminfo.mintick
laterBarLongTP = strategy.position_avg_price * (1 + longProfitPerc)

// if enterShort and strategy.position_size == 0
firstBarShortTP = (close * shortProfitPerc) / syminfo.mintick
laterBarShortTP = strategy.position_avg_price * (1 - shortProfitPerc)
    


// Submit entry orders
if enterLong and strategy.position_size == 0
    strategy.entry("Entry Long", strategy.long)

if enterShort and strategy.position_size == 0
    strategy.entry("Entry Short", strategy.short)

// STEP 3:
// Submit exit orders based on take profit price
// if strategy.position_size > 0
if isFirstBar
    strategy.exit("Exit Long", from_entry="Entry Long", profit=firstBarLongTP)
    strategy.exit("Exit Short", from_entry="Entry Short", profit=firstBarShortTP)
   
else 
    strategy.exit("Exit Long", from_entry="Entry Long", limit=laterBarLongTP)
    strategy.exit("Exit Short", from_entry="Entry Short", limit=laterBarShortTP)

// if strategy.position_size < 0

// Plot take profit values for confirmation
plot(strategy.position_size > 0 ? laterBarLongTP : na,
     color=color.green, style=plot.style_linebr,
     linewidth=3, title="Long Take Profit")

plot(strategy.position_size < 0 ? laterBarShortTP : na,
     color=color.red, style=plot.style_linebr,
     linewidth=3, title="Short Take Profit")

plotshape(isFirstBar, location=location.belowbar)

plot(strategy.position_avg_price)
Leave a Comment