Strategi Kombo Crossover Purata Bergerak Dinamik

Penulis:ChaoZhang, Tarikh: 2024-02-05 10:23:10
Tag:

img

Ringkasan

Strategi Kombo Crossover Purata Bergerak Dinamis adalah strategi perdagangan gabungan yang mengintegrasikan beberapa penunjuk teknikal dan pengesanan keadaan pasaran. Ia secara dinamik mengira turun naik pasaran dan menentukan tiga fasa pasaran berdasarkan jarak harga dari purata bergerak jangka panjang dan turun naik: turun naik, trend dan penyatuan. Di bawah keadaan pasaran yang berbeza, strategi ini mengamalkan peraturan kemasukan dan keluar yang berbeza dan menghasilkan isyarat beli dan jual dengan gabungan penunjuk seperti crossover EMA / SMA, MACD dan Bollinger Bands.

Logika Strategi

Mengira Volatiliti Pasaran

Gunakan penunjuk ATR untuk mengukur turun naik pasaran dalam 14 hari terakhir. Kemudian gunakan penapis SMA 100 hari untuk mendapatkan turun naik purata.

Menentukan Fasa Pasaran

Mengira jarak antara harga dan SMA 200 hari. Jika jarak mutlak melebihi 1.5 kali daripada turun naik purata dengan arah yang jelas, ia ditentukan sebagai pasaran trend. Jika turun naik semasa melebihi 1.5 kali daripada purata, ia adalah pasaran turun naik.

EMA/SMA Crossover

Tempoh EMA pantas adalah 10 hari. Tempoh SMA perlahan adalah 30 hari. Isyarat beli dihasilkan apabila EMA pantas melintasi di atas SMA perlahan.

MACD

Mengira MACD dengan 12, 26, 9 parameter. histogram MACD positif memberikan isyarat membeli.

Bollinger Bands

Hitung saluran penyimpangan standard 20 hari. Jika lebar saluran adalah lebih kecil daripada SMA 20 hari itu sendiri, ia adalah penyatuan.

Peraturan kemasukan

Volatil: Masuk panjang apabila crossover atau MACD positif dengan harga dalam band.

Trend: Masukkan panjang apabila crossover atau MACD positif.

Memperkukuhkan: Masuk panjang apabila merentasi dan harga di atas band bawah.

Peraturan Keluar

Umum: Keluar apabila MACD negatif untuk 2 bar dan harga jatuh 2 hari.

Volatil: Plus keluar apabila StockRSI overbought.

Pengukuhan: Plus keluar apabila harga di bawah band atas.

Kelebihan

Strategi ini mempunyai kekuatan berikut:

  1. Operasi sistematik dengan intervensi yang kurang subjektif.

  2. Parameter penyesuaian disesuaikan berdasarkan keadaan pasaran.

  3. Kecekapan isyarat yang lebih tinggi dengan kombinasi pelbagai indikator.

  4. Risiko yang lebih rendah dengan Bollinger Bands auto stop loss.

  5. Semua penapis keadaan bulat untuk mengelakkan isyarat palsu.

  6. Stop loss dinamik dan mengambil keuntungan untuk mengikuti trend.

Risiko

Risiko utama ialah:

  1. Strategi yang tidak sah jika pemasangan parameter tidak betul.

  2. Kegagalan model disebabkan oleh peristiwa tiba-tiba.

  3. Margin keuntungan yang tertekan dari kos dagangan.

  4. Kemudahan yang lebih tinggi dengan pelbagai modul.

Peningkatan

Arah optimum yang berpotensi:

  1. Meningkatkan kriteria penilaian persekitaran pasaran.

  2. Memperkenalkan pembelajaran mesin untuk penyesuaian parameter automatik.

  3. Tambah analisis teks untuk mengesan peristiwa.

  4. Pengujian belakang pelbagai pasaran untuk mencari parameter terbaik.

  5. Melaksanakan strategi hentian untuk keuntungan yang lebih baik.

Kesimpulan

Strategi Dynamic Moving Average Crossover Combo adalah sistem perdagangan kuantitatif pelbagai penunjuk yang pintar. Ia menyesuaikan parameter secara dinamik berdasarkan keadaan pasaran untuk melaksanakan perdagangan berasaskan peraturan yang sistematik. Strategi ini sangat adaptif dan deterministik. Tetapi parameter dan modul tambahan perlu diperkenalkan dengan berhati-hati untuk mengelakkan terlalu kompleks. Secara keseluruhan ini adalah idea strategi kuantitatif yang boleh dilaksanakan.


/*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)


Lebih lanjut