Strategi kuantitatif penyambungan purata bergerak penapis trend adalah strategi perdagangan kuantitatif jangka menengah hingga panjang. Ia menentukan arah trend pasaran melalui penyambungan purata bergerak pantas dan perlahan, dan memasuki pasaran di bawah premis mengenal pasti trend yang berkesan. Pada masa yang sama, strategi ini juga menetapkan purata bergerak kitaran yang lebih lama sebagai penapis trend, sehingga isyarat perdagangan yang sah hanya boleh dihasilkan apabila harga memecahkan purata bergerak itu.
Strategi ini terutamanya berdasarkan prinsip persilangan purata bergerak. Secara khusus, dua purata bergerak dengan tempoh yang berbeza dikira, biasanya ditetapkan pada garis 20 hari dan 50 hari. Isyarat beli dihasilkan apabila garis 20 hari memecahkan di atas garis 50 hari dari bawah ke atas, dan isyarat jual dihasilkan apabila garis 20 hari memecahkan garis 50 hari dari atas ke bawah. Isyarat persilangan mudah ini dianggap menangkap pecah dalam jangka sederhana hingga panjang.
Di samping itu, strategi ini juga menetapkan purata bergerak 200 hari sebagai penanda aras trend keseluruhan. Hanya apabila harga memecahkan garis 200 hari, isyarat silang mudah yang disebutkan di atas dianggap sah. Ini merupakan mekanisme penapisan trend untuk mengelakkan menghasilkan banyak isyarat yang tidak sah di pasaran yang terikat julat.
Kekerapan perdagangan jangka sederhana hingga panjang mengelakkan perdagangan berlebihan, mengurangkan kos perdagangan dan risiko tergelincir.
Penentuan crossover purata bergerak adalah jelas dan mudah difahami dan dilaksanakan.
Mekanisme penapisan trend boleh menapis kebanyakan isyarat yang tidak sah dan meningkatkan kadar kemenangan.
Penyesuaian yang fleksibel parameter purata bergerak adalah terpakai kepada pelbagai jenis dan kitaran masa.
Stop loss dan mengambil keuntungan boleh ditetapkan untuk mengawal keuntungan dan kerugian tunggal.
Apabila harga berayun di sekitar purata bergerak, beberapa isyarat tidak sah boleh dihasilkan yang mengakibatkan perdagangan berlebihan.
Purata bergerak kitaran panjang mungkin ketinggalan pasaran, dengan itu kehilangan titik pembalikan trend.
Data sejarah yang agak panjang diperlukan untuk menubuhkan penanda aras purata bergerak, menjadikan jenis baru atau kitaran pendek tidak boleh digunakan.
Parameter strategi memerlukan ujian dan pengoptimuman berulang, tetapan yang tidak betul boleh menyebabkan kegagalan strategi.
Pengurangan Risiko:
Mengambil purata bergerak kitaran yang lebih lama, atau meningkatkan keadaan penapisan trend.
Masukkan penunjuk lain untuk menentukan trend utama, seperti penunjuk tenaga, penunjuk turun naik, dll.
Meningkatkan kebolehsesuaian parameter kitaran purata bergerak.
Meningkatkan pengoptimuman parameter dan mekanisme maklum balas untuk menyesuaikan parameter strategi secara dinamik.
Cuba pelbagai jenis purata bergerak, seperti purata bergerak bertimbang linear.
Meningkatkan fungsi kitaran purata bergerak adaptif.
Memasukkan penunjuk turun naik untuk menentukan peringkat trend, meningkatkan kesahihan persilangan purata bergerak.
Memperkenalkan algoritma pembelajaran mesin untuk mengoptimumkan parameter strategi secara automatik.
Meneroka strategi gabungan pelbagai aset dengan menggunakan korelasi antara aset untuk keuntungan.
Strategi Crossover Purata Bergerak Penapis Trend secara keseluruhan adalah strategi kuantitatif sederhana dan praktikal jangka menengah hingga panjang. Ia menentukan trend jangka menengah hingga panjang melalui crossover purata bergerak, dan kemudian menggunakan penapisan trend untuk mengurangkan isyarat yang tidak sah. Strategi ini mempunyai kelebihan mudah difahami dan dilaksanakan, sesuai untuk pemula perdagangan kuantitatif. Kawasan potensi penambahbaikan terletak pada pengoptimuman purata bergerak, serta integrasi dengan penunjuk lain dan algoritma pembelajaran mesin. Sebagai strategi asas, ia boleh menyediakan isyarat perdagangan untuk algoritma arbitrase kuantitatif yang lebih maju.
/*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)