動力分解 MACD 戦略

作者: リン・ハーンチャオチャン,日付: 2023年10月20日 17:12:31
タグ:

img

概要

モメントブレイクMACD戦略は,主にMACD指標とモメントインジケーターの組み合わせを使用してトレンドフォロー戦略に属する取引信号を生成する.この戦略は,まず高速EMAと遅いEMAを計算し,その後MACD値を計算し,さらにMACDの信号線を計算する.同時に,価格のモメント値を計算する.モメント値がMACD差とともにゼロレベルを超えると,購入信号を生成する.モメント値がMACD差とともにゼロレベルを下回ると,セール信号を生成する.これは取引信号を生成するダブル確認メカニズムに属する.

戦略の論理

この戦略は主にMACDとモメント指標の組み合わせに基づいています.

MACD指標は,トレンドフォローする指標で,高速EMA,遅いEMA,MACDヒストグラムから構成される.高速EMAは通常12日パラメータ,遅いEMAは26日パラメータを有する.計算式は:

FAST EMA = EMA (閉盤価格, 12)

スロー・EMA=EMA (閉じる価格, 26)

MACD = 速いEMA - 遅いEMA

シグナルライン = EMA ((MACD, 9)

低速EMAが低速EMAを超えると,短期上昇傾向が長期上昇傾向より強いことを意味します.これは買い信号です.

モメントインジケーターは価格動きの速度を反映し,計算式は以下です.

モメント=今日の閉店価格 - N日前の閉店価格

N は通常 10 に設定される.今日の閉盤価格が N 日前の閉盤価格より上昇すると,動向値が正になり,上昇傾向を示します.今日の閉盤価格が N 日前の閉盤価格を下回ると,動向値が負になり,下落傾向を示します.

この戦略は,MACD指標とモメント指標を組み合わせる.取引シグナルを生成する基準は:MACD差とモメント差の差がゼロレベルを超えると,購入信号を生成し,ゼロレベルを超えるクロスオーバーを形成する.差がゼロレベルを超えると,売却信号を生成し,ゼロ以下クロスオーバーを形成する.これは,いくつかの偽信号をフィルタリングしてトレンドフォローを達成できる取引信号を生成するための二重確認メカニズムに属する.

利点分析

この戦略の利点は以下の通りです.

  1. MACDとモメンタム指標の組み合わせにより,トレンドフォローが実現し,資産価格が明確な方向性なく振動するときに非効率な取引が回避されます.

  2. 双重確認メカニズムに基づいて 騒音をフィルタリングして 誤った信号による干渉を回避できます

  3. MACDパラメータは調整可能で,異なる製品と取引サイクルに最適化され,高度に適応可能になります.

  4. 両方向のトレンドを把握するために 売買・売買のメカニズムの両方を採用しています

  5. この戦略は 簡単に理解できるもので パラメータが少ないので 初心者が学ぶのに適しています

リスク分析

この戦略にはいくつかのリスクもあります:

  1. MACDとモメントの両方がトレンドフォローする指標に属します.市場が激しい変動を見たり,明確なトレンドがないとき,それらはより非効率な取引を生む可能性があります.

  2. 二重指標の組み合わせは,誤った信号をフィルターすることができますが,いくつかの取引機会を逃すこともあります.リスクをバランスするためにパラメータを調整する必要があります.

  3. 主要なサイクル傾向が逆転すると,MACD指標は遅れ,取引損失につながる可能性があります.

  4. 取引頻度は高く,資本管理と手数料管理に注意を払う必要があります.

  5. 不適切なパラメータは過度の感度や遅延を引き起こす可能性があります. 市場の状況に基づいて継続的なテストと最適化が必要です.

オプティマイゼーションの方向性

戦略は以下の側面で最適化できます.

  1. MACD パラメータを最適化して,異なる取引製品やサイクルに最適なパラメータの組み合わせを見つけます.

  2. 感度とノイズフィルタリングをバランスさせるため,モメントインジケーターの周期パラメータを最適化します.

  3. ストップ・ロスのメカニズムを追加して,取引ごとに最大損失を制御します.

  4. トレンドに沿って取引サイズをスケールするためにポジション管理モジュールを追加します.

  5. ATRインジケーターのようなフィルターを追加して 不安定な市場での間違った取引を避けるのです

  6. ボリンジャーバンドやRSIなどの他の指標を組み込み 多重確認の取引信号を形成します

  7. 連続パラメータの繰り返しと最適化のために最適化ループを追加します.

概要

モメントブレイクMACD戦略は,MACDとモメント指標の強みを利用してトレンドフォロー取引を実施する.その二重確認メカニズムは,市場のノイズを効果的にフィルタリングし,非効率な取引を回避することができます.この戦略は比較的シンプルで理解しやすいので,特に初心者にとって適しています.しかし,MACDの遅れとレンジ・バインド市場での非効率な取引のリスクは注意する必要があります.パラメータを継続的に最適化し,補助技術指標を組み込むことで戦略をより堅牢にすることができます.


/*backtest
start: 2022-10-13 00:00:00
end: 2023-10-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="MACD MOMENTUM TEST", shorttitle="MACD MOM TEST")

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
len = input(title="Momentum", type=input.integer, defval=10)
src1 = input(title="Source MACD", type=input.source, defval=close)
src2 = input(title="Source MOMENTUM", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 14)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #0c8e61
col_grow_below = #ffcdd2
col_fall_above = #b2dfdb
col_fall_below = #d42f28
col_macd = #ffffff
col_signal = #d42f28
col_mom = #fbc02d

// Calculating
fast_ma = sma_source ? sma(src1, fast_length) : ema(src1, fast_length)
slow_ma = sma_source ? sma(src1, slow_length) : ema(src1, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
mom = src2 - src2[len]


ma(s,l) => ema(s,l)
sema = ma( src1, fast_length )
lema = ma( src1, slow_length )
i1 = sema + mom + ma( src1 - sema, fast_length )
i2 = lema + mom + ma( src1 - lema, slow_length )
macdl = i1 - i2
macd1 =sema - lema

delta = mom - macd1

// Strategy
    // Backtest
FromYear  = input(defval = 2001, title = "From Year", minval = 2009)
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 = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

    // Function exampel
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

if (crossover(delta, 0))
    strategy.entry("Buy", true, when=window(), comment="Buy")

if (crossunder(delta, 0))
    strategy.close_all(when=window())

// Plot
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)
plot(hist, title="Histogram", style=plot.style_histogram, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)
plot(mom, color=col_mom, title="Mom")






もっと