EMAクロスオーバー追跡戦略


作成日: 2023-10-25 17:44:35 最終変更日: 2023-10-25 17:44:35
コピー: 0 クリック数: 804
1
フォロー
1617
フォロワー

EMAクロスオーバー追跡戦略

概要

EMA交差策は,2つの異なる周期のEMA平均線の交差を追跡することによって,価格の傾向を判断し,購入と販売の信号を生成する. 短い周期のEMA上に長い周期のEMAを横断するときに購入の信号を生成し,短い周期のEMAの下に長い周期のEMAを横断するときに販売の信号を生成する. この戦略は,同時にSuperTrend指標の假突破を組み合わせる.

戦略原則

この戦略は主にEMA平均線の金叉死叉原理に基づいている。EMA平均線は価格データフィルターノイズを平滑させ,EMA平均線の交差状況によって価格トレンドを判断することができる。短い周期EMA ((20周期) に長い周期EMA ((50周期) を穿越する時,代表の短い周期価格が長い周期価格の上で現在位置していることを示す,価格が突破上昇傾向にあることを示す,買取シグナルを生成する。短い周期EMA周期の下に長い周期EMAを穿越する時,代表の短い周期価格が長い周期価格を下回るのを示す,価格が下下傾向にあることを示す,売り込みシグナルを生成する。

また,この戦略はSuperTrend指標と組み合わせてEMA交差から生じる偽信号をフィルターします.SuperTrend指標はATRによって計算された上位と下位で,真のトレンドをより正確に判断できます.価格がSuperTrend指標の上位を突破すると買取信号が生じ,価格がSuperTrend指標の下位を突破すると売り出します.信号はSuperTrend指標が同時に買取/売り出の信号を生じるときのみ,EMA交差が真の取引信号を生成します.これは,価格の変動から生じるEMA交差の偽信号をフィルターできます.

具体的には,この戦略の判断条件は以下の通りです.

  1. 20EMAが50EMAを突破し,価格がスーパートレンドを突破すると,買い信号が生成されます.

  2. 20EMAが50EMAを突破し,価格がスーパートレンド下線に下落すると,セールシグナルが生成されます.

EMAの交差によって大トレンドを判断し,同時に,スーパートレンド指標のフィルターによる振動を組み合わせることで,戦略的取引信号の正確性を向上させることができる.

優位分析

EMAの交差策には以下の利点があります.

  1. 操作は簡単で実行しやすい.ただ,二つのEMA平均線の交差を計算するだけです.

  2. 価格の波動にフィルタリング作用がある。EMAは移動平均として,部分的な騒音をフィルタリングすることができる。

  3. SuperTrendの指標と組み合わせると,さらにノイズをフィルターし,偽信号を減らすことができます.

  4. EMA周期パラメータを調整することで,異なる市場環境に適応することができる.

  5. カスタマイズ可能な長短ポジション,複数の取引方法.

  6. 異なるタイムサイクルで実現し,異なるタイプのトレーダーに適用されます.

リスク分析

EMAのクロス戦略にはいくつかのリスクがあります.

  1. EMAの交差シグナルは,市場が急激に波動すると,遅滞し,価格変化をタイムリーに反映することができない.

  2. EMA平均線は遅滞しており,誤信号を発生させる可能性があります.

  3. 短周期EMAと長周期EMAのパラメータが正しく設定されていなければ,誤った信号が過剰に発生する可能性があります.

  4. 平均線交差だけでは,市場の実際のトレンドを判断することができないので,ある程度の盲目性がある.

  5. 適切なストップ・ストラトジーを選択し,リスクをコントロールする必要があります.

リスクを下げるには,次のことをしましょう.

  1. EMA周期パラメータを最適化して,適切な快速・ゆっくり平均線周期を選択する.

  2. 持仓期間を適切に短縮し,損失を時間内に止めてください.

  3. 移動平均やK線形状などの他の指標と組み合わせた総合判断を行う.

  4. 取引頻度を適切に調整し,取引回数を減らす.

最適化の方向

この戦略は以下の点で最適化できます.

  1. EMA平均線の周期パラメータを最適化して,異なる周期と市場環境に対応する.自適応パラメータ最適化メカニズムを導入することができる.

  2. SMA,KWMAなど,様々な均線指標を試してみてください.

  3. より多くの指標を組み合わせて取引し,MACD,RSIなどの多要素モデルを形成する.パラメータ最適化と重量調整のための機械学習アルゴリズムを導入する.

  4. ストップ・トラッキング,ストップ・パーセンテージなどのストップ・ストラテジーを追加してリスクをコントロールする.

  5. 取引量フィルタを導入し,取引量指標と組み合わせて偽信号を回避する.

  6. 戦略を最適化する出口,出場ルールを設定する.例えば,結合K線形状,突破などEXIT signals.

  7. 高い時間周期でトレンドを確認し,低い時間周期で入場し,トレンド追跡を実現する.

要約する

EMA交差策略は,シンプルで実用的なトレンド追跡策略である. 価格の中期トレンドを識別し,買出タイミング信号を生成する. スーパートレンド指標と組み合わせると,ノイズを効果的にフィルターし,誤ったトレードを減らす. しかし,この策略は,遅滞して誤った信号を生成するリスクが残っています.

ストラテジーソースコード
/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © alokbothra

//@version=5
strategy("Ema Crossover", overlay=true, initial_capital = 1000)
start = timestamp(2021,1,1,0,0)
end = timestamp(2023,10,30,0,0)
plot (ta.ema(close,20), title = "Ema 20", color = color.green , linewidth = 2)
plot (ta.ema(close,50), title = "Ema 50", color = color.red, linewidth = 2 )

//supertrend 1
Periods = input(title='ATR Period', defval=11)
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3)
changeATR = input(title='Change ATR Calculation Method ?', defval=true)
showsignals = input(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input(title='Highlighter On/Off ?', defval=true)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = close - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn =close+ Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title='UpTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
dnPlot = plot(trend == 1 ? na : dn, title='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title='DownTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
mPlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0)
changeCond = trend != trend[1]

longonly = input.bool(defval = true, title = 'Long Only')
shortonly = input.bool(defval = true, title = 'Short Only')

longCondition = (ta.ema(close, 20) >= ta.ema(close, 50)) 
shortCondition = (ta.ema(close, 20) <= ta.ema(close, 50))
long = (trend == 1)
short = (trend == -1)
sell= short
cover= long
if time >= start and time < end
    if longonly
        if ((longCondition) and (long))
            strategy.entry ("Long Entry", strategy.long, comment ="Long Entry")
        if strategy.position_size > 0
            strategy.close("Long Entry", when = sell, comment = "Long Exit")
    if shortonly
        if ((shortCondition) and (short))
            strategy.entry("Short Entry", strategy.short, comment = "Short Entry")
        if strategy.position_size < 0
            strategy.close("Short Entry", when = cover, comment = "Short Exit")