Momentum Breakout Moving Average Strategi

Penulis:ChaoZhang, Tanggal: 2023-11-27 16:25:54
Tag:

img

Gambaran umum

Momentum Breakout Moving Average adalah strategi perdagangan saham yang menggabungkan sinyal crossover rata-rata bergerak dengan indikator momentum. Strategi ini menggunakan beberapa indikator teknis termasuk Exponential Moving Average (EMA), Simple Moving Average (SMA), Moving Average Convergence Divergence (MACD), dan Modified Relative Strength Index (StockRSI) untuk menghasilkan sinyal beli saat mengkonfirmasi tren kenaikan jangka panjang. Ketika indikator momentum jangka pendek menunjukkan sinyal pembalikan, strategi mengambil keuntungan.

Logika Strategi

Komponen utama dari strategi ini adalah:

  1. EMA/SMA Crossover: Garis cepat EMA 9 periode melintasi di atas garis lambat SMA 21 periode untuk memicu sinyal beli.

  2. Indikator MACD: Histogram MACD harus positif bila dikombinasikan dengan sinyal crossover EMA/SMA sebagai konfirmasi tambahan.

  3. Indikator StockRSI: Sinyal dipicu ketika StockRSI berada di atas tingkat OVERBOUGHT (80) atau di bawah tingkat OVERSOLD (20).

  4. Bollinger Bands: Memerlukan harga berada dalam band di mana band tengah adalah SMA 20 periode dan lebar band adalah dua standar deviasi.

  5. Hentikan Kerugian dan Dapatkan Keuntungan: Dihitung berdasarkan ATR 14 periode.

Strategi ini membutuhkan setidaknya 2 dari 3 indikator untuk memberikan sinyal beli, harga berada dalam Bollinger Bands, dan tren jangka panjang tetap bullish untuk menghasilkan sinyal beli akhir.

Analisis Keuntungan

Kekuatan utama dari strategi ini adalah:

  1. Hasil Tes Belakang yang Baik: Beberapa indikator yang telah terbukti menghasilkan kinerja yang lebih baik daripada indikator acuan dan indikator individu.

  2. Parameter yang Dioptimalkan: Parameter kunci seperti periode EMA dan Bollinger Band dioptimalkan untuk meningkatkan stabilitas.

  3. Pembuatan Stop Loss/Profit Automated: Bollinger Bands dan ATR memungkinkan penyesuaian stop secara dinamis untuk kontrol risiko yang lebih baik.

  4. Mudah Diimplementasikan: Struktur kode yang bersih dan aksesibilitas data yang mudah menghasilkan operasi praktis yang mudah.

Analisis Risiko

Meskipun kinerja yang layak, risiko utama termasuk:

  1. Sinyal Palsu: Fluktuasi pasar yang tidak biasa atau kegagalan indikator dapat menghasilkan sinyal yang salah.

  2. Parameter yang Tidak Memadai: Parameter yang tidak tepat dapat menyebabkan perdagangan yang terlalu sering atau sensitivitas yang tidak cukup. Parameter harus disesuaikan dengan produk dan lingkungan pasar yang berbeda.

  3. Stop Loss yang Tidak Sesuai: Stop loss yang terlalu ketat cenderung berhenti terlalu dini, sedangkan stop loss yang diatur terlalu luas dapat mengakibatkan kerugian yang berlebihan.

Untuk mengatasi risiko di atas, langkah-langkah berikut dapat diadopsi:

  1. Intervensi manual: Dalam situasi abnormal, sinyal dapat diperiksa secara manual, parameter disesuaikan kembali atau strategi secara sementara dihentikan.

  2. Optimasi Parameter: Metode yang lebih ilmiah dan obyektif seperti algoritma genetik dapat digunakan untuk optimasi sistematis.

  3. Volatilitas Disesuaikan Stop: Jangkauan stop loss dapat ditetapkan pada 1-3 kali ATR untuk memasukkan volatilitas.

Peluang Peningkatan

Strategi ini dapat ditingkatkan lagi di bidang berikut:

  1. Mekanisme Stop Loss yang Lebih Kuat: Stop loss atau stop stop yang didasarkan pada moving average dapat dimasukkan.

  2. Filter Volume: Menambahkan indikator volume untuk menghindari pecah palsu.

  3. Parameter Dinamis: Mengoptimalkan parameter secara otomatis seperti periode rata-rata bergerak dan lebar pita berdasarkan perubahan kondisi pasar.

  4. Pembelajaran Mesin: LSTM, RNN dan algoritma lainnya dapat memungkinkan optimasi dinamis parameter.

Kesimpulan

Strategi Momentum Breakout Moving Average memanfaatkan kekuatan menggabungkan beberapa indikator teknis, dan telah mencapai profitabilitas yang layak dengan konfirmasi jangka panjang dan jangka pendek.


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Improved Custom Strategy", shorttitle="ICS", overlay=true)

// Volatility
volatility = ta.atr(14)

// EMA/MA Crossover
fast_length = 9
slow_length = 21
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.sma(close, slow_length)
crossover_signal = ta.crossover(fast_ma, slow_ma)

// MACD
[macdLine, signalLine, macdHistogram] = ta.macd(close, 12, 26, 9)
macd_signal = crossover_signal and (macdHistogram > 0)

// Bollinger Bands
source = close
basis = ta.sma(source, 20)
upper = basis + 2 * ta.stdev(source, 20)
lower = basis - 2 * ta.stdev(source, 20)

// Fractal-based Support and Resistance levels
isFractalHigh = high[2] < high[1] and high[1] > high[0]
isFractalLow = low[2] > low[1] and low[1] < low[0]
resistance = ta.valuewhen(isFractalHigh, high[1], 0)
support = ta.valuewhen(isFractalLow, low[1], 0)

// StockRSI
length = 14
K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length))
D = ta.sma(K, 3)
overbought = 80
oversold = 20
stockrsi_signal = ((K < D) and (K < oversold)) or ((K > D) and (K > overbought))

// Buy and sell conditions
mandatory_buy_conditions = (crossover_signal ? 1 : 0) + (macd_signal ? 1 : 0) + (stockrsi_signal ? 1 : 0)

// Long-term Trend Check
long_term_ma = ta.sma(close, 200)
long_term_bullish = close > long_term_ma
long_term_bearish = close < long_term_ma

// Plot the long-term MA for visual clarity
plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1)

// Simplified Buy and Sell conditions
buy_condition = long_term_bullish and (mandatory_buy_conditions >= 2) and (close > lower) and (close < upper)
sell_condition = (macdHistogram < 0) and (K > D) and (K > overbought)


// Potential SL and TP based on volatility
potential_SL = close - volatility
potential_TP = close + 2 * volatility

plot(potential_SL, title="SL Level", color=color.red, linewidth=1, style=plot.style_linebr)
plot(potential_TP, title="TP Level", color=color.green, linewidth=1, style=plot.style_linebr)

// ... (rest of your code above)

// State variable to track if we're in a position, a counter for trades, and a delayed counter for plotting
var bool inPosition = false
var tradeCounter = 0
var tradeCounterDelayed = 0 // Declaration of the variable

// Buy logic: Check if tradeCounter is 0 and the buy condition is met
if tradeCounter == 0 and buy_condition
    strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP)
    inPosition := true
    tradeCounter := tradeCounter + 1

// Sell logic: Check if tradeCounter is 1, the sell condition is met, and we are in a position
if tradeCounter == 1 and inPosition and sell_condition
    strategy.close("BUY")
    inPosition := false
    tradeCounter := tradeCounter - 1

// Update the delayed trade counter:
tradeCounterDelayed := tradeCounter

// Plotting
bgcolor(buy_condition ? color.new(color.green, 90) : sell_condition ? color.new(color.red, 90) : na)
plotshape(series=buy_condition and tradeCounterDelayed == 0, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=sell_condition and tradeCounterDelayed == 1, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)

// ... (rest of your code if any)


Lebih banyak