Chiến lược này sử dụng trung bình di chuyển cân bằng linh hoạt của hai chu kỳ khác nhau (EVWMA) để hoạt động chéo để tạo ra tín hiệu mua và bán. Một tín hiệu mua được tạo ra khi đi qua một đường chu kỳ dài trên đường chu kỳ ngắn; Một tín hiệu bán được tạo ra khi đi qua một đường chu kỳ dài dưới đường chu kỳ ngắn.
Chiến lược này đánh giá sự thay đổi của xu hướng bằng cách tính các đường EVWMA của các chu kỳ khác nhau và cho phép chúng hoạt động chéo.
Cụ thể, nó đã tính toán hai đường EVWMA:
Dòng thời gian ngắn m1, thời gian dài 1, mặc định là 5
Dòng chu kỳ dài m2, chu kỳ length2, mặc định là 40
Sau đó, nó sử dụng các hàm crossover và crossunder để đánh giá sự giao nhau của m1 và m2:
Nếu m1 trên m2, sẽ tạo ra một tín hiệu mua, thực hiện hoạt động long
Nếu m1 đi qua m2, sẽ tạo ra một tín hiệu bán và thực hiện hoạt động ngắn
Cần lưu ý rằng EVWMA khác với trung bình di chuyển thông thường, nó đặt trọng lượng cao hơn cho dữ liệu gần đây nhất để phản ứng nhanh hơn với sự thay đổi giá. Công thức tính toán như sau:
data = (nz(data[1]) * (nb_floating_shares - volume)/nb_floating_shares) + (volume_price/nb_floating_shares)
trong đónz(data[1]) cho thấy giá trị EVWMA của chu kỳ trước, nb_floating_shares cho thấy tổng giao dịch trong chu kỳ, volume cho thấy giao dịch của chu kỳ hiện tại, volume_price cho thấy giao dịch của chu kỳ hiện tại. Như vậy, hiệu quả của việc đặt trọng lượng cao hơn cho dữ liệu gần đây được thực hiện.
Chiến lược này có những ưu điểm sau:
Sử dụng EVWMA để phản ứng nhanh hơn với sự thay đổi giá và tăng cơ hội kiếm lợi nhuận
Sử dụng giao thoa hai dòng EVWMA để phát hiện các điểm thay đổi xu hướng, nhập cảnh kịp thời
Hoạt động đơn giản, dễ thực hiện
Có thể tùy chỉnh độ dài chu kỳ để phù hợp với các môi trường thị trường khác nhau
Không cần thiết phải tối ưu hóa tham số phức tạp, dễ dàng ổ cứng
Chiến lược này cũng có một số rủi ro:
Bi-line crossover không thể lọc tiếng ồn thị trường và có thể tạo ra một lượng lớn tín hiệu vô hiệu
Không thể xác định được điểm đảo chiều, có nguy cơ bỏ lỡ
Cơ chế ngăn chặn không ngừng, không kiểm soát rủi ro hiệu quả
Các tham số không được tối ưu hóa, thiết lập vòng tròn không chính xác sẽ làm giảm hiệu quả
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Tăng chiến lược ngăn chặn, kiểm soát rủi ro
Tối ưu hóa độ dài chu kỳ của đường, chọn tham số tốt nhất
Thêm tín hiệu lọc số lượng giao dịch, giảm giao dịch không có hiệu lực
Kết hợp các chỉ số khác để đánh giá xu hướng đảo ngược, giảm cơ hội bị bỏ lỡ
Các tham số tối ưu hóa động, độ dài chu kỳ của đường điều chỉnh theo thay đổi thị trường
Phân biệt thị trường nhiều đầu và thị trường trống, sử dụng các tham số khác nhau
Tham gia vào thuật toán học máy để sử dụng đào tạo dữ liệu lớn để xác định thời gian mua và bán
Overall, this elastic weighted moving average cross strategy can effectively detect trend changes and generate trading signals by calculating and letting double EVWMA line cross operations. Chiến lược này đơn giản và dễ thực hiện, nhưng có một số rủi ro và hướng tối ưu hóa. Bằng cách tối ưu hóa cơ chế dừng lỗ, lựa chọn tham số và kết hợp với các chỉ số khác, chiến lược này có thể được tăng cường để phù hợp hơn với giao dịch thực tế.
/*backtest
start: 2023-08-18 00:00:00
end: 2023-08-26 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Elastic Volume Weighted Moving Average Cross Strategy", shorttitle="EVWMA Cross", overlay=true)
length1=input(5, title="EVWMA Short")
length2=input(40, title="EVWMA Long")
nbfs1=sum(volume, length1)
nbfs2=sum(volume, length2)
medianSrc=close
calc_evwma(price, length, nb_floating_shares) =>
data = (nz(data[1]) * (nb_floating_shares - volume)/nb_floating_shares) + (volume*price/nb_floating_shares)
data
m1=calc_evwma(medianSrc, length1, nbfs1)
m2=calc_evwma(medianSrc, length2, nbfs2)
if (crossover(m1, m2))
strategy.entry("MA2CrossLE", strategy.long, comment="MA2CrossLE")
if (crossunder(m1, m2))
strategy.entry("MA2CrossSE", strategy.short, comment="MA2CrossSE")
p1=plot(m1,color=orange,linewidth=2, title="evwma")
p2=plot(m2,color=orange,linewidth=2, title="evwma")