Chiến lược định lượng đường trung bình động được lọc theo xu hướng


Ngày tạo: 2023-12-01 14:25:08 sửa đổi lần cuối: 2023-12-01 14:25:08
sao chép: 0 Số nhấp chuột: 619
1
tập trung vào
1619
Người theo dõi

Chiến lược định lượng đường trung bình động được lọc theo xu hướng

Tổng quan

Chiến lược định lượng chéo đường trung bình di chuyển là một chiến lược giao dịch định lượng đường dài và trung bình. Chiến lược này đánh giá xu hướng của thị trường bằng cách kết hợp các đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm, và tham gia vào thị trường với giả định đánh giá xu hướng có hiệu quả.

Nguyên tắc chiến lược

Chiến lược này chủ yếu dựa trên nguyên tắc giao chéo của đường trung bình di chuyển. Cụ thể, hai đường trung bình di chuyển có chu kỳ khác nhau được tính riêng biệt, thường được thiết lập là đường 20 ngày và đường 50 ngày.

Ngoài ra, chiến lược này cũng đặt một đường trung bình di chuyển 200 ngày làm chỉ số phán đoán xu hướng tổng thể. Các tín hiệu giao chéo đơn giản trên chỉ được coi là có hiệu lực khi giá vượt qua đường 200 ngày. Điều này tạo thành một cơ chế lọc xu hướng, có thể tránh tạo ra nhiều tín hiệu không hiệu quả trong thị trường tổng hợp.

Phân tích lợi thế chiến lược

  1. Điều này giúp giảm chi phí giao dịch và rủi ro trượt.

  2. Phương pháp này được sử dụng trong các trường hợp khác nhau.

  3. Cơ chế lọc xu hướng có thể lọc hầu hết các tín hiệu không hiệu quả, tăng tỷ lệ thắng.

  4. Các tham số đường trung bình di chuyển có thể được điều chỉnh linh hoạt, áp dụng cho các giống và khoảng thời gian khác nhau.

  5. Bạn có thể thiết lập Stop Loss Stop để kiểm soát các khoản lỗ đơn lẻ.

Phân tích rủi ro chiến lược

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

  2. Đường trung bình chu kỳ dài có thể bị tụt lại phía sau thị trường, bỏ lỡ điểm thay đổi xu hướng.

  3. Cần dữ liệu lịch sử dài hơn để xây dựng chỉ số đường trung bình di chuyển, không thể áp dụng cho các giống mới hoặc thời gian ngắn.

  4. Các tham số chiến lược cần được kiểm tra và tối ưu hóa nhiều lần, và nếu không được thiết lập đúng cách, chiến lược có thể bị hỏng.

Giải pháp đối phó với rủi ro:

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

  2. Kết hợp với các chỉ số khác để xác định xu hướng lớn, chẳng hạn như chỉ số năng lượng, chỉ số tỷ lệ dao động.

  3. Tăng khả năng tự điều chỉnh các tham số chu kỳ đường trung bình di chuyển.

  4. Thêm tham số tối ưu hóa và cơ chế phản hồi, thay đổi động các tham số chính sách.

Hướng tối ưu hóa chiến lược

  1. Thử các loại trung bình di chuyển khác nhau, chẳng hạn như trung bình di chuyển trọng lượng tuyến tính.

  2. Thêm chức năng chu kỳ trung bình di động tự điều chỉnh.

  3. Kết hợp với các chỉ số tỷ lệ dao động để phân đoạn xu hướng, tăng hiệu quả của đường trung bình di chuyển.

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

  5. Khám phá các chiến lược kết hợp đa giống để tận dụng mối quan hệ giữa các giống.

Tóm tắt

Trình lọc xu hướng là một chiến lược định lượng đường dài trung bình đơn giản và thực tế. Nó đánh giá xu hướng đường dài trung bình bằng cách cắt ngang, sau đó phối hợp với bộ lọc xu hướng để giảm tín hiệu không hiệu quả. Chiến lược này 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.

Mã nguồn chiến lược
/*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)