이 전략은 볼링거 밴드, RSI, 여러 이동 평균 및 MACD 지표를 결합하여 완전한 거래 시스템을 구성합니다. 첫째, 그것은 가격 변동성 및 중간 밴드에 대한 가격의 위치를 결정하기 위해 볼링거 밴드를 사용합니다. 동시에, 그것은 RSI 지표를 사용하여 과잉 구매 및 과잉 판매 조건을 평가하고 RSI 오차를 사용하여 잠재적 인 트렌드 반전을 감지합니다. 여러 이동 평균이 트렌드 추적 및 지원 및 저항 수준을 결정하는 데 사용됩니다. 마지막으로 MACD 지표는 트렌드 및 잠재적 인 반전을 판단하는 데 도움이되기도합니다. 이러한 지표를 포괄적으로 고려함으로써 전략은 완전한 입문 및 출구 조건을 수립하여 거래 전략을 만듭니다.
이 전략은 트렌드 식별, 과잉 구매 및 과잉 판매 판단, 다중 시간 규모 분석 및 위치 제어 등 여러 차원에서 비교적 포괄적인 거래 시스템을 구축합니다. 그러나 전략은 불안정한 시장과 극단적인 이벤트에 대처하는 데 더 많은 최적화가 필요하며 더 체계적인 매개 변수 최적화 및 위험 통제가 부족합니다. 미래에 전략은 더 정교한 신호 필터링, 동적 무게 조정 및 극단적인 이벤트에 대한 대응 측면에서 계속 개선 될 수 있습니다. 지속적인 백테스팅 최적화 및 라이브 거래 검증을 통해이 전략은 견고하고 지속 가능한 양적 거래 전략으로 성장할 잠재력을 가지고 있습니다.
/*backtest start: 2023-05-21 00:00:00 end: 2024-05-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bollinger Bands + RSI Strategy with MA", overlay=true) // Bollinger Bands length = input.int(20, title="BB Length") mult = input.float(2.0, title="BB Mult") basis = ta.sma(close, length) dev = mult * ta.stdev(close, length) upper_band = basis + dev lower_band = basis - dev // RSI rsi_length = input.int(14, title="RSI Length") rsi_oversold = input.int(30, title="RSI Oversold", minval=0, maxval=100) rsi_overbought = input.int(70, title="RSI Overbought", minval=0, maxval=100) rsi = ta.rsi(close, rsi_length) // RSI Divergence rsi_divergence_bottom = ta.crossunder(rsi, rsi_oversold) rsi_divergence_peak = ta.crossunder(rsi_overbought, rsi) // Moving Averages ma34 = ta.sma(close, 34) ma89 = ta.sma(close, 89) ma144 = ta.sma(close, 144) ma233 = ta.sma(close, 233) ma377 = ta.sma(close, 377) ma610 = ta.sma(close, 610) // MACD Calculation [macd_line, signal_line, _] = ta.macd(close, 12, 26, 9) macd_histogram = macd_line - signal_line // MACD Divergence macd_divergence_bottom = ta.crossunder(macd_histogram, 0) macd_divergence_peak = ta.crossover(macd_histogram, 0) // Conditions for Buy and Sell basis_gt_ma34 = basis > ma34 ma34_gt_ma89 = ma34 > ma89 // Entry condition buy_condition = basis_gt_ma34 and ma34_gt_ma89 sell_condition = basis <ma34 // Calculate position size position_size = 1.0 // 100% capital initially // Update position size based on conditions if (sell_condition) position_size := 0.5 // Sell half of the position if (not basis_gt_ma34) position_size := 0.0 // Sell all if basis < ma34 // Entry and exit strategy if (buy_condition) strategy.entry("Buy", strategy.long, qty=position_size) if (sell_condition) strategy.close("Buy") // Plot Bollinger Bands and Moving Averages bb_fill_color = basis > basis[1] ? color.new(color.blue, 90) : color.new(color.blue, 10) plot(basis, color=color.blue, title="Basis") plot(upper_band, color=color.red, title="Upper Band") plot(lower_band, color=color.green, title="Lower Band") fill(plot1=plot(upper_band), plot2=plot(lower_band), color=bb_fill_color, title="BB Fill") plot(ma34, color=color.orange, title="MA34") plot(ma89, color=color.purple, title="MA89") plot(ma144, color=color.gray, title="MA144") plot(ma233, color=color.blue, title="MA233") plot(ma377, color=color.red, title="MA377") plot(ma610, color=color.green, title="MA610") // Plot RSI Divergence plotshape(series=rsi_divergence_bottom, style=shape.triangleup, location=location.abovebar, color=color.green, size=size.small) plotshape(series=rsi_divergence_peak, style=shape.triangledown, location=location.belowbar, color=color.red, size=size.small) // Plot MACD Histogram Divergence plotshape(series=macd_divergence_bottom, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small) plotshape(series=macd_divergence_peak, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)