Sumber dimuat naik... memuat...

Strategi Dagangan Berdasarkan Zon Penawaran dan Permintaan dengan EMA dan Trailing Stop

Penulis:ChaoZhang, Tarikh: 2024-01-18 16:41:16
Tag:

img

Ringkasan

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.

Logika Strategi

Pengiraan Indikator

Purata Bergerak Eksponensial (EMA):

  • EMA dikira dari harga penutupan dalam tempoh (default: 200).
  • Formula: EMA = (Price_t x α) + (EMA_t-1 x (1 - α)), di mana α = 2/(panjang + 1)

Julat sebenar purata (ATR):

  • ATR mengukur turun naik pasaran dari julat harga sebenar.
  • Julat sebenar adalah yang terbesar daripada:
    • Tambah arus minus rendah semasa
    • Nilai mutlak tertinggi semasa dikurangkan penutupan sebelumnya
    • Nilai mutlak rendah semasa tolak penutupan sebelumnya
  • ATR biasanya menggunakan 14 tempoh.

Digunakan untuk menentukan EMA untuk trend dan ATR untuk hentian yang berasaskan turun naik.

Pengesahan zon bekalan dan permintaan

Ia mengenal pasti corak HH (Higher High), LL (Lower Low), HL (Higher Low) dan LH (Lower High):

  1. Tinggi Tinggi (HH): Puncak semasa > puncak sebelumnya, momentum menaik.

  2. Bawah Bawah (LL): Rendah semasa < bawah sebelumnya, momentum ke bawah.

  3. Tinggi rendah (HL): Tapak bawah semasa > Tapak bawah sebelumnya, kelanjutan ke atas.

  4. Tinggi rendah (LH): Puncak semasa < puncak terdahulu, kelanjutan ke bawah.

Digunakan dengan trend untuk mengenal pasti pembalikan atau kesinambungan.

Masuk dan Keluar

Isyarat kemasukan: Beli/jual pada penutupan lilin ketiga di atas/di bawah tinggi/rendah sebelumnya.

Keluar: Hentikan kerugian berdasarkan ATR.

Kelebihan

  1. Menggabungkan trend, pembalikan, turun naik untuk isyarat yang kuat.
  2. Zon permintaan / bekalan mengenal pasti S / R utama.
  3. Hentikan ATR dinamik menyesuaikan dengan turun naik.
  4. Parameter yang boleh disesuaikan.
  5. Peraturan kemasukan mudah.

Risiko dan Penambahbaikan

  1. Isyarat palsu: Optimumkan panjang EMA.
  2. Risiko pengganda ATR yang tinggi mengejar trend.
  3. Pertimbangkan penapis tambahan pada entri.
  4. Uji pendekatan yang tertumpu pada trend.

Kesimpulan

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)


Lebih lanjut