
Chiến lược dự đoán sóng cao là một chiến lược giao dịch định lượng dựa trên sóng cao. Nó sử dụng tính chất mượt của sóng cao, làm biến động nhiều lần trên chuỗi giá, tạo ra nhiều chuỗi giá sau khi mượt. Sau đó kết hợp các chuỗi giá này với nhiều điều kiện phù hợp để dự đoán giá trong tương lai.
Cốt lõi của chiến lược này là thuật toán Gaussian Wave. Bộ lọc Gaussian là một bộ lọc trơn tuyến tính sử dụng hàm Gaussian làm trọng lượng. Trong chiến lược, đặt tham số p là kích thước của cửa sổ lọc. Sau đó tính toán hệ số lọc alpha thông qua hàm tam giác.[i] biểu thị kết quả của chuỗi giá nguyên thủy sau i lần Gaussian wave.
Chiến lược sử dụng tư tưởng luân phiên. Đầu tiên sử dụng alpha và chuỗi giá nguyên thủy price, tính toán sóng ret đầu tiên. Sau đó, dựa trên ret, thực hiện sóng thứ hai, nhận được ret2 nhiều lần.
Điều này có thể làm cho xu hướng trở nên mịn màng hơn và phù hợp hơn thông qua nhiều đợt lọc. Đồng thời kết hợp với nhiều phương pháp phù hợp, dự đoán về xu hướng giá trong thời gian ngắn.
Chiến lược này có những ưu điểm sau:
Sử dụng các sóng cao để làm mịn giá. Nó có thể lọc hiệu quả tiếng ồn tần số cao, làm cho chiến lược ổn định hơn.
Các nhà phân tích cho rằng việc sử dụng các bước lọc lặp đi lặp lại có thể phù hợp hơn với xu hướng giá và dự đoán hiệu quả hơn.
Giá dự đoán dựa trên nhiều mô hình phù hợp. Có thể mô hình hóa biến động giá trong thời gian ngắn để tạo ra tín hiệu giao dịch.
Kết hợp giá hiện tại với giá dự báo để đưa ra phán đoán. Các tín hiệu giao dịch được kết hợp trực tiếp với dự báo xu hướng để tránh bỏ lỡ cơ hội giao dịch.
Đơn giản, dễ hiểu và tối ưu hóa. Nó có thể được sử dụng như là mô-đun cơ bản của chiến lược tần số cao, mở rộng các chỉ số phân tích khác.
Chiến lược này cũng có những rủi ro sau:
Các bộ lọc Gauss có thể làm mịn các biến động giá đột ngột, có thể bỏ lỡ các cơ hội giao dịch ngắn hạn.
Có rủi ro quá phù hợp. Nếu mô hình thay đổi giá thay đổi đột biến, sẽ làm giảm hiệu quả dự báo.
Kích thước của cửa sổ lọc và số bậc đa thức cần được thiết lập chính xác. Nếu không đúng cách, nó có thể thất bại.
Chỉ dựa vào giá mở để tín hiệu giao dịch. Không thể thực hiện giao dịch trên đĩa nội bộ.
Chiến lược này có thể được tối ưu hóa bằng cách:
Thêm mô hình đào tạo và cơ chế đào tạo lại cửa sổ trượt. Cho phép tham số chính sách được điều chỉnh động, giảm nguy cơ quá phù hợp.
Kết hợp nhiều chỉ số và tính năng giá hơn. Nền đầu vào chiến lược phong phú giúp dự báo ổn định hơn.
Tăng cơ chế ngăn chặn thiệt hại. Thiết lập tỷ lệ thiệt hại tối đa để tránh thiệt hại lớn trong các tình huống cực đoan.
Tối ưu hóa quản lý vị trí. Điều chỉnh vị trí theo tỷ lệ chính xác dự báo và biến động động.
Cố gắng dự đoán dựa trên mô hình học máy chính thống. Mô hình học sâu như LSTM. Cải thiện khả năng dự đoán chiến lược.
Chiến lược này nói chung là một chiến lược định lượng tần số cao sử dụng Gaussian Stereo và đa dạng để dự đoán giá. Nó có một số lợi thế, nhưng cũng có chỗ để cải thiện. Bằng cách kết hợp nhiều tính năng, giới thiệu mô-đun động cơ điều chỉnh, cơ chế dừng lỗ và các mô-đun tối ưu hóa, có thể làm cho hiệu quả chiến lược tốt hơn.
/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Gaussbot v1.0", overlay=true)
p = input(20, minval=1, title="Length")
price = input(open, title="Source")
pi=3.1415926535
w=2*pi/p
beta = (1 - cos(w))/(pow(1.414,2.0/3) - 1)
alfa = -beta + sqrt(beta*beta + 2*beta)
ret= pow(alfa,4)*price+4*(1-alfa)*nz(ret[1])-6*pow(1-alfa,2)*nz(ret[2])+4*pow(1-alfa,3)*nz(ret[3])-pow(1-alfa,4)*nz(ret[4])
ret2 = pow(alfa,4)*ret+4*(1-alfa)*nz(ret2[1])-6*pow(1-alfa,2)*nz(ret2[2])+4*pow(1-alfa,3)*nz(ret2[3])-pow(1-alfa,4)*nz(ret2[4])
ret3 = pow(alfa,4)*ret2+4*(1-alfa)*nz(ret3[1])-6*pow(1-alfa,2)*nz(ret3[2])+4*pow(1-alfa,3)*nz(ret3[3])-pow(1-alfa,4)*nz(ret3[4])
ret4 = 3*ret-3*ret2+ret3
diff2 = nz(ret[1]) - nz(ret[2]) - (nz(ret[2]) - nz(ret[3]) )
diff22 = nz(ret2[1]) - nz(ret2[2]) - (nz(ret2[2]) - nz(ret2[3]) )
diff23 = nz(ret3[1]) - nz(ret3[2]) - (nz(ret3[2]) - nz(ret3[3]) )
diff24 = nz(ret4[1]) - nz(ret4[2]) - (nz(ret4[2]) - nz(ret4[3]) )
longCondition = price[0] - ret4[1] > 0
shortCondition = price[0] - ret4[1] < 0
if(longCondition and shortCondition)
longCondition = longCondition[1]
shortCondition = shortCondition[1]
if(longCondition==false and shortCondition==false)
longCondition = longCondition[1]
shortCondition = shortCondition[1]
if (longCondition==true and shortCondition == false)
strategy.entry("Gaussbot Long", strategy.long )
if (longCondition==false and shortCondition == true)
strategy.entry("Gaussbot Short", strategy.short)