Chiến lược giao dịch định lượng dựa trên SMA và dòng xu hướng xoay

Tác giả:ChaoZhang, Ngày: 2024-02-04 15:18:12
Tags:

img

Tổng quan

Chiến lược này kết hợp trung bình di chuyển đơn giản (SMA) và đường xu hướng hồi quy tuyến tính lăn lăn. Nó thiết lập điều kiện bước vào dài khi giá đóng trên cả đường SMA và đường xu hướng, và điều kiện thoát khi giá đóng dưới chúng. Chiến lược chủ yếu sử dụng SMA làm tín hiệu giao dịch và đường xu hướng lăn lăn để hỗ trợ kênh. Nó vào giao dịch khi phá vỡ kênh tăng và thoát khi phá vỡ kênh giảm.

Chiến lược logic

Các thành phần chính của chiến lược này bao gồm:

  1. SMA: Đường trung bình di chuyển đơn giản, tính giá đóng trung bình trong một khoảng thời gian (smaPeriod) dưới dạng đường tín hiệu.

  2. Rolling Trendline: Phụ hợp đường hồi quy tuyến tính tốt nhất trên một cửa sổ (cửa sổ) như tín hiệu xu hướng. Được tính bằng phương pháp bình thường.

  3. Điều kiện nhập cảnh: Đi dài khi giá đóng > SMA và đường xu hướng.

  4. Điều kiện thoát: Đóng vị trí khi giá đóng < SMA và đường xu hướng.

Vì vậy, chiến lược này chủ yếu dựa trên đột phá tín hiệu SMA để vào và đột phá kênh để ra. Nó sử dụng thuộc tính đảo ngược trung bình của MA và hỗ trợ kênh bằng đường hồi quy tuyến tính để thực hiện xu hướng sau các hoạt động đột phá.

Phân tích lợi thế

Chiến lược này tích hợp bộ lọc kép của MA và đường xu hướng, có thể làm giảm hiệu quả các giao dịch phá vỡ sai. Trong khi đó, đường xu hướng lăn cung cấp hỗ trợ kênh chính xác hơn cho các quyết định đáng tin cậy.

  1. Cơ chế lọc kép tránh sự phá vỡ sai và cải thiện độ chính xác quyết định.
  2. Đường xu hướng lăn lăn cung cấp hỗ trợ kênh năng động để giao dịch kênh chính xác hơn.
  3. Logic giao dịch đơn giản và trực quan, dễ hiểu và thực hiện.
  4. Các tham số có thể tùy chỉnh thích nghi với môi trường thị trường khác nhau.

Phân tích rủi ro

Có một số rủi ro của chiến lược này:

  1. Các thông số không chính xác của đường SMA và đường xu hướng có thể dẫn đến việc bỏ lỡ giao dịch hoặc quá nhiều breakout sai.
  2. Trong các thị trường biến động cao, hỗ trợ kênh của SMA và đường xu hướng có thể suy yếu.
  3. Thất bại phá vỡ có thể dẫn đến tổn thất, cần phải dừng lỗ nghiêm ngặt.

Một số hướng tối ưu hóa cho những rủi ro này:

  1. Tối ưu hóa các thông số cho các sản phẩm khác nhau.
  2. Tăng phạm vi dừng lỗ để giảm lỗ đơn.
  3. Ngừng giao dịch trên thị trường biến động để tránh bị mắc kẹt.

Tối ưu hóa chiến lược

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

  1. Thêm các chức năng điều chỉnh động cho thời gian SMA, các tham số trượt dựa trên các chế độ thị trường.

  2. Phát triển cơ chế dừng lỗ đàn hồi. Thiết lập dừng lỗ khi giá phá vỡ đường xu hướng ở một tỷ lệ.

  3. Thêm bộ lọc từ các chỉ số khác chẳng hạn như khối lượng, RSI để cải thiện độ chính xác quyết định.

  4. Phát triển phiên bản đảo ngược. Đi dài khi giá tiếp cận đáy và phá vỡ kênh giảm.

Kết luận

Chiến lược này tích hợp các tín hiệu giao dịch từ đường trung bình động và hỗ trợ kênh từ đường xu hướng lăn để thực hiện các hoạt động theo xu hướng. Bộ lọc kép làm giảm xác suất đột phá sai và cải thiện chất lượng quyết định. Nó có cài đặt tham số đơn giản và logic rõ ràng, dễ thực hiện và tối ưu hóa. Tóm lại, chiến lược này tạo thành một hệ thống giao dịch đột phá xu hướng đáng tin cậy, đơn giản và trực quan.


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

//@version=4
strategy("SMA Strategy with Rolling Trendline", overlay=true)

// Input parameters
smaPeriod = input(14, title="SMA Period")
window = input(20, title="Trendline Window")
startDate = input(timestamp("2023-01-01"), title="Start Date")
endDate = input(timestamp("2023-12-31"), title="End Date")

// Calculating SMA
sma = sma(close, smaPeriod)

// Function to calculate linear regression trendline for a window
linreg_trendline(window) =>
    sumX = 0.0
    sumY = 0.0
    sumXY = 0.0
    sumX2 = 0.0
    for i = 0 to window - 1
        sumX := sumX + i
        sumY := sumY + close[i]
        sumXY := sumXY + i * close[i]
        sumX2 := sumX2 + i * i
    slope = (window * sumXY - sumX * sumY) / (window * sumX2 - sumX * sumX)
    intercept = (sumY - slope * sumX) / window
    slope * (window - 1) + intercept

// Calculating the trendline
trendline = linreg_trendline(window)

// Entry and Exit Conditions
longCondition = close > sma and close < trendline
exitLongCondition = close < sma and close > trendline

// Strategy logic
if (true)
    if (longCondition)
        strategy.entry("Long", strategy.long)
    if (exitLongCondition)
        strategy.close("Long")

// Plotting
plot(sma, title="Simple Moving Average", color=color.blue)
plot(trendline, title="Rolling Trendline", color=color.red)
plotshape(series=longCondition, title="Enter Trade", location=location.belowbar, color=color.green, style=shape.triangleup)
plotshape(series=exitLongCondition, title="Exit Trade", location=location.abovebar, color=color.red, style=shape.triangledown)


Thêm nữa