
Chiến lược xu hướng đa đầu của nhiều đường trung bình là một chiến lược theo dõi xu hướng dựa trên việc xây dựng các phán đoán về đường trung bình di chuyển của chỉ số ((EMA) trên nhiều chu kỳ khác nhau. Nó sẽ làm nhiều hơn khi giá vượt qua đường EMA 10 ngày và các đường EMA khác có chu kỳ dài hơn; sau đó sử dụng lệnh dừng theo dõi 8% để khóa lợi nhuận.
Chiến lược này sử dụng sáu đường EMA có chu kỳ khác nhau là 10, 20, 50, 100, 150 và 200 ngày. Các đường EMA được sử dụng để xác định giai đoạn chu kỳ hiện tại của thị trường. Khi đường EMA ngắn hạn (chẳng hạn như đường 10 ngày) đi qua đường EMA dài hơn (chẳng hạn như đường 20 ngày, đường 50 ngày), nó được coi là giai đoạn đánh dấu cho thị trường bước vào xu hướng đa đầu.
Cụ thể, một chiến lược sẽ mở thêm khi đáp ứng các điều kiện sau:
Sau khi mở thêm vị trí, chiến lược sẽ sử dụng 8% dừng lỗ để khóa lợi nhuận. Nói cách khác, miễn là giá cổ phiếu không giảm hơn 8% giá mua, thì sẽ tiếp tục giữ vị trí đó.
Nhìn chung, ý tưởng cốt lõi của chiến lược này là: sử dụng nhiều điều kiện lọc EMA để xác định xu hướng đa đầu, sau đó dừng lỗ để khóa lợi nhuận.
Chiến lược này có một số ưu điểm chính:
Chiến lược này cũng có một số rủi ro cần lưu ý:
Đối với các rủi ro trên, chúng ta có thể tối ưu hóa và cải thiện bằng cách điều chỉnh thích hợp các tham số chu kỳ EMA hoặc giới thiệu các chỉ số khác như một phán đoán hỗ trợ.
Với những đặc điểm của chiến lược này, chúng ta có thể tối ưu hóa trong tương lai từ những khía cạnh sau:
Chiến lược xu hướng đa đầu đa trung bình là một chiến lược theo dõi xu hướng vững chắc và đáng tin cậy hơn. Nó đồng thời kết hợp phán đoán xu hướng và kiểm soát rủi ro. Có rất nhiều chỗ cải thiện thông qua điều chỉnh tham số và tối ưu hóa thuật toán. Nói chung, đây là một chiến lược hiệu quả đáng để thử và nghiên cứu.
/*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=5
strategy('SirSeff\'s EMA Rainbow', overlay=true)
// Testing Start dates
testStartYear = input(2000, 'Backtest Start Year')
testStartMonth = input(1, 'Backtest Start Month')
testStartDay = input(1, 'Backtest Start Day')
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2100, 'Backtest Stop Year')
testStopMonth = input(12, 'Backtest Stop Month')
testStopDay = input(30, 'Backtest Stop Day')
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop
//TSP
trailStop = input.float(title='Long Trailing Stop (%)', minval=0.0, step=0.1, defval=8) * 0.01
longStopPrice = 0.0
longStopPrice := if strategy.position_size > 0
stopValue = close * (1 - trailStop)
math.max(stopValue, longStopPrice[1])
else
0
//PLOTS
plot(series=strategy.position_size > 0 ? longStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Long Trail Stop', offset=1, title='Long Trail Stop')
plot(ta.ema(close, 20))
plot(ta.ema(close, 50))
plot(ta.ema(close, 100))
plot(ta.ema(close, 150))
plot(ta.ema(close, 200))
//OPEN
longCondition = ta.ema(close, 10) > ta.ema(close, 20) and ta.ema(close, 20) > ta.ema(close, 50) and ta.ema(close, 100) > ta.ema(close, 150) and ta.ema(close, 150) > ta.ema(close, 200)
if longCondition and ta.crossover(close,ta.ema(close,10)) and testPeriod()
strategy.entry("BUY1", strategy.long)
if longCondition and ta.crossover(ta.ema(close,10),ta.ema(close,20)) and testPeriod()
strategy.entry("BUY2'", strategy.long)
//CLOSE @ TSL
if strategy.position_size > 0 and testPeriod()
strategy.exit(id='TSP', stop=longStopPrice)