MACDに基づく複合定量取引戦略


作成日: 2023-12-13 16:44:46 最終変更日: 2023-12-13 16:44:46
コピー: 0 クリック数: 921
1
フォロー
1621
フォロワー

MACDに基づく複合定量取引戦略

概要

この戦略は,MACD指数に基づく複合量化取引戦略である.これは,MACD,KDJなどの複数の指数を統合して,指数間の組み合わせによって取引信号を生成する.

戦略原則

この戦略の核心指標はMACDである。MACDは指数移動平均を表す,トレンド追跡指標である。それは,高速移動平均 ((EMA) と遅い移動平均 ((EMA) で構成されている。速線のデフォルトパラメータは12であり,遅線のデフォルトパラメータは26である。戦略は,2つのEMA線,すなわちDIFの間の差値を計算する。そして,DIFに9日間のEMAを求め,DEA指標を得る。DIF上のDEAを突破すると買入信号が生じ,下の突破すると売り出信号が生じる。

この戦略はまた,KDJ指標を導入した。KDJ指標にはK値,D値,J値が含まれている。その中,K値はランダム値であり,D値はK値の移動平均であり,J値は確実性値である。KDJ指標は,市場の超買超売状態を反映している。J値が100以上になると超買を代表し,10未満になると超売を代表する。戦略は,KDJ指標を組み合わせて,市場の転換点で誤った信号を発信するのを避ける。

戦略的優位性

この戦略は,MACDとKDJなどの複数の指標を統合して,市場のノイズを効果的にフィルターし,トレンドの方向性を識別できます.MACD指標は,短期的な価格変動をタイムリーに捉え,KDJ指標は,中長期のトレンドを確認できます.両者の組み合わせは,敏捷な追求と安定性の間の関係をバランスすることができます.

さらに,戦略には時間選択器が加えられ,自己選択の時間範囲で反測することができる.これは,戦略のパフォーマンスを評価する上でより大きな柔軟性を提供します.

戦略的リスクと解決策

  • 市場が長期にわたって揺れ動いているとき,MACDは誤報を繰り返し発生する.このとき,EMA線のパラメータを適切に調整して,部分的なノイズをフィルターすることができます.

  • KDJ指標のパラメータ設定が不適切であることも結果に影響する.複数のパラメータをテストして,より安定したパラメータの組み合わせを選択することができる.

  • 回帰時間選択は不適切で,戦略の収益を過大評価または過小評価する. 代表的な時間範囲を選択してテストする.

最適化の方向

この戦略は以下の点で最適化できます.

  1. ストップ・メカニズムの増強. 価格がストップ・ラインを触発したときに,強制的に平仓ストップを行う.

  2. 複数の指標フィルターを追加する.RSI,ブリン帯などの他の指標と組み合わせることで,信号の正確性を向上させることができる.

  3. 指標パラメータを最適化する.EMAとKDJのパラメータの組み合わせを変更し,最適なパラメータを探します.

  4. 機械学習技術を用いた自動最適化. ニューラルネットワークを用いた戦略パラメータの訓練と最適化.

要約する

この戦略は,典型的なトレンド追跡を中心に,超買超売のコントロールを補完した量化戦略である.それは,複数の指標の優位性を融合し,安定性と感性を効果的にバランスさせることができる.継続的な最適化と調整により,戦略の適用シナリオをさらに拡大し,長期にわたる安定した利益を得ることができる.

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

//@version=4
strategy(title="New Renaissance", shorttitle="New Renaissance", overlay=true,initial_capital=10000)

source = close

fastlength=input(12, minval=1)
slowlength=input(26,minval=1)
signallength=input(9,minval=1)

// === Defining the MACD oscillator
fastMA=ema(source,fastlength)
slowMA=ema(source,slowlength)
MACD=fastMA-slowMA
signal=sma(MACD,signallength)
delta=MACD-signal

// === Buy and Sell Signals ===
buy=crossover(MACD, signal)
sell=crossunder(MACD, signal)

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2018, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 12,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 31,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2020, title = "Thru Year",       type = input.integer, minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy)    // enter long when "within window of time" AND crossover
strategy.close("L", when = window() and sell)                   // exit long when "within window of time" AND crossunder