Chiến lược giao dịch định lượng dựa trên sự đảo ngược đường trung bình động kênh ATR


Ngày tạo: 2023-12-11 15:38:25 sửa đổi lần cuối: 2023-12-11 15:38:25
sao chép: 3 Số nhấp chuột: 776
1
tập trung vào
1621
Người theo dõi

Chiến lược giao dịch định lượng dựa trên sự đảo ngược đường trung bình động kênh ATR

Tổng quan

Chiến lược này là một chiến lược chỉ làm nhiều hơn, nó sử dụng giá phá vỡ ATR kênh thấp để xác định thời gian vào và thoát bằng đường trung bình ATR hoặc ATR kênh trên là điểm dừng. Đồng thời, nó cũng sử dụng ATR để tính giá dừng. Chiến lược này phù hợp để giao dịch đường ngắn nhanh chóng.

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

Khi giá giảm xuống giới hạn dưới của kênh ATR, nó cho thấy giá giảm bất thường. Tại thời điểm này, chiến lược sẽ thực hiện nhiều lệnh vào khi mở đường K tiếp theo. Giá dừng là giá vào trừ ATR Stop Factor nhân ATR. Giá dừng là đường trung bình của kênh ATR hoặc đường trên của kênh ATR, nếu giá đóng cửa K hiện tại thấp hơn giá thấp nhất của một đường K trước đó, thì một đường K trước đó là giá dừng.

Cụ thể, chiến lược này bao gồm các logic sau:

  1. Tính ATR và đường trung bình ATR
  2. Xác định điều kiện lọc thời gian
  3. Thẻ có thể được thêm vào khi giá thấp hơn giới hạn của kênh ATR
  4. Lần tiếp theo khi K-line mở màn, hãy thêm vào.
  5. Ghi lại giá vé
  6. Tính toán giá dừng lỗ
  7. Hạn chế khi giá cao hơn đường trung bình ATR hoặc giới hạn trên ATR
  8. Khi giá thấp hơn giá dừng lỗ, dừng lỗ rút ra

Phân tích lợi thế

Chiến lược này có những ưu điểm sau:

  1. Sử dụng kênh ATR để xác định vào và dừng, độ tin cậy cao hơn
  2. Các nhà kinh tế đã đưa ra một số biện pháp để giảm bớt giá trị của các đồng tiền này.
  3. Quy tắc dừng lỗ nghiêm ngặt, kiểm soát rủi ro hiệu quả
  4. Khả năng giao dịch nhanh chóng, không cần phải giữ vị thế lâu dài
  5. Quy tắc đơn giản, dễ hiểu, dễ thực hiện và tối ưu hóa

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Chi phí giao dịch và rủi ro trượt điểm liên quan đến giao dịch thường xuyên
  2. Có thể xảy ra tình huống dừng thiệt hại liên tục được kích hoạt
  3. Các tham số không được tối ưu hóa có thể ảnh hưởng đến hiệu quả của chiến lược
  4. Hạn chế có thể quá lớn khi giá của chỉ số biến động lớn

Bạn có thể làm giảm rủi ro bằng cách điều chỉnh chu kỳ ATR, giảm hệ số dừng lỗ, v.v.

Hướng tối ưu hóa

Chiến lược này cũng có thể được tối ưu hóa bằng cách:

  1. Thêm các bộ lọc cho các chỉ số khác để tránh bỏ lỡ thời điểm xuất hiện tốt nhất
  2. Tối ưu hóa tham số chu kỳ ATR
  3. Cân nhắc tham gia vào cơ chế tái nhập học
  4. Động thái điều chỉnh mức dừng lỗ
  5. Tham gia vào quy tắc đánh giá xu hướng, tránh tham gia ngược

Tóm tắt

Chiến lược này nói chung là một chiến lược đảo ngược đường trung bình phá vỡ đường ngắn đơn giản và thực tế. Nó có quy tắc nhập cảnh rõ ràng, cơ chế dừng lỗ nghiêm ngặt và cách dừng hoàn chỉnh. Ngoài ra, nó cũng cung cấp một số không gian tối ưu hóa cho điều chỉnh tham số.

Mã nguồn chiến lược
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 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/
// © Bcullen175

//@version=5
strategy("ATR Mean Reversion", overlay=true, initial_capital=100000,default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=6E-5) // Brokers rate (ICmarkets = 6E-5)
SLx = input(1.5, "SL Multiplier", tooltip = "Multiplies ATR to widen stop on volatile assests, Higher values reduce risk:reward but increase winrate, Values below 1.2 are not reccomended")
src = input(close, title="Source")
period = input.int(10, "ATR & MA PERIOD")
plot(open+ta.atr(period))
plot(open-ta.atr(period))
plot((ta.ema(src, period)), title = "Mean", color=color.white)

i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Check filter(s)
f_dateFilter = true

atr = ta.atr(period)

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = low < (open-ta.atr(period)) and strategy.position_size == 0 and f_dateFilter
sellCondition   = (high > (ta.ema(close, period)) and strategy.position_size > 0 and close < low[1]) or high > (open+ta.atr(period))
stopDistance    = strategy.position_size > 0 ? ((buyPrice - atr)/buyPrice) : na
stopPrice       = strategy.position_size > 0 ? (buyPrice - SLx*atr): na
stopCondition   = strategy.position_size > 0 and low < stopPrice

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)