하모닉 패턴과 윌리엄스 지표를 결합한 다중 시간대 거래 전략

WPR SL TP RR Pivot
생성 날짜: 2025-01-17 16:19:15 마지막으로 수정됨: 2025-01-17 16:19:15
복사: 0 클릭수: 463
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

하모닉 패턴과 윌리엄스 지표를 결합한 다중 시간대 거래 전략

개요

이 전략은 하모닉 패턴과 윌리엄스 백분율 포인트 등급(WPR)을 결합한 고급 거래 시스템입니다. 이 방법은 시장에서 고조파 패턴(예: 가틀리, 배트, 크랩, 버터플라이 패턴)을 식별하고 이를 윌리엄스 오실레이터의 매수 과다 및 매도 과다 수준과 결합하여 거래 진입 및 종료를 결정합니다. 이 전략은 기술 지표의 시너지 효과를 통해 거래의 정확성과 신뢰성을 높이기 위해 다중 확인 메커니즘을 채택합니다.

전략 원칙

전략의 핵심 논리는 다음과 같은 핵심 부분으로 구성됩니다.

  1. 하모닉 패턴 인식: 가격 전환점을 사용하여 최고치와 최저가의 관계를 분석하여 시장 구조를 결정하는 잠재적인 하모닉 패턴을 식별합니다.
  2. 윌리엄스 지표 계산: 사용자 정의 사이클을 사용하여 윌리엄스 지표를 계산하고, 최고가, 최저가, 종가 간의 관계를 분석하여 시장 상황을 판단합니다.
  3. 입장 조건:
    • 롱 진입: 강세 하모닉 패턴이 나타나고 윌리엄스 오실레이터가 매도 과열 구역에 있는 경우
    • 짧은 항목: 하락 고조파 패턴이 나타나고 Williams 오실레이터가 매수 과다 영역에 있는 경우
  4. 위험 관리: 최근 최저가/최고가에 따라 동적 손절매를 사용하고 위험-보상 비율에 따라 이익 실현 포지션을 설정합니다.

전략적 이점

  1. 다차원 분석: 패턴 분석과 모멘텀 지표를 결합하여 보다 신뢰할 수 있는 거래 신호를 제공합니다.
  2. 완벽한 위험 관리: 위험 수익률에 따라 동적 손절매 및 이익 실현 설정을 채택하여 각 거래의 위험을 효과적으로 관리합니다.
  3. 강력한 적응성: 매개변수 최적화를 통해 다양한 시장 환경과 거래 상품에 적응할 수 있습니다.
  4. 신호 확인 메커니즘: 고조파 패턴과 윌리엄스 지표의 이중 확인을 통해 잘못된 신호의 영향을 줄입니다.

전략적 위험

  1. 패턴 인식 위험: 단순화된 고조파 패턴 인식으로 인해 특정 패턴을 잘못 해석할 수 있습니다.
  2. 매개변수 민감도: 여러 매개변수를 설정하려면 신중한 최적화가 필요하며, 부적절한 매개변수는 전략 성과에 영향을 미칠 수 있습니다.
  3. 시장 환경 의존성: 변동성이 크거나 횡보하는 시장에서는 성과가 좋지 않을 수 있습니다.
  4. 신호 지연: 기술적 지표에 기반한 신호에는 어느 정도 지연이 있을 수 있습니다.

전략 최적화 방향

  1. 패턴 인식 향상:
    • 더욱 엄격한 고조파 비율 검증이 추가되었습니다.
    • 패턴 인식 정확도를 높이기 위한 가격 구조 분석 소개
  2. 신호 필터링:
    • 트렌드 필터 추가
    • 다양한 시장 환경에 적응하기 위해 변동성 지표를 추가하는 것을 고려하세요
  3. 위험 관리 최적화:
    • 동적 위험-수익률 조정 달성
    • 시장 변동에 따른 포지션 관리 강화

요약하다

이 전략은 하모닉 패턴과 윌리엄스 지표를 결합하여 비교적 완전한 거래 시스템을 구축합니다. 이 방법은 다차원적 분석 방법과 완벽한 위험 관리 메커니즘을 갖추고 있다는 장점이 있지만, 매개변수 최적화와 시장 환경에 대한 적응성 등의 문제에도 여전히 주의해야 합니다. 제안된 최적화 방향을 통해 전략의 안정성과 신뢰성이 더욱 향상될 것으로 기대됩니다.

전략 소스 코드
/*backtest
start: 2025-01-09 00:00:00
end: 2025-01-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
strategy("Harmonic Pattern with WPR Backtest", overlay=true)

// === Inputs ===
patternLength = input.int(5, title="Pattern Length")
wprLength = input.int(14, title="WPR Length")
wprOverbought = input.float(-20, title="WPR Overbought Level")
wprOversold = input.float(-80, title="WPR Oversold Level")
riskRewardMultiplier = input.float(0.618, title="Take-Profit Risk/Reward Multiplier")
stopLossBuffer = input.float(0.005, title="Stop-Loss Buffer (%)")

// === Manual Calculation of William Percent Range (WPR) ===
highestHigh = ta.highest(high, wprLength)
lowestLow = ta.lowest(low, wprLength)
wpr = ((highestHigh - close) / (highestHigh - lowestLow)) * -100

// === Harmonic Pattern Detection (Simplified Approximation) ===
// Calculate price pivots
pivotHigh = ta.pivothigh(high, patternLength, patternLength)
pivotLow = ta.pivotlow(low, patternLength, patternLength)

// Detect Bullish and Bearish Harmonic Patterns
bullishPattern = pivotLow and close > ta.lowest(close, patternLength)  // Simplified detection for bullish patterns
bearishPattern = pivotHigh and close < ta.highest(close, patternLength)  // Simplified detection for bearish patterns

// === Entry Conditions ===
longCondition = bullishPattern and wpr < wprOversold
shortCondition = bearishPattern and wpr > wprOverbought

// === Stop-Loss and Take-Profit Levels ===
longEntryPrice = close
longSL = ta.valuewhen(longCondition, low, 0) * (1 - stopLossBuffer)  // Stop-loss for long trades
longTP = longEntryPrice * (1 + riskRewardMultiplier)  // Take-profit for long trades

shortEntryPrice = close
shortSL = ta.valuewhen(shortCondition, high, 0) * (1 + stopLossBuffer)  // Stop-loss for short trades
shortTP = shortEntryPrice * (1 - riskRewardMultiplier)  // Take-profit for short trades

// === Backtesting Logic ===
// Long Trade
if longCondition
    strategy.entry("Long", strategy.long)
    strategy.exit("Long Exit", "Long", stop=longSL, limit=longTP)

// Short Trade
if shortCondition
    strategy.entry("Short", strategy.short)
    strategy.exit("Short Exit", "Short", stop=shortSL, limit=shortTP)

// === Visualization ===
bgcolor(longCondition ? color.new(color.green, 90) : na, title="Long Entry Signal")
bgcolor(shortCondition ? color.new(color.red, 90) : na, title="Short Entry Signal")