Sumber daya yang dimuat... Pemuatan...

Tren Filter Moving Average Crossover Strategi Kuantitatif

Penulis:ChaoZhang, Tanggal: 2023-12-01 14:25:08
Tag:

img

Gambaran umum

Trend Filter Moving Average Crossover Quantitative Strategy adalah strategi perdagangan kuantitatif jangka menengah hingga panjang. Strategi ini menentukan arah tren pasar melalui persilangan rata-rata bergerak cepat dan lambat, dan memasuki pasar dengan premis mengidentifikasi tren yang efektif. Pada saat yang sama, strategi ini juga menetapkan rata-rata bergerak siklus yang lebih lama sebagai filter tren, sehingga sinyal perdagangan yang valid hanya dapat dihasilkan ketika harga menembus rata-rata bergerak itu.

Logika Strategi

Strategi ini terutama didasarkan pada prinsip crossover rata-rata bergerak. Secara khusus, dua rata-rata bergerak dengan periode yang berbeda dihitung, biasanya ditetapkan pada garis 20 hari dan 50 hari. Sinyal beli dihasilkan ketika garis 20 hari melanggar di atas garis 50 hari dari bawah ke atas, dan sinyal jual dihasilkan ketika garis 20 hari melanggar garis 50 hari dari atas ke bawah.

Selain itu, strategi juga menetapkan rata-rata bergerak 200 hari sebagai patokan tren keseluruhan. Hanya ketika harga menembus garis 200 hari, sinyal silang sederhana yang disebutkan di atas dianggap valid. Ini merupakan mekanisme penyaringan tren untuk menghindari menghasilkan banyak sinyal yang tidak valid di pasar yang terikat kisaran.

Analisis Keuntungan

  1. Frekuensi perdagangan jangka menengah hingga panjang menghindari perdagangan yang berlebihan, mengurangi biaya perdagangan dan risiko slip.

  2. Determinasi rata-rata silang bergerak jelas dan mudah dipahami dan diterapkan.

  3. Mekanisme penyaringan tren dapat menyaring sebagian besar sinyal yang tidak valid dan meningkatkan tingkat kemenangan.

  4. Penyesuaian yang fleksibel dari parameter rata-rata bergerak berlaku untuk varietas dan siklus waktu yang berbeda.

  5. Stop loss dan take profit dapat diatur untuk mengontrol keuntungan dan kerugian tunggal.

Analisis Risiko

  1. Ketika harga berosilasi di sekitar rata-rata bergerak, beberapa sinyal yang tidak valid dapat dihasilkan yang mengakibatkan perdagangan berlebihan.

  2. Rata-rata bergerak siklus panjang mungkin tertinggal dari pasar, sehingga kehilangan titik pembalikan tren.

  3. Data historis yang relatif panjang diperlukan untuk menetapkan benchmark rata-rata bergerak, membuat varietas baru atau siklus pendek tidak dapat diterapkan.

  4. Parameter strategi membutuhkan pengujian dan optimasi berulang, pengaturan yang tidak tepat dapat menyebabkan kegagalan strategi.

Pengurangan Risiko:

  1. Mengadopsi rata-rata bergerak siklus yang lebih panjang, atau meningkatkan kondisi penyaringan tren.

  2. Masukkan indikator lain untuk menentukan tren utama, seperti indikator energi, indikator volatilitas, dll.

  3. Meningkatkan kemampuan adaptasi dari parameter siklus rata-rata bergerak.

  4. Meningkatkan optimasi parameter dan mekanisme umpan balik untuk menyesuaikan parameter strategi secara dinamis.

Optimasi Strategi

  1. Cobalah jenis rata-rata bergerak yang berbeda, seperti Rata-rata Gerak Tertimbang Linear.

  2. Meningkatkan fungsi siklus rata-rata bergerak adaptif.

  3. Menggabungkan indikator volatilitas untuk menentukan tahap tren, meningkatkan validitas crossover rata-rata bergerak.

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

  5. Jelajahi strategi kombinasi multi-aset dengan memanfaatkan korelasi antar aset untuk keuntungan.

Ringkasan

Trend Filter Moving Average Crossover Strategy secara keseluruhan merupakan strategi kuantitatif jangka menengah hingga panjang yang sederhana dan praktis. Strategi ini menentukan tren jangka menengah hingga panjang melalui crossover rata-rata bergerak, dan kemudian menggunakan penyaringan tren untuk mengurangi sinyal yang tidak valid. Strategi ini memiliki keuntungan karena mudah dipahami dan diimplementasikan, cocok untuk pemula perdagangan kuantitatif.


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

Lebih banyak