Chiến lược này giao dịch dựa trên các tín hiệu giao dịch được tạo ra bởi Faytterro Estimator. Faytterro Estimator là một chỉ số đánh giá xu hướng bằng cách tính tỷ lệ hội tụ và phân kỳ của giá. Chiến lược này kết hợp các tín hiệu giao dịch của Faytterro Estimator và một số điều kiện bổ sung để tạo ra các tín hiệu dài và ngắn có kích thước khác nhau tại các điểm lý tưởng.
Cốt lõi của chiến lược này là Faytterro Estimator. Việc tính toán của nó là: đầu tiên tính tỷ lệ hội tụ và phân kỳ (CR) của giá, sau đó xây dựng một hàm bậc hai, có thể phản ánh hình dạng của đường cong CR bằng cách thiết lập các hệ số khác nhau. Bằng cách quan sát các điểm uốn của đường cong bậc hai, nó đánh giá sự thay đổi xu hướng giá.
Cụ thể, chiến lược đầu tiên tính toán CR của giá cả. Sau đó nó xây dựng một array dizi dài 2 * len, và lấp đầy nó với các giá trị hàm bậc hai theo trình tự. Các hệ số của hàm bậc hai phản ánh giá trị của CR. Sau đó, bằng cách quan sát hai giá trị tại chỉ số len + 1 + 5 và len + 1 + 4, nó xác định xem hàm bậc hai có điểm uốn cong hay không. Nếu có một điểm uốn cong, nó tạo ra tín hiệu mua hoặc bán.
Trên cơ sở này, chiến lược cũng đặt ra một số điều kiện bổ sung, chẳng hạn như thiết lập khoảng cách tối thiểu giữa các bước đột phá giá để tránh giao dịch thường xuyên, tạo ra các tín hiệu có kích thước khác nhau, v.v. Những điều kiện này được sử dụng để lọc một số điểm giao dịch không mong muốn.
Chiến lược này có những lợi thế sau:
Sử dụng Faytterro Estimator để đánh giá xu hướng, nhạy cảm với biến động giá và có thể nắm bắt sự thay đổi xu hướng sớm.
Xây dựng một hàm bậc hai để phản ánh hình dạng của đường cong CR và tìm các điểm uốn trực tiếp và hiệu quả.
Tạo ra các tín hiệu có kích thước khác nhau cho phép giao dịch kim tự tháp ở các điểm lý tưởng, tăng tiềm năng lợi nhuận.
Tăng thiết lập khoảng cách tối thiểu sẽ lọc hiệu quả các tín hiệu và tránh giao dịch thường xuyên không hiệu quả.
Nhiều thông số điều chỉnh có thể được tối ưu hóa cho các sản phẩm giao dịch khác nhau, cải thiện khả năng thích nghi.
Logic chiến lược là rõ ràng và dễ hiểu, và mã là rất dễ đọc, làm cho nó dễ dàng để học từ.
Ngoài ra còn có một số rủi ro cần lưu ý cho chiến lược này:
Faytterro Estimator có nguy cơ phù hợp đường cong và có thể hoạt động kém hơn trong một số sản phẩm giao dịch.
Phán xét chỉ dựa trên các điểm uốn cong của đường cong vuông có thể quá thô, dẫn đến những đánh giá sai.
Giao dịch kim tự tháp thường xuyên làm tăng chi phí hoa hồng.
Một số lượng lớn các tham số có thể điều chỉnh làm tăng khó khăn của tối ưu hóa.
Nó không thể xử lý hiệu quả những đánh giá sai trong thời gian dao động giá.
Thiếu cơ chế dừng lỗ có thể dẫn đến tổn thất lớn hơn.
Các giải pháp tương ứng là:
Tối ưu hóa các thông số cho các sản phẩm khác nhau để cải thiện độ bền.
Thêm các chỉ số khác để lọc để tránh đánh giá sai dựa chỉ trên các điểm uốn cong.
Thiết lập stop loss thích hợp để kiểm soát single loss.
Sử dụng các phương pháp dữ liệu lớn để tự động tối ưu hóa các thông số.
Thêm nhận dạng dao động để tránh giao dịch trong các giai đoạn dao động.
Thiết lập logic dừng lỗ hợp lý.
Các hướng tối ưu hóa bao gồm:
Thêm logic dừng lỗ để kiểm soát lỗ đơn, chẳng hạn như dừng lỗ sau hoặc dừng lỗ thời gian.
Thêm các chỉ số khác để tránh đánh giá sai dựa chỉ trên Faytterro Estimator. Ví dụ, kết hợp với MACD, KDJ vv.
Thêm các cơ chế xác nhận để tránh bị ngăn chặn bởi việc rút ngắn hạn.
Tối ưu hóa các tham số điều chỉnh cho các sản phẩm khác nhau bằng cách sử dụng các thuật toán di truyền, tối ưu hóa Bayesian vv.
Xác định các thị trường dao động bằng cách sử dụng ATR, DMI vv và tránh giao dịch trong khi dao động.
Tối ưu hóa logic kim tự tháp để ngăn chặn theo đuổi xu hướng. Ví dụ, điều chỉnh vị trí kim tự tháp dựa trên sức mạnh xu hướng.
Kiểm tra các thông số trên các khung thời gian khác nhau để tìm ra khung thời gian tối ưu.
Chiến lược này đưa ra quyết định dựa trên các tín hiệu giao dịch của Faytterro Estimator, và thêm các phán đoán logic và các tín hiệu nhập cảnh có kích thước khác nhau trên đầu để tạo thành một chiến lược theo xu hướng với các đặc điểm kim tự tháp. Chiến lược này trực quan và dễ hiểu, với khả năng bắt xu hướng mạnh mẽ. Nhưng nó cũng có những vấn đề như đánh giá sai chỉ số, không có lỗ dừng, khó khăn trong tối ưu hóa tham số.
/*backtest start: 2022-09-21 00:00:00 end: 2023-08-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/ // © faytterro //@version=5 // strategy("Faytterro Estimator Strategy", overlay=true, pyramiding=100) src=input(hlc3,title="source") len=input.int(10,title="faytterro estimator lenght", maxval=500) len2=100 len3=input.float(500,title="minumum enrty-close gap (different direction)") len4=input.float(500,title="minumum entry-entry gap (same direction)") cr(x, y) => z = 0.0 weight = 0.0 for i = 0 to y-1 z:=z + x[i]*((y-1)/2+1-math.abs(i-(y-1)/2)) z/(((y+1)/2)*(y+1)/2) cr= cr(src,2*len-1) width=input.int(10, title="strong entry size", minval=1) dizi = array.new_float(500) // var line=array.new_line() //if barstate.islast for i=0 to len*2 array.set(dizi,i,(i*(i-1)*(cr-2*cr[1]+cr[2])/2+i*(cr[1]-cr[2])+cr[2])) buy = array.get(dizi,len+1+5)>array.get(dizi,len+1+4) and array.get(dizi,len+1+5)<cr[len] sell = array.get(dizi,len+1+5)<array.get(dizi,len+1+4) and array.get(dizi,len+1+5)>cr[len] bb=buy? hlc3 : na ss=sell? hlc3 : na sbuy= buy and close<(close[ta.barssince(buy or sell)])[1]-len4 and close<ta.highest(fixnan(ss),len2)-len3*3 ssell= sell and close>(close[ta.barssince(buy or sell)])[1]+len4 and close>ta.lowest(fixnan(bb),len2)+len3*3 buy:= buy and close<(close[ta.barssince(buy or sell)])[1]-len4 and close<ta.highest(fixnan(ss),len2)-len3 //and close>ta.highest(fixnan(ss),len2)-len3*3 sell:= sell and close>(close[ta.barssince(buy or sell)])[1]+len4 and close>ta.lowest(fixnan(bb),len2)+len3 //and close<ta.lowest(fixnan(bb),len2)+len3*3 alertcondition(buy or sell) if (sbuy) strategy.entry("strong buy", strategy.long,width) if (ssell) strategy.entry("strong sell", strategy.short,width) if (buy) strategy.entry("buy", strategy.long) if (sell) strategy.entry("sell", strategy.short)