Strategi ini menggunakan persilangan purata bergerak berganda sebagai isyarat perdagangan, digabungkan dengan hentian ATR untuk trend selepas perdagangan.
Strategi ini terutamanya menggunakan dua set purata bergerak untuk menentukan arah trend. purata bergerak pantas mempunyai panjang 25 hari, dan purata bergerak perlahan mempunyai panjang 100 hari. Isyarat beli dihasilkan apabila MA pantas melintasi di atas MA perlahan, dan isyarat jual dihasilkan apabila melintasi di bawah.
Untuk menapis beberapa isyarat palsu, strategi ini menambah kaunter silang yang dipanggil crossCount. Isyarat hanya dicetuskan apabila bilangan silang untuk MA pantas dalam tempoh melihat kembali (default 25 hari) adalah kurang daripada maxNoCross (default 10).
Di samping itu, strategi ini mempunyai mekanisme pengesahan, di mana isyarat juga disahkan jika harga memasuki semula antara dua purata bergerak selepas isyarat awal.
Selepas memasuki kedudukan, strategi menggunakan ATR untuk menetapkan tahap stop loss. ATR mengukur julat turun naik harga dalam tempoh tertentu, dan di sini 14x digunakan sebagai jarak berhenti. Tahap berhenti mengambang mengikut pergerakan harga.
Strategi ini mempunyai kelebihan berikut:
Menggunakan persilangan MA berganda dengan penapisan, ia dapat menangkap pergerakan trend yang kuat dengan berkesan sambil mengelakkan isyarat palsu.
Mekanisme pengesahan menghalang mereka daripada dipalsukan oleh pelarian palsu.
Stop loss ATR terapung membantu memaksimumkan keuntungan sambil mengehadkan pengeluaran.
Ia mempunyai beberapa parameter yang boleh dioptimumkan dan mudah dilaksanakan.
Berlaku di seluruh pasaran termasuk aset kripto dan tradisional.
Menggabungkan pelbagai penunjuk teknikal untuk ketahanan.
Risiko utama strategi termasuk:
Pembebasan MA yang kerap semasa tempoh yang terhad boleh menyebabkan banyak kerugian.
Tetapan parameter ATR yang tidak betul boleh menyebabkan penamat terlalu lebar atau terlalu ketat.
Celah besar boleh langsung mencetuskan hentian.
Peristiwa berita utama yang menyebabkan turun naik yang besar juga boleh menghentikan kedudukan.
Parameter MA yang tidak mencukupi boleh menyebabkan trend yang hilang atau terlalu banyak isyarat palsu.
Tindakan harga baru-baru ini mungkin menjadikan hentian ATR ketinggalan zaman.
Strategi ini boleh dioptimumkan lagi dalam aspek berikut:
Mengoptimumkan parameter MA untuk mencari kombinasi yang lebih baik, menguji tempoh yang berbeza dan purata tertimbang.
Uji tempoh ATR yang berbeza untuk mencari jarak berhenti yang lebih baik.
Tambah penapis tambahan seperti lonjakan jumlah, penunjuk turun naik untuk meningkatkan kualiti isyarat.
Sertakan metrik trend untuk mengelakkan whipsaws di pasaran bergelombang.
Tambah algoritma pembelajaran mesin untuk mengoptimumkan parameter secara automatik melalui backtesting.
Cari lebih banyak pengesahan pada jangka masa yang lebih tinggi untuk mengelakkan bunyi jangka pendek.
Melaksanakan peraturan mengambil keuntungan bertahap untuk meningkatkan kedudukan yang menguntungkan.
Strategi ini menggabungkan persilangan MA berganda, penapisan trend, pengesahan, dan hentian ATR dinamik untuk mengikuti trend yang kukuh. Walaupun terdapat ruang untuk peningkatan dalam pengoptimuman dan kawalan risiko, logik perdagangan adalah mudah dan mudah ditiru, menjadikannya sistem perdagangan trend yang stabil.
/*backtest start: 2023-10-02 00:00:00 end: 2023-11-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("QuantCat Intraday Strategy (15M)", overlay=true) //MA's for basic signals, can experiment with these values fastEMA = sma(close, 25) slowEMA = sma(close, 100) //Parameters for validation of position lookback_value = 25 maxNoCross=10 //value used for maximum number of crosses on a certain MA to mitigate noise and maximise value from trending markets //Amount of crosses on MA to filter out noise ema25_crossover = (cross(close, fastEMA)) == true ? 1 : 0 ema25_crossover_sum = sum(ema25_crossover, lookback_value) ///potentially change lookback value to alter results crossCount = (ema25_crossover_sum <= maxNoCross) //Entries long agrLong = ((crossover(fastEMA, slowEMA)) and (crossCount == true)) ? true : false consLong = ((close < fastEMA) and (close > slowEMA) and (fastEMA > slowEMA) and (crossCount == true)) ? true : false //Entries short agrShort = ((crossunder(fastEMA, slowEMA)) and (crossCount == true)) ? true : false consShort = ((close > fastEMA) and (close < slowEMA) and (fastEMA < slowEMA) and (crossCount == true)) ? true : false //ATR atrLkb = input(14, minval=1, title='ATR Stop Period') atrRes = input("15", title='ATR Resolution') atr = request.security(syminfo.tickerid, atrRes, atr(atrLkb)) //Strategy longCondition = ((agrLong or consLong) == true) if (longCondition) strategy.entry("Long", strategy.long) shortCondition = ((agrShort or consShort) == true) if (shortCondition) strategy.entry("Short", strategy.short) //Stop multiplier stopMult = 4 //horizontal stoplosses longStop = na longStop := shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atr * stopMult) : longStop[1] shortStop = na shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atr * stopMult) : shortStop[1] //Strategy exit functions strategy.exit("Long ATR Stop", "Long", stop=longStop) strategy.exit("Short ATR Stop", "Short", stop=shortStop) //Plots redgreen = (fastEMA > slowEMA) ? green : red p1 = plot(fastEMA, title="Fast EMA", color=redgreen, linewidth=2) p2 = plot(slowEMA, title="Slow EMA", color=redgreen, linewidth=2) fill(p1, p2, color=redgreen) s1 = plot(longStop, style=linebr, color=red, linewidth=2, title='Long ATR Stop') s2 = plot(shortStop, style=linebr, color=red, linewidth=2, title='Short ATR Stop') fill(p2, s1, color=red, transp=95) fill(p2, s2, color=red, transp=95)