Chiến lược định lượng kết hợp đảo ngược trung bình và theo xu hướng

Tác giả:ChaoZhang, Ngày: 2023-09-14 20:45:20
Tags:

Bài viết này giải thích chi tiết về một chiến lược giao dịch định lượng kết hợp cả phương pháp đảo ngược trung bình và theo xu hướng. Nó nhằm mục đích giao dịch ngược xu hướng trong các thị trường xu hướng và lái động lực trong các thị trường xu hướng.

I. Chiến lược logic

Chiến lược chủ yếu sử dụng chỉ số Đường trung bình di chuyển đơn giản và chỉ số RSI để tạo ra các tín hiệu giao dịch:

  1. Khi giá thấp hơn SMA 200 thời gian, nó đánh giá thị trường hiện tại là xu hướng giảm.

  2. Khi chỉ số RSI dưới 20, nó sẽ có các giao dịch đảo ngược trung bình ngược xu hướng.

  3. Khi giá trên SMA 200 thời gian, nó đánh giá thị trường hiện tại là xu hướng tăng.

  4. Khi giá vượt trên SMA, nó cần các giao dịch theo xu hướng.

  5. Các bước ra được kích hoạt khi chỉ số RSI vượt quá 80 hoặc giá giảm dưới SMA một tỷ lệ phần trăm nhất định.

  6. Định kích thước vị trí cho sự đảo ngược trung bình và theo xu hướng có thể được điều chỉnh riêng biệt.

Chiến lược kết hợp các kỹ thuật đảo ngược trung bình và theo xu hướng và áp dụng chúng trong các giai đoạn thị trường khác nhau.

II. Lợi thế của Chiến lược

Những lợi thế chính là:

  1. Kết hợp hai kỹ thuật cải thiện khả năng thích nghi chiến lược.

  2. Nó có thể tìm thấy cơ hội giao dịch trong xu hướng và thị trường khác nhau.

  3. Rủi ro có thể được kiểm soát bằng cách điều chỉnh kích thước vị trí.

  4. Cài đặt tham số đơn giản làm cho nó dễ dàng thực hiện.

III. Các rủi ro tiềm ẩn

Tuy nhiên, những rủi ro là:

  1. Các chỉ số như SMA và RSI dễ bị phá vỡ sai.

  2. Chuyển đổi giữa hai chế độ có thể bị trì hoãn.

  3. Một số khoản rút phải được chịu đựng để có lợi ích lâu dài.

IV. Tóm tắt

Tóm lại, bài viết này đã giải thích một chiến lược định lượng sử dụng phương pháp đảo ngược trung bình và theo xu hướng. Nó có thể giao dịch trong các giai đoạn thị trường khác nhau để cải thiện khả năng thích nghi. Nhưng rủi ro như thất bại chỉ số và chuyển đổi chế độ chậm cần phải được quản lý. Nhìn chung, nó cung cấp một cách tiếp cận linh hoạt để kết hợp các kỹ thuật khác nhau.


/*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)

Thêm nữa