
Chiến lược theo dõi xu hướng theo dõi xu hướng bằng cách kết hợp sử dụng nhiều nhóm các tham số khác nhau của đường trung bình EMA, làm nhiều khi hình thành gai vàng trên EMA có chu kỳ ngắn hơn, làm trống khi hình thành gai chết, thực hiện giao dịch theo dõi xu hướng. Chiến lược này đồng thời sử dụng 7 nhóm đường trung bình EMA, bao gồm chu kỳ 12, 26, 50, 100, 200, 89 và 144, để đánh giá hướng xu hướng bằng cách so sánh sự giao nhau của các EMA này.
Lý luận cốt lõi của chiến lược này dựa trên nguyên tắc giao chéo của đường trung bình EMA. Trong đường trung bình EMA, các EMA có chu kỳ ngắn nhạy cảm hơn với sự thay đổi giá và có thể phản ánh xu hướng giá gần đây; trong khi các EMA có chu kỳ dài ít nhạy cảm hơn với sự thay đổi giá và có thể phản ánh xu hướng dài. Khi một EMA có chu kỳ ngắn đi qua một EMA có chu kỳ dài từ phía dưới, tạo thành cái gọi là “các lưỡi dao vàng” để biểu thị xu hướng ngắn hạn chuyển sang tăng và có thể đặt hàng nhiều hơn. Ngược lại, khi một EMA có chu kỳ ngắn đi qua một EMA có chu kỳ dài từ phía trên xuống, tạo thành một lưỡi dao chết, biểu thị xu hướng ngắn hạn chuyển sang giảm và có thể đặt hàng trống.
Chiến lược này sử dụng 7 nhóm đường trung bình EMA, bao gồm 12 & 26, 12 & 50, 12 & 100, 12 & 200, 12 & 89 và 12 & 144. Chiến lược sẽ so sánh cùng một lúc sự giao nhau của 7 nhóm EMA. Ví dụ: khi EMA ngày 12 vượt qua EMA ngày 26 để tạo ra một cái gai vàng, sẽ mở một giao dịch; khi một cái gai chết xảy ra, nó sẽ làm bằng một giao dịch.
Ưu điểm lớn nhất của chiến lược này là có thể chụp xu hướng trên nhiều thang thời gian cùng một lúc. Bằng cách kết hợp sử dụng nhiều đường trung bình EMA, chiến lược có thể chụp xu hướng ngắn hạn và theo dõi xu hướng dài hạn, thực hiện theo dõi xu hướng trên nhiều thời gian. Ngoài ra, chiến lược có thể tối ưu hóa hiệu suất bằng cách điều chỉnh các tham số của các EMA khác nhau.
Rủi ro chính của chiến lược này là có thể xảy ra tín hiệu giao thoa quá thường xuyên khi sử dụng nhiều kết hợp EMA trung bình. Ví dụ, số lần giao thoa giữa EMA ngày 12 và EMA ngày 26 thường xuyên hơn số lần giao thoa giữa EMA ngày 12 và EMA ngày 200. Nếu không thể kiểm soát tần suất mở kho và kho, chi phí giao dịch sẽ tăng và mất điểm trượt. Ngoài ra, EMA trung bình tự nó bị tụt hậu đối với thay đổi giá, có thể dẫn đến tín hiệu không kịp thời.
Để giảm rủi ro trên, bạn có thể tối ưu hóa các tham số chu kỳ của EMA để tần số giao thoa của nó nằm trong phạm vi thích hợp; Ngoài ra, bạn có thể hạn chế thích hợp số lần mở vị trí trong ngày hoặc thiết lập dừng lỗ để kiểm soát rủi ro.
Không gian tối ưu hóa của chiến lược này chủ yếu tập trung vào điều chỉnh tham số của đường trung bình EMA. Bạn có thể thử nhiều tổ hợp tham số khác nhau trong các chu kỳ khác nhau; Ngoài ra, bạn cũng có thể thử các loại moving average khác như SMA. Ngoài ra, chiến lược có thể thêm các điều kiện bổ sung để lọc tín hiệu, chẳng hạn như chỉ số khối lượng giao dịch, chỉ số tỷ lệ biến động, v.v., để cải thiện chất lượng tín hiệu.
Chiến lược theo dõi xu hướng chéo đa EMA là một chiến lược theo dõi xu hướng phổ biến, thực hiện theo dõi xu hướng trên nhiều thang thời gian bằng cách so sánh các tình huống chéo của nhiều EMA. Ưu điểm của chiến lược này là có thể điều chỉnh tham số một cách linh hoạt để nắm bắt xu hướng ở các cấp khác nhau; nhược điểm là tín hiệu có thể quá thường xuyên, làm tăng chi phí giao dịch.
/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("EMA Trades", overlay=true, pyramiding=4)
src = input(close, title="Source")
shortestLine = input(12, minval=1, title="Shortest Line")
shorterLine = input(26, minval=1, title="Shorter Line")
shortLine = input(50, minval=1, title="Short Line")
middleLine = input(100, minval=1, title="Middle Line")
longLine = input(200, minval=1, title="Long Line")
longerLine = input(89, minval=1, title="Longer Line")
longestLine = input(144, minval=1, title="Longest Line")
shortestLineOutput = ema(src, shortestLine)
shorterLineOutput = ema(src, shorterLine)
shortLineOutput = ema(src, shortLine)
middleLineOutput = ema(src, middleLine)
longLineOutput = ema(src, longLine)
longerLineOutput = ema(src, longerLine)
longestLineOutput = ema(src, longestLine)
//plot(shortestLineOutput, title="Shortest EMA", color=#ffffff)
//plot(shorterLineOutput, title="Shorter EMA", color=#e54fe6)
//plot(shortLineOutput, title="Short EMA", color=#4e6bc3)
//plot(middleLineOutput, title="Middle EMA", color=#1dd6d8)
//plot(longLineOutput, title="Long EMA", color=#d0de10)
//plot(longerLineOutput, title="Longer EMA", color=#ef6a1a)
//plot(longestLineOutput, title="Longest EMA", color=#ff0e0e)
longEnrtyCondition_1 = crossover(shortestLineOutput[1], shorterLineOutput[1]) and shortestLineOutput > shorterLineOutput
longEntryCondition_2 = crossover(shortestLineOutput[1], shortLineOutput[1]) and shortestLineOutput > shortLineOutput
longEnrtyCondition_3 = crossover(shortestLineOutput[1], middleLineOutput[1]) and shortestLineOutput > middleLineOutput
longEntryCondition_4 = crossover(shortestLineOutput[1], longLineOutput[1]) and shortestLineOutput > longLineOutput
shortEnrtyCondition_1 = crossunder(shortestLineOutput[1], shorterLineOutput[1]) and shortestLineOutput < shorterLineOutput
shortEntryCondition_2 = crossunder(shortestLineOutput[1], shortLineOutput[1]) and shortestLineOutput < shortLineOutput
shortEnrtyCondition_3 = crossunder(shortestLineOutput[1], middleLineOutput[1]) and shortestLineOutput < middleLineOutput
shortEntryCondition_4 = crossunder(shortestLineOutput[1], longLineOutput[1]) and shortestLineOutput < longLineOutput
if (longEnrtyCondition_1)
strategy.entry("Buy1", strategy.long)
strategy.exit("Sell1")
if (longEntryCondition_2)
strategy.entry("Buy2", strategy.long)
strategy.exit("Sell2")
if (longEnrtyCondition_3)
strategy.entry("Buy3", strategy.long)
strategy.exit("Sell3")
if (longEntryCondition_4)
strategy.entry("Buy4", strategy.long)
strategy.exit("Sell4")
if (shortEnrtyCondition_1)
strategy.entry("Sell1", strategy.short)
strategy.exit("Buy1")
if (shortEntryCondition_2)
strategy.entry("Sell2", strategy.short)
strategy.exit("Buy2")
if (shortEnrtyCondition_3)
strategy.entry("Sell3", strategy.short)
strategy.exit("Buy3")
if (shortEntryCondition_4)
strategy.entry("Sell4", strategy.short)
strategy.exit("Buy4")