双EMA跨度取引戦略は,2つの異なる期限のEMAの跨度比を計算して市場トレンドを判断し,取引を行うトレンドフォロー戦略である.この戦略はシンプルで直接で,中長線トレンドを効果的に追跡することができ,中長線トレンドトレーダーに非常に適しています.
この戦略は,主に2つのEMAの数値の大きさとそれらの間の間隔に基づいてトレンドの方向を決定する.戦略は,まず,短期EMAと長期EMAを計算し,典型的な構成は13サイクルと26サイクルのEMAである.その後,二つのEMAの間の間隔のパーセントを計算し,短期EMAが長期EMAより高く,幅が設定の値 (例えば5%) より大きい場合は,トレンドアップとして判断され,多取引を行う.短期EMAが長期EMAより低く,幅が設定の値より大きい場合は,トレンドダウンとして判断され,空売りを行う.価格が再び下落したり,短期EMAを突破したりするときは,ポジションを平準化する.
この戦略の核心的な論理は:
このような設計により,中長期のトレンドを効果的に追跡し,トレンドが変化する時に適切な方向を切り替えることができます.また,跨度値の設定は,非重要な期間の調整が不要な取引を防ぐことができます.
リスクは以下の方法で軽減できます
この戦略は以下の点で最適化できます.
パラメータ最適化: EMA周期パラメータと跨度値を回測して最適化し,最適なパラメータ組み合わせを探す
トレンドフィルター:MACD,ブリン帯などの他のトレンド識別指標を追加し,波動の檻を避ける
ストップ・ローズ戦略:単一損失をコントロールするために移動ストップまたは時間ストップを設定する
利潤の返還:利潤の一部を設定し,利潤の一部をロックし,利潤の一部をロックした後に移動停止点
定量最適化: 戦略の定量最適化を実現するために,パラメータとフィルタリング条件を自動最適化するために,機械学習などの方法を使用する
組合せ最適化:この戦略を他の非関連戦略と組み合わせて,撤退を軽減し,安定性を向上させる
パラメータ,フィルター条件,ストップ,リターン,利益の回転などの多面的な最適化により,この戦略をより安定させ,より多くの市場状況に適応させ,より科学的で有効にすることができる.量化および組合せ最適化は,戦略の効果を大幅に向上させることもできる.
双EMA跨度戦略は,単純で直接的な,トレンド追跡に適した戦略である.それは,トレンドの方向を判断するために2つのEMAを必要とし,中長線のポジションに非常に適している.また,パラメータ最適化,トレンドフィルター,ストップダスト戦略など,複数の方法で改善することができ,戦略をより安定して信頼できる.この戦略は,実行しやすい,量的に最適化することも容易であり,推奨されるトレンド追跡戦略である.
/*backtest
start: 2023-08-19 00:00:00
end: 2023-08-23 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("2-EMA Strategy", overlay=true, initial_capital=100, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)
diffMinimum = input(0.95, step=0.01)
small_ema = input(13, title="Small EMA")
long_ema = input(26, title="Long EMA")
ema1 = ema(close, small_ema)
ema2 = ema(close, long_ema)
orderCondition = ema1 > ema2?((ema1/ema2)*100)-100 > diffMinimum:((ema2/ema1)*100)-100 > diffMinimum
longCondition = close > ema1 and ema1 > ema2
if (longCondition and orderCondition)
strategy.entry("Long", strategy.long)
shortCondition = close < ema1 and ema1 < ema2
if (shortCondition and orderCondition)
strategy.entry("Short", strategy.short)
strategy.close("Short", when=close > ema1)
strategy.close("Long", when=close < ema1)
plot(ema(close, small_ema), title="EMA 1", color=green, transp=0, linewidth=2)
plot(ema(close, long_ema), title="EMA 2", color=orange, transp=0, linewidth=2)