EMAクロスオーバー・トレーディング戦略は,シンプルで効果的な定量的なトレーディング戦略である. 指数的な移動平均値 (EMA) とクロスオーバー・シグナルを使用して価格動向を特定し,エントリー&エグジットポイントを決定する.より複雑な戦略と比較して,理解し実装するのが簡単である.
鍵は,異なるパラメータを持つ2つのEMAを使用することにある. EMA1は25日とEMA2は100日に設定されている. 短期EMAが長期EMAを超えると,それは購入信号である. 短いEMAがより長いEMAを下回ると,それは販売信号である. したがって,より短いEMAは短期価格傾向と勢いを捉え,より長いEMAは長期的な傾向を反映している. 2つのEMAによって形成された
誤った信号をフィルタリングするために,戦略はいくつかの追加の基準も設定しています.例えば,上昇したキャンドルスタイクパターンまたは50 RSIレベルを超えるクロスオーバーが必要です.これは短期的なノイズによる誤った取引を回避します.
この戦略の最大の利点は,この戦略のシンプルさと直感性です.多くのパラメータと複雑な論理を持つ戦略と比較して,それははるかにユーザーフレンドリーです.
また,短期および長期の時間枠の両方でトレンド変化を記録し,EMAのクラシックな技術指標を使用し,トレンド逆転を特定し,エントリーと出口を決定し,したがってトレンドと取引します.
最後に,誤った信号を減らすために適切なフィルタを設定し,市場の騒音によって誤導されないようにします.これは不安定な市場で戦略の安定したパフォーマンスを可能にします.
主なリスクは,短期・長期トレンドの差異である.劇的な価格変動はクロスオーバー信号を誘発するが,長期トレンドは変わらず,取引が損なわれる.また,レンジバインド市場ではしばしばウィップソーが発生する.
適正でない EMA 期間設定は,EMA の代表力が減少し,トレンドと逆転を捉えるのに不効果的になるため,戦略の業績を危険にさらす可能性があります.これはより高いリスクをもたらします.
さらに,過度に厳しいフィルターは,潜在的な取引機会を逃すことになり,収益性を損なう可能性があります.
KDJ,MACDなどの他の指標と組み合わせると 取引信号を確認し 誤った信号を避けるのに役立ちます
最適なEMA期間を見つけるために異なるパラメータセットをテストし,取引頻度と信頼性をバランスするためにフィルター基準を調整する.
ダイナミックなポジションサイズ化も重要です.例えば,2つのEMAが距離が大きいときより大きなポジション,近づくとより小さい場合です.これは変化する市場状況に適応します.
EMAクロスオーバー戦略は,シンプルで実用的な定量的な取引戦略である.短期的および長期的トレンドとともに取引するために,EMAクロスオーバー信号を活用する.理解し,実装しやすく,複雑性を最小限に抑え,初心者トレーダーに適している.しかし,リスクは無視すべきではない.パラメータとフィルターに対するさらなる最適化は,さまざまな市場で戦略をより堅牢にすることができます.
/*backtest start: 2023-11-11 00:00:00 end: 2023-12-11 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('EMA Crossover Signal', shorttitle='EMA Crossover Signal', overlay=true) // Define input for position size as a percentage of equity position_size_pct = input(1, title='Position Size (%)') / 100 //Input EMA len1 = input.int(25, minval=1, title='EMA 1') src1 = input(close, title='Source') ema1 = ta.ema(src1, len1) len2 = input.int(100, minval=1, title='EMA 2') src2 = input(close, title='Source') ema2 = ta.ema(src2, len2) //End of format //Format RSI lenrsi = input(14, title='RSI length') outrsi = ta.rsi(close,lenrsi) bodybar1 = math.abs(close - open) bodybar2 = math.abs(close[1] - open[1]) // Plot the EMAs plot(ema1, color=color.new(color.blue, 0), title='EMA 1') plot(ema2, color=color.new(color.red, 0), title='EMA 2') // EMA Crossover conditions emaCrossoverUp = ta.crossover(ema1, ema2) emaCrossoverDown = ta.crossunder(ema1, ema2) var entrybar = close // Initialize entrybar with the current close // Calculate crossovers outside of the if statements emaCrossoverUpOccured = ta.crossover(close, ema1) and ema1 > ema2 and bodybar1 > bodybar2 and close > entrybar emaCrossoverDownOccured = ta.crossunder(close, ema1) and ema1 < ema2 and bodybar1 > bodybar2 and close < entrybar plotshape(series=emaCrossoverUpOccured, location=location.abovebar, color=color.new(color.green, 0), style=shape.triangleup, title='New Buy Order', size=size.tiny) plotshape(series=emaCrossoverDownOccured, location=location.belowbar, color=color.new(color.red, 0), style=shape.triangledown, title='New Sell Order', size=size.tiny) if emaCrossoverUpOccured strategy.entry("Enter Long", strategy.long) else if emaCrossoverDownOccured strategy.entry("Enter Short", strategy.short)