Momentum Moving Average Crossover Quant Strategi

Penulis:ChaoZhangTanggal: 2024-01-26 11:39:26
Tag:

img

Gambaran umum

Strategi ini menggabungkan indikator rata-rata bergerak dan volume perdagangan untuk merancang aturan masuk dan keluar yang panjang dan pendek, membentuk strategi perdagangan kuantitatif yang lengkap.

Prinsip Strategi

Indikator Utama

  1. Rata-rata bergerak: MA cepat (garis biru) dan MA lambat (garis merah)
  2. Volume: Volume 24 jam (Purple) dan Volume Rata-rata 7 hari (Orange)

Kondisi Strategi

Kondisi masuk panjang:

  1. MA cepat melintasi MA lambat
  2. Volume 24 jam di bawah 50% dari Volume Rata-rata 7 hari

Syarat masuk singkat:

MA cepat melintas di bawah MA lambat

Masuk dan Keluar

Entri panjang:Pergi panjang ketika kondisi panjang terpenuhi

Pendahuluan singkat:Berjalan pendek ketika kondisi pendek terpenuhi

Ambil Keuntungan dan Hentikan Kerugian:Ditampilkan tingkat mengambil keuntungan dan stop loss untuk posisi panjang

Analisis Keuntungan

  1. Menggabungkan harga dan volume menghindari pecah palsu
  2. Aturan masuk dan keluar yang jelas
  3. Ambil keuntungan dan stop loss untuk mengendalikan risiko

Analisis Risiko

  1. Perdagangan sering dengan strategi rata-rata bergerak
  2. Kualitas data volume yang tidak dapat diandalkan
  3. Overoptimasi dalam pengaturan parameter

Peningkatan:

  1. Sesuaikan parameter MA untuk mengurangi frekuensi perdagangan
  2. Memverifikasi sinyal dengan lebih banyak sumber data
  3. Pengujian backtesting yang ketat untuk mencegah overoptimization

Arahan Optimasi

  1. Tambahkan indikator lain ke sinyal filter
  2. Dinamis mengambil keuntungan dan stop loss
  3. Analisis beberapa kerangka waktu untuk meningkatkan stabilitas

Ringkasan

Strategi ini mengintegrasikan indikator MA dan volume untuk merancang strategi kuantum lengkap dengan kondisi masuk yang jelas, mengambil keuntungan / stop loss, mudah dioperasikan. Perlu mencegah masalah perdagangan yang sering terjadi, memantau kualitas data volume dan overoptimasi. Langkah selanjutnya adalah optimasi multivariate, TP / SL dinamis dan analisis beberapa kerangka waktu.


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

//@version=5
strategy("MA and Volume Strategy", overlay=true)

// Input parameters
fastLength = input(9, title="Fast MA Length")
slowLength = input(21, title="Slow MA Length")
volumePercentageThreshold = input(50, title="Volume Percentage Threshold")

// Calculate moving averages
fastMA = ta.sma(close, fastLength)
slowMA = ta.sma(close, slowLength)

// Calculate 24-hour volume and weekly volume average
dailyVolume = request.security(syminfo.tickerid, "D", volume)
weeklyVolumeAvg = ta.sma(request.security(syminfo.tickerid, "W", volume), 7)

// Strategy conditions
longCondition = ta.crossover(fastMA, slowMA) and dailyVolume < (weeklyVolumeAvg * volumePercentageThreshold / 100)
shortCondition = ta.crossunder(fastMA, slowMA)

// Set take profit and stop loss levels
takeProfitLong = close * 1.50
stopLossLong = close * 0.90

// Strategy orders
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)

// Plot moving averages
plot(fastMA, color=color.blue, title="Fast MA")
plot(slowMA, color=color.red, title="Slow MA")

// Plot 24-hour volume and weekly volume average
plot(dailyVolume, color=color.purple, title="24-Hour Volume", transp=0)
plot(weeklyVolumeAvg, color=color.orange, title="Weekly Volume Average")

// Plot entry signals
plotshape(series=longCondition, title="Buy Signal", color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=shortCondition, title="Sell Signal", color=color.red, style=shape.triangledown, size=size.small)

// Plot take profit and stop loss levels only when a valid trade is active
plotshape(series=longCondition, title="Take Profit Long", color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=longCondition, title="Stop Loss Long", color=color.red, style=shape.triangledown, size=size.small)


Lebih banyak