高速移動平均と低速移動平均に基づく定量取引戦略


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

高速移動平均と低速移動平均に基づく定量取引戦略

概要

二重移動平均突破戦略 (Dual Moving Average Breakout Strategy) は,高速移動平均線と遅い移動平均線をベースにした量的な取引戦略である.これは,2つの異なる周期の指数移動平均線 (EMA) を取引信号として使用する.高速移動平均線の上部に遅い移動平均線を突破すると,買入信号が生じる.高速移動平均線下部に遅い移動平均線を突破すると,売り信号が生じる.

戦略原則

この戦略の核心的な論理は,高速移動平均線と遅い移動平均線を使用して取引信号を形成することです.戦略では,高速移動平均線周期は12日,遅い移動平均線周期は26日と定義されています.計算方法は次のとおりです.

  1. 2日周期の価格配列の指数移動平均APを計算する
  2. APをベースにFast移動平均線を計算する.周期は12日
  3. APを基にゆっくり移動平均線を計算する.Slow,周期は26日
  4. 平均線は,移動速度が遅い.
    1. スローでFastを装着すると多頭信号
    2. スローを抜ける時に空頭信号
  5. 価格と移動平均線との関係を組み合わせて,特定の取引シグナルを判断する.
    1. マルチヘッド信号:Fast>Slow && AP>Fast
    2. 空頭信号:Fast

急速な移動平均線と遅い移動平均線の交差によって市場の傾向を判断し,取引シグナルを生成する,典型的な双移動平均線戦略である.

優位分析

双移動均線突破戦略には以下の利点がある.

  1. 戦略の論理はシンプルで明快で,理解し,実行しやすい.
  2. 移動平均周期を調整することで,異なる市場環境に対応できます.
  3. 複数の空白を同時に行うことで,より高い利益を得ることができます.
  4. 価格と移動均等関係の組み合わせにより,より正確な取引シグナルを発信できる
  5. 移動平均線は,市場騒音を効果的に消去するために,一定の遅延性を備えています.

リスク分析

双動均線突破策にはリスクもあります.

  1. 市場が揺れ動いている時,もっと多くの誤信号が出ます.
  2. 双移動均線戦略は曲線適合に容易であり,市場の構造的変化を無視する
  3. 技術指標のみに依存する人は,偽の突破に容易になり,損失のリスクがあります.

解決策は

  1. 移動平均線の周期を最適化し,現在の市場状況に適合させる
  2. 偽突破を避けるために,交差量確認信号などの他の指標と組み合わせる
  3. トレンド追跡戦略を導入し,利益率をコントロールし,リスクを低減する

最適化の方向

双移動均線突破戦略は,以下の点で最適化できる.

  1. 市場の変化に適応するより適切な移動均線周期组合を見つけること
  2. 取引量の増加などの指標をシグナルフィルタリングして,取引シグナルの有効性を確保する
  3. 市場構造指標と組み合わせて,トレンドを識別し,平均周期パラメータを調整する
  4. ダイナミックな移動平均線を使用すると,市場の変化に応じて周期を自動的に調整できます.
  5. リスクの管理と資金の保護を可能にする ストップ・ローズ戦略

要約する

双移動均線突破戦略は,シンプルで実用的な量化取引戦略である.戦略の論理がシンプルで,実行しやすいという利点があるが,市場適応性の問題もある.パラメータ最適化,シグナルフィルタリング,リスク管理などの方法によって,安定した利益を得る取引システムにすることができる.全体的に,双移動均線戦略は,非常に良い戦略の原型であり,量化トレーダーに深入な研究と応用が価値ある.

ストラテジーソースコード
/*backtest
start: 2023-01-17 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("CDC Action Zone V.2", overlay=true)

// CDC ActionZone V2 29 Sep 2016
// CDC ActionZone is based on a simple 2MA and is most suitable for use with medium volatility market
// 11 Nov 2016 : Ported to Trading View with minor UI enhancement
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"])
src = input(title="Data Array",type=input.source,defval=ohlc4)
prd1=input(title="Short MA period", type=input.integer,defval=12)
prd2=input(title="Long MA period",type=input.integer,defval=26)
AP = ema(src,2)
Fast = ema(AP,prd1)
Slow = ema(AP,prd2)


Bullish = Fast>Slow
Bearish = Fast<Slow

Green = Bullish and AP>Fast
Red = Bearish and AP<Fast
Yellow = Bullish and AP<Fast
Blue = Bearish and AP>Fast

Buy = Bullish and Bearish[1]
Sell = Bearish and Bullish[1]


alertcondition(Buy,"Buy Signal","Buy")
alertcondition(Sell,"Sell Signal","Sell")


//Plot

l1=plot(Fast,"Fast", linewidth=1,color=color.red)
l2=plot(Slow,"Slow", linewidth=2,color=color.blue)
bcolor = Green ? color.lime : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
fill(l1,l2,bcolor)

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

// === 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"


if LSB == "Long only" and Buy and window()
    strategy.entry("L",true)
if LSB == "Long only" and Sell and window()
    strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Buy and window()
    strategy.entry("L",true)
if LSB == "Both" and Sell and window()
    strategy.entry("S",false)
if LSB == "Short only" and Sell and window()
    strategy.entry("S",false)
if LSB == "Short only" and Buy and window()
    strategy.close("S",qty_percent=100,comment="TP Short")