移動平均のクロスオーバー取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-24 14:59:44
タグ:

img

概要

移動平均クロスオーバー取引戦略は,比較的一般的な定量的な取引戦略である.この戦略は,異なる期間の移動平均を計算し,そのクロスオーバー状況に応じて取引信号を生成する.具体的には,4期,8期,20期の指数的な移動平均 (EMA) を計算する.短期EMAが長期EMAを超えると,ロング;短期EMAが長期EMAを下回ると,ショート.

戦略の論理

この戦略の基本的な論理は

  1. 4期,8期および20期間の EMA線を計算する.
  2. 4期間のEMA線と8期間のEMA線との関係を判断します.
    1. 4期間のEMA線が8期間のEMA線を超えると 価格トレンドが強くなっていることを意味します これは上昇シグナルです
    2. 4期間のEMAが8期間のEMAを下回ると,価格傾向が弱まっていることを意味します. これは下落信号です.
  3. 同時に20期間のEMA線の方向性を判断してください
    1. 20期間のEMA線が上昇すると,ロングを入力します.
    2. 20期間の EMA線が下がると ショートに入力します
  4. 4 期間の EMA ラインと 8 期間の EMA ラインの関係が逆転すると,Exit を準備する.
  5. 20期間のEMA線が逆転すると,Exit Now.

この方法によって,市場シグナルを判断するために異なる期間の移動平均値のクロスオーバーを利用し,最も長い期間の移動平均値の方向性を利用して偽のシグナルをフィルタリングし,安定した取引戦略を構築します.

戦略 の 利点

この戦略の主な利点は以下の通りです.

  1. 戦略の論理は シンプルで明快で 分かりやすく実行できます
  2. ダブルコンディションフィルタリングで 誤った信号を減らすことができます
  3. 20期間のEMAからの刺激は 主要な傾向を特定し 安定性を高めることができます
  4. 取引頻度を調整するための設定可能なパラメータ.
  5. 複雑な戦略を構築するために他の指標やモデルと簡単に組み合わせることができます.

戦略 の リスク

この戦略にはいくつかのリスクもあります:

  1. ダブル移動平均戦略は 誤った信号を生む傾向があります
  2. 固定期限は市場の変化に適応できない.
  3. 市場変動で損失を起こすのは簡単です

主な解決策は以下の通りです

  1. 保持期間を適切に短縮し,損失を間に合うようにします.
  2. パラメータを動的に最適化し 移動平均期を調整します
  3. 他の指標やモデルと組み合わせて 複雑な戦略を作成します

オプティマイゼーションの方向性

戦略は以下の側面で最適化できます.

  1. 期間の最適化:異なる品種に応じて,最適なMA期間の組み合わせを決定する.

  2. ストップ損失の最適化: 単一の損失を制御するために合理的にストップ損失のポイントを設定する.

  3. パラメータ最適化: 遺伝アルゴリズム,マルコフ鎖などを使用してパラメータを動的に最適化します.

  4. モデル融合: LSTM,RNN,その他のディープラーニングモデルと統合して,より多くのアルファを抽出します.

  5. ポートフォリオ最適化:他の技術指標戦略と組み合わせて戦略ポートフォリオを構築する.

概要

一般的には,移動平均クロスオーバー戦略は比較的古典的で一般的に使用される定量的な取引戦略である.この戦略はシンプルな論理を持ち,理解し,実装しやすく,一定の安定性があります.しかし,間違った信号を生成し,市場の変化に適応できないなど,いくつかの問題もあります.これらの問題はパラメータ最適化,ストップ損失最適化,モデル融合などの方法によって改善することができます.全体として,移動平均戦略は,より複雑な戦略と組み合わせて,強力な複雑な戦略を構築するための基本的なモジュールとして戦略ツールボックスで使用することができます.


/*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
//future strategy
//strategy(title = "stub", default_qty_type = strategy.fixed, default_qty_value = 1,  overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2.05)
//stock strategy
strategy(title = "stub",   overlay = true)
//forex strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true)
//crypto strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true, commission_type=strategy.commission.percent,commission_value=.0,default_qty_value=10000)


testStartYear = input(1900, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testEndYear = input(2018, "Backtest Start Year")
testEndMonth = input(12, "Backtest Start Month")
testEndDay = input(1, "Backtest Start Day")
testPeriodEnd = timestamp(testStartYear,testStartMonth,testStartDay,0,0)


testPeriod() => true

ema1 = ema(close,4)
ema2 = ema(close,8)
ema3 = ema(close,20)

go_long = ema1[0] > ema2[0] and ema3[0] > ema3[1]
exit_long = ema1[0] < ema2[0] or ema3[0] < ema3[1]

go_short = ema1[0] < ema2[0] and ema3[0] < ema3[1]
exit_short = ema1[0] > ema2[0] or ema3[0] > ema3[1]

 
if testPeriod()
    strategy.entry("simpleBuy", strategy.long, when=go_long)
    strategy.exit("simpleBuy", "simpleSell",when=exit_long)
    
    strategy.entry("simpleSell", strategy.short,when=go_short)
    strategy.exit("simpleSell", "simpleSell",when=exit_short)
        
    


もっと