Strategi Kuantitatif Crossover Purata Pergerakan Trend Ditapis


Tarikh penciptaan: 2023-12-01 14:25:08 Akhirnya diubah suai: 2023-12-01 14:25:08
Salin: 0 Bilangan klik: 619
1
fokus pada
1619
Pengikut

Strategi Kuantitatif Crossover Purata Pergerakan Trend Ditapis

Gambaran keseluruhan

Strategi kuantitatif persimpangan rata-rata bergerak penapis trend adalah strategi perdagangan kuantitatif garis tengah dan panjang. Strategi ini menilai arah trend pasaran melalui persimpangan rata-rata bergerak cepat dan rata-rata bergerak perlahan, dengan asumsi masuk untuk menilai trend yang berkesan. Strategi ini juga menetapkan rata-rata bergerak yang lebih lama sebagai penapis trend, dan hanya dapat membentuk isyarat perdagangan yang berkesan apabila harga menembusi garis rata-rata bergerak ini.

Prinsip Strategi

Strategi ini adalah berdasarkan prinsip persilangan garis rata-rata bergerak. Secara khusus, dua purata bergerak yang berkala yang berbeza dikira secara berasingan, yang biasanya diset pada garis 20 dan 50 hari. Isyarat beli dihasilkan apabila garis 20 melintasi garis 50 dari bawah ke atas; isyarat jual dihasilkan apabila garis 20 melintasi garis 50 dari atas ke bawah. Isyarat persilangan sederhana ini dianggap dapat menangkap terobosan pada garis panjang dan sederhana.

Di samping itu, strategi ini juga menetapkan 200 hari rata-rata bergerak sebagai penunjuk keputusan trend keseluruhan. Isyarat simpul silang di atas hanya dianggap berkesan apabila harga menembusi garis 200 hari. Ini membentuk mekanisme penapisan trend yang dapat mengelakkan banyak isyarat tidak sah dalam pasaran yang menyeluruh.

Analisis kelebihan strategi

  1. Pengendalian talian panjang dan sederhana, mengelakkan perdagangan yang terlalu kerap, mengurangkan kos perdagangan dan risiko tergelincir.

  2. Penghakiman persilangan linear bergerak jelas dan mudah difahami.

  3. Mekanisme penapisan trend boleh menapis kebanyakan isyarat tidak berkesan, meningkatkan kadar kemenangan.

  4. Parameter purata bergerak boleh disesuaikan secara fleksibel untuk pelbagai jenis dan tempoh masa.

  5. Anda boleh menetapkan Stop Loss Stop untuk mengawal kerugian tunggal.

Analisis risiko strategi

  1. Apabila harga bergoyang di sekitar garis rata-rata, ia mungkin menghasilkan beberapa isyarat yang tidak sah yang menyebabkan perdagangan berlebihan.

  2. Garis purata jangka panjang mungkin ketinggalan pasaran, terlepas titik perubahan trend.

  3. Data sejarah yang lebih panjang diperlukan untuk membina penunjuk purata bergerak, varieti baru atau kitaran pendek tidak boleh digunakan.

  4. Parameter strategi memerlukan pengoptimuman ujian berulang, dan penyesuaian yang tidak betul boleh menyebabkan strategi gagal.

Penyelesaian untuk menghadapi risiko:

  1. Menggunakan garis purata kitaran yang lebih panjang, atau menambah syarat penapisan trend.

  2. Ia dikombinasikan dengan petunjuk lain untuk menentukan trend besar, seperti petunjuk tenaga, indikator kadar turun naik dan sebagainya.

  3. Peningkatan kesesuaian parameter kitaran purata bergerak.

  4. Menambah parameter pengoptimuman dan mekanisme maklum balas, dinamik menyesuaikan parameter strategi.

Arah pengoptimuman strategi

  1. Cuba pelbagai jenis moving averages, seperti linear weighted moving averages.

  2. Tambah fungsi kitaran purata bergerak yang beradaptasi.

  3. Menggabungkan indikator kadar lonjakan untuk menilai segmen trend, meningkatkan keberkesanan persilangan garisan purata bergerak.

  4. Menambah algoritma pembelajaran mesin untuk mengoptimumkan parameter strategi secara automatik

  5. Meneroka strategi gabungan pelbagai baka untuk memanfaatkan hubungan antara baka.

ringkaskan

Trend Filter Mobile Equal Line Crossover Strategi secara keseluruhan adalah strategi kuantitatif yang sederhana dan praktikal. Ia menilai trend garis panjang dan panjang dengan cara menyeberangi garis rata, kemudian bekerjasama dengan penapisan trend untuk mengurangkan isyarat yang tidak berkesan.

Kod 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)