Sumber dimuat naik... memuat...

Multi-EMA Crossover dengan Trend Peluasan Fibonacci Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2024-07-29 16:42:56
Tag:EMA

img

Ringkasan

Strategi ini adalah sistem mengikuti trend yang menggabungkan pelbagai persimpangan Exponential Moving Average (EMA) dengan tahap lanjutan Fibonacci. Ia menggunakan interaksi antara EMA dari tempoh yang berbeza untuk mengenal pasti permulaan dan akhir trend yang berpotensi, sementara menggunakan tahap lanjutan Fibonacci untuk menentukan sasaran keuntungan. Strategi ini juga menggabungkan peraturan berhenti rugi khusus untuk menguruskan risiko dan melindungi keuntungan.

Prinsip Strategi

Inti strategi ini terletak pada penggunaan persilangan EMA di pelbagai jangka masa untuk menangkap permulaan dan pengakhiran trend. Khususnya, ia menggunakan EMA 5-periode, 10-periode, dan 30-periode. Strategi ini merangkumi empat syarat kemasukan yang berbeza, masing-masing direka untuk menangkap senario pasaran yang berbeza:

  1. Keadaan kemasukan pertama diaktifkan apabila harga menyentuh atau jatuh di bawah EMA 30 tempoh tetapi kemudian ditutup di atasnya, sementara EMA 10 tempoh di atas EMA 5 tempoh, dan EMA 30 tempoh adalah 1% lebih rendah daripada EMA 5 tempoh.

  2. Keadaan kemasukan kedua diaktifkan apabila EMA 5 tempoh melintasi di atas EMA 30 tempoh, dan EMA 30 tempoh telah melintasi di bawah EMA 5 tempoh dalam 6 bar terakhir.

  3. Keadaan kemasukan ketiga diaktifkan apabila paras tertinggi dua bar sebelumnya berada di bawah EMA 5 tempoh masing-masing, EMA 5 tempoh berada di bawah EMA 10 tempoh, yang di bawah EMA 30 tempoh, dan paras tertinggi bar sebelumnya berada di bawah penutupan semasa.

  4. Keadaan kemasukan keempat diaktifkan apabila EMA 10 tempoh melintasi di atas EMA 30 tempoh, EMA 5 tempoh telah melintasi di atas EMA 30 tempoh dalam 4 bar terakhir, dan kedua-dua nilai EMA 10 tempoh dan 5 tempoh semasa lebih tinggi daripada nilai sebelumnya.

Untuk stop-loss, strategi menetapkan peraturan khusus untuk syarat kemasukan yang berbeza:

  • Untuk syarat pertama, kedudukan ditutup jika EMA 30 tempoh melintasi di atas EMA 10 tempoh.
  • Untuk keadaan lain, kedudukan ditutup jika harga penutupan jatuh di bawah paras terendah dari tiga bar sebelumnya.

Sasaran keuntungan ditetapkan berdasarkan tahap lanjutan Fibonacci, termasuk 0.618, 0.786, 1.0, dan 1.618 tahap. Strategi menutup kedudukan apabila tahap ini dicapai, mengikut peraturan tertentu.

Tambahan pula, strategi ini merangkumi syarat kunci keuntungan: jika paras terendah dua bar terakhir berada di atas EMA 5 tempoh dan EMA diselaraskan mengikut susunan menaik (5 > 10 > 30), kedudukan ditutup untuk mengunci keuntungan.

Kelebihan Strategi

  1. Pelbagai pengesahan: Dengan menggunakan beberapa EMA dan syarat kemasukan, strategi dapat mengenal pasti permulaan dan kesinambungan trend dengan lebih tepat.

  2. Kebolehsesuaian yang tinggi: Empat keadaan kemasukan yang berbeza membolehkan strategi menyesuaikan diri dengan pelbagai persekitaran pasaran, menangkap peluang perdagangan sama ada dalam pecah cepat atau pembentukan trend yang perlahan.

  3. Pengurusan Risiko: Strategi ini merangkumi peraturan stop-loss khusus, yang membantu mengawal risiko untuk setiap perdagangan.

  4. Sasaran keuntungan yang jelas: Menggunakan tahap lanjutan Fibonacci sebagai sasaran keuntungan memberikan peniaga titik keluar yang jelas. Ini membantu mengelakkan mengambil keuntungan terlalu awal atau memegang kedudukan terlalu lama.

  5. Perlindungan Keuntungan: Keadaan kunci keuntungan membantu melindungi keuntungan yang diperoleh apabila trend mungkin berbalik, aspek penting yang sering diabaikan oleh banyak strategi trend.

  6. Gabungan Penunjuk Teknikal: Strategi ini menggabungkan EMA dan alat Fibonacci, memanfaatkan kekuatan kedua-dua alat analisis teknikal yang popular ini.

Risiko Strategi

  1. Overtrading: Keadaan kemasukan yang berbilang boleh menyebabkan overtrading, terutamanya di pasaran yang sangat tidak menentu. Ini boleh meningkatkan kos transaksi dan berpotensi membawa kepada lebih banyak isyarat palsu.

  2. Sensitiviti Parameter: Strategi menggunakan beberapa tempoh EMA tetap dan ambang peratusan. Parameter ini mungkin perlu diselaraskan untuk pasaran dan jangka masa yang berbeza, jika tidak, mereka mungkin membawa kepada prestasi strategi yang buruk.

  3. Kebergantungan Trend: Sebagai strategi trend-mengikuti, ia mungkin berprestasi buruk dalam pasaran yang berkisar atau berayun. Dalam persekitaran pasaran ini, ia mungkin menghasilkan beberapa isyarat palsu dan kerugian kecil.

  4. Lag: EMA secara semula jadi penunjuk yang tertinggal. Dalam pasaran yang berubah dengan cepat, strategi mungkin tidak dapat menangkap titik perubahan trend dengan cara yang tepat.

  5. Kerumitan: Kepelbagaian syarat dan peraturan strategi meningkatkan kerumitan, yang mungkin menjadikannya sukar untuk difahami dan dipelihara, dan juga meningkatkan risiko terlalu sesuai.

Arahan Pengoptimuman Strategi

  1. Penyesuaian Parameter Dinamik: Pertimbangkan untuk memperkenalkan mekanisme penyesuaian untuk menyesuaikan tempoh EMA secara dinamik dan parameter lain berdasarkan turun naik pasaran.

  2. Menggabungkan Penunjuk Volume: Menggabungkan analisis jumlah boleh meningkatkan ketepatan keputusan kemasukan dan keluar. Sebagai contoh, memerlukan peningkatan jumlah pada kemasukan untuk mengesahkan kekuatan trend.

  3. Penapisan persekitaran pasaran: Memperkenalkan mekanisme pengenalan persekitaran pasaran, seperti menggunakan ATR (Average True Range) atau penunjuk turun naik, untuk menghentikan perdagangan dalam persekitaran yang tidak sesuai untuk mengikuti trend.

  4. Mengoptimumkan mekanisme Stop-Loss: Pertimbangkan untuk menggunakan trailing stop dan bukannya stop tetap. Ini boleh melindungi keuntungan sambil membolehkan mereka terus berkembang.

  5. Tambah Penapisan Masa: Batasi perdagangan kepada tempoh masa tertentu, mengelakkan tempoh yang sangat tidak menentu atau kecairan yang rendah, yang dapat meningkatkan kestabilan strategi.

  6. Memperkenalkan Pembelajaran Mesin: Gunakan algoritma pembelajaran mesin untuk mengoptimumkan pemilihan parameter dan keputusan kemasukan, yang dapat meningkatkan kemampuan dan prestasi strategi.

  7. Analisis Pelbagai Jangka Masa: Menggabungkan analisis trend dari jangka masa yang lebih lama untuk meningkatkan ketepatan keputusan kemasukan dan mengelakkan memasuki terhadap trend utama.

Kesimpulan

Multi-EMA Crossover dengan Fibonacci Extension Trend Following Strategy menunjukkan sistem perdagangan yang komprehensif yang menggabungkan pelbagai penunjuk teknikal dan konsep perdagangan. Dengan menggunakan pelbagai EMA dan syarat kemasukan, strategi ini berusaha untuk mencapai keseimbangan antara menangkap trend dan mengurangkan isyarat palsu. Penggunaan tahap sambungan Fibonacci memberikan asas objektif untuk menetapkan sasaran keuntungan, sementara peraturan stop-loss dan kunci keuntungan khusus mencerminkan penekanan pada pengurusan risiko.

Walaupun strategi ini mempunyai kelebihan dalam pengesahan berganda dan kebolehsesuaian yang tinggi, kerumitan dan kepekaan terhadap pemilihan parameter juga menimbulkan beberapa cabaran. Untuk meningkatkan lagi ketahanan dan prestasi strategi, pertimbangan dapat diberikan untuk memperkenalkan penyesuaian parameter dinamik, penapisan persekitaran pasaran, dan analisis pelbagai jangka masa sebagai arah pengoptimuman.

Secara keseluruhan, strategi ini menyediakan rangka kerja yang menarik untuk mengikuti trend, tetapi peniaga perlu menjalankan pengujian balik dan pengoptimuman parameter yang menyeluruh semasa menerapkannya dalam amalan, dan membuat penyesuaian yang sesuai berdasarkan pasaran dan gaya perdagangan tertentu.


/*backtest
start: 2024-06-01 00:00:00
end: 2024-06-30 23:59:59
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA Combined Strategy with Specific Stop Loss", overlay=true)

// Define the EMAs
ema30 = ta.ema(close, 30)
ema10 = ta.ema(close, 10)
ema5 = ta.ema(close, 5)

// Define the conditions for opening an order
open_condition1 = low <= ema30 and close > ema30  and ema10 > ema5 and ema30 * 1.01 < ema5
open_condition2 = ta.crossover(ema5, ema30) and (ta.crossover(ema30[1], ema5[1]) or ta.crossover(ema30[2], ema5[2]) or ta.crossover(ema30[3], ema5[3]) or ta.crossover(ema30[4], ema5[4])  or ta.crossover(ema30[5], ema5[5]) or ta.crossover(ema30[6], ema5[6]) )
open_condition3 = high[2] < ema5[2] and high[1] < ema5[1] and ema5 < ema10 and ema10 < ema30 and high[1] < close 
open_condition4 = ta.crossover(ema10, ema30) and (ta.crossover(ema5[0], ema30[0]) or ta.crossover(ema5[1], ema30[1]) or ta.crossover(ema10[2], ema30[2]) or ta.crossover(ema10[3], ema30[3])) and ema10[1] < ema10 and ema5[1] <ema5

// Calculate the lowest low of the previous two bars
lowest_low_prev_two_bars = ta.lowest(low, 3)

// Track the entry price and the lowest low of the previous two bars for open_condition3
var float entry_price = na
var float low_entry_price = na
var float entry_lowest_low1 = na
var float entry_lowest_low2 = na
var float entry_lowest_low3 = na
var float entry_lowest_low4 = na

var bool order1 = false
var bool order2 = false
var bool order3 = false
var bool order4 = false
// Fibonacci extension levels based on the last significant swing
var float fib_extension_level_0_618 = na
var float fib_extension_level_0_786 = na
var float fib_extension_level_1 = na
var float fib_extension_level_1_618 = na

    // Calculate Fibonacci extension levels
var float swing_low = na
var float swing_high = na
// Here we assume the latest swing low and swing high, adjust based on your logic
swing_low := ta.lowest(low, 20)
swing_high := ta.highest(high, 20)

// Open a long order when any of the conditions are met
if open_condition1 and not order2 and not order1 and not order3 and not order4
    strategy.entry("Long", strategy.long, comment="<ema30")
    entry_lowest_low1 := lowest_low_prev_two_bars
    low_entry_price := low
    fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
    fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
    entry_price := close
    order1 := true
if open_condition2 and not order2 and not order1 and not order3 and not order4
    strategy.entry("Long", strategy.long, comment="ema5xema30")
    entry_lowest_low2 := lowest_low_prev_two_bars
    low_entry_price := low
    fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
    fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
    entry_price := close
    order2 := true

if open_condition3 and not order2 and not order1 and not order3 and not order4
    strategy.entry("Long", strategy.long, comment="high<ema5")
    entry_price := close
    low_entry_price := low
    entry_lowest_low3 := lowest_low_prev_two_bars
    fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
    fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
    order3 := true

if open_condition4 and not order2 and not order1 and not order3 and not order4
    strategy.entry("Long", strategy.long, comment="high<ema5444")
    entry_price := close
    low_entry_price := low
    entry_lowest_low4 := lowest_low_prev_two_bars
    fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
    fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
    order4 := true




// Set a stop loss only if the order was opened with the specified conditions
if (not na(entry_price))
    if order1
        if ta.crossover(ema30,ema10)
            strategy.close("Long", comment="stop loss1" )
            entry_price := na
            order1 := false
            low_entry_price := na


    if order2
        if close < entry_lowest_low2
            strategy.close("Long", comment="stop loss2" )
            entry_price := na
            order2 := false
            low_entry_price := na

    if order3
        if close < entry_lowest_low3
            strategy.close("Long", comment="stop loss3" )
            entry_price := na
            order3 := false
            low_entry_price := na

    if order4
        if close < entry_lowest_low4
            strategy.close("Long", comment="stop loss4" )
            entry_price := na
            order4 := false
            low_entry_price := na


    if   low[1] > ema5[1] and low > ema5  and ema5 > ema10 and ema10 > ema30 
        strategy.close("Long", comment="profit low > ema5")
        entry_price := na
        order1 := false
        order2 := false
        order3 := false
        order4 := false
        low_entry_price := na

    // Take profit at Fibonacci extension levels
    if high >= fib_extension_level_0_618 and close <= fib_extension_level_0_618
        strategy.close("Long", comment="at 0.618 Fib")
        entry_price := na
        order1 := false
        order2 := false
        order3 := false
        order4 := false
        low_entry_price := na

    if  high >= fib_extension_level_0_786 and close < fib_extension_level_0_786
        strategy.close("Long", comment="at 0.786 Fib")
        entry_price := na
        order1 := false
        order2 := false
        order3 := false
        order4 := false
        low_entry_price := na

    if  high >= fib_extension_level_1 and close < fib_extension_level_1
        strategy.close("Long", comment="at 1 Fib")
        entry_price := na
        order1 := false
        order2 := false
        order3 := false
        order4 := false
        low_entry_price := na
    if  high >= fib_extension_level_1_618
        strategy.close("Long", comment="at 1 Fib")
        entry_price := na
        order1 := false
        order2 := false
        order3 := false
        order4 := false
        low_entry_price := na


// Plot the EMAs for visual reference
plot(ema30, color=color.blue, title="EMA 30")
plot(ema10, color=color.orange, title="EMA 10")
plot(ema5, color=color.red, title="EMA 5")

Berkaitan

Lebih lanjut