Sumber daya yang dimuat... Pemuatan...

Strategi kuantitatif lintas SMA tren jangka panjang

Penulis:ChaoZhang, Tanggal: 2025-01-06 17:01:08
Tag:SMAEMA

img

Gambaran umum

Strategi ini adalah sistem perdagangan kuantitatif yang didasarkan pada sinyal crossover Simple Moving Average (SMA) multi-periode. Strategi ini terutama mengidentifikasi peluang pullback dalam tren naik jangka panjang. Strategi ini menggunakan SMA dari lima periode yang berbeda (5, 10, 20, 60, dan 120 hari) untuk menentukan tren pasar dan peluang perdagangan melalui posisi relatif dan sinyal crossover.

Prinsip Strategi

Logika inti mencakup beberapa komponen utama:

  1. Identifikasi tren jangka panjang melalui posisi relatif SMA20 dan SMA60, mengkonfirmasi tren naik ketika SMA20 berada di atas SMA60.
  2. Sinyal beli dipicu ketika SMA5 jangka pendek melintasi SMA20 setelah pullback, menunjukkan rebound dalam tren naik.
  3. Sinyal keluar terjadi ketika SMA20 melintasi SMA5, menunjukkan melemahnya momentum jangka pendek.
  4. Strategi ini mencakup fungsi filter waktu untuk membatasi periode backtesting, meningkatkan fleksibilitas.

Keuntungan Strategi

  1. Logika yang jelas dan sederhana yang mudah dimengerti dan diterapkan, menghindari perhitungan yang rumit.
  2. Menyaring kebisingan yang efektif melalui penggunaan rata-rata bergerak multi periode, meningkatkan keandalan sinyal.
  3. Fokus pada peluang mundur dalam tren pasar, selaras dengan prinsip-prinsip inti trend-mengikuti.
  4. Penggunaan SMA alih-alih EMA mengurangi sensitivitas harga dan sinyal palsu.
  5. Logika masuk dan keluar yang jelas memfasilitasi pelaksanaan dan manajemen risiko.

Risiko Strategi

  1. Kelewatan yang melekat pada sistem rata-rata bergerak dapat menyebabkan waktu masuk dan keluar yang tidak optimal.
  2. Crossover yang sering terjadi di berbagai pasar dapat menghasilkan sinyal palsu yang berlebihan.
  3. Kurangnya mekanisme penyaringan volatilitas mengekspos strategi terhadap risiko penarikan yang signifikan pada periode volatilitas tinggi.
  4. Keandalan sinyal dapat dikompromikan tanpa konfirmasi volume.
  5. Parameter rata-rata bergerak tetap mungkin tidak sesuai dengan semua kondisi pasar.

Arahan Optimasi

  1. Menerapkan indikator ATR untuk penyaringan volatilitas untuk menghindari perdagangan pada periode volatilitas tinggi.
  2. Menggabungkan mekanisme konfirmasi volume untuk meningkatkan keandalan sinyal.
  3. Mengembangkan periode rata-rata bergerak adaptif untuk lebih sesuai dengan lingkungan pasar yang berbeda.
  4. Tambahkan filter kekuatan tren, seperti indikator ADX, untuk memastikan perdagangan hanya dalam tren yang kuat.
  5. Meningkatkan mekanisme stop loss, termasuk trailing stop, untuk pengendalian risiko yang lebih baik.

Ringkasan

Strategi ini membangun sistem perdagangan yang berfokus pada menangkap peluang pullback dalam tren naik jangka panjang melalui penggunaan terkoordinasi SMA multi-periode. Desainnya praktis dan mudah, menawarkan pemahaman dan pelaksanaan yang baik. Kekuatan dan keandalan strategi dapat ditingkatkan lebih lanjut melalui pengenalan penyaringan volatilitas, konfirmasi volume, dan langkah-langkah pengoptimalan lainnya.


/*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")

Berkaitan

Lebih banyak