Strategi kuantitatif crossover rata-rata pergerakan SMA tren jangka panjang

SMA EMA
Tanggal Pembuatan: 2025-01-06 17:01:08 Akhirnya memodifikasi: 2025-01-06 17:01:08
menyalin: 3 Jumlah klik: 432
1
fokus pada
1617
Pengikut

Strategi kuantitatif crossover rata-rata pergerakan SMA tren jangka panjang

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif berdasarkan sinyal persilangan rata-rata pergerakan sederhana (SMA) multi-periode. Ia terutama berdagang dengan mengidentifikasi peluang kemunduran jangka pendek dalam tren naik jangka panjang. Strategi ini menggunakan indikator SMA dengan lima periode: 5 hari, 10 hari, 20 hari, 60 hari, dan 120 hari untuk menilai tren pasar dan peluang perdagangan melalui hubungan posisi dan sinyal persilangan rata-rata pergerakan.

Prinsip Strategi

Logika inti dari strategi ini mencakup bagian-bagian utama berikut:

  1. Tren jangka panjang dapat dinilai dari hubungan posisi relatif antara SMA20 dan SMA60. Jika SMA20 berada di atas SMA60, dipastikan bahwa pasar sedang dalam tren naik.
  2. Atas dasar konfirmasi tren naik jangka panjang, sinyal beli dipicu saat SMA5 jangka pendek pulih dari bawah SMA20 ke atas. Hal ini menunjukkan pasar sedang bangkit kembali setelah kemunduran jangka pendek dalam tren naik.
  3. Ketika SMA20 melintasi SMA5, sinyal penutupan dipicu. Hal ini menunjukkan bahwa momentum kenaikan jangka pendek telah melemah dan mungkin memasuki periode penyesuaian.
  4. Strategi ini juga menyertakan fungsi filter waktu, yang dapat membatasi rentang waktu pengujian ulang dan meningkatkan fleksibilitas strategi.

Keunggulan Strategis

  1. Logika strategi jelas dan sederhana, mudah dipahami dan diterapkan, serta tidak melibatkan proses perhitungan yang rumit.
  2. Dengan menggunakan beberapa rata-rata pergerakan periode dalam koordinasi, kami dapat secara efektif menyaring gangguan pasar dan meningkatkan keandalan sinyal perdagangan.
  3. Strategi ini berfokus pada peluang kemunduran di pasar yang sedang tren, yang sejalan dengan konsep inti “perdagangan tren”.
  4. Menggunakan SMA alih-alih EMA mengurangi sensitivitas terhadap perubahan harga dan mengurangi sinyal palsu.
  5. Logika masuk dan keluar jelas, yang memudahkan eksekusi dan pengendalian risiko.

Risiko Strategis

  1. Sistem rata-rata bergerak memiliki kelambatan, yang dapat menyebabkan waktu masuk dan keluar yang tidak optimal.
  2. Dalam pasar yang fluktuatif, persilangan rata-rata pergerakan yang sering terjadi dapat menghasilkan terlalu banyak sinyal palsu.
  3. Strategi ini tidak memiliki mekanisme penyaringan volatilitas dan mungkin menghadapi risiko penurunan yang lebih besar selama periode volatilitas tinggi.
  4. Tanpa mempertimbangkan kerja sama indikator teknis lainnya seperti volume perdagangan, keandalan sinyal perlu ditingkatkan.
  5. Parameter rata-rata pergerakan tetap mungkin tidak cocok untuk semua lingkungan pasar.

Arah optimasi strategi

  1. Perkenalkan indikator ATR untuk penyaringan volatilitas dan hindari perdagangan saat volatilitas terlalu tinggi.
  2. Tambahkan mekanisme konfirmasi volume untuk meningkatkan keandalan sinyal perdagangan.
  3. Mengembangkan mekanisme siklus rata-rata pergerakan adaptif untuk memungkinkan strategi beradaptasi lebih baik terhadap berbagai lingkungan pasar.
  4. Tambahkan filter kekuatan tren, seperti indikator ADX, untuk memastikan perdagangan dalam tren yang kuat.
  5. Memperbaiki mekanisme stop-loss, seperti menambahkan trailing stop, untuk mengendalikan risiko dengan lebih baik.

Meringkaskan

Strategi ini menggunakan rata-rata pergerakan SMA multiperiode untuk membangun sistem perdagangan yang berfokus pada penangkapan peluang kemunduran dalam tren naik jangka panjang. Desain strateginya ringkas dan praktis, dengan pemahaman dan penerapan yang baik. Dengan memperkenalkan langkah-langkah pengoptimalan seperti penyaringan volatilitas dan konfirmasi volume, ketahanan dan keandalan strategi diharapkan dapat lebih ditingkatkan.

Kode Sumber Strategi
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Long-Term Growing Stock Strategy", overlay=true)
// Date Range
// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2014"),title="Start Date", group="Backtest Time Period",tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " +"zone of the chart or of your computer.")
backtestEndDate = input(timestamp("31 Dec 2024"), title="End Date", group="Backtest Time Period")
// STEP 2. See if current bar falls inside the date range
inTradeWindow = true


// Calculate EMAs
// ema20 = ta.ema(close, ema20_length)
// ema60 = ta.ema(close, ema60_length)
// ema120 = ta.ema(close, ema120_length)
sma5 = ta.sma(close, 5)
sma10 = ta.sma(close, 10)
sma20 = ta.sma(close, 20)
sma60 = ta.sma(close, 60)
sma120 = ta.sma(close, 120)

// Long-term growth condition: EMA 20 > EMA 60 > EMA 120
longTermGrowth = sma20 > sma60
//  and ema60 > ema120

// Entry condition: Stock closes below EMA 20 and then rises back above EMA 10

// entryCondition = ta.crossover(close, ema20) or (close[1] < ema20[1] and close > ema20)
entryCondition =  sma5[1] <= sma20[1] and sma5 > sma20
// ta.crossover(sma5, sma20)

// Exit condition: EMA 20 drops below EMA 60
// exitCondition = ema5 < ema60 or (year == 2024 and month == 12 and dayofmonth == 30)
exitCondition = ta.crossover(sma20, sma5)

// Execute trades
if entryCondition and inTradeWindow
    strategy.entry("Long Entry", strategy.long)

if exitCondition and inTradeWindow
    strategy.close("Long Entry")
// plotchar(true, char="sma5: " + str.tostring(sma5))
// plotchar(true, char="sma5: " + sma20)
// label.new(x=bar_index, y=high + 10, text="SMA 5: " + str.tostring(sma5), color=color.blue, style=label.style_label_down, textcolor=color.white, size=size.small)
// label.new(x=bar_index, y=low, text="SMA 20: " + str.tostring(sma20), color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)


// x = time + (time - time[1]) * offset_x

//     var label lab = na
//     label.delete(lab)
//     lab := label.new(x=x, y=0, text=txt, xloc=xloc.bar_time, yloc=yloc.belowbar, color=color.red, textcolor=color.black, size=size.normal, style=label.style_label_up)
//     label.set_x(lab, x)



// Plot EMAs for visualization
// plot(ema20, color=color.red, title="EMA 20")
// plot(ema60, color=color.green, title="EMA 60")
// plot(ema120, color=color.blue, title="EMA 120")