Chiến lược đảo ngược xu hướng dựa trên đường trung bình động

Tác giả:ChaoZhang, Ngày: 2024-02-21 17:03:31
Tags:

img

Tổng quan

Ý tưởng chính của chiến lược này là giao dịch rút ngắn hạn theo hướng xu hướng dài hạn. Cụ thể, trung bình di chuyển đơn giản 200 ngày được sử dụng để xác định hướng của xu hướng dài hạn, và trung bình di chuyển đơn giản 10 ngày được sử dụng để xác định hướng của xu hướng ngắn hạn. Khi giá vượt quá đường 200 ngày, đó là thị trường tăng giá. Khi giá dưới đường 200 ngày, đó là thị trường gấu. Trong thị trường tăng giá, đi dài khi giá giảm xuống đường 10 ngày. Trong thị trường gấu, đi ngắn khi giá tăng lên đường 10 ngày.

Chiến lược logic

Chiến lược này sử dụng đường trung bình di chuyển đơn giản 200 ngày và đường trung bình di chuyển đơn giản 10 ngày để xác định xu hướng thị trường. Khi giá vượt qua đường 200 ngày, nó được coi là bước vào thị trường bò. Khi giá vượt qua đường 200 ngày, nó được coi là bước vào thị trường gấu. Trong thị trường bò, nếu giá giảm xuống khoảng đường 10 ngày, điều đó có nghĩa là gặp phải sự điều chỉnh ngắn hạn. Tại thời điểm này, đi dài, nhắm mục tiêu tiếp tục xu hướng tăng dài hạn. Trong thị trường gấu, nếu giá tăng lên khoảng đường 10 ngày, điều đó có nghĩa là gặp phải sự phục hồi ngắn hạn. Tại thời điểm này, đi ngắn, nhắm mục tiêu tiếp tục xu hướng giảm dài hạn.

Cụ thể, khi các điều kiện sau được đáp ứng, đi dài để vào thị trường: giá trên đường 200 ngày, giá dưới đường 10 ngày, và không có vị trí trước đó. Khi các điều kiện sau được đáp ứng, đóng vị trí để thoát khỏi thị trường: giá trên đường 10 ngày, và có vị trí dài trước đó. Để ngăn ngừa tổn thất lớn, lệnh dừng lỗ FAILSAFE được thiết lập. Nếu sự thoái lui từ điểm cao nhất vượt quá 10%, trực tiếp dừng lỗ để thoát.

Có thể thấy rằng logic giao dịch của chiến lược này chủ yếu dựa trên thập giá vàng và thập giá chết của đường trung bình động. Nó đi vào dựa trên pullbacks và exit dựa trên theo dõi xu hướng theo hướng được xác định bởi đường trung bình động dài và ngắn, thuộc về một chiến lược theo dõi xu hướng điển hình.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược này là theo dõi xu hướng chi phí thấp để theo đuổi lợi nhuận vượt quá.

  1. Sử dụng sự kết hợp giữa các đường trung bình động dài hạn và ngắn hạn để xác định hướng của xu hướng chính và thứ cấp có thể khóa hiệu quả các cơ hội xu hướng trung bình và dài hạn và tránh bị đánh lừa bởi các biến động thị trường ngắn hạn.

  2. Bằng cách tham gia dựa trên việc rút ngắn hạn, chi phí tham gia có thể được giảm thiểu để có được tiềm năng lợi nhuận tương đối cao.

  3. Cơ chế dừng lỗ FAILSAFE có thể kiểm soát hiệu quả các lỗ đơn để bảo vệ tiền tài khoản.

  4. Cho phép các lối ra theo dõi xu hướng có thể khai thác đầy đủ các cơ hội xu hướng trung và dài hạn cho lợi nhuận vượt quá alpha.

  5. Việc áp dụng phương pháp giao dịch tự động hoàn toàn tránh tác động cảm xúc chủ quan và làm cho chiến lược dễ thực hiện hơn.

Phân tích rủi ro

Những rủi ro chính của chiến lược này là:

  1. Rủi ro quá phù hợp: Điều kiện thị trường thực tế có thể khác với dữ liệu lịch sử, dẫn đến giảm hiệu suất giao dịch thực tế.

  2. Nguy cơ phá vỡ sai: xác suất giá đảo ngược gần đường trung bình động là tương đối lớn, có thể dễ dàng dẫn đến tổn thất tích lũy nhỏ.

  3. Rủi ro đảo ngược xu hướng: Sự đảo ngược đột ngột trong xu hướng trung và dài hạn là phổ biến, có thể dễ dàng dẫn đến tổn thất tương đối lớn khi nắm giữ các vị trí.

Các biện pháp đối phó là:

  1. Tăng quy mô mẫu và sử dụng nhiều dữ liệu lịch sử hơn cho thử nghiệm độ bền để đảm bảo kết quả đáng tin cậy.

  2. Tối ưu hóa các thông số bằng cách điều chỉnh sự kết hợp của các thông số hệ thống trung bình động để đảm bảo chất lượng tín hiệu.

  3. Mở rộng các đường dừng lỗ một cách thích hợp để cho phép một số giá khôi phục để tránh dừng lỗ quá nhạy cảm.

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

Chiến lược này có thể được tối ưu hóa thêm trong các khía cạnh sau:

  1. Thêm các điều kiện lọc như lọc khối lượng để giảm hiệu quả các giao dịch không cần thiết gây ra bởi các vụ phá vỡ sai.

  2. Kết hợp các chỉ số khác như KDJ và MACD để tạo ra các tín hiệu kết hợp để cải thiện chất lượng tín hiệu giao dịch.

  3. Kiểm tra các khoảng thời gian nắm giữ khác nhau và tối ưu hóa chiến lược lấy lợi nhuận và dừng lỗ để cải thiện tỷ lệ Sharpe v.v.

  4. Điều chỉnh động các tham số dựa trên điều kiện thị trường để tạo ra một cơ chế tối ưu hóa tham số thích nghi để làm cho chiến lược mạnh mẽ hơn.

  5. Thêm các mô-đun giao dịch thuật toán sử dụng máy học vv để tự động tạo tín hiệu giao dịch để giảm can thiệp của con người.

Tóm lại

Chiến lược này được thiết kế từ góc độ theo dõi xu hướng và đáng để nghiên cứu và áp dụng thêm. Với việc điều chỉnh các thông số thích hợp, nó sẽ tạo ra kết quả giao dịch trực tiếp tốt.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © irfanp056
// @version=5

strategy("Simple Pullback Strategy", 
     overlay=true, 
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=1000, // 100% of balance invested on each trade
     commission_type=strategy.commission.cash_per_contract, 
     commission_value=0.005) // Interactive Brokers rate

// Get user input
i_ma1           = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2           = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent   = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose    = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Get indicator values
ma1 = ta.sma(close, i_ma1)
ma2 = ta.sma(close, i_ma2)

// Check filter(s)
f_dateFilter = true

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter
sellCondition   = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1])
stopDistance    = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice       = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition   = strategy.position_size > 0 and stopDistance > i_stopPercent

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)

Thêm nữa