Strategi Perdagangan Kuantitatif Berdasarkan SMA dan Rolling Trendline

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

img

Gambaran umum

Strategi ini menggabungkan Simple Moving Average (SMA) dan rolling linear regression trendline. Strategi ini menetapkan kondisi masuk panjang ketika harga penutupan berada di atas SMA dan trendline, dan kondisi keluar ketika harga penutupan berada di bawahnya. Strategi ini terutama menggunakan SMA sebagai sinyal perdagangan dan garis tren rolling untuk dukungan saluran.

Logika Strategi

Komponen utama dari strategi ini meliputi:

  1. SMA: Rata-rata bergerak sederhana, menghitung harga penutupan rata-rata selama periode (smaPeriod) sebagai garis sinyal.

  2. Rolling Trendline: Memasang garis regresi linier terbaik di atas jendela (jendela) sebagai sinyal tren. Dihitung dengan metode Ordinary Least Square.

  3. Kondisi masuk: pergi panjang ketika harga tutup > SMA dan garis tren.

  4. Kondisi keluar: Penutupan posisi ketika harga penutupan < SMA dan garis tren.

Jadi strategi ini terutama mengandalkan sinyal SMA untuk masuk, dan saluran breakout untuk keluar.

Analisis Keuntungan

Strategi ini mengintegrasikan filter ganda MA dan trendline, yang secara efektif dapat mengurangi perdagangan breakout palsu. Sementara itu, trendline rolling memberikan dukungan saluran yang lebih tepat untuk keputusan yang dapat diandalkan. Keuntungan utama meliputi:

  1. Mekanisme filter ganda menghindari kebocoran palsu dan meningkatkan akurasi keputusan.
  2. Rolling trendline menawarkan dukungan saluran dinamis untuk perdagangan saluran yang lebih akurat.
  3. Logika perdagangan yang sederhana dan intuitif, mudah dipahami dan diterapkan.
  4. Parameter yang dapat disesuaikan beradaptasi dengan lingkungan pasar yang berbeda.

Analisis Risiko

Ada juga beberapa risiko dari strategi ini:

  1. Parameter SMA dan trendline yang tidak tepat dapat menyebabkan perdagangan yang hilang atau terlalu banyak false breakout.
  2. Di pasar yang sangat volatile, dukungan saluran oleh SMA dan trendline dapat melemah.
  3. Kegagalan breakout dapat menyebabkan kerugian, diperlukan stop loss yang ketat.

Beberapa arah optimasi untuk risiko ini:

  1. Mengoptimalkan parameter untuk produk yang berbeda.
  2. Meningkatkan stop loss range untuk mengurangi single loss.
  3. Menunda perdagangan di pasar yang tidak stabil untuk menghindari terjebak.

Optimasi Strategi

Strategi ini dapat dioptimalkan dalam aspek berikut:

  1. Tambahkan fungsi penyesuaian dinamis untuk periode SMA, parameter slippage berdasarkan rezim pasar.

  2. Mengembangkan mekanisme stop loss yang elastis. Menetapkan stop loss ketika harga melanggar garis tren pada rasio.

  3. Tambahkan filter dari indikator lain misalnya Volume, RSI untuk meningkatkan akurasi keputusan.

  4. Pergi panjang ketika harga mendekati dasar dan memecahkan saluran ke bawah.

Kesimpulan

Strategi ini mengintegrasikan sinyal perdagangan dari moving average dan channel support dari rolling trendline untuk mengimplementasikan trend following operations. Filter ganda mengurangi probabilitas false breakout dan meningkatkan kualitas keputusan. Strategi ini memiliki pengaturan parameter sederhana dan logika yang jelas, yang mudah diimplementasikan dan dioptimalkan.


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