이 전략은 상대적 강도 지수 (RSI), 이동 평균 컨버전스 디버전스 (MACD), 볼링거 밴드 (BB), 볼륨 분석을 결합한 포괄적인 거래 시스템이다. 다차원 기술 지표의 조율을 통해 전략은 최적의 거래 기회를 식별하기 위해 시장 추세, 변동성 및 볼륨에 대한 포괄적인 분석을 수행합니다.
전략의 핵심 논리는 다음 측면에 기초합니다.
이 전략은 여러 가지 기술 지표를 통합하여 RSI, MACD 및 볼륨을 포함한 다차원 분석을 통해 시장 기회를 포착하는 복합 거래 전략입니다. 전략은 포괄적인 위험 관리 메커니즘과 함께 강력한 적응력과 확장성을 보여줍니다. 지속적인 최적화 및 개선으로이 전략은 다른 시장 환경에서 안정적인 성능을 유지할 수 있습니다.
/*backtest start: 2024-11-12 00:00:00 end: 2024-12-11 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Liraz sh Strategy - RSI MACD Strategy with Bullish Engulfing and Net Volume", overlay=true, currency=currency.NONE, initial_capital=100000, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3) // Input parameters rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings") rsiSourceInput = input.source(close, "RSI Source", group="RSI Settings") maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings") maLengthInput = input.int(14, title="MA Length", group="MA Settings") bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings") fastLength = input.int(12, minval=1, title="MACD Fast Length") slowLength = input.int(26, minval=1, title="MACD Slow Length") signalLength = input.int(9, minval=1, title="MACD Signal Length") startDate = input(timestamp("2018-01-01"), title="Start Date") endDate = input(timestamp("2069-12-31"), title="End Date") // Custom Up and Down Volume Calculation var float upVolume = 0.0 var float downVolume = 0.0 if close > open upVolume += volume else if close < open downVolume += volume delta = upVolume - downVolume plot(upVolume, "Up Volume", style=plot.style_columns, color=color.new(color.green, 60)) plot(downVolume, "Down Volume", style=plot.style_columns, color=color.new(color.red, 60)) plotchar(delta, "Delta", "—", location.absolute, color=delta > 0 ? color.green : color.red) // MA function ma(source, length, type) => switch type "SMA" => ta.sma(source, length) "Bollinger Bands" => ta.sma(source, length) "EMA" => ta.ema(source, length) "SMMA (RMA)" => ta.rma(source, length) "WMA" => ta.wma(source, length) "VWMA" => ta.vwma(source, length) // RSI calculation up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput) down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) rsiMA = ma(rsi, maLengthInput, maTypeInput) isBB = maTypeInput == "Bollinger Bands" // MACD calculation fastMA = ta.ema(close, fastLength) slowMA = ta.ema(close, slowLength) macd = fastMA - slowMA signalLine = ta.sma(macd, signalLength) hist = macd - signalLine // Bullish Engulfing Pattern Detection bullishEngulfingSignal = open[1] > close[1] and close > open and close >= open[1] and close[1] >= open and (close - open) > (open[1] - close[1]) barcolor(bullishEngulfingSignal ? color.yellow : na) // Plotting RSI and MACD plot(rsi, "RSI", color=#7E57C2) plot(rsiMA, "RSI-based MA", color=color.yellow) hline(70, "RSI Upper Band", color=#787B86) hline(50, "RSI Middle Band", color=color.new(#787B86, 50)) hline(30, "RSI Lower Band", color=#787B86) bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title="Upper Bollinger Band", color=color.green) bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title="Lower Bollinger Band", color=color.green) plot(macd, title="MACD", color=color.blue) plot(signalLine, title="Signal Line", color=color.orange) plot(hist, title="Histogram", style=plot.style_histogram, color=color.gray) // Best time to buy condition bestBuyCondition = rsi < 30 and ta.crossover(macd, signalLine) and delta > 0 // Plotting the best buy signal line var line bestBuyLine = na if (bestBuyCondition ) bestBuyLine := line.new(bar_index[1], close[1], bar_index[0], close[0], color=color.white) // Strategy logic longCondition = (ta.crossover(macd, signalLine) or bullishEngulfingSignal) and rsi < 70 and delta > 0 if (longCondition ) strategy.entry("Long", strategy.long) // Reflexive exit condition: Exit if MACD crosses below its signal line or if RSI rises above 60 exitCondition = ta.crossunder(macd, signalLine) or (rsi > 60 and strategy.position_size > 0) if (exitCondition ) strategy.close("Long")