Chiến lược này được thiết lập bằng cách cấu hình nhiều kết hợp đường trung bình nhanh và chậm, làm nhiều hơn khi tất cả các đường nhanh đi qua đường chậm; và bằng phẳng khi có ít nhất một đường nhanh đi qua đường chậm. Chiến lược này tận dụng tối đa lợi thế của nhiều đường trung bình, tạo ra một hệ thống quyết định nắm giữ vị trí mạnh mẽ hơn.
Các thành phần và quy tắc chính của chiến lược này là:
Nhiều nhóm đường trung bình nhanh chậm: sử dụng nhiều chỉ số đường trung bình như SMA, WMA, VWMA.
Tạo nhiều tín hiệu: Tạo nhiều tín hiệu khi đi qua đường dây chậm trên tất cả các đường dây nhanh.
Tín hiệu cân bằng: bất kỳ đường nhanh nào vượt qua đường chậm thì cân bằng.
Stop loss: thiết lập điểm dừng cố định với giá trị ATR.
Chuyển cấu hình: có thể cấu hình linh hoạt nhiều nhóm tham số đường trung bình.
Có thể tăng cường độ tin cậy của tín hiệu bằng cách tham gia bằng cách bỏ phiếu vị trí kết hợp nhiều đường trung bình. Nhiều tham số đường trung bình có thể được cấu hình tùy chỉnh và linh hoạt.
Chiến lược này có những ưu điểm sau đây so với chiến lược đơn phương:
Kết hợp đa đường trung bình cung cấp một sự phán đoán xu hướng toàn diện hơn.
Cách bỏ phiếu để tránh gây hiểu nhầm trong giao dịch ồn ào.
Các tham số đường trung bình có thể được cấu hình tự do, có nhiều không gian tối ưu hóa.
Hỗ trợ nhiều chỉ số đường trung bình, sử dụng linh hoạt.
Cài đặt điểm dừng lỗ, kiểm soát lỗ hổng đơn lẻ.
Sử dụng chu kỳ dài có hiệu quả tốt hơn, có thể làm giảm dao động đường cong.
Tính toán đơn giản, trực quan, dễ thực hiện và vận hành.
Nhìn chung, ổn định và khả năng tồn tại tốt hơn so với đơn phương.
Tuy nhiên, chiến lược này cũng có một số rủi ro:
Đường đa trung bình làm tăng sự phức tạp của chiến lược.
Có nguy cơ tối ưu hóa quá mức các tham số.
Đường trung bình có bản chất là sự nhận biết trễ về sự thay đổi xu hướng.
Không tính đến số lượng giao dịch, có thể có sự cố.
Cài đặt Stop Loss là tùy ý và có thể gây ra sự thanh toán không cần thiết.
Hiệu quả có thể thay đổi theo môi trường thị trường.
Cần chú ý đến tỷ lệ thu hồi lợi nhuận để tránh đường cong quá nhọn.
Các tham số cần kiểm tra trong sự ổn định trong nhiều giống.
Dựa trên những phân tích trên, chiến lược này có thể được tăng cường bằng cách:
Các tham số đường trung bình kiểm tra sức khỏe trong các giống khác nhau.
Thêm khối lượng giao dịch hoặc xác minh tỷ lệ biến động.
Tối ưu hóa các tham số Stop Loss.
Thiết lập dung nạp tối đa.
Xây dựng cơ chế quản lý vị thế động.
Đánh giá hiệu quả của việc giới thiệu học máy.
Hãy chú ý đến mức độ thu hồi tối đa và độ tập trung của đường cong lợi nhuận.
Một chiến lược lặp đi lặp lại để ngăn chặn sự tối ưu hóa quá mức.
Chiến lược này tạo ra một cơ chế quyết định nắm giữ vị thế vững chắc hơn bằng cách thiết lập một danh mục đa phương tiện bằng cách cấu hình. Tuy nhiên, bất kỳ chiến lược nào cũng cần ngăn ngừa sự phù hợp quá mức và điều chỉnh động theo môi trường thị trường. Chỉ có chiến lược định lượng, kiểm tra tối ưu hóa liên tục mới có thể phù hợp với thị trường lâu dài.
/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 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/
// © levieux
//@version=5
strategy(title='Configurable Multi MA Crossover Voting System', shorttitle='Configurable Multi MA Crossover Voting System', initial_capital=1000, overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
crossoverConfig= input.string(defval="2x4,3x5,4x6", title="Crossover Config")
source= input.source(high)
maType= input.string("WMA", title="Moving Average Type", options=["WMA","SMA","VWMA"])
atrPeriod= input(14, title="ATR Period")
profitAtr = input(10, title="Profit ATR x")
lossAtr = input(5, title="Loss ATR x")
ma(src,length,type) =>
float ma = switch type
"SMA" => ta.sma(src, length)
"WMA" => ta.wma(src, length)
"VWMA" => ta.vwma(src, length)
crossoverGroups= str.split(crossoverConfig, ",")
crossoverCount= array.size(crossoverGroups)
crossovers= array.new_string(crossoverCount)
positions= array.new_int(crossoverCount, 0)
longVotes= 0
for i= 0 to crossoverCount-1
crossover= str.tostring(array.get(crossoverGroups, i))
crossoverBoundaries= str.split(crossover, "x")
int fastLength= math.round(str.tonumber(array.get(crossoverBoundaries, 0)))
int slowLength= math.round(str.tonumber(array.get(crossoverBoundaries, 1)))
wmaFast= ma(source,fastLength,maType)
wmaSlow= ma(source,slowLength,maType)
if wmaFast>wmaSlow
longVotes:= longVotes + 1
array.set(positions, i, 1)
longCondition= longVotes==crossoverCount and strategy.position_size==0
//profitTicks = profitAtr*ta.atr(atrPeriod)/syminfo.mintick
//lossTicks = lossAtr*ta.atr(atrPeriod)/syminfo.mintick
profitPrice= close+profitAtr*ta.atr(atrPeriod)
lossPrice= close-lossAtr*ta.atr(atrPeriod)
if strategy.position_size>0
profitPrice:= profitPrice[1]
lossPrice:= lossPrice[1]
plot(profitPrice, color=color.green)
plot(lossPrice, color=color.red)
if longCondition and profitPrice>0
strategy.entry("Long", strategy.long)
if longVotes<crossoverCount and strategy.position_size>0 and (high>profitPrice or low<lossPrice)
strategy.close("Long")
longVotes:= 0