この戦略は,MACDとDEMAの双線指標を組み合わせ,多空線金叉死叉によって取引信号を形成する.戦略は,MACDの指標の転機タイミングを捕捉し,DEMAのフィルター波を活用して,ノイズをなくして優良な入場を実現する.
速線DEMAfastを計算し,価格のDEMA値を取り,周期長がfastmacdである。
慢線DEMAslowを計算し,pricesのDEMA値を取得し,周期長がslowmacdである。
MACD線は,速慢線差値である:DEMAfast - DEMAslow。
Signalラインは MACDラインのDEMA値で,周期長は signalmacd。
多空線交差は取引信号として:金叉は多,死叉は空.
指定された日付範囲でのみ信号を発信する年月日フィルターを追加します.
この戦略の利点は以下の通りです.
MACDとDEMAを組み合わせると,指標は互補である.MACDは捕捉転換,DEMAはフィルター波により信号の質が向上する.
DEMAの双線設計は,MACD指標の遅滞とノイズを軽減する.
多空線交差は判断しやすく,信号生成はシンプルで明快である.
取引日程の範囲を柔軟に設定し,異なる戦略のニーズに適応します.
MACDのパラメータは,複数の状況に対応する柔軟な組み合わせを最適化できます.
この戦略の主なリスクは以下の通りです.
MACDはトレンドを追跡する指標で,波動横軸市場には適さない.
多空間の交差は偽信号を生成し,有効なフィルタリングが必要である.
損失を抑える戦略は不十分で,過剰な損失を抑えるのが容易である.
パラメータ最適化は全面的ではなく,品種によって効果が大きく異なっています.
取引日フィルタは固定値を超えて動的に調整する必要があります.
対応方法:
動量指数と組み合わせて横盤を避ける.
偽の交差信号をフィルタリングする.
合理的な初期ストップと追跡ストップを設定します.
多種パラメータの効果をテストし,動態最適化.
フィルターの日付をリアルタイムに調整します.
この戦略は以下の点から最適化できます.
信号フィルタリングの為の取引量指標を増加させる.
MACDパラメータの組み合わせを最適化し,異なる品種データをテストする.
固定ストップ,追跡ストップなどのストップ戦略を設定する.
市場変動に応じてストップ・ポジションを動的に調整する
フォロートレンドの強さ,ポジションのサイズ調整.
MACD DEMA戦略は,双指標の優位性を組み合わせ,交差信号捕捉のトレンドを利用する.しかし,MACDは本質的に遅滞性があり,偽信号をフィルタリングする注意が必要です.さらに,ストップ・ロズ戦略は,非合理的なストップを減らすために最適化する必要があります.実盤では,パラメータ最適化の結果に基づいて慎重に入場し,継続的に最適化することをお勧めします.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-09-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(" MACD DEMA STRATEGY ", overlay=true)
source=close
price=source
fastmacd = input(12,title='MACD Fast Line Length')
slowmacd = input(26,title='MACD Slow Line Length')
signalmacd = input(9,title='Signal Line Length')
macdslowline1 = ema(close,slowmacd)
macdslowline2 = ema(macdslowline1,slowmacd)
DEMAslow = ((2 * macdslowline1) - macdslowline2 )
macdfastline1 = ema(close,fastmacd)
macdfastline2 = ema(macdfastline1,fastmacd)
DEMAfast = ((2 * macdfastline1) - macdfastline2)
MACDLine = (DEMAfast - DEMAslow)
SignalLine1 = ema(MACDLine, signalmacd)
SignalLine2 = ema(SignalLine1, signalmacd)
SignalLine = ((2 * SignalLine1) - SignalLine2 )
MACDSignal = SignalLine-MACDLine
colorbar= MACDSignal>0?green:red
yearfrom = input(2018)
yearuntil =input(2019)
monthfrom =input(1)
monthuntil =input(12)
dayfrom=input(1)
dayuntil=input(31)
if ( crossover(MACDLine,SignalLine) )
strategy.entry("MMAL", strategy.long, stop=close, oca_name="TREND", comment="AL")
else
strategy.cancel(id="MMAL")
if ( crossunder(MACDLine,SignalLine) )
strategy.entry("MMSAT", strategy.short,stop=close, oca_name="TREND", comment="SAT")
else
strategy.cancel(id="MMSAT")