Trình lọc xu hướng Trung bình chuyển động Crossover Chiến lược định lượng

Tác giả:ChaoZhang, Ngày: 2023-12-01 14:25:08
Tags:

img

Tổng quan

Chiến lược định lượng chuyển động trung bình xu hướng là một chiến lược giao dịch định lượng trung hạn đến dài hạn. Nó xác định hướng xu hướng của thị trường thông qua sự chuyển đổi giữa các đường trung bình chuyển động nhanh và chậm, và đi vào thị trường với tiền đề xác định xu hướng hiệu quả. Đồng thời, chiến lược này cũng đặt ra một đường trung bình chuyển động chu kỳ dài hơn như một bộ lọc xu hướng, vì vậy các tín hiệu giao dịch hợp lệ chỉ có thể được tạo ra khi giá vượt qua đường trung bình chuyển động đó.

Chiến lược logic

Chiến lược này chủ yếu dựa trên nguyên tắc chéo trung bình động. Cụ thể, hai trung bình động với các giai đoạn khác nhau được tính toán, thường được đặt ở đường 20 ngày và đường 50 ngày. Một tín hiệu mua được tạo ra khi đường 20 ngày vượt qua đường 50 ngày từ dưới lên, và một tín hiệu bán được tạo ra khi đường 20 ngày vượt qua đường 50 ngày từ trên xuống.

Ngoài ra, chiến lược cũng thiết lập một đường trung bình động 200 ngày làm điểm chuẩn xu hướng tổng thể. Chỉ khi giá vượt qua đường 200 ngày, các tín hiệu chéo đơn giản đã đề cập ở trên được coi là hợp lệ. Điều này tạo thành một cơ chế lọc xu hướng để tránh tạo ra nhiều tín hiệu không hợp lệ trong một thị trường giới hạn phạm vi.

Phân tích lợi thế

  1. Tần suất giao dịch trung và dài hạn tránh giao dịch quá mức, giảm chi phí giao dịch và rủi ro trượt.

  2. Xác định đường chéo trung bình động là rõ ràng và dễ hiểu và thực hiện.

  3. Cơ chế lọc xu hướng có thể lọc hầu hết các tín hiệu không hợp lệ và cải thiện tỷ lệ thắng.

  4. Điều chỉnh linh hoạt các tham số trung bình động có thể áp dụng cho các giống và chu kỳ thời gian khác nhau.

  5. Dừng lỗ và lấy lợi nhuận có thể được thiết lập để kiểm soát lợi nhuận và lỗ duy nhất.

Phân tích rủi ro

  1. Khi giá dao động xung quanh đường trung bình động, nhiều tín hiệu không hợp lệ có thể được tạo ra dẫn đến giao dịch quá mức.

  2. Các đường trung bình động chu kỳ dài có thể tụt lại phía sau thị trường, do đó bỏ lỡ các điểm đảo ngược xu hướng.

  3. Dữ liệu lịch sử tương đối dài là cần thiết để thiết lập các chỉ số so sánh trung bình động, khiến các loại mới hoặc chu kỳ ngắn không thể áp dụng.

  4. Các thông số chiến lược cần thử nghiệm và tối ưu hóa lặp đi lặp lại, cài đặt không đúng có thể gây thất bại cho chiến lược.

Giảm rủi ro:

  1. Sử dụng các đường trung bình động chu kỳ dài hơn, hoặc tăng điều kiện lọc xu hướng.

  2. Bao gồm các chỉ số khác để xác định xu hướng chính, chẳng hạn như chỉ số năng lượng, chỉ số biến động, v.v.

  3. Cải thiện khả năng thích nghi của các thông số chu kỳ trung bình động.

  4. Tăng tối ưu hóa tham số và cơ chế phản hồi để điều chỉnh các tham số chiến lược một cách năng động.

Tối ưu hóa chiến lược

  1. Hãy thử các loại trung bình động khác nhau, chẳng hạn như Trung bình Di chuyển Đánh nặng tuyến tính.

  2. Tăng chức năng chu kỳ trung bình động thích nghi.

  3. Bao gồm các chỉ số biến động để xác định các giai đoạn xu hướng, cải thiện tính hợp lệ của các đường chéo trung bình động.

  4. Đưa ra các thuật toán học máy để tự động tối ưu hóa các thông số chiến lược.

  5. Khám phá các chiến lược kết hợp đa tài sản bằng cách sử dụng mối tương quan giữa các tài sản để kiếm lợi nhuận.

Tóm lại

Chiến lược chuyển đổi trung bình xu hướng là một chiến lược định lượng trung hạn và dài hạn đơn giản và thực tế. Nó xác định xu hướng trung hạn và dài hạn thông qua chuyển đổi trung bình, và sau đó sử dụng lọc xu hướng để giảm các tín hiệu không hợp lệ. Chiến lược này có lợi thế dễ hiểu và thực hiện, phù hợp với người mới bắt đầu giao dịch định lượng. Các lĩnh vực cải tiến tiềm năng nằm trong tối ưu hóa các đường trung bình chuyển động, cũng như tích hợp với các chỉ số khác và thuật toán học máy. Là một chiến lược cơ bản, nó có thể cung cấp tín hiệu giao dịch cho các thuật toán điều chỉnh định lượng tiên tiến hơn.


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

Thêm nữa