I’m struggling to add a safe trade to the following strategy.
When I run the code, the safety trades are not put, even if the conditions are met.
In the example below, it should buy 2* the initial size if the price gets to -5%.
//@version=5
strategy("NEW", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=2)
// Input parameters
rsiLength = input.int(14, title="RSI Length")
rsiOversold = input.int(30, title="RSI Oversold Level", minval=1, maxval=50)
safetyTrade = input.float(5, title="Safety Trade Drop (%)", minval=0.1) / 100
takeProfit = input.float(5, title="Take Profit (%)", minval=0.1) / 100
// VARIABLES
var float avgBuyPrice = na
var float takeProfitPrice = na
var bool safetyTradeExecuted = false
var float safetyTradeSize = na
var float safetyTradePrice = na
// TA
rsi = ta.rsi(close, rsiLength)
// BASE ORDER
if (strategy.opentrades == 0 and rsi <= rsiOversold)
strategy.entry("BUY", strategy.long)
// RECALCULATES
if (strategy.opentrades > 0 and not na(strategy.position_avg_price) and na(avgBuyPrice))
avgBuyPrice := strategy.position_avg_price
safetyTradeSize := strategy.position_size * 2
safetyTradePrice := avgBuyPrice * (1 - safetyTrade)
takeProfitPrice := avgBuyPrice * (1 + takeProfit)
// SAFETY TRADE
if (strategy.opentrades > 0 and safetyTradeExecuted == false and close <= safetyTradePrice)
strategy.entry("SFTY", strategy.long, qty=safetyTradeSize)
safetyTradeExecuted := true
// RECALCULATES
avgBuyPrice := strategy.position_avg_price
takeProfitPrice := avgBuyPrice * (1 + takeProfit)
// TAKE PROFIT
if (strategy.opentrades > 0 and close >= takeProfitPrice)
strategy.close_all("TP")
// RESETS
avgBuyPrice := na
takeProfitPrice := na
safetyTradeExecuted := false
safetyTradeSize := na
safetyTradePrice := na