Strategi Kombo Moving Average Crossover adalah strategi perdagangan gabungan yang mengintegrasikan beberapa indikator teknis dan deteksi kondisi pasar. Strategi ini secara dinamis menghitung volatilitas pasar dan menentukan tiga fase pasar berdasarkan jarak harga dari rata-rata bergerak jangka panjang dan volatilitas: volatile, trending dan konsolidasi.
Gunakan indikator ATR untuk mengukur volatilitas pasar 14 hari terakhir. Kemudian gunakan filter SMA 100 hari untuk mendapatkan volatilitas rata-rata.
Hitung jarak antara harga dan SMA 200 hari. Jika jarak absolut melebihi 1,5 kali volatilitas rata-rata dengan arah yang jelas, itu ditentukan sebagai pasar tren. Jika volatilitas saat ini melebihi 1,5 kali rata-rata, itu adalah pasar volatile.
Periode EMA cepat adalah 10 hari. Periode SMA lambat adalah 30 hari. Sinyal beli dihasilkan ketika EMA cepat melintasi SMA lambat.
Menghitung MACD dengan 12, 26, 9 parameter. histogram MACD positif memberikan sinyal beli.
Hitung saluran standar deviasi 20 hari. Jika lebar saluran lebih kecil dari SMA 20 hari itu sendiri, itu konsolidasi.
Volatil: Masuk long ketika crossover atau MACD positif dengan harga di dalam band.
Tren: Masukkan panjang ketika crossover atau MACD positif.
Mengkonsolidasikan: Masukkan panjang ketika crossover dan harga di atas band bawah.
Umum: Keluar ketika MACD negatif selama 2 bar dan harga turun 2 hari.
Volatil: Ditambah keluar ketika StockRSI overbought.
Konsolidasi: Ditambah keluar ketika harga di bawah band atas.
Strategi ini memiliki kekuatan berikut:
Operasi sistematis dengan intervensi yang kurang subjektif.
Parameter adaptif disesuaikan berdasarkan kondisi pasar.
Keakuratan sinyal yang lebih tinggi dengan kombinasi indikator ganda.
Risiko lebih rendah dengan Bollinger Bands auto stop loss.
Filter kondisi semua dibulatkan untuk menghindari sinyal palsu.
Stop loss dinamis dan mengambil keuntungan untuk mengikuti tren.
Risiko utama adalah:
Strategi tidak valid jika pengaturan parameter tidak benar.
Model gagal karena kejadian tiba-tiba.
Margin keuntungan yang terkompresi dari biaya perdagangan.
Kompleksitas yang lebih tinggi dengan beberapa modul.
Potensi arah optimasi:
Meningkatkan kriteria penilaian lingkungan pasar.
Memperkenalkan pembelajaran mesin untuk adaptasi parameter otomatis.
Tambahkan analisis teks untuk mendeteksi peristiwa.
Multi-market backtesting untuk menemukan parameter terbaik.
Mengimplementasikan strategi trailing stop untuk keuntungan yang lebih baik.
Strategi Kombo Crossover Moving Average adalah sistem perdagangan kuantitatif multi-indikator yang cerdas. Ini menyesuaikan parameter secara dinamis berdasarkan kondisi pasar untuk menerapkan perdagangan berbasis aturan yang sistematis. Strategi ini sangat adaptif dan deterministik. Tetapi parameter dan modul tambahan perlu diperkenalkan dengan hati-hati untuk menghindari kompleksitas berlebihan. Secara keseluruhan ini adalah ide strategi kuantitatif yang layak.
/*backtest start: 2024-01-28 00:00:00 end: 2024-02-04 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Improved Custom Strategy", shorttitle="ICS", overlay=true) // Volatility volatility = ta.atr(14) avg_volatility_sma = ta.sma(volatility, 100) avg_volatility = na(avg_volatility_sma) ? 0 : avg_volatility_sma // Market Phase detection long_term_ma = ta.sma(close, 200) distance_from_long_term_ma = close - long_term_ma var bool isTrending = math.abs(distance_from_long_term_ma) > 1.5 * avg_volatility and not na(distance_from_long_term_ma) var bool isVolatile = volatility > 1.5 * avg_volatility // EMA/MA Crossover fast_length = 10 slow_length = 30 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 or (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) isConsolidating = (upper - lower) < ta.sma(upper - lower, 20) // StockRSI length = 14 K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length)) D = ta.sma(K, 3) overbought = 75 oversold = 25 var float potential_SL = na var float potential_TP = na var bool buy_condition = na var bool sell_condition = na // Buy and Sell Control Variables var bool hasBought = false var bool hasSold = true // Previous values tracking prev_macdHistogram = macdHistogram[1] prev_close = close[1] // Modify sell_condition with the new criteria if isVolatile buy_condition := not hasBought and crossover_signal or macd_signal and (close > lower) and (close < upper) sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2]) potential_SL := close - 0.5 * volatility potential_TP := close + volatility if isTrending buy_condition := not hasBought and crossover_signal or macd_signal sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2]) potential_SL := close - volatility potential_TP := close + 2 * volatility if isConsolidating buy_condition := not hasBought and crossover_signal and (close > lower) sell_condition := hasBought and (close < upper) and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2]) potential_SL := close - 0.5 * volatility potential_TP := close + volatility // Update the hasBought and hasSold flags if buy_condition hasBought := true hasSold := false if sell_condition hasBought := false hasSold := true // Strategy Entry and Exit if buy_condition strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP) strategy.exit("SELL_TS", from_entry="BUY", trail_price=close, trail_offset=close * 0.05) if sell_condition strategy.close("BUY") // Visualization plotshape(series=buy_condition, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small) plotshape(series=sell_condition, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small) plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1) 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) bgcolor(isVolatile ? color.new(color.purple, 90) : isTrending ? color.new(color.blue, 90) : isConsolidating ? color.new(color.orange, 90) : na)