Zhukov Moving Average Crossover Trend Mengikuti Strategi

Penulis:ChaoZhang, Tanggal: 2023-12-12 12:24:11
Tag:

img

Gambaran umum

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.

Logika Strategi

Strategi ini terutama didasarkan pada dua indikator teknis:

  1. 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.

  2. 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.

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Hanya berdagang ketika ATR mengidentifikasi tren, yang membantu menghindari dihancurkan selama rezim non-arah.

  2. Menggunakan logika crossover EMA cepat vs lambat untuk mengidentifikasi sinyal perdagangan.

  3. Sensitivitas dan kelancaran EMA yang dapat disesuaikan melalui penyesuaian parameter.

  4. Sistem perdagangan otomatis lengkap dibangun dengan hanya dua indikator sederhana, mudah diimplementasikan di editor Pine.

  5. Kebutuhan minimal untuk tweaking parameter yang sedang berlangsung, pendekatan set and forget.

Analisis Risiko

Beberapa risiko yang perlu diperhatikan meliputi:

  1. Crossover EMA dapat menghasilkan sinyal palsu, menyebabkan kerugian yang tidak perlu.

  2. Penghakiman tren ATR juga dapat rentan terhadap kesalahan, kehilangan peluang perdagangan.

  3. 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.

Arahan Optimasi

Arah optimasi utama meliputi:

  1. Menambahkan indikator lain untuk menciptakan sistem gabungan dan meningkatkan akurasi sinyal.

  2. Memilih parameter EMA dan ATR yang lebih cocok untuk pasar tertentu berdasarkan simbol dan kerangka waktu yang diperdagangkan.

  3. Menerapkan optimasi parameter dinamis melalui pembelajaran mesin untuk menyesuaikan indikator berdasarkan kondisi pasar saat ini alih-alih menggunakan nilai statis tetap.

Kesimpulan

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)


Lebih banyak