Strategi ini menggunakan crossover rata-rata bergerak dan indikator ATR untuk mengimplementasikan tren otomatis setelah perdagangan. Ini pergi panjang ketika EMA cepat melintasi di atas EMA lambat, dan pergi pendek ketika EMA cepat melintasi di bawah EMA lambat. Pada saat yang sama, ini menggunakan indikator ATR untuk menilai arah tren dan hanya mengirim sinyal perdagangan ketika ATR menunjukkan bahwa ada tren.
Strategi ini terutama didasarkan pada dua indikator teknis:
EMA Lines: Ini menggunakan dua garis EMA dengan parameter yang berbeda, cepat dan lambat. Ketika EMA cepat melintasi di atas EMA lambat, itu dianggap sinyal panjang. Ketika EMA cepat melintasi di bawah EMA lambat, itu dianggap sinyal pendek.
Indikator ATR: Indikator ATR mengukur besarnya dan kekuatan fluktuasi harga untuk menilai tren pergerakan saat ini. Nilai ATR kecil menunjukkan konsolidasi sementara nilai ATR naik besar menunjukkan tren naik, dan nilai ATR turun besar menunjukkan tren turun.
Dengan menggabungkan EMA crossover untuk mengidentifikasi peluang perdagangan dan filter ATR untuk menghindari low trendiness regime, strategi ini bertujuan untuk menghindari menjadi whipsawed selama market choppy.
Keuntungan dari strategi ini meliputi:
Hanya berdagang ketika ATR mengidentifikasi tren, yang membantu menghindari dihancurkan selama rezim non-arah.
Menggunakan logika crossover EMA cepat vs lambat untuk mengidentifikasi sinyal perdagangan.
Sensitivitas dan kelancaran EMA yang dapat disesuaikan melalui penyesuaian parameter.
Sistem perdagangan otomatis lengkap dibangun dengan hanya dua indikator sederhana, mudah diimplementasikan di editor Pine.
Kebutuhan minimal untuk tweaking parameter yang sedang berlangsung, pendekatan
Beberapa risiko yang perlu diperhatikan meliputi:
Crossover EMA dapat menghasilkan sinyal palsu, menyebabkan kerugian yang tidak perlu.
Penghakiman tren ATR juga dapat rentan terhadap kesalahan, kehilangan peluang perdagangan.
Tidak mempertimbangkan fundamental jangka waktu yang lebih tinggi. peristiwa berita besar dapat memicu pembalikan yang crossover EMA cepat mungkin tidak, membutuhkan intervensi manual.
Risiko ini dapat dikurangi melalui optimasi.
Arah optimasi utama meliputi:
Menambahkan indikator lain untuk menciptakan sistem gabungan dan meningkatkan akurasi sinyal.
Memilih parameter EMA dan ATR yang lebih cocok untuk pasar tertentu berdasarkan simbol dan kerangka waktu yang diperdagangkan.
Menerapkan optimasi parameter dinamis melalui pembelajaran mesin untuk menyesuaikan indikator berdasarkan kondisi pasar saat ini alih-alih menggunakan nilai statis tetap.
Secara keseluruhan ini adalah strategi yang sangat praktis. Dengan hanya kombinasi sederhana dari dua indikator, ini membangun sistem perdagangan yang relatif lengkap. Melalui penyesuaian parameter, ini dapat disesuaikan dengan pedagang dengan preferensi dan gaya yang berbeda. Pada saat yang sama, perluasan dan optimasi lebih lanjut dapat membuat kinerja strategi lebih baik. Logika perdagangan yang sederhana namun efektif ditambah dengan potensi optimasi yang kuat membuat ini menjadi strategi kuantitatif yang berharga untuk diteliti dan diterapkan dalam jangka panjang.
/*backtest start: 2022-12-05 00:00:00 end: 2023-12-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This strategy has been created for GMT trade 4h by Zhukov //@version=5 strategy('ZhukovTrade', overlay=true, calc_on_every_tick=true, currency=currency.USD) // INPUT: // Options to enter fast and slow Exponential Moving Average (EMA) values emaFast = input.int(title='Fast EMA', defval=100, minval=1, maxval=9999) emaSlow = input.int(title='Slow EMA', defval=200, minval=1, maxval=9999) // Option to select trade directions tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both') // Options that configure the backtest date range startDate = input(title='Start Date', defval=timestamp('01 Jan 2023 00:00')) endDate = input(title='End Date', defval=timestamp('31 Dec 2023 23:59')) // CALCULATIONS: // Use the built-in function to calculate two EMA lines fastEMA = ta.ema(close, emaFast) slowEMA = ta.ema(close, emaSlow) emapos = ta.ema(close,200) // PLOT: // Draw the EMA lines on the chart plot(series=fastEMA, color=color.new(color.orange, 0), linewidth=2) plot(series=slowEMA, color=color.new(color.blue, 0), linewidth=2) plot(series=emapos, color=color.new(color.red, 0), linewidth=2) // CONDITIONS: // Check if the close time of the current bar falls inside the date range inDateRange = true // Translate input into trading conditions longOK = tradeDirection == 'Long' or tradeDirection == 'Both' shortOK = tradeDirection == 'Short' or tradeDirection == 'Both' // Decide if we should go long or short using the built-in functions longCondition = ta.crossover(fastEMA, slowEMA) shortCondition = ta.crossunder(fastEMA, slowEMA) // ORDERS: // Set take profit and stop loss percentages take_profit_percent = input(0, title="Take Profit Percent") stop_loss_percent = input(0, title="Stop Loss Percent") // Submit entry (or reverse) orders atrPeriod = input(12, "ATR Length") factor = input.float(3.0, "Factor", step = 0.01) [supertrend, direction] = ta.supertrend(factor, atrPeriod) bodyMiddle = plot((open + close) / 2, display=display.none) upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr) downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr) fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false) fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false) if longCondition and inDateRange if longOK and direction<0 strategy.entry(id='long', direction=strategy.long, alert_message = "LONG") if shortCondition and inDateRange if shortOK and direction>0 strategy.entry(id='short', direction=strategy.short, alert_message = "SHORT") // Submit exit orders in the cases where we trade only long or only short if strategy.position_size > 0 and take_profit_percent strategy.exit(id='tp long',from_entry ="long",profit = take_profit_percent) if strategy.position_size > 0 and stop_loss_percent strategy.exit(id='sl long',from_entry="long",loss=stop_loss_percent) if strategy.position_size < 0 and stop_loss_percent strategy.exit(id='sl short',from_entry="short",loss=stop_loss_percent) if strategy.position_size < 0 and take_profit_percent strategy.exit(id='tp short',from_entry="short",profit = take_profit_percent)