Chiến lược này xác định hướng xu hướng dựa trên sự chéo chéo của các đường EMA với các giai đoạn khác nhau và tạo ra tín hiệu dài và ngắn theo đó. Nó chủ yếu sử dụng hai đường trung bình động - EMA 10 ngày và EMA 20 ngày. Khi EMA 10 ngày vượt qua dưới EMA 20 ngày, một tín hiệu ngắn được kích hoạt. Khi EMA 10 ngày vượt qua trên EMA 20 ngày, một tín hiệu dài được kích hoạt. Chiến lược này thuộc về các chiến lược giao dịch trung hạn.
Chiến lược sử dụng hai đường EMA, bao gồm đường EMA 10 ngày và đường EMA 20 ngày. Các đường EMA có thể phản ánh xu hướng giá hiệu quả. Khi đường EMA ngắn hạn vượt qua trên đường EMA dài hạn, nó cho thấy xu hướng giá đang chuyển từ giảm lên tăng, đó là một tín hiệu dài. Khi đường EMA ngắn hạn vượt qua dưới đường EMA dài hạn, nó cho thấy xu hướng giá đang chuyển từ tăng xuống giảm, đó là một tín hiệu ngắn.
Chiến lược này cũng kết hợp các giá trị tối đa và tối thiểu của biến động giá để lọc một số tín hiệu giao dịch.
Cụ thể, bằng cách theo dõi thời gian đạt được giá trị tối đa và tối thiểu, chiến lược đánh giá liệu xu hướng giá có hình thành hay không.
Chiến lược có những lợi thế sau:
Ngoài ra còn có một số rủi ro với chiến lược này:
Các rủi ro có thể được giảm thiểu thông qua:
Chiến lược có thể được tối ưu hóa thêm trong các khía cạnh sau:
Tóm lại, chiến lược giao dịch qua đường EMA này là một chiến lược theo xu hướng đơn giản và thực tế. Nó sử dụng các đường EMA để xác định hướng xu hướng chính, kết hợp với lọc biến động giá để đưa ra quyết định giao dịch. Nó dễ hiểu và điều chỉnh các tham số, thích nghi với giao dịch trung hạn.
/*backtest start: 2024-01-15 00:00:00 end: 2024-01-22 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("PierceMAStrat", overlay=true) lenMA0 = input(title="Length 0",defval=2) lenMA1=input(title="Length 1",defval=10) lenMA2=input(title="Length 2", defval=20) lenMA3 = input(title = "Length3", defval =50) emaLen0 = ema(close, lenMA0) emaLen1 = ema(close, lenMA1) emaLen2 = ema(close, lenMA2) emaLen3 = ema(close, lenMA3) ascent = if emaLen1[1] < emaLen1[0] true else false descent = if emaLen1[1] > emaLen1[0] true else false TimeSinceAscensionStart = if ascent == true barssince(descent == true) else 0 StartUp = if TimeSinceAscensionStart < 1 true else false StartDown = if TimeSinceAscensionStart < 1 false else true AscentBarCounter = barssince(StartUp == true) DescentBarCounter = barssince(StartDown == true) MaxAscent = if AscentBarCounter[1] > AscentBarCounter[0] and AscentBarCounter[1] > 10 true else false MaxDescent = if DescentBarCounter[1] > DescentBarCounter[0] and DescentBarCounter[1] > 5 true else false longCond = if crossover(emaLen1, emaLen2) and barssince(MaxDescent == true) > 3 true else false shortCond = if crossunder(emaLen1, emaLen2) and barssince(MaxAscent == true) > 3 true else false //longCond = (crossover(emaLen1, emaLen2) and (emaLen2 > emaLen3)) //shortCond = crossunder(emaLen1, emaLen2) and (emaLen2 < emaLen3) if longCond == true strategy.entry("LONG", strategy.long) if shortCond == true strategy.entry("SHORT", strategy.short) plotshape(series=MaxAscent, title="MaximaReached", style=shape.triangledown, location=location.abovebar, color=green, text="MaximaReached", size=size.small) plotshape(series=MaxDescent, title="MinimaReached", style=shape.triangleup, location=location.belowbar, color=red, text="MinimaReached", size=size.small) //plotshape(series=StartUp, title="StartUp", style=shape.triangleup, location=location.belowbar, color=red, text="StartUp", size=size.tiny) //plotshape(series=StartDown, title="StartDown", style=shape.triangleup, location=location.belowbar, color=green, text="StartDown", size=size.tiny) //plotshape(series=(crossover(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=green, text="GBXO", size=size.small) //plotshape(series=(crossover(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=orange, text="RBXO", size=size.small) //plotshape(series=(crossover(emaLen1, emaLen2)), title="GRXOVER", style=shape.triangledown, location=location.abovebar, color=teal, text="GRXO", size=size.small) //plotshape(series=(crossunder(emaLen1, emaLen2)), title="GRXUNDER", style=shape.triangledown, location=location.abovebar, color=purple, text="GRXU", size=size.small) //plotshape(series=(crossunder(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=yellow, text="GBXU", size=size.small) //plotshape(series=(crossunder(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=yellow, text="RBXU", size=size.small) //plotshape(convergence, color=lime, style=shape.arrowup, text="CROSS") plot(emaLen1, color=green, transp=0, linewidth=2) plot(emaLen2, color=red, transp=30, linewidth=2) plot(emaLen3, color=blue, transp=30, linewidth=2)