
この戦略は,価格トレンドを識別し,トレンドを追跡することを目的として,双 EMA指標に基づいて構築されています.戦略は,まず,中長線 EMA と短期 EMA を計算し,その後,両者の黄金交差を介して多頭入場を実現し,死板を空頭入場を実現します.同時に,戦略は,偽信号をさらにフィルターするために,最高/最低のフィルタリングも導入しています.
この戦略の核心指標は,短時間EMAと長時間EMAを含む二重EMAである.具体的には,以下のような変数が戦略で定義されている.
ema1: 中長線EMA周期,デフォルトは34日 ema2:短期EMA周期,デフォルトは13日
ema_sr: 閉店価格に基づく中長線EMA highest_ema: ema_srの最高値EMA,周期はema2 lowest_ema: ema_srの最低値EMA,周期はema2
ema_ysl:取引シグナルを生成するEMA,ema_srとhighest/lowest_emaの大きさの関係で計算される
crossesは,ema_slとema_yslの黄金クロスとデッドフォークを検出し,トレンド追跡を実現します.
二重EMAの組み合わせにより,価格トレンドをより正確に判断することができる.中長線EMAは短期的なノイズをフィルターし,短期EMAは中期的なトレンドの転換をタイムリーに追跡することができる.最高/最低EMAの導入により,偽の信号をさらにフィルターし,不必要な取引を減らすことができる.
この戦略の最大の利点は,トレンドを正確に識別することにある.双EMA指標は,単一のEMAやSMAなどの他の指標よりも,トレンドの転換を識別する能力が優れている.そして,highest/lowest_emaの適用は,短期的な逆戻りによる偽信号を効果的にフィルタリングすることができ,これはトレンド追跡戦略に不可欠である.
また,この策略のパラメータは単純で,簡単に調整・最適化できます.ユーザは2つのEMAパラメータのみに注意を向けるだけで,非常に直感的です.また,この策略は容易に理解・使用できます.
この戦略の主なリスクは,トレンド反転を認識できないことにある. 価格が長期的調整または重大な転換を形成するときに,双EMAのポーチが遅れていることは,最適な入場時間を逃す可能性があります. この場合,ポジションが過重になり,大きな損失をもたらす可能性があります.
さらに,EMAは緊急事態に対応する能力も持っていない.大きなブラック・スウェン事件が起きた場合,戦略も同様に損なわれる可能性がある.
上記のリスクを緩和するために,中長線EMAの長さを適切に短縮するか,またはMACDなどの指標を突発的事態に対応するために導入することをお勧めします.同時に,最大損失を制御するためにストップローズを設定することもできます.
この戦略にはさらに最適化できる余地があります.具体的には,以下の3つの主要な最適化方向があります.
EMAのパラメータの組み合わせをテストし,最適なパラメータを探します.
価格の変動に誤ったシグナルの発生を防ぐために,取引量の判断を高めること.
トレンドラインやチャネルなどのツールを組み合わせることで,トレンドの転換点をより正確に判断できます.
パラメータ最適化,フィルタリング条件の追加などの手段によって,戦略の安定性と収益性をさらに向上させる見通しである.これは,定量テスト担当者が継続的に反測し,最適化する必要がある.
この戦略は,全体的にトレンドを識別する能力が強く,双EMAを組み合わせることでノイズをフィルターし,価格曲線を効果的に平らげる.Highest/lowest EMAの導入も信号の信頼性を高めます.反測の結果から見ると,戦略は,より良い安定した利益を得ることができます.
しかし,戦略自体は遅滞しており,トレンドの逆転を早期に識別することができません.これは,この戦略が直面する主要なリスクであり,将来の最適化の重点です.我々は,パラメータ調整,信号フィルターなどの手段によって,戦略の頑丈性をさらに強化し,より多くの市場環境で安定した収益を得ることができるようにすることを期待しています.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
// Modified from kivancfr3762's A2MK script
strategy("EMA STRATEGY", overlay=true)
ema2=input(13, "EMA2 Length")
ema1=input(34, "EMA1 Length")
ema_sr = ema((max(close[1], high) + min(close[1], low)) / 2, ema1)
highest_ema = ema(highest(ema_sr, 3), ema2)
lowest_ema = ema(lowest(ema_sr, 3), ema2)
k1 = ema_sr > highest_ema
k2 = ema_sr < lowest_ema
ema_ysl = iff(k1, lowest_ema, highest_ema)
longCondition = crossover(ema_ysl, ema_sr)
if (longCondition)
strategy.entry("Short", strategy.short)
shortCondition = crossunder(ema_ysl, ema_sr)
if (shortCondition)
strategy.entry("Long", strategy.long)