二重移動平均に基づく取引戦略


作成日: 2024-01-19 14:10:38 最終変更日: 2024-01-19 14:10:38
コピー: 0 クリック数: 574
1
フォロー
1617
フォロワー

二重移動平均に基づく取引戦略

概要

二重移動平均取引戦略 (Dual Moving Average Trading Strategy) は,一般的な量化取引戦略である.この戦略は,2つの異なる時間周期の移動平均を使用し,その交差状況に応じて取引シグナルを生成する.具体的には,短期移動平均の上で長期移動平均を横断すると,購入シグナルとみなされ,短期移動平均の下に長期移動平均を横断すると,売りシグナルとみなされる.

原則

この戦略の核心原則は,短期移動平均線は,資産価格の短期的傾向を反映し,長期移動平均線は,資産価格の長期的傾向を反映するものである.短期線の上を横切ると,短期的傾向が上昇に転じ,購入することができる.短期線下を横切ると,短期的傾向が低下に転じ,売却することができる.この方法で,順番として,価格傾向の転換点を捕捉することができる.

具体的には,この戦略では2つの移動平均線が定義されています. 一つは,短期価格の傾向を捉えるために使用される5日間の短期移動平均線であり,もう一つは,長期価格の傾向を判断するために使用される15日間の長期移動平均線です. 5日線の下から15日線の横断は,短期価格が上昇し始めていることを示す買い信号であり, 5日線の上から15日線の横断は,短期価格が低下し始めていることを示す売り信号です.

優位分析

他の戦略と比較して,双動平均戦略は以下の利点があります.

  1. 操作がシンプルで,理解しやすい実装で,量子取引の初心者に適しています.
  2. 複雑で複雑な市場における価格の動向を 追及しない根本的な理由
  3. パラメータの調整は柔軟で,移動平均の周期を調整することで,異なる市場環境に対応できます.
  4. 市場騒音を効果的にフィルターする Capture 長期短期トレンドの転換点
  5. 取引コストとスライドポイントの損失を削減するカスタマイズ可能な取引頻度

リスク分析

移動平均の戦略にはいくつかのリスクがあります.

  1. 移動平均は本質的に遅滞の信号です.
  2. 2つの移動平均を同時に観察し,パラメータの調整と効果のテストが複雑である
  3. 価格の急激な変動をうまく処理できず,損をする可能性が高い.
  4. 取引頻度は高すぎたり低すぎたりして,調整が必要である
  5. 効果は市場動向に大きく関連しており,指数の全体的な低迷期にはあまり効果的ではない.

対応方法:

  1. 他の指標と組み合わせたフィルター信号
  2. 移動平均のパラメータを最適化し,テスト効果
  3. 適切な止損範囲を設定する
  4. 移動平均のパラメータを調整し,取引頻度を最適化
  5. 市場状況に応じて調整するパラメータ

最適化の方向

この戦略は以下の方向から最適化できます.

  1. MACD,KDJなどの他の指標のフィルタリング信号と組み合わせて,偽信号を回避する

  2. 適応性のある移動平均を導入し,市場の波動程度に応じて移動平均のパラメータを動的に調整し,安定性を向上させる

  3. 移動平均のパラメータを最適化して,最適のパラメータの組み合わせを見つけ,戦略の効果を向上させる

  4. 損失拡大を防止し,リスク管理能力を向上させるための損失防止メカニズムへの参加

  5. 複数の時間枠の組み合わせで,日線と周線信号を同時に利用し,安定性を向上させる

  6. マルコフ状態のスイッチ,異なる市場の状態によって異なるパラメータを採用し,適応性を向上させる

要約する

双移動平均取引戦略は,全体的に効果が安定した量化取引戦略である.その取引原理は単純で,容易に理解し,実装し,パラメータ調整は柔軟で,市場動向を効果的に追跡することができる.同時に,偽信号を生成し,市場の大幅な変動を扱うのが難しいなど,一定の制限がある.これは,他の補助ツールの導入,およびパラメータ最適化の方法によって制御する必要がある.全体的に,双移動平均戦略は,量化取引初心者の学習と実践に適した有効な戦略である.

ストラテジーソースコード
//@version=3
strategy("CS: 2 Moving Averages Script - Strategy (Testing)", overlay=true)

// === GENERAL INPUTS ===
// short ma
ma1Source   = input(defval = close, title = "MA 1 Source")
ma1Length   = input(defval = 5, title = "MA 1 Period", minval = 1)
// long ma
ma2Source   = input(defval = close, title = "MA 2 Source")
ma2Length   = input(defval = 15, title = "MA 2 Period", minval = 1)

// === SERIES SETUP ===
/// a couple of ma's..
ma1 = ema(ma1Source, ma1Length)
ma2 = ema(ma2Source, ma2Length)

// === PLOTTING ===
fast = plot(ma1, title = "MA 1", color = red, linewidth = 2, style = line, transp = 30)
slow = plot(ma2, title = "MA 2", color = green, linewidth = 2, style = line, transp = 30)

// === LOGIC ===
enterLong = crossover(ma1, ma2)
exitLong = crossover(ma2, ma1)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2012)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2012)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

// Entry //
strategy.entry(id="Long Entry", long=true, when=enterLong and window())
strategy.entry(id="Short Entry", long=false, when=exitLong and window())