
二重移動平均取引戦略 (Dual Moving Average Trading Strategy) は,一般的な量化取引戦略である.この戦略は,2つの異なる時間周期の移動平均を使用し,その交差状況に応じて取引シグナルを生成する.具体的には,短期移動平均の上で長期移動平均を横断すると,購入シグナルとみなされ,短期移動平均の下に長期移動平均を横断すると,売りシグナルとみなされる.
この戦略の核心原則は,短期移動平均線は,資産価格の短期的傾向を反映し,長期移動平均線は,資産価格の長期的傾向を反映するものである.短期線の上を横切ると,短期的傾向が上昇に転じ,購入することができる.短期線下を横切ると,短期的傾向が低下に転じ,売却することができる.この方法で,順番として,価格傾向の転換点を捕捉することができる.
具体的には,この戦略では2つの移動平均線が定義されています. 一つは,短期価格の傾向を捉えるために使用される5日間の短期移動平均線であり,もう一つは,長期価格の傾向を判断するために使用される15日間の長期移動平均線です. 5日線の下から15日線の横断は,短期価格が上昇し始めていることを示す買い信号であり, 5日線の上から15日線の横断は,短期価格が低下し始めていることを示す売り信号です.
他の戦略と比較して,双動平均戦略は以下の利点があります.
移動平均の戦略にはいくつかのリスクがあります.
対応方法:
この戦略は以下の方向から最適化できます.
MACD,KDJなどの他の指標のフィルタリング信号と組み合わせて,偽信号を回避する
適応性のある移動平均を導入し,市場の波動程度に応じて移動平均のパラメータを動的に調整し,安定性を向上させる
移動平均のパラメータを最適化して,最適のパラメータの組み合わせを見つけ,戦略の効果を向上させる
損失拡大を防止し,リスク管理能力を向上させるための損失防止メカニズムへの参加
複数の時間枠の組み合わせで,日線と周線信号を同時に利用し,安定性を向上させる
マルコフ状態のスイッチ,異なる市場の状態によって異なるパラメータを採用し,適応性を向上させる
双移動平均取引戦略は,全体的に効果が安定した量化取引戦略である.その取引原理は単純で,容易に理解し,実装し,パラメータ調整は柔軟で,市場動向を効果的に追跡することができる.同時に,偽信号を生成し,市場の大幅な変動を扱うのが難しいなど,一定の制限がある.これは,他の補助ツールの導入,およびパラメータ最適化の方法によって制御する必要がある.全体的に,双移動平均戦略は,量化取引初心者の学習と実践に適した有効な戦略である.
//@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())