
動量断MACD戦略は,主にMACD指標と動量指標の組み合わせを使用して取引信号を形成し,トレンド追跡戦略に属します.この戦略は,まず,快線EMAと慢線EMAを計算し,次にMACD値を計算し,次にMACDの信号ラインを計算します.同時に,価格の動量値を計算します.動量値とMACD差がゼロ軸上方交差すると買入信号が生成され,動量値とMACD差がゼロ軸下方交差すると売り出信号が生成され,二重確認が取引信号を形成する戦略に属します.
この戦略は,主にMACDと運動指標の組み合わせに基づいています.
MACD指数は,急速線EMA,慢線EMA,MACD柱状グラフからなるトレンド追跡型の指標である.通常,急速線EMAのパラメータは12日,慢線EMAのパラメータは26日であり,計算式は以下のとおりである.
EMA = EMA (閉店価格,12)
遅い線EMA = EMA (閉盤価格,26)
MACD = 速線EMA - 遅線EMA
シグナルライン = EMA (MACD,9)
速線上でのスローラインの穿越は,短期上昇勢力が長期より強いことを示す入場信号であり,速線下でのスローラインの穿越は,長期下落勢力が短期より強いことを示す出場信号である.
動態指標は,株価の変動速度を反映する技術指標であり,計算式は以下の通りである.
動量値 = 今日の終値 - N日前の終値
その中でNは一般に10をとる。今日の閉盘価格がN日前より上がったとき,動量値は正であり,株は上昇傾向にある.今日の閉盘価格がN日前より下がったとき,動量値は負であり,株は下落傾向にある。
この戦略は,MACD指数と動量指数の組み合わせを使用し,取引信号を形成する判定基準は,MACD差値と動量差値の差値がゼロ軸を横切るときに買取信号が生成し,ゼロ軸の上の交差を形成する.MACD差値と動量差値の差値がゼロ軸を横切るときに売り信号を生成し,ゼロ軸の下の交差を形成する.これは,いくつかの偽信号をフィルターして,トレンド追跡を実現する二重確認の取引信号生成機構である.
この戦略の利点は以下の通りです.
MACD指数と動量指数の組み合わせにより,トレンド追跡が可能になり,資産価格が方向性がないときのみの無効取引の発生を避けます.
ダブル確認メカニズムに基づいて取引信号を生成し,いくつかのノイズをフィルターし,偽信号の干渉を避ける.
MACD指標のパラメータは調節可能で,異なる品種と取引周期に応じてパラメータを最適化することができ,適応性が強い.
買取と販売の双方向取引の仕組みが採用され,トレンドの双方向キャプチャが可能である.
戦略は理解しやすく,パラメータが少ないので,初心者向けに適しています.
この戦略にはいくつかのリスクがあります.
MACDと動態指標は,トレンドフォロー型の指標であり,市場が激しく波動したり,明らかなトレンドがないとき,無効取引が多く発生する可能性があります.
ダブル指数ポートフォリオは偽信号をフィルターできるが,取引機会を逃す可能性もある.リスクを均衡させるためにパラメータを適切に調整する必要があります.
大周期的なトレンドが逆転すると,MACD指標は遅滞し,取引損失を引き起こす.
取引の頻度は高く,資金管理と手数料のコントロールに注意が必要です.
パラメータが不適切である場合,過度に敏感または過度に遅滞する可能性があるため,市場状況に応じて継続的にテストして最適化する必要があります.
この戦略は以下の点で最適化できます.
MACD指標のパラメータを最適化して,異なる取引品種と周期に応じて最適なパラメータの組み合わせを見つけます.
動量指標の天数パラメータを最適化して,感度とフィルターノイズをバランスする.
単一取引の最大損失を制御するために,ストップ・ローズメカニズムを増やす.
取引規模をトレンドに合わせて管理するモジュールが追加されました.
度指数などのフィルターを追加し,曲折市場での誤った取引を避ける.
他の指標,例えばブリン帯,RSIなどと組み合わせて,複数確認の取引シグナルを形成する.
ループの追加により,パラメータを繰り返し最適化できます.
動力の断MACD戦略は,MACD指標と動力の指標のStrengthsを用いてトレンドを追跡する.その二重確認機構は,市場騒音を効果的に消し去り,無効取引の発生を防ぐことができる.この戦略は,単純に直接で,理解しやすく使用し,特に初心者の学習に適している.しかし,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")