이 전략은 상대적 강도 지수 (RSI), 이동 평균 컨버전스 디버전스 (MACD), 볼링거 밴드 (BB), 볼륨 분석을 결합한 포괄적인 거래 시스템이다. 다차원 기술 지표의 조율을 통해 전략은 최적의 거래 기회를 식별하기 위해 시장 추세, 변동성 및 볼륨에 대한 포괄적인 분석을 수행합니다.
이 전략의 핵심 논리는 다음과 같은 측면에 기반합니다. 1. RSI (RSI) 를 사용 하 여 시장 과잉 구매/ 과잉 판매 조건, 30 이하의 RSI를 과잉 판매로 간주 2. 트렌드 방향을 결정하기 위해 MACD를 사용합니다. MACD 금색 십자가가 긴 신호입니다. 3. 상승 및 하락 부피 (델타 부피) 의 차이를 계산함으로써 가격 트렌드 유효성을 확인합니다. 4. 입시 시기를 최적화하기 위해 가격 변동성을 평가하기 위해 볼링거 밴드를 포함합니다. 5. 시스템은 RSI가 과판되고 MACD가 황금색을 나타내며 델타 볼륨이 긍정적일 때 최고의 구매 신호를 생성합니다. 6. MACD가 사망 크로스를 표시하거나 RSI가 위험 통제를 위해 60을 초과하면 자동으로 포지션을 닫습니다.
이 전략은 여러 가지 기술 지표를 통합하여 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")