
Strategi ini ialah sistem perdagangan lanjutan yang menggabungkan corak harmonik dan Penilaian Mata Peratusan Williams (WPR). Ia berfungsi dengan mengenal pasti corak harmonik dalam pasaran (seperti corak Gartley, Bat, Crab dan Butterfly) dan menggabungkannya dengan tahap terlebih beli dan terlebih jual pengayun Williams untuk menentukan kemasukan dan keluar perdagangan. Strategi ini menggunakan mekanisme pengesahan berganda untuk meningkatkan ketepatan dan kebolehpercayaan transaksi melalui sinergi penunjuk teknikal.
Logik teras strategi merangkumi bahagian penting berikut:
Strategi ini membina sistem perdagangan yang agak lengkap dengan menggabungkan corak harmonik dan penunjuk Williams. Kelebihannya terletak pada kaedah analisis berbilang dimensi dan mekanisme kawalan risiko yang sempurna, tetapi ia masih perlu memberi perhatian kepada isu seperti pengoptimuman parameter dan kebolehsuaian kepada persekitaran pasaran. Melalui arahan pengoptimuman yang dicadangkan, kestabilan dan kebolehpercayaan strategi dijangka akan dipertingkatkan lagi.
/*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")