Strategi ini menggunakan zon bekalan dan permintaan, Exponential Moving Average (EMA), dan Average True Range (ATR) trailing stop untuk isyarat perdagangan. Pengguna boleh menyesuaikan tetapan EMA dan visibiliti isyarat. Strategi ini menandakan zon Higher High (HH), Lower Low (LL), Lower High (LH), dan Higher Low (HL). Isyarat ditunjukkan selepas lilin ketiga, sesuai untuk backtesting.
Purata Bergerak Eksponensial (EMA):
Julat sebenar purata (ATR):
Digunakan untuk menentukan EMA untuk trend dan ATR untuk hentian yang berasaskan turun naik.
Ia mengenal pasti corak
Tinggi Tinggi (HH): Puncak semasa > puncak sebelumnya, momentum menaik.
Bawah Bawah (LL): Rendah semasa < bawah sebelumnya, momentum ke bawah.
Tinggi rendah (HL): Tapak bawah semasa > Tapak bawah sebelumnya, kelanjutan ke atas.
Tinggi rendah (LH): Puncak semasa < puncak terdahulu, kelanjutan ke bawah.
Digunakan dengan trend untuk mengenal pasti pembalikan atau kesinambungan.
Isyarat kemasukan: Beli/jual pada penutupan lilin ketiga di atas/di bawah tinggi/rendah sebelumnya.
Keluar: Hentikan kerugian berdasarkan ATR.
Menggabungkan pelbagai teknik untuk ujian belakang yang baik. Dunia sebenar adalah kompleks, pengoptimuman adalah kunci. Strategi asas membolehkan pelanjutan dan kombinasi.
/*backtest start: 2023-12-18 00:00:00 end: 2024-01-17 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Supply and Demand Zones with EMA and Trailing Stop", shorttitle="SD Zones", overlay=true) showBuySignals = input(true, title="Show Buy Signals", group="Signals") showSellSignals = input(true, title="Show Sell Signals", group="Signals") showHLZone = input(true, title="Show HL Zone", group="Zones") showLHZone = input(true, title="Show LH Zone", group="Zones") showHHZone = input(true, title="Show HH Zone", group="Zones") showLLZone = input(true, title="Show LL Zone", group="Zones") emaLength = input(200, title="EMA Length", group="EMA Settings") atrLength = input(14, title="ATR Length", group="Trailing Stop") atrMultiplier = input(2, title="ATR Multiplier", group="Trailing Stop") // Function to identify supply and demand zones getZones(src, len, mult) => base = request.security(syminfo.tickerid, "D", close) upper = request.security(syminfo.tickerid, "D", high) lower = request.security(syminfo.tickerid, "D", low) multiplier = request.security(syminfo.tickerid, "D", mult) zonetype = base + multiplier * len zone = src >= zonetype [zone, upper, lower] // Identify supply and demand zones [supplyZone, _, _] = getZones(close, high[1] - low[1], 1) [demandZone, _, _] = getZones(close, high[1] - low[1], -1) // Plot supply and demand zones bgcolor(supplyZone ? color.new(color.red, 80) : na) bgcolor(demandZone ? color.new(color.green, 80) : na) // EMA with Linear Weighted method ema = ta.ema(close, emaLength) // Color code EMA based on its relation to candles emaColor = close > ema ? color.new(color.green, 0) : close < ema ? color.new(color.red, 0) : color.new(color.yellow, 0) // Plot EMA plot(ema, color=emaColor, title="EMA") // Entry Signal Conditions after the third candle longCondition = ta.crossover(close, high[1]) and bar_index >= 2 shortCondition = ta.crossunder(close, low[1]) and bar_index >= 2 // Trailing Stop using ATR atrValue = ta.atr(atrLength) trailStop = close - atrMultiplier * atrValue // Strategy Entry and Exit if (longCondition) strategy.entry("Buy", strategy.long) strategy.exit("TrailStop", from_entry="Buy", loss=trailStop) if (shortCondition) strategy.entry("Sell", strategy.short) strategy.exit("TrailStop", from_entry="Sell", loss=trailStop) // Plot Entry Signals plotshape(series=showBuySignals ? longCondition : na, title="Buy Signal", color=color.new(color.green, 0), style=shape.triangleup, location=location.belowbar) plotshape(series=showSellSignals ? shortCondition : na, title="Sell Signal", color=color.new(color.red, 0), style=shape.triangledown, location=location.abovebar) // Plot Trailing Stop plot(trailStop, color=color.new(color.red, 0), title="Trailing Stop") // Plot HH, LL, LH, and HL zones plotshape(series=showHHZone and ta.highest(high, 2)[1] and ta.highest(high, 2)[2] ? 1 : na, title="HH Zone", color=color.new(color.blue, 80), style=shape.triangleup, location=location.abovebar) plotshape(series=showLLZone and ta.lowest(low, 2)[1] and ta.lowest(low, 2)[2] ? 1 : na, title="LL Zone", color=color.new(color.blue, 80), style=shape.triangledown, location=location.belowbar) plotshape(series=showLHZone and ta.highest(high, 2)[1] and ta.lowest(low, 2)[2] ? 1 : na, title="LH Zone", color=color.new(color.orange, 80), style=shape.triangleup, location=location.abovebar) plotshape(series=showHLZone and ta.lowest(low, 2)[1] and ta.highest(high, 2)[2] ? 1 : na, title="HL Zone", color=color.new(color.orange, 80), style=shape.triangledown, location=location.belowbar)