Sumber dimuat naik... memuat...

Multi-EMA, RSI dan Strategi Perdagangan Penembusan Tinggi Candlelestick Keluar Berasaskan Penyimpangan Standard

Penulis:ChaoZhang, Tarikh: 2024-03-28 16:13:45
Tag:

img

Ringkasan Strategi

Strategi ini menggabungkan beberapa Exponential Moving Averages (EMA), Indeks Kekuatan Relatif (RSI), dan keadaan keluar berasaskan penyimpangan standard untuk mengenal pasti peluang membeli dan menjual yang berpotensi. Ia menggunakan jangka pendek (6, 8, 12 hari), jangka sederhana (55 hari), dan jangka panjang (150, 200, 250 hari) EMA untuk menganalisis hala tuju dan kekuatan trend pasaran. RSI, dengan ambang beli (30) dan jual (70) yang boleh dikonfigurasikan, digunakan untuk menilai momentum dan mengenal pasti keadaan overbought atau oversold. Strategi ini juga mempunyai mekanisme keluar yang unik yang mencetuskan apabila harga penutupan mencapai julat penyimpangan standard yang boleh dikonfigurasikan (default 0.5) dari EMA 12 hari, menyediakan kaedah untuk berpotensi melindungi keuntungan atau meminimumkan kerugian.

Prinsip Strategi

  1. Mengira pelbagai EMA (6, 8, 12, 55, 100, 150, 200) sebagai rujukan visual untuk menilai trend pasaran.
  2. Tentukan tertinggi tertinggi dan terendah rendah dari lilin N yang paling baru berdasarkan input pengguna (3-4 lilin).
  3. Entry Long: Penutupan semasa lebih tinggi daripada tertinggi tertinggi lilin N baru-baru ini dan di atas penapis EMA (jika diaktifkan).
  4. Entry Short: Penutupan semasa adalah lebih rendah daripada paras terendah dari lilin N baru-baru ini dan di bawah penapis EMA (jika diaktifkan).
  5. Exit Long: Penutupan semasa berada di bawah EMA 12 hari + 0.5 penyimpangan standard, atau di bawah EMA 12 hari.
  6. Keluar Pendek: Penutupan semasa berada di atas EMA 12 hari - 0.5 penyimpangan standard, atau di atas EMA 12 hari.
  7. Gunakan RSI sebagai penunjuk tambahan dengan tempoh lalai 14, ambang oversold 30, dan ambang overbought 70.

Kelebihan Strategi

  1. Menggabungkan kedua-dua dimensi trend-mengikut (berbilang EMA) dan momentum (RSI) untuk perspektif analisis pasaran yang lebih komprehensif.
  2. Mekanisme keluar yang berasaskan deviasi standard yang unik dapat menyeimbangkan melindungi keuntungan dan mengawal risiko.
  3. Kod yang sangat modular dengan parameter utama yang boleh dikonfigurasi oleh pengguna untuk fleksibiliti yang tinggi.
  4. Berlaku kepada pelbagai instrumen dan jangka masa, terutamanya saham harian dan perdagangan Bitcoin.

Analisis Risiko

  1. Isyarat palsu yang kerap semasa penyatuan pasaran atau pembalikan trend awal, yang membawa kepada kerugian berturut-turut.
  2. Parameter lalai mungkin tidak berkesan untuk semua keadaan pasaran; pengoptimuman berdasarkan backtesting diperlukan.
  3. Mengandalkan strategi ini sahaja untuk perdagangan adalah berisiko; disyorkan untuk menggabungkan dengan penunjuk lain, tahap sokongan/kekuatan untuk membuat keputusan.
  4. Lambat untuk bertindak balas terhadap perubahan trend yang dicetuskan oleh peristiwa besar tiba-tiba.

Arahan pengoptimuman

  1. Mengoptimumkan parameter EMA dan RSI: Melakukan carian menyeluruh untuk julat parameter optimum berdasarkan instrumen, jangka masa, dan ciri pasaran.
  2. Memperkenalkan mekanisme stop-loss dan mengambil keuntungan: Tetapkan tahap stop-loss dan mengambil keuntungan yang munasabah dengan merujuk kepada penunjuk turun naik seperti ATR untuk mengawal risiko perdagangan tunggal.
  3. Melaksanakan saiz kedudukan: Sesuaikan saiz kedudukan berdasarkan kekuatan trend (contohnya, ADX) atau kedekatan dengan tahap sokongan / rintangan utama.
  4. Gabungkan dengan penunjuk teknikal lain: Seperti Bollinger Bands, MACD, crossover purata bergerak untuk meningkatkan kebolehpercayaan isyarat masuk/keluar.
  5. Mengoptimumkan untuk keadaan pasaran yang berbeza: Kombinasi parameter yang halus untuk pasaran trend, julat, dan peralihan secara berasingan.

Ringkasan

Artikel ini mencadangkan strategi perdagangan penembusan ketinggian candlestick berdasarkan pelbagai purata bergerak, RSI, dan keluar deviasi standard. Strategi menganalisis pasaran dari kedua-dua dimensi trend dan momentum sambil menggunakan mekanisme keluar deviasi standard yang unik untuk menangkap peluang trend dan menguruskan risiko. Logik strategi jelas, ketat, dan pelaksanaan kod ringkas dan cekap. Dengan pengoptimuman yang betul, strategi ini berpotensi menjadi strategi perdagangan frekuensi sederhana hingga tinggi intraday yang mantap. Walau bagaimanapun, penting untuk diperhatikan bahawa mana-mana strategi mempunyai keterbatasan, dan penggunaan buta boleh memperkenalkan risiko. Dagangan kuantitatif tidak boleh menjadi proses sinyal-perintah mekanikal tetapi sebaliknya dibina berdasarkan pemahaman mengenai keadaan keseluruhan pasaran dan pengurusan risiko yang bijaksana.


/*backtest
start: 2023-03-22 00:00:00
end: 2024-03-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Candle Height Breakout with Configurable Exit and Signal Control", shorttitle="CHB Single Signal", overlay=true)

// Input parameters for EMA filter and its length
useEmaFilter = input.bool(true, "Use EMA Filter", group="Entry Conditions")
emaFilterLength = input.int(55, "EMA Filter Length", minval=1, group="Entry Conditions")
candleCount = input.int(4, "SamG Configurable Candle Count for Entry", minval=3, maxval=4, step=1, group="Entry Conditions")
exitEmaLength = input.int(12, "Exit EMA Length", minval=1, group="Exit Conditions", defval=12)
exitStdDevMultiplier = input.float(0.5, "Exit Std Dev Multiplier", minval=0.1, maxval=2.0, step=0.1, group="Exit Conditions")

// State variables to track if we are in a long or short position
var bool inLong = false
var bool inShort = false

// Calculating EMAs with fixed periods for visual reference
ema6 = ta.ema(close, 6)
ema8 = ta.ema(close, 8)
ema12 = ta.ema(close, 12)
ema55 = ta.ema(close, 55)
ema100 = ta.ema(close, 100)
ema150 = ta.ema(close, 150)
ema200 = ta.ema(close, 200)
emaFilter = ta.ema(close, emaFilterLength)
exitEma = ta.ema(close, exitEmaLength)

// Plotting EMAs
plot(ema6, "EMA 6", color=color.red)
plot(ema8, "EMA 8", color=color.orange)
plot(ema12, "EMA 12", color=color.yellow)
plot(ema55, "EMA 55", color=color.green)
plot(ema100, "EMA 100", color=color.blue)
plot(ema150, "EMA 150", color=color.purple)
plot(ema200, "EMA 200", color=color.fuchsia)
plot(emaFilter, "EMA Filter", color=color.black)
plot(exitEma, "Exit EMA", color=color.gray)

// Calculating the highest and lowest of the last N candles based on user input
highestOfN = ta.highest(high[1], candleCount)
lowestOfN = ta.lowest(low[1], candleCount)

// Entry Conditions with EMA Filter
longEntryCondition = not inLong and not inShort and (close > highestOfN) and (not useEmaFilter or (useEmaFilter and close > emaFilter))
shortEntryCondition = not inLong and not inShort and (close < lowestOfN) and (not useEmaFilter or (useEmaFilter and close < emaFilter))

// Update position state on entry
if (longEntryCondition)
    strategy.entry("Buy", strategy.long, comment="B")
    inLong := true
    inShort := false

if (shortEntryCondition)
    strategy.entry("Sell", strategy.short, comment="S")
    inLong := false
    inShort := true

// Exit Conditions based on configurable EMA and Std Dev Multiplier
smaForExit = ta.sma(close, exitEmaLength)
upperExitBand = smaForExit + exitStdDevMultiplier * ta.stdev(close, exitEmaLength)
lowerExitBand = smaForExit - exitStdDevMultiplier * ta.stdev(close, exitEmaLength)

exitConditionLong = inLong and (close < upperExitBand or close < exitEma)
exitConditionShort = inShort and (close > lowerExitBand or close > exitEma)

// Strategy exits
if (exitConditionLong)
    strategy.close("Buy", comment="Exit")
    inLong := false

if (exitConditionShort)
    strategy.close("Sell", comment="Exit")
    inShort := false

// Visualizing entry and exit points
plotshape(series=longEntryCondition, style=shape.labelup, location=location.belowbar, color=color.green, size=size.tiny, title="Buy Signal", text="B")
plotshape(series=shortEntryCondition, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.tiny, title="Sell Signal", text="S")


Lebih lanjut