MACD ゴールデンクロス デスクロス トレンド 戦略をフォロー

作者: リン・ハーンチャオチャン, 日時: 2023-12-22 11:45:54
タグ:

img

概要

この戦略は,トレンド方向を決定するためにMACD指標の黄金十字と死十字を使用し,トレンドを操作する際にストップ・ロストとテイク・プロフィートを実施するためにATR指標を使用する.戦略名ではMACD指標の黄金十字と死十字のシグナルを使用することを強調している.

戦略の論理

MACD線がシグナル線を下から越えて正になるとき,買い信号が生成され,これは金十字信号と呼ばれ,株価の上昇傾向を示します.MACD線が上からシグナルラインを下から越えて負になると,売り信号が生成され,これはデスクロス信号と呼ばれ,株価の下落傾向を示します.

この戦略は,単にトレンドをフォローするために金色のクロスでロング,デッドクロスでショートする.同時に,戦略はストップロスを計算し,取引システムを構築するために利益レベルを取るためにATR指標も導入します.

戦略は,まず,高速移動平均値,スロー移動平均値,MACD差,シグナルライン,その他の標準MACD指標を計算する.次に,選択した5つの信号タイプ (継続信号,逆転信号,ヒストグラム信号,MACDゼロクロス,シグナルラインゼロクロス) の1つに基づいて,ゴールデンクロスとデッドクロスを決定する.最後に,エントリー&エグジットロジックを完了するために,ストップ・ロストとテイク・プロフィートがATR指標に基づいて設定される.

利点分析

この戦略には以下の利点があります.

  1. トレンド方向を決定するためにMACD指標を使用することは正確で信頼性があります.MACD指標は,過去数年間にわたってトレンド決定において顕著な役割を果たしてきました.

  2. ATR指標に基づいたストップ・ロースとテイク・プロフィートの設定は,単一の取引のリスク・リターン比を効果的に制御し,損失の確率を減らすことができます.

  3. 選択可能な5種類の信号を提供することで,異なる市場に最も適した信号を使用でき,戦略の適応性が向上します.

  4. 調整可能な入力パラメータが多く,より良い取引パフォーマンスのために最適化することができます.

リスク と 解決策

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

  1. MACD インディケーターは,誤った信号を容易に生成し,不必要な損失を引き起こす可能性があります.他のインディケーターは,シグナルをフィルタリングするために使用できます.

  2. ATR指標は,最近の変動のみをモデル化しており,極端な市場条件では損失を正確に停止することはできません.この問題を解決するために動的ストップを導入することができます.

  3. 選択された信号の性能が安定していない場合もあります.最適なパラメータを決定するには,広範なバックテストが必要です.

  4. 信号パラメータとリスク管理パラメータを同時に最適化する必要がある.そうでなければ,全体的に最適な結果を見つけるのは困難です.段階的な最適化方法が推奨されます.

最適化 の 提案

戦略は,次の側面でも最適化できます.

  1. MACD信号をフィルタリングするために,TMA,Hull MAなど他の移動平均を試してみてください.

  2. 極端な市場状況の変動に よりうまく対応できる ダイナミックストップメカニズムを試してください

  3. より良い組み合わせを見つけるために従来のMACDパラメータを徹底的に最適化します

  4. 機械学習方法を用いて,よりよいリスク管理のために最適なATR倍数を見つけます.

  5. 5つの信号タイプをそれぞれ別々にバックテストして最適な信号を決定します

  6. 信号の質を判断し MACD ベースの新しい信号を発見する 神経ネットワークを訓練します

結論

MACDゴールドクロス・デス・クロス・トレンドフォロー戦略は,トレンド方向を決定するためにMACD指標を利用し,ATR指標でストップ・ロスを設定し,トレンド・トレード機会を効果的に把握することができる.この戦略は,調節可能なパラメータ,完全なストップメカニズム,オプションの信号タイプなどの複数の利点があります.次のステップは,より良いバックテストとライブ結果を得るために,信号品質,ストップ・ロスのメカニズム,パラメータ選択最適化を改善することです.


/*backtest
start: 2023-11-21 00:00:00
end: 2023-12-21 00:00:00
period: 1h
basePeriod: 15m
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/
// © vuagnouxb

//@version=4
strategy("BV's MACD SIGNAL TESTER", overlay=true)

//------------------------------------------------------------------------
//----------            Confirmation Calculation              ------------ INPUT
//------------------------------------------------------------------------

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
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 = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

// plot(hist, title="Histogram", style=plot.style_columns, 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)

// -- Trade entry signals

signalChoice = input(title = "Choose your signal", defval = "Continuation", options = ["Continuation", "Reversal", "Histogram", "MACD Line ZC", "Signal Line ZC"])

continuationSignalLong = signalChoice == "Continuation" ? crossover(macd, signal) and macd > 0 :
   signalChoice == "Reversal" ? crossover(macd, signal) and macd < 0 : 
   signalChoice == "Histogram" ? crossover(hist, 0) : 
   signalChoice == "MACD Line ZC" ? crossover(macd, 0) :
   signalChoice == "Signal Line ZC" ? crossover(signal, 0) :
   false
   
continuationSignalShort = signalChoice == "Continuation" ? crossunder(macd, signal) and macd < 0 :
   signalChoice == "Reversal" ? crossover(signal, macd) and macd > 0 : 
   signalChoice == "Histogram" ? crossunder(hist, 0) : 
   signalChoice == "MACD Line ZC" ? crossunder(macd, 0) :
   signalChoice == "Signal Line ZC" ? crossunder(signal, 0) :
   false

longCondition = continuationSignalLong

shortCondition = continuationSignalShort

//------------------------------------------------------------------------
//----------             ATR MONEY MANAGEMENT                 ------------
//------------------------------------------------------------------------

SLmultiplier = 1.5
TPmultiplier = 1

JPYPair = input(type = input.bool, title = "JPY Pair ?", defval = false)
pipAdjuster = JPYPair ? 1000 : 100000


ATR = atr(14) * pipAdjuster // 1000 for jpy pairs : 100000
SL = ATR * SLmultiplier
TP = ATR * TPmultiplier

//------------------------------------------------------------------------
//----------                  TIME FILTER                     ------------
//------------------------------------------------------------------------

YearOfTesting = input(title = "How many years of testing ?" , type = input.integer, defval = 3)

_time = 2020 - YearOfTesting

timeFilter = (year > _time) 

//------------------------------------------------------------------------
//---------                 ENTRY FUNCTIONS                    ----------- INPUT
//------------------------------------------------------------------------

if (longCondition and timeFilter)  
    strategy.entry("Long", strategy.long)

if (shortCondition and timeFilter) 
    strategy.entry("Short", strategy.short)
    
//------------------------------------------------------------------------
//---------                 EXIT  FUNCTIONS                    -----------
//------------------------------------------------------------------------


strategy.exit("ATR", from_entry = "Long", profit = TP, loss = SL)  

strategy.exit("ATR", from_entry = "Short", profit = TP, loss = SL)  

もっと