Эта стратегия объединяет индикатор RSI с скользящими средними (MA) для генерации торговых сигналов. RSI используется для определения того, является ли рынок перекупленным или перепроданным, а MA используется для определения ценовых тенденций. Сигнал покупки генерируется, когда RSI перекуплен, а цена выше MA; сигнал продажи генерируется, когда RSI перепродан или когда MA производит кросс смерти. Кроме того, стратегия вводит индикатор Stochastic RSI (StochRSI) в качестве вспомогательного суждения, и на графике будет отмечен запрос, когда StochRSI генерирует сигнал.
Сочетая два классических индикатора RSI и MA, эта стратегия может улавливать движения тренда и возможности перекупленности/перепроданности. В то же время она вводит индикатор StochRSI в качестве вспомогательного суждения, и общая идея проста и ясна. Однако стратегия также имеет некоторые недостатки, такие как отсутствие мер контроля риска и необходимость улучшения точности сигнала. В будущем стратегия может быть улучшена путем введения большего количества индикаторов, оптимизации правил сигнала, добавления модулей контроля риска и т. Д., Чтобы получить более надежную отдачу.
/*backtest start: 2023-05-22 00:00:00 end: 2024-05-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("RSI Strategy with Customizable MA and StochRSI Alert", overlay=true) // กำหนดค่า RSI สำหรับการเปิดสัญญาณซื้อและขาย rsiOverbought = input(70, title="RSI Overbought Level") rsiOversold = input(30, title="RSI Oversold Level") // เลือกชนิดของเส้นค่าเฉลี่ยเคลื่อนที่ maType = input.string("EMA", title="MA Type", options=["EMA", "SMA", "HMA", "WMA"]) // กำหนดค่าเส้นค่าเฉลี่ยเคลื่อนที่ maShortLength = input(12, title="MA Short Length") maLongLength = input(26, title="MA Long Length") // เลือกการแสดงผลของเส้นค่าเฉลี่ยเคลื่อนที่ showShortMA = input(true, title="Show Short Moving Average") showLongMA = input(true, title="Show Long Moving Average") // ฟังก์ชันสำหรับเลือกชนิดของเส้นค่าเฉลี่ยเคลื่อนที่ f_ma(src, length, type) => switch type "SMA" => ta.sma(src, length) "EMA" => ta.ema(src, length) "HMA" => ta.hma(src, length) "WMA" => ta.wma(src, length) // คำนวณค่าเส้นค่าเฉลี่ยเคลื่อนที่ maShort = showShortMA ? f_ma(close, maShortLength, maType) : na maLong = showLongMA ? f_ma(close, maLongLength, maType) : na // คำนวณค่า RSI rsiValue = ta.rsi(close, 14) // สร้างสัญญาณซื้อและขาย buySignal = (rsiValue > rsiOverbought and ((showShortMA and showLongMA and close > maShort and maShort > maLong) or (showShortMA and not showLongMA and close > maShort) or (showLongMA and not showShortMA and close > maLong))) sellSignal = (showShortMA and showLongMA and ta.crossover(maLong, maShort)) or (showShortMA and not showLongMA and ta.crossover(maShort, close)) or (showLongMA and not showShortMA and ta.crossover(maLong, close)) // แสดงค่าเส้นค่าเฉลี่ยเคลื่อนที่บนกราฟ plot(maShort, color=color.red, title="MA Short") plot(maLong, color=color.green, title="MA Long") // คำนวณค่า Stochastic RSI smoothK = 3 smoothD = 3 RSIlen = 14 STOlen = 14 SRsrc = close OSlevel = 30 OBlevel = 70 rsi1 = ta.rsi(SRsrc, RSIlen) k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, STOlen), smoothK) d = ta.sma(k, smoothD) stochRSIOverbought = OBlevel stochRSIOversold = OSlevel stochRSIBuyAlert = ta.crossover(k, stochRSIOversold) stochRSISellAlert = ta.crossunder(k, stochRSIOverbought) // สร้างคำสั่งซื้อและขายเมื่อมีสัญญาณจาก RSI และ MA เท่านั้น if (buySignal) strategy.entry("Buy", strategy.long) if (sellSignal) strategy.close("Buy") // แสดงสัญญาณเตือนจาก Stochastic RSI บนกราฟ plotshape(series=stochRSIBuyAlert, location=location.belowbar, color=color.green, style=shape.labelup, title="StochRSI Buy Alert") plotshape(series=stochRSISellAlert, location=location.abovebar, color=color.red, style=shape.labeldown, title="StochRSI Sell Alert") // แสดงสัญญาณซื้อและขายจาก RSI และ MA บนกราฟ plotshape(series=buySignal, location=location.top, color=color.green, style=shape.triangleup, title="RSI>70") plotshape(series=sellSignal, location=location.top, color=color.red, style=shape.triangledown, title="MA crossoverDown")