Sumber dimuat naik... memuat...

Strategi Kuantitatif Melalui SMA Trend Jangka Panjang

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

img

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif berdasarkan isyarat crossover purata bergerak mudah (SMA) pelbagai tempoh. Ia terutamanya mengenal pasti peluang pulback dalam aliran menaik jangka panjang. Strategi ini menggunakan SMA lima tempoh yang berbeza (5, 10, 20, 60, dan 120 hari) untuk menentukan trend pasaran dan peluang perdagangan melalui kedudukan relatif dan isyarat crossover.

Prinsip Strategi

Logik teras merangkumi beberapa komponen utama:

  1. Penentuan trend jangka panjang melalui kedudukan relatif SMA20 dan SMA60, mengesahkan trend menaik apabila SMA20 di atas SMA60.
  2. Isyarat beli diaktifkan apabila SMA5 jangka pendek melintasi di atas SMA20 selepas penurunan, yang menunjukkan rebound dalam trend menaik.
  3. Isyarat keluar berlaku apabila SMA20 melintasi di atas SMA5, menunjukkan kelemahan momentum jangka pendek.
  4. Strategi ini termasuk fungsi penapis masa untuk mengehadkan tempoh backtesting, meningkatkan fleksibiliti.

Kelebihan Strategi

  1. Logik yang jelas dan mudah difahami dan dilaksanakan, mengelakkan pengiraan yang rumit.
  2. Penapisan bunyi bising yang berkesan melalui penggunaan purata bergerak pelbagai tempoh, meningkatkan kebolehpercayaan isyarat.
  3. Fokus pada peluang penurunan dalam pasaran trend, sejajar dengan prinsip utama trend-mengikuti.
  4. Penggunaan SMA bukannya EMA mengurangkan kepekaan harga dan isyarat palsu.
  5. Logik masuk dan keluar yang jelas memudahkan pelaksanaan dan pengurusan risiko.

Risiko Strategi

  1. Kelewatan dalam sistem purata bergerak boleh menyebabkan masa masuk dan keluar yang kurang optimum.
  2. Persalinan yang kerap di pasaran yang berbeza boleh menghasilkan isyarat palsu yang berlebihan.
  3. Kekurangan mekanisme penapisan turun naik mendedahkan strategi kepada risiko pengambilan yang signifikan dalam tempoh turun naik yang tinggi.
  4. Kebolehpercayaan isyarat boleh dikompromikan tanpa pengesahan jumlah.
  5. Parameter purata bergerak tetap mungkin tidak sesuai dengan semua keadaan pasaran.

Arahan pengoptimuman

  1. Melaksanakan penunjuk ATR untuk penapisan turun naik untuk mengelakkan perdagangan dalam tempoh turun naik yang tinggi.
  2. Memasukkan mekanisme pengesahan jumlah untuk meningkatkan kebolehpercayaan isyarat.
  3. Membangunkan tempoh purata bergerak adaptif untuk lebih sesuai dengan persekitaran pasaran yang berbeza.
  4. Tambah penapis kekuatan trend, seperti penunjuk ADX, untuk memastikan perdagangan hanya dalam trend yang kuat.
  5. Mempertingkatkan mekanisme stop-loss, termasuk trailing stops, untuk kawalan risiko yang lebih baik.

Ringkasan

Strategi ini membina sistem perdagangan yang memberi tumpuan untuk menangkap peluang pulback dalam trend menaik jangka panjang melalui penggunaan SMA berbilang tempoh yang diselaraskan. Reka bentuknya praktikal dan mudah, menawarkan pemahaman dan pelaksanaan yang baik. Kekuatan dan kebolehpercayaan strategi dapat ditingkatkan lagi melalui pengenalan penapisan turun naik, pengesahan jumlah, dan langkah pengoptimuman lain.


/*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 lanjut