Chiến lược giao dịch định lượng đường trung bình trượt và dải Bollinger

SMA WMA EMA
Ngày tạo: 2024-04-26 11:45:05 sửa đổi lần cuối: 2024-04-26 11:45:05
sao chép: 4 Số nhấp chuột: 596
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch định lượng đường trung bình trượt và dải Bollinger

Tổng quan

Chiến lược này chủ yếu sử dụng đường trung bình di chuyển và đường trung bình Brin để nắm bắt xu hướng và biến động của thị trường. Chiến lược sử dụng ba đường trung bình di chuyển khác nhau: đường trung bình di chuyển đơn giản (SMA), đường trung bình di chuyển trọng lượng (WMA) và đường trung bình di chuyển chỉ số (EMA).

Nguyên tắc chiến lược

  1. Tính trung bình di chuyển được tính trong ba chu kỳ khác nhau: SMA chậm, EMA nhanh và WMA trung bình, tương ứng phản ánh xu hướng dài, ngắn và trung bình của thị trường.
  2. Theo tiêu chuẩn chênh lệch giá, hai nhóm bẫy được tính toán: bẫy mở khoang ((khoảng cách lên xuống gần hơn) và bẫy dừng lỗ ((khoảng cách lên xuống rộng hơn). Bẫy mở khoang được sử dụng để mở khoang và bẫy dừng lỗ được sử dụng để dừng lỗ.
  3. Khi EMA nhanh trên mở khoan Bin Bin trên đường ray, mở vị trí đầu trống; khi EMA nhanh dưới mở khoan Bin trên đường ray, mở vị trí nhiều đầu. Điều này có nghĩa là giá lệch nhiều hơn so với giá trung bình, xu hướng có thể xảy ra.
  4. Sau khi mở vị trí, nếu giá tiếp tục tăng lên bằng cách phá vỡ rào cản Brin, tất cả các vị trí nhiều đầu sẽ bị xóa; Nếu giá tiếp tục giảm xuống bằng cách phá vỡ rào cản Brin, tất cả các vị trí trống sẽ bị xóa. Điều này nhằm kiểm soát tổn thất, nếu xu hướng đảo ngược, đó là dừng lỗ.
  5. Quá trình trên liên tục lặp lại, cho phép chiến lược có thể điều chỉnh vị trí linh hoạt theo xu hướng thị trường và dừng lỗ kịp thời để đạt được lợi nhuận vững chắc.

Lợi thế chiến lược

  1. Các trung bình di chuyển được tính đến ở ba tốc độ khác nhau để nắm bắt toàn diện các xu hướng thị trường ở mọi cấp độ.
  2. Việc đưa vào các vùng Brin như là điều kiện để mở vị trí mở, có thể được điều chỉnh theo sự biến động của thị trường và đáp ứng linh hoạt với tình hình.
  3. Thiết lập các vùng dừng lỗ, kiểm soát rút lui, và phá vỡ các vị trí bằng phẳng khi thị trường biến động mạnh, tránh tổn thất mở rộng.
  4. Logic rõ ràng, quy tắc đơn giản, dễ thực hiện và tối ưu hóa.
  5. Nó có thể được áp dụng trên nhiều thị trường và trong nhiều giai đoạn.

Rủi ro chiến lược

  1. Trong một thị trường bất ổn, thường xuyên mở lỗ có thể dẫn đến chi phí giao dịch lớn, làm giảm lợi nhuận.
  2. Trong giai đoạn đầu của xu hướng biến đổi, chiến lược có thể vẫn được giao dịch theo hướng xu hướng ban đầu, gây ra một số tổn thất.
  3. Đối với các trường hợp cực đoan, chẳng hạn như giá tăng nhanh, việc ngăn chặn các đai Brin có thể không kiểm soát tốt rủi ro.
  4. Chọn tham số không đúng (ví dụ như chu kỳ trung bình di chuyển, băng thông Brinh, v.v.) có thể làm cho chiến lược không hiệu quả.
  5. Nếu thị trường tiếp tục dao động, chiến lược có thể không thể nắm bắt được cơ hội xu hướng rõ ràng trong thời gian dài.

Hướng tối ưu hóa chiến lược

  1. Tăng kích thước chu kỳ trung bình di chuyển và tham số băng thông Brin để giảm tần suất và chi phí giao dịch trong thị trường bất ổn.
  2. Thêm nhiều chỉ số kỹ thuật hoặc chỉ số cảm xúc thị trường như là bộ lọc để tăng độ chính xác của tín hiệu mở vị trí và tránh giao dịch thua lỗ có thể xảy ra trong giai đoạn đầu của xu hướng.
  3. Cài đặt các quy tắc đặc biệt cho các tình huống cực đoan, chẳng hạn như tạm ngưng mở vị trí mới khi nhảy vọt, để kiểm soát rủi ro.
  4. Tối ưu hóa các tham số, tìm ra các tham số phù hợp nhất với thị trường hiện tại, nâng cao tính ổn định của chiến lược.
  5. Thêm các quy tắc quản lý vị trí và quản lý tiền, chẳng hạn như điều chỉnh vị trí tùy theo cường độ của xu hướng hoặc lợi nhuận, thiết lập đường dừng tổng thể, v.v., để kiểm soát rủi ro chiến lược hơn nữa.

Tóm tắt

Robot dự án của trường Marina Parfenova là một chiến lược giao dịch định lượng dựa trên đường trung bình di chuyển và đường dây Brin. Nó cố gắng kiếm lợi nhuận bằng cách nắm bắt xu hướng thị trường, đồng thời kiểm soát rút lui bằng đường dừng lỗ của đường dây Brin.

Mã nguồn chiến lược
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy ("Marina Parfenova School Project Bot", overlay = true)

sma(price, n) =>
    result = 0.0
    for i = 0 to n - 1
        result := result + price [i] / n    
    result

wma(price, n) =>
    result = 0.0
    sum_weight = 0.0
    weight = 0.0
    for i = 0 to n - 1
        weight := n - 1
        result := result + price [i]*weight
        sum_weight := sum_weight + weight
    result/sum_weight

ema(price, n) =>
    result = 0.0
    alpha = 2/(n + 1)
    prevResult = price 
    if (na(result[1]) == false)
        prevResult := result[1]
    result := alpha * price + (1 - alpha) * prevResult

/// Настройки
n_slow = input.int(50, "Период медленной скользящей средней", step=5)
n_fast = input.int(4, "Период быстрой скользящей средней")
n_deviation = input.int(30, "Период среднеквадратического отклонения", step=5)
k_deviation_open = input.float(1.2, "Коэффициент ширины коридора покупки", step=0.1)
k_deviation_close = input.float(1.6, "Коэффициент ширины коридора продажи", step=0.1)

// ----- Линии индикаторов -----

// Медленная скользящая 
sma = sma(close, n_slow)
plot(sma, color=#d3d3d3)

// Линии Боллинджера, обозначающие коридор цены
bollinger_open = k_deviation_open * ta.stdev(close, n_deviation)
open_short_line = sma + bollinger_open
plot(open_short_line, color=#ec8383)
open_long_line = sma - bollinger_open
plot(open_long_line, color=#6dd86d)

bollinger_close = k_deviation_close * ta.stdev(close, n_deviation)
close_short_line = sma + bollinger_close
plot(close_short_line, color=#e3e3e3)
close_long_line = sma - bollinger_close
plot(close_long_line, color=#e3e3e3)

// Быстрая скользящая
ema = ema(close, n_fast)
plot(ema, color = color.aqua, linewidth = 2)

// ----- Сигналы для запуска стратегии -----

// если ema пересекает линию open_short сверху вниз - сигнал на создание ордера в short
if(ema[1] >= open_short_line[1] and ema < open_short_line)
    strategy.entry("short", strategy.short)

// если ema пересекает линию open_long снизу вверх - сигнал на создание ордера в long
if(ema[1] <= open_long_line[1] and ema > open_long_line)
    strategy.entry("long", strategy.long)

// если свеча пересекает верхнюю линию коридора продажи - закрываем все long-ордера 
if (high >= close_short_line)
    strategy.close("long")

// если свеча пересекает нижнюю линию коридора продажи - закрываем все short-ордера
if (low <= close_long_line)
    strategy.close("short")