移動平均クロスオーバーに基づく取引戦略


作成日: 2024-01-24 14:59:44 最終変更日: 2024-01-24 14:59:44
コピー: 0 クリック数: 528
1
フォロー
1617
フォロワー

移動平均クロスオーバーに基づく取引戦略

概要

移動平均線交差取引戦略は,より一般的な量化取引戦略である.この戦略は,異なる周期の移動平均を計算し,それらの交差状況に応じて取引信号を生成する.具体的には,4周期,8周期および20周期の指数移動平均を計算し,短期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線が上昇すると,Enter Long。
    2. 20周期EMA線が下がった場合はEnter Short。
  4. 4周期EMA線と8周期EMA線の関係が逆転したときは,Prepare Exit。
  5. 20周期EMA線方向が逆転すると,Exit Now。

この方法では,異なる周期平均線の交差を活用して市場シグナルを判断し,最も長い周期平均線の方向を活用して誤った信号をフィルターし,安定した取引戦略を構築します.

戦略的優位性

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

  1. 戦略の論理はシンプルで明快で,理解し,実行しやすい.
  2. 双重条件のフィルタリングにより,誤信号を減らすことができます.
  3. 20周期EMAの加減により,大傾向を識別し,安定性を強化する.
  4. カスタマイズ可能なパラメータ,取引頻度調整
  5. 他の指標やモデルの組み合わせで,複合的な戦略を構築しやすい.

戦略リスク

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

  1. 双重均線戦略は偽信号を生じさせる可能性が高い.
  2. 固定サイクルは市場の変化に適応できない.
  3. 株価が揺れ動くと 損失を起こす可能性が高い.

解決策は以下の通りです.

  1. ポジション保持周期を適切に短縮し,損失を時宜停止する.
  2. 動的最適化パラメータ,平均線周期調整。
  3. 他の指標やモデルと組み合わせた複合戦略を作成する.

戦略の最適化

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

  1. サイクル最適化:異なる品種による最適なMAサイクル組み合わせを決定する
    1. ストップ・オプティマイゼーション: ストップ・ポイントを合理的に設定し,単一損失を制御する
    2. 参数最適化:遺伝的アルゴリズム,マルコフ鎖などの方法を用いて動的に最適化する参数

4.モデル融合:LSTM,RNNなどの深層学習モデルと統合し,より多くのAlphaを抽出する

  1. ポートフォリオの最適化:他の指標と戦略のポートフォリオの構築

要約する

移動平均線交差戦略は,全体として,より古典的で一般的な量化取引戦略である.この戦略の論理は単純で,容易に理解し,実行し,一定の安定性がある.しかし,偽信号を生成し,市場の変化に適応できないなど,いくつかの問題もある.これらの問題は,パラメータ最適化,ストップ損失最適化,モデル融合などの方法によって改善することができる.全体として,移動平均線戦略は,戦略ツールキットの基本的なモジュールとして,他のより複雑な戦略と組み合わせて,安定した複合戦略を構築することができる.

ストラテジーソースコード
/*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)