Momentum Dual Moving Average Crossover Strategi

Penulis:ChaoZhang, Tanggal: 2023-10-20 16:44:30
Tag:

img

Gambaran umum

Strategi ini menggunakan persilangan rata-rata bergerak untuk menentukan arah momentum harga, dilengkapi dengan persilangan emas / kematian untuk menilai tren keseluruhan, untuk menerapkan tren berikut.

Logika Strategi

Strategi ini menggunakan EMA dan SMA crossover untuk menentukan arah momentum harga. EMA bereaksi lebih cepat sementara SMA bereaksi lebih stabil. Ketika EMA melintasi di atas SMA, diputuskan bahwa momentum upside kuat, pergi panjang. Ketika EMA melintasi di bawah SMA, diputuskan bahwa momentum downside kuat, pergi pendek.

Selain itu, strategi ini juga menggunakan persilangan SMA periode cepat dan SMA periode lambat untuk menentukan arah tren keseluruhan. Ketika SMA cepat melintasi SMA lambat, itu adalah salib emas, yang menunjukkan pasar berada dalam tren naik jangka panjang. Ketika SMA cepat melintasi di bawah SMA lambat, itu adalah salib kematian, yang menunjukkan pasar berada dalam tren penurunan jangka panjang.

Strategi ini mengidentifikasi peluang panjang ketika EMA melintasi SMA. Jika itu adalah salib emas pada saat ini, itu berarti pergi panjang didukung oleh momentum jangka pendek dan tren jangka panjang, yang merupakan waktu yang lebih baik.

Analisis Keuntungan

  • Menggunakan persilangan MA untuk menilai momentum harga dan arah
  • Pertimbangkan momentum jangka pendek dan tren jangka panjang
  • Konfirmasi indikator ganda meningkatkan keandalan
  • Dapat disesuaikan dengan periode yang berbeda dengan menyesuaikan parameter MA
  • Disesuaikan untuk menampilkan/menyembunyikan sinyal perdagangan tertentu

Analisis Risiko

  • MA crossover memiliki keterlambatan, mungkin melewatkan titik masuk/keluar terbaik
  • SMA periode tetap tidak dapat mencerminkan perubahan harga secara real time
  • Crossover yang salah mungkin terjadi antara MA jangka panjang/pendek
  • Holding jangka panjang dapat meningkatkan risiko modal

Risiko dapat dikurangi dengan menggabungkan indikator lain untuk konfirmasi sinyal, mengoptimalkan periode MA, atau mengatur stop loss.

Arahan Optimasi

  • Tambahkan filter lain seperti volume, Bollinger Bands dll.
  • Tambahkan strategi stop loss
  • Mengoptimalkan periode MA
  • Mengoptimalkan manajemen modal
  • Pertimbangkan ukuran posisi dinamis

Kesimpulan

Secara keseluruhan, ini adalah strategi trend following yang relatif stabil dan dapat diandalkan. Ini mempertimbangkan momentum harga jangka pendek dan arah tren jangka panjang, menghasilkan sinyal perdagangan melalui penyeberangan MA. Dibandingkan dengan strategi MA tunggal, ia memiliki keandalan yang lebih tinggi dengan menggabungkan indikator ganda untuk konfirmasi. Tetapi sebagai strategi trend following, optimasi parameter dan pengendalian risiko sangat penting. Ini membutuhkan pengujian dan penyetelan berulang untuk benar-benar mewujudkan potensinya. Dengan optimasi dan perbaikan berkelanjutan, strategi ini dapat menjadi komponen berharga dari portofolio investasi kuantitatif jangka panjang.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Cryptoluc1d

//@version=4
strategy("Equal-Length EMA/SMA Crossover Strategy", initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=25, commission_type=strategy.commission.percent, commission_value=0.2, overlay=true)

// Create inputs

mom_length = input(title="Momentum Length (EMA=SMA)", defval=50)
bias_length_fast  = input(title="Golden Cross Length (Fast)", defval=50)
bias_length_slow  = input(title="Golden Cross Length (Slow)", defval=100)

// Define MAs

ema = ema(close, mom_length) // EMA/SMA crossover of the same period for detecting trend acceleration/deceleration
sma = sma(close, mom_length)
bias_fast = sma(close, bias_length_fast) // golden/death cross for overall trend bias
bias_slow = sma(close, bias_length_slow)

// Define signal conditions

buy_trend = crossover(ema, sma) and bias_fast >= bias_slow // buy when EMA cross above SMA. if this happens during a bullish golden cross, buying is in confluence with the overall trend (bias).
buy_risky = crossover(ema, sma) and bias_fast < bias_slow // buy when EMA cross above SMA. if this happens during a bearish death cross, buying is early, more risky, and not in confluence with the overall trend (bias).
buy_late = crossover(sma, bias_slow) and ema > sma // the SMA crossing the Slow_SMA gives further confirmation of bullish trend, but signal comes later.
sell = crossunder(ema, sma) // sell when EMA cross under SMA.

// Enable option to hide signals, then plot signals

show_signal = input(title="Show Signals", defval=true)

plotshape(show_signal ? buy_trend : na, title='Trend Buy', style=shape.triangleup, location=location.belowbar, color=color.green, text='TREND BUY')
plotshape(show_signal ? buy_risky : na, title='Risky Buy', style=shape.triangleup, location=location.belowbar, color=color.olive, text='RISKY BUY')
plotshape(show_signal ? buy_late : na, title='Late Buy', style=shape.triangleup, location=location.belowbar, color=color.lime, text='LATE BUY')
plotshape(show_signal ? sell : na, title='Sell', style=shape.triangledown, location=location.abovebar, color=color.red, text='SELL')

// Define entry and exit conditions

longCondition = ema > sma and bias_fast >= bias_slow // LONG when EMA above SMA, and overall trend bias is bullish
if (longCondition)
    strategy.entry("BUY TREND", strategy.long)
exitLong = crossunder(ema, sma) // close LONG when EMA cross under SMA
strategy.close("BUY TREND", when=exitLong)

// // short conditions. turned off because up only.
// shortCondition = ema < sma and bias_fast <= bias_slow // SHORT when EMA under SMA, and overall trend bias is bearish
// if (shortCondition)
//     strategy.entry("SELL TREND", strategy.short)
// exitShort = crossover(ema, sma) // close SHORT when EMA cross over SMA
// strategy.close("SELL TREND", when=exitShort)

// Enable option to show MAs, then plot MAs

show_ma = input(title="Show MAs", defval=false)

plot(show_ma ? ema : na, title="Momentum EMA", color=color.green, linewidth=1)
plot(show_ma ? sma : na, title="Momentum SMA", color=color.yellow, linewidth=1)
plot(show_ma ? bias_fast : na, title="Golden Cross SMA (Fast)", color=color.orange, linewidth=2)
plot(show_ma ? bias_slow : na, title="Golden Cross SMA (Slow)", color=color.red, linewidth=2)

Lebih banyak