
Chiến lược kéo ngược đường trung bình di chuyển là một chiến lược giao dịch định lượng theo dõi sự giao thoa của giá cổ phiếu với đường trung bình di chuyển để xác định xem có cơ hội kéo ngược hay không, và nếu có, hãy thực hiện hoạt động ngược. Chiến lược này sử dụng đường kéo ngược Fibonacci để thiết lập điểm vào thị trường và điểm dừng lỗ để nắm bắt sự kéo ngược của giá trong ngắn hạn.
Chiến lược này chủ yếu dựa trên hai đường trung bình di chuyển: EMA 14 ngày và SMA 56 ngày. Khi EMA 14 ngày đi qua SMA 56 ngày từ phía dưới tạo ra tín hiệu mua. Sau đó, mã sẽ quay trở lại ngày 20 để tìm một mức thấp như là hỗ trợ, sau đó kết hợp với giá gần điểm đi qua để vẽ đường kéo Fibonacci, với đường kéo 1.272 lần như là entrance, đường kéo 0.618 lần như là exit.
Toàn bộ chiến lược được chia thành một vài bước:
Đây là quy trình và nguyên tắc hoạt động chính của chiến lược. Chiến lược này có thể nắm bắt cơ hội để kiếm lợi nhuận khi giá có một sự đảo ngược ngắn hạn.
Chiến lược này có một số ưu điểm:
Nhìn chung, chiến lược này rất phù hợp để thực hiện giao dịch đảo ngược ngắn hạn, có thể nắm bắt cơ hội này khi thị trường có một sự đảo ngược nhất định. Thực hiện chiến lược cũng khá đơn giản và trực tiếp.
Mặc dù có những ưu điểm riêng, nhưng có một số rủi ro cần lưu ý:
Đối với các rủi ro trên, chúng ta có thể thiết lập thời gian dừng lỗ ngắn hơn, kiểm soát chặt chẽ các tổn thất đơn lẻ; đồng thời tối ưu hóa phạm vi của đường kéo trở lại, thiết lập lợi nhuận mục tiêu hợp lý, do đó tránh một phần rủi ro.
Có rất nhiều cách để tối ưu hóa chiến lược này, chủ yếu là từ những khía cạnh sau:
Kiểm tra các thiết lập tham số khác nhau, chẳng hạn như độ dài chu kỳ của đường trung bình di chuyển, số ngày quay ngược, số lần quay ngược, v.v., để tìm các tham số tối ưu;
Tăng cơ chế dừng lỗ, có thể sử dụng dừng lỗ nhiều lần hoặc dừng lỗ di chuyển, để kiểm soát rủi ro tốt hơn;
Kết hợp với các chỉ số khác của FILTER, tránh giao dịch trong môi trường thị trường không phù hợp;
Tối ưu hóa quản lý vốn, thiết lập kích thước vị trí hợp lý và lỗ hổng rủi ro.
Bằng cách thử nghiệm và tối ưu hóa các tham số, chiến lược này có thể được cải thiện hơn nữa để có được hiệu suất giao dịch ổn định hơn.
Chiến lược kéo ngược đường trung bình di chuyển là một chiến lược giao dịch đường ngắn rất thực tế. Nó có thể nắm bắt cơ hội đảo ngược giá trong thời gian ngắn, giao dịch thông qua các điểm nhập cảnh và điểm dừng được thiết lập trước. Ý tưởng chiến lược rõ ràng, đơn giản, dễ hiểu và thực hiện.
/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("MAC Pullback", overlay=true)
// Setting up timeperiod for testing
startPeriodYear = input(2014, "Backtest Start Year")
startPeriodMonth = input(1, "Backtest Start Month")
startPeriodDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(startPeriodYear, startPeriodMonth, startPeriodDay, 0, 0)
stopPeriodYear = input(2035, "Backtest Stop Year")
stopPeriodMonth = input(12, "Backtest Stop Month")
stopPeriodDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(stopPeriodYear, stopPeriodMonth, stopPeriodDay, 0, 0)
// Moving Averages
ema14 = ema(close, 14)
ema28 = ema(close, 28)
sma56 = sma(close, 56)
// Plot
plot(ema14, title="ema14", linewidth=2, color=green)
plot(ema28, title="ema28", linewidth=2, color=red)
plot(sma56, title="sma56", linewidth=3, color=blue)
// Strategy
goLong = cross(ema14, sma56) and ema14 > ema28
goShort = cross(ema14, sma56) and ema14 < ema28
// Locate Swing Lows
leftBars = input(20)
rightBars=input(20)
swinglow = pivotlow(close, leftBars, rightBars)
plot(swinglow, style=cross, linewidth=8, color=#00FF00, offset=-rightBars)
if goLong == true and time >= testPeriodStart and time <= testPeriodStop
// We try to make sure that we're catching the first Pullback after the crossover
if ema14[12] < sma56[12]
pivotpoint = lowest(40)[0] //lowest value of the month as our swing low
// We calculate a Fib 1.272 extension (from the previous swing low to
// the crossover long entry's open) and use this as our entry target to short the Pullback
extensiontarget = ((close[1] - pivotpoint) * 1.27) + pivotpoint
shorttarget = ((close[1] - pivotpoint) * 0.618) + pivotpoint
strategy.order("Pullback", strategy.short, 5.0, limit=extensiontarget)
// I would like to use a trailing stop but for know we just hope to get
// filled if the pullback reaches all the way down to the 0.618.
// We also place a tight stop loss since we trying to short an uptrend
strategy.exit("Pullback Exit", "Pullback", limit=shorttarget, loss=400)