
이 전략은 하모닉 패턴과 윌리엄스 백분율 포인트 등급(WPR)을 결합한 고급 거래 시스템입니다. 이 방법은 시장에서 고조파 패턴(예: 가틀리, 배트, 크랩, 버터플라이 패턴)을 식별하고 이를 윌리엄스 오실레이터의 매수 과다 및 매도 과다 수준과 결합하여 거래 진입 및 종료를 결정합니다. 이 전략은 기술 지표의 시너지 효과를 통해 거래의 정확성과 신뢰성을 높이기 위해 다중 확인 메커니즘을 채택합니다.
전략의 핵심 논리는 다음과 같은 핵심 부분으로 구성됩니다.
이 전략은 하모닉 패턴과 윌리엄스 지표를 결합하여 비교적 완전한 거래 시스템을 구축합니다. 이 방법은 다차원적 분석 방법과 완벽한 위험 관리 메커니즘을 갖추고 있다는 장점이 있지만, 매개변수 최적화와 시장 환경에 대한 적응성 등의 문제에도 여전히 주의해야 합니다. 제안된 최적화 방향을 통해 전략의 안정성과 신뢰성이 더욱 향상될 것으로 기대됩니다.
/*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")