Chiến lược phạm vi trung bình động hàm mũ thích ứng


Ngày tạo: 2024-02-26 14:58:32 sửa đổi lần cuối: 2024-02-26 14:58:32
sao chép: 2 Số nhấp chuột: 650
1
tập trung vào
1617
Người theo dõi

Chiến lược phạm vi trung bình động hàm mũ thích ứng

Tổng quan

Chiến lược này sử dụng tốc độ tính toán nhanh hơn của chỉ số trung bình trọng lượng tuyến tính ((EHMA) và kênh thích ứng để xây dựng chiến lược theo dõi xu hướng. Do tốc độ tính toán nhanh hơn của EHMA, có thể xác định hiệu quả xu hướng thay đổi giá, tránh phá vỡ giả tạo ra tín hiệu giao dịch không cần thiết. Đồng thời, kênh thích ứng có thể lọc một số biến động giá, chỉ phát ra tín hiệu giao dịch khi giá phá vỡ kênh, giảm khả năng giao dịch không hiệu quả và tăng khả năng kiếm tiền.

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

  1. EHMA được tính theo chỉ số trung bình trọng số theo chiều dọc theo tham số Period. EHMA có tốc độ tính toán nhanh và có thể theo dõi xu hướng thay đổi giá một cách hiệu quả.

  2. Theo tham số RangeWidth, trên và dưới EHMA mở rộng một kênh thích ứng. Chỉ khi giá cao hơn đường kênh trên hoặc thấp hơn đường kênh dưới, xu hướng được coi là chuyển hướng và phát ra tín hiệu giao dịch.

  3. Xác định mối quan hệ giữa giá và đường dẫn. Giá trên khi đi trên đường dẫn, giá dưới khi đi xuống đường dẫn. Giá dưới khi đi trên đường dẫn, giá trên khi đi xuống đường dẫn.

Phân tích lợi thế

Chiến lược này có những ưu điểm sau đây so với chiến lược trung bình di chuyển thông thường:

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

  2. Các kênh tự điều chỉnh có thể lọc hiệu quả biến động giá. Chỉ khi giá xác định xu hướng thay đổi, tín hiệu giao dịch sẽ được tạo ra. Có thể lọc một số giao dịch không hiệu quả, nâng cao xác suất lợi nhuận.

  3. Có thể điều chỉnh chiều rộng của kênh một cách linh hoạt để thích ứng với các môi trường thị trường khác nhau. Cổng rộng có thể lọc nhiều biến động hơn, giảm tần số giao dịch; Cổng hẹp có thể nhận ra sự thay đổi xu hướng sớm hơn, tăng tần số giao dịch.

Phân tích rủi ro

Chiến lược này cũng có những rủi ro sau:

  1. Tuy nhiên, vẫn không thể hoàn toàn tránh được sự phá vỡ giả. Giá có thể bị phá vỡ, đi thẳng lên hoặc đi xuống các đường dẫn. Cần điều chỉnh các tham số thích hợp để kiểm soát rủi ro.

  2. Một số cơ hội giao dịch có thể bị bỏ lỡ khi các kênh quá rộng. Các kênh có thể được thu hẹp thích hợp để tăng độ nhạy.

  3. Lối giao dịch có thể bị hủy bỏ nếu nó quá hẹp.

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

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

  1. Tham số tối ưu hóa Period. Điều chỉnh chu kỳ tính toán trung bình để phù hợp với các đặc điểm của các giống và biểu đồ chu kỳ khác nhau.

  2. Các tham số tối ưu hóa RangeWidth. Chuyển đổi phạm vi theo mức độ biến động của thị trường và sở thích rủi ro cá nhân.

  3. Tăng chiến lược dừng lỗ. Trong quá trình giữ vị trí, thiết lập điểm dừng lỗ hợp lý, kiểm soát hiệu quả mức lỗ tối đa trong một giao dịch.

  4. Kết hợp với các chỉ số khác để lọc các mục nhập. Ví dụ: tăng số lượng giao dịch, giảm hiệu quả của mục nhập.

  5. Ứng dụng đa giống và tối ưu hóa tham số. Thử nghiệm trên nhiều giống và chu kỳ, tối ưu hóa tham số chung.

Tóm tắt

Chiến lược này kết hợp các chỉ số EHMA và các chỉ số kênh tự điều chỉnh, tạo thành chiến lược theo dõi xu hướng. Nó có thể xác định hiệu quả xu hướng thị trường, đồng thời lọc biến động giá và tránh giao dịch không cần thiết. Sau khi tối ưu hóa một loạt các tham số và kiểm soát rủi ro, nó có thể mang lại lợi nhuận ổn định trên nhiều giống và chu kỳ.

Mã nguồn chiến lược
/*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)