Bài viết này sẽ giới thiệu chi tiết về một chiến lược giao dịch định lượng sử dụng cả phương pháp quay ngược và theo dõi xu hướng. Chiến lược này nhằm mục đích giao dịch ngược trong tình trạng xu hướng và giao dịch đồng thời theo dõi xu hướng.
A. Nguyên tắc chiến lược
Chiến lược này chủ yếu tạo ra tín hiệu giao dịch thông qua các chỉ số trung bình di chuyển đơn giản và RSI:
Khi giá thấp hơn 200 chu kỳ trung bình di chuyển, nó được coi là đang ở giai đoạn giảm;
Giao dịch trở lại giá trị trung bình ngược khi chỉ số RSI thấp hơn 20;
Khi giá cao hơn 200 chu kỳ di chuyển trung bình, đánh giá hiện đang ở giai đoạn tăng;
Khi giá vượt qua đường trung bình di chuyển, thực hiện giao dịch theo xu hướng theo xu hướng.
Điều kiện là RSI cao hơn 80 hoặc giá giảm một mức độ nhất định so với trung bình di chuyển.
Các vị trí giao dịch có thể được thiết lập riêng biệt cho Mean Return và Trend Tracking.
Chiến lược này sử dụng tổng hợp các kỹ thuật quay trở trung bình và theo dõi xu hướng để thực hiện các thao tác thích hợp ở các giai đoạn khác nhau.
2 - Lợi thế chiến lược
Chiến lược này có những lợi thế chính như sau:
Sự kết hợp của hai kỹ thuật khác nhau có thể giúp cải thiện khả năng thích ứng của chiến lược.
Các cơ hội giao dịch có thể được tìm thấy trong cả thị trường xu hướng và thị trường biến động;
Có thể kiểm soát rủi ro theo các mô hình khác nhau bằng cách điều chỉnh vị trí.
Thiết lập tham số đơn giản và dễ thực hiện.
Ba, rủi ro tiềm ẩn
Tuy nhiên, chiến lược này cũng có những rủi ro:
Các chỉ số như trung bình di chuyển và RSI dễ bị phá vỡ giả;
Có thể có sự chậm trễ trong việc chuyển đổi giữa hai mô hình giao dịch;
Cần phải trả một khoản thu hồi nhất định để có được lợi ích lâu dài.
Bốn nội dung, tóm tắt
Bài viết này mô tả chi tiết một chiến lược giao dịch định lượng sử dụng phương pháp quay trở trung bình và theo dõi xu hướng. Chiến lược này có thể giao dịch ở các giai đoạn thị trường khác nhau để tăng khả năng thích ứng. Nhưng cũng cần phòng ngừa rủi ro thất bại của chỉ số và chậm trễ chuyển đổi mô hình.
/*backtest
start: 2022-09-07 00:00:00
end: 2023-04-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © I11L
//@version=5
strategy("Mean Reversion and Trendfollowing", overlay=true, pyramiding=1, default_qty_value=100000, initial_capital=100000, default_qty_type=strategy.cash, process_orders_on_close=false, calc_on_every_tick=false)
// Input for the starting date
start_date = input(timestamp("1 Feb 2000 12:00"), title="Starting Date")
enableMeanReversion = input.bool(true)
enableTrendfollowing = input.bool(true)
trendPositionFactor = input.float(1)
meanReversionPositionFactor = input.float(0.5)
// Convert the input string to a timestamp
start_ts = timestamp(year(start_date), month(start_date), dayofmonth(start_date), 0, 0)
// Check if the current bar's time is greater than or equal to the start timestamp
start_condition = time >= start_ts
var tradeOrigin = ""
sma200 = ta.sma(close,200)
rsi2 = ta.rsi(close,2)
isMeanReversionMode = close < sma200 or not(enableTrendfollowing)
isTrendfollowingMode = close > sma200 or not(enableMeanReversion)
isRsiBuy = rsi2 < 20 and enableMeanReversion
isRsiClose = rsi2 > 80 and enableMeanReversion
isSmaBuy = close > sma200 and enableTrendfollowing
isSmaClose = close < sma200 * 0.95 and enableTrendfollowing
isBuy = (isMeanReversionMode and isRsiBuy) or (isTrendfollowingMode and isSmaBuy)
positionSizeFactor = isSmaBuy ? trendPositionFactor : meanReversionPositionFactor
// Only execute the strategy after the starting date
if (start_condition)
if (isBuy and strategy.opentrades == 0)
tradeOrigin := isSmaBuy ? "SMA" : "RSI"
strategy.entry("My Long Entry Id", strategy.long, qty=(strategy.equity / close) * positionSizeFactor, comment=str.tostring(positionSizeFactor))
isClose = tradeOrigin == "SMA" ? isSmaClose : isRsiClose
if (isClose)
strategy.exit("Exit", limit = close)
plot(sma200)
plot(sma200 * 0.95, color=color.orange)