ダブルEMAクロスオーバーに基づく定量取引戦略


作成日: 2023-11-21 11:41:40 最終変更日: 2023-11-21 11:41:40
コピー: 0 クリック数: 624
1
フォロー
1621
フォロワー

ダブルEMAクロスオーバーに基づく定量取引戦略

概要

この戦略は,2つの異なる周期のEMA平均線の交差を計算して市場のトレンドを判断し,それに基づいて取引シグナルを生成する.短期のEMAが長期のEMAを突破すると,市場が上昇傾向に入ると考えれば,この戦略は多額のポジションを開く.短期のEMAが長期のEMAを突破すると,市場が下降傾向に入ると考えれば,この戦略は平仓を退出する.

戦略原則

この戦略は主に双EMA平均線の金叉死叉理論を適用する.双EMA平均線は長線EMAと短線EMAに分けられる.短線EMAのパラメータは10日,長線EMAのパラメータは21日と設定されている.

短線EMA上での長線EMAを突破すると,買入シグナルが生じ,短線EMA下での長線EMAを突破すると,売り出せシグナルが生じます.この策略は,同時に成長率の値を設定し,成長率が値を超えた場合にのみ多額のポジションを開き,下落が値を超えた場合にのみ平仓する.

具体的には,購入条件は,ショートラインEMAがロングラインEMAより高く,株価の成長率は設定された正の値を超えていること;平仓条件は,ショートラインEMAがロングラインEMAより低く,株価の成長率は設定された負の値より低いこと.

戦略的優位性

  • 双EMA均線による金叉死叉理論を用いて,比較的単純で信頼性がある.
  • 成長率の値設定を増やし,成長が弱くなる時に誤った取引を避ける
  • 最大損失の割合を厳格に制御できます.
  • EMA平均線パラメータを柔軟に調整し,異なる周期に適用

リスク分析

  • EMA平均線は遅滞しており,価格転換点を逃している可能性がある.
  • 均線交差には遅延性があり,ポジション開設の最適なタイミングを損なう可能性があります.
  • パラメータによる最適化が必要で,パラメータを誤って設定すると取引頻度が高くなり,信号が不足する可能性があります.

最適化の方向

  • MACD,KDなどの他の指標と組み合わせた最適化により,信号の精度が向上する
  • ストップ・ロスを追跡し,利潤を最大化するためのストップ・ロスの策略を増やす
  • EMA周期パラメータを最適化して,異なる品種に最適のパラメータを設定する
  • リアルタイムデータと機械学習の組み合わせによる動的パラメータ調整の最適化

要約する

この戦略は,全体的に比較的シンプルで,双EMA交差によって価格トレンドを判断し,成長率の値を設定して取引信号を発信する.単一の平均線交差と比較して,部分的な偽信号をフィルターすることができる.しかし,EMA平均線自体は,遅滞性の問題があり,他の指標または動態調節と組み合わせて,戦略の効果をさらに向上させることができる.

ストラテジーソースコード
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="ema(ema10-21)", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 15000, commission_type = strategy.commission.percent, commission_value = 0.2)

useTimeLimit    = input(defval = false, title = "Use Start Time Limiter?")
startYear       = input(defval = 2016, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() => true

lenght0 = input(10)
lenght1 = input(21)

source = close

EmaShort = ema(ema(source, lenght0), lenght0)
EmaLong = ema(ema(source, lenght1),lenght1)
plot(EmaShort, color=red)
plot(EmaLong, color=purple)

growth = ((EmaShort-EmaLong)*100)/((EmaShort+EmaLong)/2)
thresholdUp = input(defval=0.05, title="Threshold Up", type=float, step=0.01)
thresholdDown = input(defval=-0.165, title="Threshold Down", type=float, step=0.001)

if( startTimeOk() )
    buy_condition = EmaShort > EmaLong and growth > thresholdUp
    buy_exit_condition = EmaShort < EmaLong and growth < thresholdDown
    strategy.entry("buy", strategy.long, comment="buy", when=buy_condition)
    strategy.close(id='buy', when=buy_exit_condition)