ダブル・ムービング・平均取引戦略 (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())