Aliran jangka panjang strategi kuantitatif persilangan purata SMA bergerak

SMA EMA
Tarikh penciptaan: 2025-01-06 17:01:08 Akhirnya diubah suai: 2025-01-06 17:01:08
Salin: 3 Bilangan klik: 432
1
fokus pada
1617
Pengikut

Aliran jangka panjang strategi kuantitatif persilangan purata SMA bergerak

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan kuantitatif berdasarkan isyarat silang berbilang tempoh purata bergerak mudah (SMA). Ia terutamanya berdagang dengan mengenal pasti peluang penarikan balik jangka pendek dalam aliran menaik jangka panjang. Strategi ini menggunakan penunjuk SMA dengan lima tempoh 5 hari, 10 hari, 20 hari, 60 hari dan 120 hari untuk menilai arah aliran pasaran dan peluang dagangan melalui hubungan kedudukan dan isyarat silang bagi purata bergerak.

Prinsip Strategi

Logik teras strategi merangkumi bahagian penting berikut:

  1. Aliran jangka panjang boleh dinilai oleh hubungan kedudukan relatif antara SMA20 dan SMA60 Apabila SMA20 berada di atas SMA60, ia disahkan bahawa pasaran berada dalam aliran menaik.
  2. Pada premis untuk mengesahkan aliran menaik jangka panjang, isyarat beli dicetuskan apabila SMA5 jangka pendek melantun dari bawah SMA20 ke atas. Ini menunjukkan bahawa pasaran melantun semula selepas penarikan balik jangka pendek dalam aliran menaik.
  3. Apabila SMA20 melintasi SMA5, isyarat penutupan dicetuskan. Ini menunjukkan bahawa momentum menaik jangka pendek telah lemah dan mungkin memasuki tempoh pelarasan.
  4. Strategi ini juga termasuk fungsi penapis masa, yang boleh mengehadkan julat masa ujian belakang dan meningkatkan fleksibiliti strategi.

Kelebihan Strategik

  1. Logik strategi adalah jelas dan mudah, mudah difahami dan dilaksanakan, serta tidak melibatkan proses pengiraan yang rumit.
  2. Dengan menggunakan purata pergerakan berbilang tempoh dalam penyelarasan, kami boleh menapis bunyi pasaran dengan berkesan dan meningkatkan kebolehpercayaan isyarat dagangan.
  3. Strategi ini memberi tumpuan kepada peluang penarikan balik dalam pasaran trend, yang selaras dengan konsep teras “trading trend”.
  4. Menggunakan SMA dan bukannya EMA mengurangkan sensitiviti kepada perubahan harga dan mengurangkan isyarat palsu.
  5. Logik masuk dan keluar adalah jelas, yang memudahkan pelaksanaan dan kawalan risiko.

Risiko Strategik

  1. Sistem purata bergerak mempunyai ketinggalan, yang boleh membawa kepada masa masuk dan keluar yang tidak optimum.
  2. Dalam pasaran yang tidak menentu, persilangan purata bergerak yang kerap boleh menghasilkan terlalu banyak isyarat palsu.
  3. Strategi ini tidak mempunyai mekanisme penapisan turun naik dan mungkin menghadapi risiko pengeluaran yang lebih besar semasa tempoh turun naik yang tinggi.
  4. Tanpa mengambil kira kerjasama penunjuk teknikal lain seperti volum dagangan, kebolehpercayaan isyarat perlu dipertingkatkan.
  5. Parameter purata bergerak tetap mungkin tidak sesuai untuk semua persekitaran pasaran.

Arah pengoptimuman strategi

  1. Memperkenalkan penunjuk ATR untuk penapisan turun naik dan elakkan dagangan apabila turun naik terlalu tinggi.
  2. Tambah mekanisme pengesahan volum untuk meningkatkan kebolehpercayaan isyarat dagangan.
  3. Membangunkan mekanisme kitaran purata bergerak adaptif untuk membolehkan strategi menyesuaikan diri dengan lebih baik kepada persekitaran pasaran yang berbeza.
  4. Tambahkan penapis kekuatan arah aliran, seperti penunjuk ADX, untuk memastikan dagangan dalam arah aliran yang kukuh.
  5. Tingkatkan mekanisme henti rugi, seperti menambah hentian mengekor, untuk mengawal risiko dengan lebih baik.

ringkaskan

Strategi ini menggunakan purata bergerak SMA berbilang tempoh untuk membina sistem perdagangan yang memfokuskan pada menangkap peluang penarikan balik dalam arah aliran menaik jangka panjang. Reka bentuk strategi adalah ringkas dan praktikal, dengan kebolehfahaman dan kebolehlaksanaan yang baik. Dengan memperkenalkan langkah pengoptimuman seperti penapisan turun naik dan pengesahan volum, keteguhan dan kebolehpercayaan strategi dijangka akan dipertingkatkan lagi.

Kod 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")