
Strategi Dynamic Moving Average Crossover Combo adalah strategi perdagangan komposit yang mengintegrasikan beberapa indikator teknis dan deteksi fase pasar. Strategi ini secara dinamis menghitung volatilitas pasar berdasarkan jarak dan volatilitas harga dari rata-rata bergerak jangka panjang.
Indikator ATR (Average True Rate of Volatility) digunakan untuk menghitung volatilitas pasar dalam satu hari selama 14 hari terakhir. Kemudian filter dengan 100 hari Simple Moving Average untuk mendapatkan volatilitas rata-rata.
Perhitungan jarak harga relatif terhadap rata-rata bergerak sederhana 200 hari. Jika jarak lebih dari 1,5 kali rata-rata volatilitas, dan arahnya jelas, maka dianggap sebagai tren. Jika volatilitas saat ini lebih dari 1,5 kali rata-rata volatilitas, maka dianggap sebagai gerakan getaran.
Periode EMA cepat adalah 10 hari dan SMA lambat adalah 30 hari. Ketika EMA cepat melewati SMA lambat, sinyal beli dihasilkan.
Perhitungan 12, 26, 9 parameter MACD. Sinyal beli dihasilkan ketika kolom MACD berubah positif.
Perhitungan selisih standar dalam 20 hari Channel。 Jika lebar Channel lebih kecil dari SMA 20 hari sendiri, maka dianggap sebagai periode penyusunan。
Periode Guncangan: Guncangan garis atau MACD pilar dengan cepat atau lambat, dan harga penutupan di dalam Bollinger Bands, masuk lebih banyak.
Periode Trending: Line Cross atau MACD Column Transformasi Positif.
Periode pengumpulan: Lini lintas cepat, dan harga penutupan lebih tinggi dari Band Bawah, masuk lebih banyak.
Jika kondisi berikut ini terpenuhi, maka MACD akan melakukan posisi kosong. MACD akan melakukan posisi kosong jika dua garis K berturut-turut adalah negatif, dan harga penutupan turun dua hari berturut-turut.
Pada periode yang tidak menentu, StockRSI masuk ke zona overbought.
Periode penyusunan: Selain itu, ketika harga lebih rendah dari Upper Band, mereka tampil.
Ini adalah strategi perdagangan yang cerdas yang menggabungkan penilaian kondisi pasar dengan keuntungan berikut:
Sistematisasi operasi, mengurangi intervensi subjektif.
Adaptasi yang lebih baik, dengan parameter strategi yang disesuaikan dengan kondisi pasar.
Kombinasi multi-indikator untuk meningkatkan kepastian sinyal.
Bollinger Bands Stop Loss Otomatis untuk Mengurangi Risiko
Pengertian kondisi secara menyeluruh, filter sinyal palsu.
Stop loss, stop loss, dan trend tracking adalah cara yang paling efektif untuk mendapatkan keuntungan.
Risiko utama adalah sebagai berikut:
Setting parameter yang tidak tepat dapat menyebabkan kegagalan kebijakan. Disarankan untuk mengoptimalkan kombinasi parameter.
Kejadian tak terduga menyebabkan model gagal. Disarankan untuk memperbarui logika strategi tepat waktu.
Kompresi biaya transaksi untuk mendapatkan keuntungan. Disarankan untuk memilih broker dengan biaya rendah.
Kombinasi multi-indikator meningkatkan kompleksitas strategi.
Hal ini dapat dioptimalkan dari beberapa dimensi:
Optimalkan kriteria penilaian lingkungan pasar, meningkatkan akurasi.
Menambahkan modul pembelajaran mesin untuk mengadaptasi parameter.
Pengolahan teks untuk menilai risiko insiden besar.
Ini adalah pengembalian multi-pasar untuk mencari kombinasi terbaik.
Menambahkan strategi trailing stop.
Strategi moving average cross combination adalah strategi perdagangan cerdas multi-indikator. Ini dapat menggabungkan parameter penyesuaian lingkungan pasar, untuk mencapai perdagangan sistematis berdasarkan penilaian kondisional. Memiliki kemampuan adaptasi dan kepastian yang lebih kuat. Tetapi pengaturan parameter dan modul tambahan perlu berhati-hati untuk menghindari peningkatan kompleksitas strategi.
/*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)