この戦略は,異なる期間のEMA線のクロスオーバーに基づいてトレンド方向を決定し,それに応じてロングとショートシグナルを生成する.主に2つの移動平均値 - 10日間のEMAと20日間のEMAを使用する. 10日間のEMAが20日間のEMAを下回ると,ショートシグナルがトリガーされる. 10日間のEMAが20日間のEMAを上回ると,ロングシグナルがトリガーされる.この戦略は中期取引戦略に属している.
この戦略は,10日EMAと20日EMAを含む2つのEMA線を使用する. EMA線は価格の傾向を効果的に反映することができる. 短期EMA線が長期EMA線の上を横切ると,価格傾向が低下から上昇へと変化することを示す. 短期EMA線が長期EMA線を下に横切ると,価格傾向が上昇から低下へと変化することを示す. これは短い信号である.
この戦略は,価格変動の最大値と最小値を組み合わせて,一部の取引信号をフィルタリングする.取引信号は,価格変動が一定程度に達した後のみ起動する.これは,いくつかの誤った信号を一定程度フィルタリングすることができます.
特に,最大値と最小値が達成される時間を追跡することで,戦略は価格傾向が形成されているかどうかを判断する.実際の取引信号は,最大値または最小値がしばらく持続した後のみ起動する.
この戦略には以下の利点があります.
この戦略にはいくつかのリスクもあります:
リスクは以下の方法で軽減できます.
この戦略は,次の側面においてさらに最適化することができる.
概要すると,このEMAクロスオーバー戦略は,シンプルで実践的なトレンドフォロー戦略である.主要トレンド方向を決定するためにEMA線を使用し,取引決定のための価格変動フィルタリングと組み合わせます.パラメータを理解し調整し,中期取引に適応することが簡単です.さらなる最適化により,これは長期的に保持する価値のある定量戦略になり得ます.
/*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)