Chiến lược phạm vi trung bình chuyển động theo cấp số nhân thích nghi

Tác giả:ChaoZhang, Ngày: 2024-02-26 14:58:32
Tags:

img

Tổng quan

Chiến lược này sử dụng chỉ số trung bình chuyển động nhân tố (EHMA) nhanh hơn và một kênh thích nghi để xây dựng một chiến lược theo xu hướng. Vì EHMA tính toán nhanh hơn, nó có thể xác định hiệu quả những thay đổi xu hướng giá và tránh các giao dịch không cần thiết gây ra bởi các sự đột phá sai. Đồng thời, kênh thích nghi có thể lọc ra một số biến động giá. Các giao dịch chỉ được kích hoạt khi giá vượt qua kênh, làm giảm khả năng giao dịch không hiệu quả và tăng lợi nhuận.

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

  1. Tính toán trung bình di chuyển EHMA dựa trên tham số Thời gian. EHMA tính toán nhanh hơn và có thể theo dõi sự thay đổi xu hướng giá hiệu quả.

  2. Xây dựng một kênh thích nghi trên và dưới EHMA dựa trên tham số RangeWidth. Chỉ khi giá tăng trên đường kênh trên hoặc giảm dưới đường kênh dưới, xu hướng được coi là đã thay đổi và tín hiệu giao dịch được kích hoạt.

  3. Xác định mối quan hệ giá với kênh. Mở khi giá vượt qua đường trên, ngắn khi vượt qua đường dưới. Đóng vị trí dài khi giá vượt qua đường trên, đóng vị trí ngắn khi giá vượt qua đường dưới.

Phân tích lợi thế

So với các chiến lược trung bình động thông thường, chiến lược này có những lợi thế sau:

  1. Sử dụng thuật toán EHMA để tính toán đường trung bình động. EHMA phản ứng nhạy cảm hơn với sự thay đổi giá và có thể xác định hiệu quả những thay đổi xu hướng để tránh các giao dịch không cần thiết do sự phá vỡ sai.

  2. Kênh thích nghi có thể lọc ra các biến động giá hiệu quả. Các tín hiệu giao dịch chỉ được kích hoạt khi xu hướng giá đã thay đổi mạnh mẽ. Điều này có thể lọc ra một số giao dịch không hiệu quả và cải thiện lợi nhuận.

  3. Độ rộng kênh có thể được điều chỉnh linh hoạt để thích nghi với các điều kiện thị trường khác nhau. Các kênh rộng hơn có thể lọc nhiều biến động hơn và giảm tần suất giao dịch. Các kênh hẹp hơn có thể xác định sự thay đổi xu hướng sớm hơn và tăng tần suất giao dịch.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. Những sự phá vỡ sai vẫn không thể tránh hoàn toàn. Giá có thể vượt quá kênh. Các thông số cần phải được điều chỉnh đúng cách để kiểm soát rủi ro.

  2. Một số cơ hội giao dịch có thể bị bỏ lỡ nếu kênh quá rộng.

  3. Các kênh quá hẹp có thể làm tăng giao dịch không hiệu quả.

Hướng dẫn tối ưu hóa

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

  1. Tối ưu hóa tham số Thời gian. Điều chỉnh chu kỳ tính toán trung bình động để thích nghi với các sản phẩm và khung thời gian khác nhau.

  2. Tối ưu hóa tham số RangeWidth. Điều chỉnh phạm vi kênh dựa trên biến động thị trường và sở thích rủi ro cá nhân.

  3. Thêm chiến lược dừng lỗ. Đặt các điểm dừng lỗ hợp lý trong thời gian giữ các vị trí để kiểm soát hiệu quả mức lỗ tối đa cho mỗi giao dịch.

  4. Kết hợp với các chỉ số khác để lọc mục. Ví dụ, thêm khối lượng để giảm các mục sai.

  5. Thử nghiệm và tối ưu hóa các tham số phổ biến trên nhiều sản phẩm và khung thời gian hơn.

Tóm lại

Chiến lược này kết hợp chỉ số EHMA và chỉ số kênh thích nghi để hình thành một chiến lược theo xu hướng. Nó có thể xác định xu hướng thị trường hiệu quả và lọc ra biến động giá để tránh giao dịch không cần thiết. Sau một loạt các thông số tối ưu hóa và kiểm soát rủi ro, lợi nhuận ổn định có thể đạt được trên các sản phẩm và khung thời gian khác nhau.


/*backtest
start: 2023-02-25 00:00:00
end: 2024-02-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["v_input_1",1]]
*/

// Credit is due where credit is due:
// Hull Moving Average: developed by Alan Hull
// EHMA: coded by Twitter @borserman
// I've built on their work in an attempt to create a strategy more robust to fake moves
// @0xLetoII

//@version=4
strategy(
  title="EHMA Range Strategy",
  process_orders_on_close=true,
  explicit_plot_zorder=true,
  overlay=true, 
  initial_capital=1500, 
  default_qty_type=strategy.percent_of_equity, 
  commission_type=strategy.commission.percent, 
  commission_value=0.085,
  default_qty_value=100
  )
  

// Position Type
pos_type = input(defval = "Long", title="Position Type", options=["Both", "Long", "Short"])

// Inputs
Period = input(defval=180, title="Length")
RangeWidth = input(defval=0.02, step=0.01, title="Range Width")
sqrtPeriod = sqrt(Period)

// Function for the Borserman EMA
borserman_ema(x, y) =>
    alpha = 2 / (y + 1)
    sum = 0.0
    sum := alpha * x + (1 - alpha) * nz(sum[1])

// Calculate the Exponential Hull Moving Average
EHMA = borserman_ema(2 * borserman_ema(close, Period / 2) - borserman_ema(close, Period), sqrtPeriod)

// Create upper & lower bounds around the EHMA for broader entries & exits
upper = EHMA + (EHMA * RangeWidth)
lower = EHMA - (EHMA * RangeWidth)

// Plots
EHMAcolor = (close > EHMA ? color.green : color.red)
plot(EHMA, color=EHMAcolor, linewidth=2)
plot(lower, color=color.orange, linewidth=2)
plot(upper, color=color.blue, linewidth=2)


// Strategy
long = close > upper
exit_long = close < lower
short = close < lower
exit_short = close > upper


// Calculate start/end date and time condition
startDate  = input(timestamp("2017-01-01T00:00:00"))
finishDate = input(timestamp("2029-01-01T00:00:00"))
 
time_cond  = true


// Entries & Exits
if pos_type == "Both"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
if pos_type == "Long"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
if pos_type == "Short"
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
    

Thêm nữa