Chiến lược giao dịch kéo ngược trung bình chuyển động nhiều khung thời gian

Tác giả:ChaoZhang, Ngày: 2024-02-29 11:20:28
Tags:

img

Tổng quan

Chiến lược này áp dụng phương pháp trung bình động đa khung thời gian, sử dụng trung bình động dài hạn để xác định hướng xu hướng chính trong khi trung bình động ngắn hạn để xác định hướng xu hướng ngắn hạn. Khi xu hướng dài hạn phù hợp với xu hướng ngắn hạn, các vị trí được thực hiện phù hợp. Khi trung bình động ngắn hạn kéo trở lại gần trung bình động dài hạn, nó chỉ ra một sự điều chỉnh ngắn hạn trình bày cơ hội giao dịch theo hướng ngược. Chiến lược này hoạt động tốt nhất cho các cổ phiếu xu hướng trong khung thời gian trung và dài hạn.

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 (SMA) để xác định hướng xu hướng dài hạn và đường SMA 10 ngày cho hướng xu hướng ngắn hạn. Khi giá đóng trên đường SMA 200 ngày và dưới đường SMA 10 ngày, nó báo hiệu xu hướng tăng dài hạn với pullback ngắn hạn, tạo cơ hội mua. Khi giá đóng dưới đường SMA 200 ngày và trên đường SMA 10 ngày, nó báo hiệu xu hướng giảm dài hạn với sự bật ngắn hạn, tạo cơ hội bán.

Cụ thể, khi các điều kiện sau được đáp ứng, bước vào dài được kích hoạt: Close > 200 ngày SMA AND Close < 10 ngày SMA. Khi các điều kiện sau được đáp ứng, bước vào ngắn được kích hoạt: Close < 200 ngày SMA AND Close > 10 ngày SMA.

Sau khi vào, một cơ chế dừng lỗ 10% được thực hiện. Vị trí sẽ được dừng nếu sự khôi phục từ giá nhập vượt quá 10%. Ngoài ra, nếu tùy chọn i_lowerClose được bật, nó sẽ chờ một mức đóng thấp hơn trước khi thoát, tránh sự nhạy cảm quá mức của mức dừng lỗ.

Phân tích lợi thế

Chiến lược này kết hợp các đường trung bình động nhiều khung thời gian, cho phép xác suất cao trong việc nắm bắt hướng xu hướng trung hạn đến dài hạn. Nó cung cấp thời gian nhập cảnh hợp lý khi SMA ngắn hạn kéo trở lại SMA dài hạn. So với các hệ thống đường trung bình động duy nhất, xác suất bị mắc kẹt trong các sự điều chỉnh ngắn hạn được giảm.

Rủi ro liên quan đến chiến lược này được xác định rõ và giới hạn. Tỷ lệ dừng lỗ 10% hạn chế kích thước lỗ tối đa. Ngoài ra, bộ lọc phạm vi thời gian tránh giao dịch trong thời gian cụ thể.

Phân tích rủi ro

Có nguy cơ bị mắc kẹt trong chiến lược này. Nếu sự điều chỉnh ngắn hạn kéo dài quá lâu hoặc kích thước pullback quá lớn, stop loss có thể được kích hoạt dẫn đến việc buộc phải thoát vào thời điểm không phù hợp. Điều này đưa ra nguy cơ mất mát.

Khả năng thích nghi của chiến lược này trên các công cụ giao dịch là hạn chế. Đối với cổ phiếu có biến động cao và thời gian điều chỉnh kéo dài, chiến lược này có xu hướng đánh stop loss sớm và mang lại hiệu suất kém.

Trong thời gian điều chỉnh lớn trên toàn thị trường, ví dụ như khủng hoảng tài chính, chiến lược này có thể chịu tổn thất lớn.

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

Các hệ thống trung bình động nhiều hơn có thể được giới thiệu để tạo ra một cơ chế lọc nhiều. Ví dụ, thêm một SMA 50 ngày, các vị trí đầu vào chỉ được xem xét khi giá nằm giữa SMA 50 ngày và SMA 200 ngày. Điều này thêm lọc ra các cổ phiếu có đặc điểm xu hướng kém hơn.

Một cơ chế dừng lỗ năng động có thể được thực hiện. Cụ thể, sau khi nhập, tỷ lệ dừng lỗ được điều chỉnh dựa trên sự biến động quan sát thay vì 10% cố định.

Các chỉ số khác đo lường điều kiện thị trường cũng có thể được kết hợp. Ví dụ: MACD, khi MACD cho thấy sự khác biệt thị trường, chiến lược này có thể bị tắt tạm thời để tránh thua lỗ. Nó thêm một cơ chế thời gian thị trường để bật và tắt chiến lược.

Kết luận

Kết luận, đây là một chiến lược trung bình chuyển động đa khung thời gian điển hình. Nó tận dụng hướng xu hướng trung dài hạn được chỉ ra bởi trung bình chuyển động dài hạn, trong khi tận dụng các cơ hội rút lui ngắn hạn được tiết lộ bởi trung bình chuyển động ngắn hạn. Các yếu tố rủi ro được xác định và giới hạn tốt.


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 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) // 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