Chiến lược giao dịch đảo ngược theo Gaussian

Tác giả:ChaoZhang, Ngày: 2023-11-07 15:01:19
Tags:

img

Tổng quan

Đây là một chiến lược xác định sự đảo ngược giá tiềm năng bằng cách sử dụng bộ dao động giá Gaussian Detrended Price (GDPO) được tùy chỉnh kết hợp với chu kỳ giá trơn tru. Nó sử dụng bộ dao động bị đảo ngược với trơn tru Gaussian và thiết lập các quy tắc vào và ra cụ thể để nắm bắt các cơ hội đảo ngược.

Chiến lược logic

Chiến lược này đầu tiên tính toán dao động giá bị suy giảm (DPO) bằng cách so sánh giá đóng với trung bình chuyển động nhân tố (EMA) trong một khoảng thời gian cụ thể để xác định chu kỳ giá ngắn hạn. Các giá trị DPO sau đó được làm mịn bằng cách sử dụng Arnaud Legoux Moving Average (ALMA) với kỹ thuật làm mịn Gaussian để lọc tiếng ồn.

Các quy tắc nhập và xuất được xác định dựa trên các sự kiện chéo giữa GDPO trơn tru và phiên bản bị tụt hậu. Một vị trí dài được nhập khi GDPO trơn tru vượt qua độ trễ và là âm. Vị trí dài được ra khi GDPO trơn tru vượt qua dưới độ trễ hoặc đường không. Một vị trí ngắn được nhập khi GDPO trơn tru vượt qua dưới độ trễ và là dương tính. Vị trí ngắn được ra khi GDPO trơn tru vượt qua độ trễ hoặc đường không.

GDPO trơn tru và độ trễ của nó được vẽ bằng màu sắc khác nhau. Dòng không cũng được hiển thị như một tham chiếu. Màu nền biểu đồ thay đổi khi chiến lược nhập vào một vị trí. Các dấu chéo được vẽ ở các điểm chéo như tín hiệu thoát.

Phân tích lợi thế

Chiến lược này kết hợp các kỹ thuật giảm xu hướng và làm mịn Gaussian để xác định rõ hơn các cơ hội đảo ngược so với các dao động khác. GDPO cải thiện độ chính xác bằng cách kết hợp phân tích chu kỳ với giảm xu hướng.

Phân tích rủi ro

Chiến lược này nhạy cảm với các tham số như độ dài thời gian và các tham số làm mịn. Kiểm tra ngược rộng rãi là cần thiết để xác định các tham số tối ưu, nếu không có tín hiệu sai quá mức có thể xảy ra. Chiến lược có thể tạo ra tổn thất liên tiếp trong các thị trường xu hướng. Đánh lỗ dừng nên được sử dụng để kiểm soát lỗ giao dịch duy nhất. Việc đảo ngược thất bại cũng là một rủi ro lớn. Khả năng đảo ngược nên được xác nhận bằng cách sử dụng các mẫu biểu đồ và sức mạnh xu hướng.

Tối ưu hóa có thể được thực hiện bằng cách điều chỉnh động các thông số và kết hợp các chỉ số xu hướng để cải thiện độ bền.

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

Chiến lược có thể được tối ưu hóa trong một số khía cạnh:

  1. Điều chỉnh động các thông số làm mịn để tăng mịn trong xu hướng và giảm tín hiệu sai.

  2. Bao gồm các chỉ số xu hướng như ADX để tránh tổn thất trong thị trường xu hướng.

  3. Thêm các cơ chế dừng lỗ như dừng động hoặc dừng lại.

  4. Tối ưu hóa điều kiện nhập bằng cách sử dụng các chỉ số hoặc mô hình bổ sung để có độ chính xác nhập cao hơn.

  5. Tối ưu hóa quản lý vốn bằng cách điều chỉnh kích thước vị trí và dừng dựa trên điều kiện thị trường.

  6. Kiểm tra chiến lược trên các khung thời gian khác nhau như dữ liệu hàng ngày hoặc hàng tuần.

Tóm lại

Chiến lược đảo ngược bị suy giảm Gaussian xác định chu kỳ ngắn hạn bằng GDPO và trích xuất tín hiệu bằng lọc Gaussian để nắm bắt sự đảo ngược theo các quy tắc nhập và xuất định. Nó kiểm soát hiệu quả rủi ro của giao dịch đảo ngược nhưng đòi hỏi tối ưu hóa tham số và xác nhận xu hướng.


/*backtest
start: 2022-10-31 00:00:00
end: 2023-11-06 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
// © DraftVenture

//@version=5
strategy(title="Gaussian Detrended Reversion Strategy", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=15)

//Detrended Price Oscillator for price cycles
period_ = input.int(50, title="Price Length", minval=1)

barsback = period_/2 + 1
ma = ta.ema(close, period_)
dpo = close - ma[barsback]

// Rounded ALMA Calculations for gaussian smoothing
almaSource = dpo
almaWindowSize = input(title="Smoothing Length", defval=50)
lagLength = input(title="Lag Length", defval=25)
almaSmoothed = ta.alma(almaSource, almaWindowSize, 0.85, 6)
almaLag = almaSmoothed[lagLength]

// Reversion entry conditions
entryL = ta.crossover(almaSmoothed, almaLag) and almaSmoothed < 0
exitL = ta.crossunder(almaSmoothed, almaLag) or ta.crossunder(almaSmoothed, 0)
entryS = ta.crossunder(almaSmoothed, almaLag) and almaSmoothed > 0
exitS = ta.crossover(almaSmoothed, almaLag) or ta.crossover(almaSmoothed, 0)

// Long entry and exit
if entryL
    strategy.entry("Long", strategy.long)

if exitL
    strategy.close("Long")

// Short entry and exit
if entryS
    strategy.entry("Short", strategy.short)

if exitS
    strategy.close("Short")

// Plot the oscillator
plot(almaSmoothed, title="GDPO", color=color.green)
plot(almaLag, title="Lag", color=color.white)

hline(0, title="Zero Line", color=color.white)

bgcolor(entryL ? color.new(color.green, 40) : na)
bgcolor(entryS ? color.new(color.red, 40) : na)

plotshape(series=ta.crossunder(almaSmoothed, almaLag) or ta.crossunder(almaSmoothed, 0), style=shape.xcross, location=location.top, color=color.white, size=size.tiny)
plotshape(series=ta.crossover(almaSmoothed, almaLag) or ta.crossover(almaSmoothed, 0), style=shape.xcross, location=location.bottom, color=color.white, size=size.tiny)

//Strategy by KP

Thêm nữa