Strategi Kuantitatif Crossover Rata-rata Pergerakan yang Difilter Tren


Tanggal Pembuatan: 2023-12-01 14:25:08 Akhirnya memodifikasi: 2023-12-01 14:25:08
menyalin: 0 Jumlah klik: 619
1
fokus pada
1619
Pengikut

Strategi Kuantitatif Crossover Rata-rata Pergerakan yang Difilter Tren

Ringkasan

Strategi kuantitatif lintas rata-rata bergerak adalah strategi perdagangan kuantitatif garis tengah dan panjang. Strategi ini menilai arah tren pasar melalui persilangan rata-rata bergerak cepat dan rata-rata bergerak lambat, dengan asumsi masuk untuk menilai tren yang efektif. Strategi ini juga menetapkan rata-rata bergerak dengan periode yang lebih lama sebagai filter tren, dan hanya dapat membentuk sinyal perdagangan yang efektif ketika harga menembus garis rata-rata bergerak ini.

Prinsip Strategi

Strategi ini terutama didasarkan pada prinsip persilangan garis rata-rata bergerak. Secara khusus, dua rata-rata bergerak dengan periode yang berbeda dihitung secara terpisah, yang biasanya diatur sebagai garis 20 dan garis 50 hari. Sebuah sinyal beli dihasilkan ketika garis 20 hari melintasi garis 50 hari dari bawah ke atas; Sebuah sinyal jual dihasilkan ketika garis 20 hari melintasi garis 50 hari dari atas ke bawah.

Selain itu, strategi ini juga menetapkan 200-day moving average sebagai indikator untuk menilai tren keseluruhan. Sinyal silang sederhana di atas hanya dianggap efektif ketika harga melampaui garis 200-day. Ini membentuk mekanisme penyaringan tren yang dapat menghindari banyak sinyal tidak valid di pasar yang menyeluruh.

Analisis Keunggulan Strategi

  1. Hal ini dilakukan untuk menghindari transaksi yang terlalu sering, mengurangi biaya transaksi dan risiko slippage.

  2. Pengertian mobile linear intersection jelas dan mudah dipahami.

  3. Mekanisme penyaringan tren dapat menyaring sebagian besar sinyal tidak efektif, meningkatkan tingkat kemenangan.

  4. Parameter rata-rata bergerak dapat disesuaikan secara fleksibel untuk varietas dan periode waktu yang berbeda.

  5. Stop loss yang dapat diatur untuk mengontrol kerugian tunggal.

Analisis Risiko Strategi

  1. Ketika harga bergoyang di dekat garis rata-rata, sinyal yang tidak valid dapat dihasilkan berulang kali sehingga menyebabkan overtrading.

  2. Rata-rata jangka panjang mungkin tertinggal di belakang pasar, melewatkan titik balik tren.

  3. Data historis yang lebih panjang diperlukan untuk membangun indikator rata-rata bergerak, varietas baru atau periode pendek tidak dapat diterapkan.

  4. Parameter kebijakan perlu diuji dan dioptimalkan berulang kali, dan pengaturan yang tidak tepat dapat menyebabkan kegagalan kebijakan.

Solusi untuk menghadapi risiko:

  1. Menggunakan rata-rata periode yang lebih panjang, atau meningkatkan kondisi penyaringan tren.

  2. Dalam kombinasi dengan indikator lain untuk menentukan tren besar, seperti indikator energi, indikator volatilitas, dll.

  3. Meningkatkan kemampuan beradaptasi dari parameter periodik rata-rata bergerak.

  4. Menambahkan parameter optimasi dan mekanisme umpan balik, dan secara dinamis menyesuaikan parameter kebijakan.

Arah optimasi strategi

  1. Cobalah berbagai jenis moving averages, seperti linear weighted moving averages.

  2. Menambahkan fungsi siklus rata-rata bergerak yang beradaptasi.

  3. Menggabungkan indikator tingkat fluktuasi untuk menilai segmen tren, meningkatkan efektivitas persilangan garis rata-rata bergerak.

  4. Menambahkan algoritma pembelajaran mesin untuk mengoptimalkan parameter strategi secara otomatis.

  5. Menjelajahi strategi kombinasi multi-varietas untuk memanfaatkan hubungan antar-varietas.

Meringkaskan

Trend Filtering Mobile Equilibrium Crossover Strategy secara keseluruhan adalah strategi kuantitatif yang sederhana dan praktis. Strategi ini menilai tren garis tengah dan panjang dengan cara menyeberang garis rata, kemudian bekerja dengan filter tren untuk mengurangi sinyal yang tidak efektif. Strategi ini mudah dipahami dan diimplementasikan, cocok untuk pemula dalam perdagangan kuantitatif.

Kode Sumber Strategi
/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

////////////////////////////////////////////////////////////////////////////////
// Booz Strategy
// Developed for Godstime
// Version 1.1
// 11/28/2021
////////////////////////////////////////////////////////////////////////////////

//@version=4
strategy("Booz Strategy", "", true)

// ----------------------------- Inputs ------------------------------------- //
source_ma_type = input("EMA", "Source MA Type", options=["SMA", "EMA"])
source_ma_length = input(50, "Source MA Length")
fast_ma_length = input(20, "Fast MA Length")
slow_ma_length = input(50, "Slow MA Length")        
use_trend_filter = input(true, "Trend Filter")
trend_filter_ma_type = input("EMA", "Trend Filter MA Type", options=["SMA", "EMA"])
trend_filter_ma_length = input(200, "Trend Filter MA Period")
show_mas = input(true, "Show MAs")
swing_trading_mode = input(false, "Swing Trading")

// -------------------------- Calculations ---------------------------------- //
fast_ma = ema(close, fast_ma_length)
slow_ma = ema(close, slow_ma_length)
source_ma = source_ma_type == "EMA"? ema(close, source_ma_length): 
                                     sma(close, source_ma_length)
trend_filter_ma = trend_filter_ma_type == "EMA"? ema(close, trend_filter_ma_length): 
                                                 sma(close, trend_filter_ma_length)

// --------------------------- Conditions ----------------------------------- //
uptrend = not use_trend_filter or close > trend_filter_ma
buy_cond = crossover(fast_ma, slow_ma) and uptrend

downtrend = not use_trend_filter or close < trend_filter_ma
sell_cond = crossunder(fast_ma, slow_ma) and downtrend

// ---------------------------- Plotting ------------------------------------ //
bgcolor(use_trend_filter and downtrend? color.red: use_trend_filter? color.green: na)
plot(show_mas? fast_ma: na, "Fast MA", color.green)
plot(show_mas? slow_ma: na, "Slow MA", color.red)
plot(show_mas? source_ma: na, "Source MA", color.purple)
plot(show_mas? trend_filter_ma: na, "Trend Filter MA", color.blue)


// ---------------------------- Trading  ------------------------------------ //
// Inputs
sl_perc = input(1.0, "Stop Loss (in %)", group="Backtest Control")/100
tp_perc = input(1.0, "Take Profit (in %)", group="Backtest Control")/100
leverage = input(10, "Leverage", maxval=100, group="Backtest Control")
bt_start_time = input(timestamp("2021 01 01"), "Backtest Start Time", input.time, group="Backtest Control")
bt_end_time = input(timestamp("2021 12 31"), "Backtest End Time", input.time, group="Backtest Control")

// Trading Window
in_trading_window = true
trade_qty = 1

// Long Side
strategy.entry("Long Entry", strategy.long, trade_qty, when=buy_cond and in_trading_window)
long_tp = strategy.position_avg_price * (1 + tp_perc)
long_sl = strategy.position_avg_price * (1 - sl_perc)
if not swing_trading_mode
    strategy.exit("Long Exit", "Long Entry", limit=long_tp, stop=long_sl)

// Short Side
strategy.entry("Short Entry", strategy.short, trade_qty, when=sell_cond and in_trading_window)
short_tp = strategy.position_avg_price * (1 - tp_perc)
short_sl = strategy.position_avg_price * (1 + sl_perc)
if not swing_trading_mode
    strategy.exit("Short Exit", "Short Entry", limit=short_tp, stop=short_sl)

// End of trading window close
strategy.close_all(when=not in_trading_window)