Chiến lược giao dịch swing

Tác giả:ChaoZhang, Ngày: 2023-10-11 16:29:37
Tags:

Tổng quan

Đây là một chiến lược theo xu hướng dựa trên đường chéo trung bình động, kết hợp với quản lý dừng lỗ / lấy lợi nhuận và hiệu ứng đòn bẩy, nhằm xác định xu hướng trên nhiều thị trường và tối đa hóa lợi nhuận.

Chiến lược logic

Chiến lược này sử dụng chéo giữa các đường trung bình di chuyển nhanh và chậm như các tín hiệu giao dịch. Nó đi dài khi MA nhanh vượt qua trên MA chậm, và đi ngắn khi MA nhanh vượt qua dưới MA chậm.

Để lọc các giao dịch tiếng ồn từ các xu hướng nhỏ, nó cũng sử dụng MA 200 ngày như một bộ lọc xu hướng.

Chiến lược này sử dụng các điểm dừng giao dịch trong phạm vi. Sau khi vào, mức dừng lỗ và lấy lợi nhuận theo tỷ lệ phần trăm cố định được thiết lập, ví dụ: 1% dừng lỗ và 1% lấy lợi nhuận. Các vị trí sẽ được đóng khi giá đạt mức dừng lỗ hoặc lấy lợi nhuận.

Hiệu ứng đòn bẩy được sử dụng để khuếch đại lợi nhuận giao dịch. Dựa trên các đặc điểm thị trường khác nhau, tỷ lệ đòn bẩy phù hợp có thể được chọn, ví dụ: 10x.

Phân tích lợi thế

  • Một lợi thế là nó có thể xác định xu hướng trên nhiều thị trường bao gồm tiền điện tử, cổ phiếu và hợp đồng tương lai, làm cho chiến lược có thể áp dụng rộng rãi.

  • Sử dụng chéo MA nhanh / chậm và bộ lọc xu hướng có thể xác định tốt hơn hướng xu hướng và đạt được tỷ lệ thắng tốt trong các thị trường xu hướng.

  • Dừng giao dịch phạm vi giúp kiểm soát lỗ giao dịch duy nhất trong phạm vi chịu được, cho phép chạy ổn định chiến lược.

  • Hiệu ứng đòn bẩy khuếch đại lợi nhuận giao dịch, tận dụng đầy đủ lợi thế chiến lược.

  • Thiết kế giao diện trực quan với màu nền khác nhau cho thị trường bò / gấu cung cấp cái nhìn thị trường trực quan.

Phân tích rủi ro

  • Chiến lược là theo xu hướng vì vậy có thể hoạt động kém hơn trong thị trường hỗn loạn, giới hạn phạm vi.

  • Các mức độ nên được điều chỉnh dựa trên biến động thị trường cụ thể.

  • Đòn bẩy tăng cường kích thước vị trí cũng như rủi ro. Tỷ lệ đòn bẩy nên được kiểm soát để tránh tổn thất quá lớn.

  • Bản chất chậm trễ của đường trung bình động có thể gây ra tín hiệu giao dịch chậm trễ.

Hướng dẫn tối ưu hóa

  • Kiểm tra các kết hợp tham số khác nhau và chọn chiều dài MA nhanh / chậm tối ưu.

  • Tích hợp các chỉ số hoặc mô hình khác làm tín hiệu lọc để cải thiện độ chính xác, ví dụ như dừng ATR, RSI vv.

  • Nghiên cứu các công cụ xác định xu hướng khác như ADX để tăng cường khả năng nắm bắt xu hướng.

  • Sử dụng các mô hình học máy để tối ưu hóa các tín hiệu chiến lược và tìm các điểm nhập / xuất hiệu quả hơn.

  • Xem xét stop loss / take profit năng động dựa trên biến động và điều kiện thị trường để dừng hợp lý hơn.

Tóm lại

Chiến lược này sử dụng một cách tiếp cận theo xu hướng có hệ thống và sử dụng dừng / lấy lợi nhuận và đòn bẩy để kiểm soát rủi ro và tăng lợi nhuận. Nó được áp dụng rộng rãi trên các thị trường có tiềm năng alpha ổn định.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

////////////////////////////////////////////////////////////////////////////////
// Bozz Strategy
// Developed for Godstime
// Version 1.1
// 11/28/2021
////////////////////////////////////////////////////////////////////////////////

//@version=4
// strategy("Bozz Strategy", "", true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, margin_long=0, margin_short=0)

// ----------------------------- 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 = (strategy.equity * leverage) / close 

// Long Side
strategy.entry("Long Entry", strategy.long,  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, 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