Strategi Dagangan Kuantitatif Berdasarkan SMA dan Trendline Rolling

Penulis:ChaoZhang, Tarikh: 2024-02-04 15:18:12
Tag:

img

Ringkasan

Strategi ini menggabungkan purata bergerak mudah (SMA) dan garis trend regresi linear bergulir. Ia menetapkan syarat masuk panjang apabila harga penutupan berada di atas kedua-dua SMA dan garis trend, dan keadaan keluar apabila harga penutupan berada di bawah mereka. Strategi ini terutamanya menggunakan SMA sebagai isyarat perdagangan dan garis trend bergulir untuk sokongan saluran. Ia memasuki perdagangan apabila pecah saluran menaik dan keluar apabila pecah saluran ke bawah.

Logika Strategi

Komponen utama strategi ini termasuk:

  1. SMA: Purata bergerak mudah, mengira harga penutupan purata dalam tempoh (smaPeriod) sebagai garis isyarat.

  2. Rolling Trendline: Memasang garis regresi linear terbaik di atas tetingkap (tetingkap) sebagai isyarat trend. Dihitung dengan kaedah Kuadrat Kecil Biasa.

  3. Syarat kemasukan: Pergi panjang apabila harga tutup > SMA dan trendline.

  4. Keadaan keluar: Penutupan kedudukan apabila harga penutupan < SMA dan trendline.

Oleh itu, strategi ini terutamanya bergantung kepada gangguan isyarat SMA untuk masuk, dan gangguan saluran untuk keluar.

Analisis Kelebihan

Strategi ini mengintegrasikan penapis ganda MA dan trendline, yang dapat mengurangkan perdagangan pecah palsu dengan berkesan. Sementara itu, trendline bergulir memberikan sokongan saluran yang lebih tepat untuk keputusan yang boleh dipercayai. Kelebihan utama termasuk:

  1. Mekanisme penapis berganda mengelakkan pecah palsu dan meningkatkan ketepatan keputusan.
  2. Garis trend bergulir menawarkan sokongan saluran dinamik untuk perdagangan saluran yang lebih tepat.
  3. Logik perdagangan yang mudah dan intuitif, mudah difahami dan dilaksanakan.
  4. Parameter yang boleh disesuaikan menyesuaikan diri dengan persekitaran pasaran yang berbeza.

Analisis Risiko

Terdapat juga beberapa risiko strategi ini:

  1. Parameter SMA dan trendline yang tidak betul boleh menyebabkan perdagangan yang hilang atau terlalu banyak pecah palsu.
  2. Dalam pasaran yang sangat tidak menentu, sokongan saluran oleh SMA dan trendline mungkin melemah.
  3. Kegagalan keluar boleh membawa kepada kerugian, perlu stop loss yang ketat.

Beberapa arah optimum untuk risiko ini:

  1. Mengoptimumkan parameter untuk produk yang berbeza.
  2. Meningkatkan julat stop loss untuk mengurangkan kerugian tunggal.
  3. Hentikan perdagangan di pasaran yang tidak stabil untuk mengelakkan terperangkap.

Pengoptimuman Strategi

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Tambah fungsi pelarasan dinamik untuk tempoh SMA, parameter slippage berdasarkan rejimen pasaran.

  2. Membangunkan mekanisme stop loss yang elastik. Tetapkan stop loss apabila harga memecahkan trendline pada nisbah.

  3. Tambah penapis dari penunjuk lain seperti Volume, RSI untuk meningkatkan ketepatan keputusan.

  4. Berjaya untuk berdagang lama apabila harga mendekati paras terendah dan memecahkan saluran ke bawah.

Kesimpulan

Strategi ini mengintegrasikan isyarat dagangan dari purata bergerak dan sokongan saluran dari garis trend bergulir untuk melaksanakan operasi trend berikut. Penapis berganda mengurangkan kebarangkalian pecah palsu dan meningkatkan kualiti keputusan. Ia mempunyai tetapan parameter yang mudah dan logik yang jelas, yang mudah dilaksanakan dan dioptimumkan. Ringkasnya, strategi ini membentuk sistem perdagangan pecah trend yang boleh dipercayai, mudah dan intuitif.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SMA Strategy with Rolling Trendline", overlay=true)

// Input parameters
smaPeriod = input(14, title="SMA Period")
window = input(20, title="Trendline Window")
startDate = input(timestamp("2023-01-01"), title="Start Date")
endDate = input(timestamp("2023-12-31"), title="End Date")

// Calculating SMA
sma = sma(close, smaPeriod)

// Function to calculate linear regression trendline for a window
linreg_trendline(window) =>
    sumX = 0.0
    sumY = 0.0
    sumXY = 0.0
    sumX2 = 0.0
    for i = 0 to window - 1
        sumX := sumX + i
        sumY := sumY + close[i]
        sumXY := sumXY + i * close[i]
        sumX2 := sumX2 + i * i
    slope = (window * sumXY - sumX * sumY) / (window * sumX2 - sumX * sumX)
    intercept = (sumY - slope * sumX) / window
    slope * (window - 1) + intercept

// Calculating the trendline
trendline = linreg_trendline(window)

// Entry and Exit Conditions
longCondition = close > sma and close < trendline
exitLongCondition = close < sma and close > trendline

// Strategy logic
if (true)
    if (longCondition)
        strategy.entry("Long", strategy.long)
    if (exitLongCondition)
        strategy.close("Long")

// Plotting
plot(sma, title="Simple Moving Average", color=color.blue)
plot(trendline, title="Rolling Trendline", color=color.red)
plotshape(series=longCondition, title="Enter Trade", location=location.belowbar, color=color.green, style=shape.triangleup)
plotshape(series=exitLongCondition, title="Exit Trade", location=location.abovebar, color=color.red, style=shape.triangledown)


Lebih lanjut