
Strategi ini menggunakan persilangan dua rata-rata bergerak sebagai sinyal perdagangan, digabungkan dengan ATR stop loss untuk melakukan perdagangan mengikuti tren. Gagasan utamanya adalah melakukan over ketika melewati rata-rata bergerak jangka panjang pada rata-rata bergerak jangka pendek, dan kosong saat melewati rata-rata bergerak jangka panjang, sambil menggunakan ATR untuk mengatur stop loss, dan stop loss yang dinamika.
Strategi ini terutama digunakan untuk menilai arah tren melalui dua set rata-rata bergerak. Panjang rata-rata bergerak cepat adalah 25 hari dan panjang rata-rata bergerak lambat adalah 100 hari.
Untuk memfilter beberapa sinyal palsu, strategi menambahkan crossCount crossCount. Ini hanya akan memicu sinyal jika rata-rata bergerak cepat memiliki kurang dari maxNoCross (default 10 kali) selama periode lookback (default 25 hari).
Selain itu, strategi ini juga menambahkan mekanisme konfirmasi, yaitu setelah sinyal awal, sinyal ini akan dikonfirmasi jika harga kembali masuk ke antara dua rata-rata bergerak.
Setelah masuk, strategi menggunakan indikator ATR untuk mengatur jarak stop loss. ATR mengukur kisaran fluktuasi harga dalam periode tertentu di masa lalu, di mana jarak stop loss ditetapkan dengan 14 kali lipat dari ATR.
Strategi ini memiliki beberapa keuntungan:
Penggunaan dua rata-rata bergerak yang digabungkan dengan mekanisme penyaringan silang dapat secara efektif menyaring sinyal palsu dan menangkap tren yang lebih kuat.
Menambahkan mekanisme verifikasi untuk menghindari penipuan.
Dengan menggunakan ATR Floating Tracking Stop Loss, Anda dapat mengunci keuntungan maksimal dan mencegah penarikan yang berlebihan.
Lebih sedikit parameter yang dapat dioptimalkan dan lebih mudah untuk diterapkan.
Dapat diterapkan di berbagai pasar, termasuk mata uang digital dan pasar dasar tradisional.
Strategi yang dibangun dengan menggunakan berbagai indikator secara komprehensif membuat strategi lebih kuat.
Strategi ini memiliki risiko utama sebagai berikut:
Pada saat reset, rata-rata bergerak sering kali berselisih dan dapat menyebabkan kerugian berulang.
ATR parameter yang tidak tepat dapat menyebabkan stop loss terlalu longgar atau terlalu ketat.
Jika Anda melakukan hal ini, Anda akan mengalami kerugian besar.
Kejadian mendadak yang menyebabkan fluktuasi harga juga dapat menyebabkan kerugian langsung.
Parameter moving average yang tidak masuk akal dapat menyebabkan kehilangan tren atau terlalu banyak sinyal palsu.
Perubahan dalam kisaran pergerakan harga baru-baru ini dapat menyebabkan stop loss ATR tidak sesuai.
Strategi ini dapat dioptimalkan lebih lanjut dalam beberapa hal:
Parameter moving average dapat dioptimalkan untuk menemukan kombinasi yang lebih cocok. Parameter periodik yang berbeda dan weighted moving average dapat diuji.
Uji berbagai parameter siklus ATR untuk menemukan jarak penghentian yang lebih baik.
Menambahkan kondisi penyaringan tambahan, seperti volume transaksi yang diperbesar, indikator getaran, dan lain-lain, untuk meningkatkan kualitas sinyal.
Menggunakan indikator untuk mengevaluasi tren dan menghindari terjerumus dalam situasi yang bergejolak.
Menambahkan algoritma pembelajaran mesin untuk mengoptimalkan kombinasi parameter secara otomatis melalui pelatihan data historis.
Carilah lebih banyak konfirmasi dalam grafik skala besar, dan hindarilah kebisingan garis pendek yang menyesatkan.
Menetapkan aturan penurunan posisi profit, dan mengunci profit secara bertahap.
Strategi ini mengintegrasikan beberapa indikator teknis seperti crossover moving average ganda, penyaringan tren, mekanisme konfirmasi dan ATR stop loss dinamis. Ada ruang untuk peningkatan dalam hal optimasi parameter dan kontrol risiko, tetapi ide perdagangannya sederhana dan jelas, mudah untuk menerapkan replikasi, dan merupakan strategi pelacakan tren yang lebih kuat.
/*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)