How to code dynamic stop loss orders under each swing low/high in a pine strategy script?

507 Views Asked by At

I am trying to program a strategy with stop loss orders that would automatically be placed under each swing low or high, because I believe that static stop loss orders with percentages or ticks are more likely to fail in the market.

After searching online for a long time I could not find any script that worked with dynamic stop loss, but most of them rather worked with fixed stop loss orders. Then, I came across the

ta.lowest(low,14) / ta.highest(high,14) function

and thought that it could be used to identify the value of the lowest candle in a certain range which could then be used as the initial point on which to add a percentage, and voila, that would be a dynamic stop loss based on swing low/high. Now the problem is it did not work out as I imagined and I have no clue why, which is why I am posting this question and hope that someone can point out my mistake.

Here the proof that it is not working: The trade should be stopped out after reaching the price of the lowest candle (-0.1%) within the range of the last 5 candles

This is the part of the script that does not work:

// *************Entry orders*************
if longCondition
    strategy.entry("Long", strategy.long)
    
if shortCondition
    strategy.entry("Short", strategy.short)
    
//*************Stop Loss Orders*************

long_pos = strategy.position_size > 0
short_pos = strategy.position_size < 0
sl_perc = input.float(0.1, "Stop Loss Percentage under swing low/high")
sl_long =  ta.lowest(low, 5) - ta.lowest(low, 14)/100*sl_perc
sl_short = ta.highest(high,5) + ta.lowest(low, 14)/100*sl_perc

strategy.exit("LongExit", "SL Long", stop = sl_long )
strategy.exit("ShortExit", "SL Short",stop = sl_short )

Thanks for any suggestions and help!

1

There are 1 best solutions below

0
Student Tom On

I think I found the answer myself: I chose the wrong ID for the Exits. Really stupid mistake :( (Hope that can be useful for anyone looking to try to do the same)

//*************STOP LOSS*************

long_pos = strategy.position_size > 0
short_pos = strategy.position_size < 0

sl_perc = input.float(1, "Stop Loss Percentage under swing low/high")

sl_long =  ta.lowest(low, 5) - ta.lowest(low, 14)/100*sl_perc
sl_short = ta.highest(high, 5) + ta.lowest(low, 14)/100*sl_perc

strategy.exit("SL Long", "Long", stop=sl_long)
strategy.exit("SL Short", "Short", stop=sl_short)