
MACDトレンド予測戦略は,MACD指数とEMA指数に基づくトレンドフォロー戦略である.この戦略は,従来のMACD戦略のように,信号線の交差で取引信号を生成するのではなく,MACD指数線と信号線の間の距離の変化によって取引信号を生成して,トレンドの変化を捕捉する.
速線DEMAfastを計算する:速線の2回EMAの平均MMEfastをEMA方法によって計算し,それから速線DEMAfastを公式DEMAfast=((2 * MMEfast) - MMEfastb) によって計算する.
慢線DEMAslowを計算する. EMA方法によって慢線の2回EMA平均値MMEslowを計算し,それから公式DEMAslow=((2 * MMEslow) - MMEslowb) によって慢線DEMAslowを計算する.
MACDラインを計算する.MACDラインは,速線DEMAfastの差値と遅線DEMAslowの差値のLigneMACDZeroLagの差値である.
信号線を計算する:EMA方法によってMACD線の2回EMA平均値MMEsignalを計算し,それからLignesignal=((2 * MMEsignal) - MMEsignalb) 公式に基づいて信号線を計算する.
MACD線と信号線を比較する:MACD線が信号線より大きいときは買取信号を生じ;MACD線が信号線より小さい時は売り出せ信号を生じ.
上記の計算は,DEMAアルゴリズムを使用し,MACD指標の遅れを効果的に減らすことができます.
DEMAアルゴリズムを使用すると,MACD指標の遅れを軽減し,取引信号をより敏感にすることができる.
MACD指標の交差信号に依存せず, MACDと信号線距離の変化によってトレンドの変化を捉え,より早くトレンドに入ることができる.
この戦略はトレンドを正確に判断し,収益因子は1.6〜3.5に達し,収益は良好である.
戦略の論理はシンプルで明快で,容易に理解できる実装で,量化取引に適しています.
MACDは遅滞の指標として,調整状況で大量に無効取引シグナルを生成する可能性があります.
DEMAアルゴリズムは遅延を軽減しても,完全に取り除くことはできませんが,一定の遅延が残っています.
市場が動揺したときに,トレンドフォローの戦略として,収益が良くない可能性があります.
パラメータsma,lma,tspの等価を最適化して,異なる周期と品種に対応する必要がある.
損失を抑えるためのストップ・ロース策が必要になるかもしれません.
スマ,ルマ,スプのパラメータを異なる周期と取引品種に最適化します.
ATRのようなダイナミックストップストラトジーを追加し,単一の損失を制御する.
トレンド判断の指標を組み合わせて,波動的な状況で取引を避ける.
取引量制御を追加し,市場の変動に応じてポジションを調整する.
入場・出場論理の最適化,取引シグナル規則の精細化
MACDトレンド予測戦略は,MACD指標の計算方法を改善し,DEMAアルゴリズムを使用して遅れを軽減し,MACDと信号線距離の変化判断トレンドを採用し,トレンドフォロー戦略として,トレンドの変化を効果的に捕捉することができ,利益因数1.6〜3.5に達し,一定の優位性を持っています.しかし,より多くの市場環境に対応するために,パラメータ設定,ストップ・損失戦略,フィルター・ショッキングなどのさらなる最適化が必要ですが,この戦略の発展方向です.
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © moritz1301
//@version=4
strategy("MACD Trendprediction Strategy V1", shorttitle="MACD TPS", overlay=true)
sma = input(12,title='DEMA Courte')
lma = input(26,title='DEMA Longue')
tsp = input(9,title='Signal')
dolignes = input(true,title="Lignes")
MMEslowa = ema(close,lma)
MMEslowb = ema(MMEslowa,lma)
DEMAslow = ((2 * MMEslowa) - MMEslowb )
MMEfasta = ema(close,sma)
MMEfastb = ema(MMEfasta,sma)
DEMAfast = ((2 * MMEfasta) - MMEfastb)
LigneMACDZeroLag = (DEMAfast - DEMAslow)
MMEsignala = ema(LigneMACDZeroLag, tsp)
MMEsignalb = ema(MMEsignala, tsp)
Lignesignal = ((2 * MMEsignala) - MMEsignalb )
MACDZeroLag = (LigneMACDZeroLag - Lignesignal)
bgcolor(LigneMACDZeroLag<Lignesignal ? color.red : color.green)
if (LigneMACDZeroLag>Lignesignal)
strategy.entry("Buy", strategy.long, comment="BUY")
if (LigneMACDZeroLag<Lignesignal)
strategy.close("Buy", strategy.long, comment="SELL")