Strategi ini mengimplementasikan sistem perdagangan rata-rata bergerak eksponensial tiga (EMA) yang khas. Ini menghasilkan sinyal perdagangan dengan membandingkan EMA 5 hari yang cepat, EMA 20 hari yang sedang dan EMA 50 hari yang lambat. Ini juga menggunakan harga penutupan bar saat ini dibandingkan dengan bar sebelumnya untuk menyaring sinyal palsu. Selain itu, stop loss trailing digunakan untuk mengunci keuntungan.
Ketika EMA 5 hari melintasi EMA 20 hari, dan ketiga EMA sejajar naik (5 hari EMA > EMA 20 hari > EMA 50 hari), dan penutupan bar saat ini berada di atas bar sebelumnya dekat dengan tik tertentu, pergi panjang.
Setelah masuk, ketika harga berjalan oleh tik tertentu, stop loss trailing akan dimulai untuk terus menyesuaikan stop loss berdasarkan fluktuasi harga, untuk mengunci keuntungan yang lebih besar.
Menggunakan triple EMA untuk menghasilkan sinyal dapat secara efektif menyaring kebisingan pasar dan mengidentifikasi tren. EMA cepat mencerminkan perubahan terbaru, EMA menengah menentukan arah tren, dan EMA lambat menyaring osilasi.
Membandingkan penutupan bar saat ini dengan penutupan bar sebelumnya lebih lanjut menyaring sinyal palsu dan mengurangi perdagangan yang tidak perlu.
Trailing stop loss secara dinamis menyesuaikan stop loss berdasarkan aksi harga untuk memaksimalkan profit locking.
Pengaturan parameter yang fleksibel dari strategi ini memungkinkan pengoptimalan di berbagai produk dan kerangka waktu dari batang harian hingga menit.
Crossover EMA yang sering dapat menghasilkan perdagangan yang berlebihan di pasar yang berbeda, meningkatkan biaya dari komisi dan slippage.
Trailing stop loss mungkin terlalu dini keluar dari tren selama whipsaws besar.
Keterlambatan EMA dapat menyebabkan kehilangan titik balik utama dan kerugian.
Parameter seperti periode EMA, trailing stop ticks membutuhkan optimasi untuk produk dan kerangka waktu yang berbeda.
Masukkan indikator lain seperti MACD, KD untuk menyaring sinyal perdagangan.
Uji dan optimalkan parameter untuk produk dan kerangka waktu tertentu untuk menemukan kombinasi terbaik.
Mengatur parameter secara dinamis melalui pengawasan manusia atau pembelajaran mesin.
Pertimbangkan untuk menonaktifkan trailing stop dan memegang posisi penuh untuk kondisi pasar tertentu.
Ganti stop loss trailing sederhana dengan mekanisme pengambilan keuntungan otomatis yang lebih maju.
Strategi ini mengintegrasikan tiga teknik analisis teknis yang umum - EMA crossover, price breakout dan trailing stop loss ke dalam sistem perdagangan yang cukup komprehensif dan kuat mengikuti tren. Melalui optimasi parameter, strategi ini dapat disesuaikan dengan produk dan kerangka waktu yang berbeda dan berkinerja baik di pasar tren yang kuat. Tetapi strategi ini juga memiliki beberapa kelemahan khas dari strategi analisis teknis yang membutuhkan optimasi lebih lanjut untuk menangani lebih banyak situasi pasar. Secara keseluruhan, strategi ini memberikan ide sederhana dan praktis untuk perdagangan kuantitatif dengan menunjukkan beberapa konsep strategi umum dengan sangat baik.
/*backtest start: 2023-10-01 00:00:00 end: 2023-10-02 12:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Matt Dearden - IndoPilot // @version=4 /////////////////////////////////////////////////////// Initial Parameters /////////////////////////////////////////////////////// SystemName = "Triple EMA Strategy" ShortSystemName = "TEMA" InitPosition = 0 InitCapital = 50000 InitCommission = 0.004 //approx value to compensate for Oanda spreads InitPyramidMax = 0 CalcOnorderFills = true strategy(title=SystemName, shorttitle=ShortSystemName, overlay=true, pyramiding=InitPyramidMax, default_qty_type=strategy.cash, default_qty_value=InitPosition, commission_type=strategy.commission.percent, commission_value=InitCommission, initial_capital=InitCapital, max_lines_count=500, max_labels_count=500, process_orders_on_close=false, calc_on_every_tick=false) ///////////////////////////////////////////////////////////// Inputs ///////////////////////////////////////////////////////////// DateFilter = input(false, "═════ Data Filtering ═════") InitYear = input(title="Year", type=input.integer, defval=2021, minval=2000, maxval=2021) InitMonth = input(title="Month (0=ALL)", type=input.integer, defval=0, minval=0, maxval=12) InitStopLoss = input(title="Stop Loss (ticks)", type=input.integer, defval=100, minval=0, maxval=1000) TrailingStopLoss = input(title="Trailing S/L (ticks)", type=input.integer, defval=130, minval=0, maxval=1000) InitBuffer = input(title="Buffer (ticks)", type=input.integer, defval=15, minval=0, maxval=1000) InitEMA1 = input(title="EMA 1", type=input.integer, defval=5, minval=0, maxval=1000) InitEMA2 = input(title="EMA 2", type=input.integer, defval=20, minval=0, maxval=1000) InitEMA3 = input(title="EMA 3", type=input.integer, defval=50, minval=0, maxval=1000) //////////////////////////////////////////////////////////// Variables /////////////////////////////////////////////////////////// var StopLoss = float(0.0) var StartPrice = float(0.0) //setup multipliers and catch JPY difference Multiplier = syminfo.currency == "JPY" ? 10 : 1000 //get the daily exchange rate from yesterday //X_rate = security(AccountCurrency+syminfo.currency, "D", close[1]) OrderQty = 1 Buffer = InitBuffer / (Multiplier * 100) /////////////////////////////////////////////////////// Triple EMA Strategy ////////////////////////////////////////////////////// EMA1 = ema(close, InitEMA1) EMA2= ema(close, InitEMA2) EMA3 = ema(close, InitEMA3) //entry conditions longCondition = crossover(EMA1, EMA2) and close > EMA3 and EMA1 > EMA3 and EMA2 > EMA3 and close > (close[1] + Buffer) shortCondition = crossunder(EMA1, EMA2) and close < EMA3 and EMA1 < EMA3 and EMA2 < EMA3 and close < (close[1] - Buffer) /////////////////////////////////////////////////////// Trailing Stoploss //////////////////////////////////////////////////////// if (strategy.position_size > 0 and (close > (StartPrice + (TrailingStopLoss / (100 * Multiplier))))) StopLoss := max(StopLoss, close - (TrailingStopLoss / (100 * Multiplier))) strategy.exit("Long Stoploss", "Long") if (strategy.position_size < 0 and (close < (StartPrice - (InitStopLoss / (100 * Multiplier))))) StopLoss := min(StopLoss, close + (TrailingStopLoss / (100 * Multiplier))) strategy.exit("Short Stoploss", "Short") ///////////////////////////////////////////////////////// Setup entries ///////////////////////////////////////////////////////// if (longCondition) StartPrice := close StopLoss := StartPrice - (InitStopLoss / (100 * Multiplier)) strategy.entry("Long", strategy.long, qty=OrderQty) strategy.exit("Long Stoploss", "Long") if (shortCondition) StartPrice := close StopLoss := StartPrice + (InitStopLoss / (100 * Multiplier)) strategy.entry("Short", strategy.short, qty=OrderQty) strategy.exit("Short Stoploss", "Short") ///////////////////////////////////////////////////////// Draw the EMAs ///////////////////////////////////////////////////////// plot(EMA1, "EMA1", color=#00FF00) plot(EMA2, "EMA2", color=#FF0000) plot(EMA3, "EMA3", color=#4040FF)