双向移動平均取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-19 14:10:38
タグ:

img

概要

ダブル・ムービング・平均取引戦略 (Dual Moving Average Trading Strategy) は,一般的な定量的な取引戦略である.この戦略は,交差点に基づいて取引信号を生成するために,異なる期間を持つ2つの移動平均を使用する.特に,短期移動平均が長期移動平均を上回ると,それは購入信号とみなされ,短期移動平均が長期移動平均を下回ると,それは販売信号とみなされる.

原則

この戦略の基本原理は,短期移動平均は資産価格の短期トレンドを反映し,長期移動平均は資産価格の長期トレンドを反映する.短期線が長期線を越えると,短期トレンドが上昇し,この時点で購入することが可能であることを示す.短期線が長期線を下回ると,短期トレンドが下落し,この時点で販売することが可能であることを示す.トレンドを追跡し,価格トレンドのターニングポイントを把握する.

具体的には,この戦略は2つの移動平均値を定義する. 短期間の価格動向を把握するための5日間の短期間の移動平均値,および長期間の価格動向を判断するための15日間の長期間の移動平均値. 5日間の線が15日間の線の上を移動すると,短期間の価格が上昇し始めていることを示し,これは購入信号である. 5日間の線が15日間の線を下を横切ると,短期間の価格が低下し始めていることを示し,これは販売信号である.

利点を分析する

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

  1. 操作が簡単で,理解し実行が簡単で,定量取引の初心者向けに適しています.
  2. 複雑な市場傾向の根本的な理由を追求するのを避けます
  3. 柔軟なパラメータ調整,移動平均期間が異なる市場環境に適応するように調整できます.
  4. 効果的なフィルター市場騒音 長期および短期的なトレンドのターニングポイントを捕捉します
  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())

もっと