This strategy combines RSI crossover strategy with optimized stop loss strategy to achieve precise logic control and accurate stop loss and take profit. Meanwhile, by introducing signal optimization, it can better grasp the trend and achieve reasonable capital management.
The strategy integrates advantages of multiple mainstream technical indicators. Through parameter optimization and logic refinement, it balances trading signal quality and stop loss. With certain versatility and steady profitability. Further optimization can improve win rate and profitability.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //study(title="@sentenzal strategy", shorttitle="@sentenzal strategy", overlay=true) strategy(title="@sentenzal strategy", shorttitle="@sentenzal strategy", overlay=true ) smoothK = input(3, minval=1) smoothD = input(3, minval=1) lengthRSI = input(14, minval=1) lengthStoch = input(14, minval=1) overbought = input(80, minval=1) oversold = input(20, minval=1) smaLengh = input(100, minval=1) smaLengh2 = input(50, minval=1) smaLengh3 = input(20, minval=1) src = input(close, title="RSI Source") testStartYear = input(2017, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testPeriod() => time >= testPeriodStart ? true : false rsi1 = rsi(src, lengthRSI) k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = sma(k, smoothD) crossBuy = crossover(k, d) and k < oversold crossSell = crossunder(k, d) and k > overbought dcLower = lowest(low, 10) dcUpper = highest(high, 10) heikinashi_close = security(heikinashi(syminfo.tickerid), timeframe.period, close) heikinashi_open = security(heikinashi(syminfo.tickerid), timeframe.period, open) heikinashi_low = security(heikinashi(syminfo.tickerid), timeframe.period, low) heikinashi_high = security(heikinashi(syminfo.tickerid), timeframe.period, high) heikinashiPositive = heikinashi_close >= heikinashi_open heikinashiBuy = heikinashiPositive == true and heikinashiPositive[1] == false and heikinashiPositive[2] == false heikinashiSell = heikinashiPositive == false and heikinashiPositive[1] == true and heikinashiPositive[2] == true //plotshape(heikinashiBuy, style=shape.arrowup, color=green, location=location.belowbar, size=size.tiny) //plotshape(heikinashiSell, style=shape.arrowdown, color=red, location=location.abovebar, size=size.tiny) buy = (crossBuy == true or crossBuy[1] == true or crossBuy[2] == true) and (heikinashiBuy == true or heikinashiBuy[1] == true or heikinashiBuy[2] == true) sell = (crossSell == true or crossSell[1] == true or crossSell[2] == true) and (heikinashiSell == true or heikinashiSell[1] == true or heikinashiSell[2] == true) mult = timeframe.period == '15' ? 4 : 1 mult2 = timeframe.period == '240' ? 0.25 : mult movingAverage = sma(close, round(smaLengh)) movingAverage2 = sma(close, round(smaLengh2)) movingAverage3 = sma(close, round(smaLengh3)) uptrend = movingAverage < movingAverage2 and movingAverage2 < movingAverage3 and close > movingAverage downtrend = movingAverage > movingAverage2 and movingAverage2 > movingAverage3 and close < movingAverage signalBuy = (buy[1] == false and buy[2] == false and buy == true) and uptrend signalSell = (sell[1] == false and sell[2] == false and sell == true) and downtrend takeProfitSell = (buy[1] == false and buy[2] == false and buy == true) and uptrend == false takeProfitBuy = (sell[1] == false and sell[2] == false and sell == true) and uptrend plotshape(signalBuy, style=shape.triangleup, color=green, location=location.belowbar, size=size.tiny) plotshape(signalSell, style=shape.triangledown, color=red, location=location.abovebar, size=size.tiny) plot(movingAverage, linewidth=3, color=orange, transp=0) plot(movingAverage2, linewidth=2, color=purple, transp=0) plot(movingAverage3, linewidth=1, color=navy, transp=0) alertcondition(signalBuy, title='Signal Buy', message='Signal Buy') alertcondition(signalSell, title='Signal Sell', message='Signal Sell') strategy.close("L", when=dcLower[1] > low) strategy.close("S", when=dcUpper[1] < high) strategy.entry("L", strategy.long, 1, when = signalBuy and testPeriod() and uptrend) strategy.entry("S", strategy.short, 1, when = signalSell and testPeriod() and uptrend ==false) //strategy.exit("Exit Long", from_entry = "L", loss = 25000000, profit=25000000) //strategy.exit("Exit Short", from_entry = "S", loss = 25000000, profit=25000000)