デミゴッドキャンドルスタイク MACD ダイバージェンス トレンド 戦略をフォローする

作者: リン・ハーンチャオチャン開催日:2024-02-04 15:06:58
タグ:

img

概要

この戦略は,MACDヒストグラムとMACDヒストグラムの間の差異信号を検出するためにMACDインジケーターとそのMACDヒストグラムを計算し,それによって取引信号を生成する.価格の新高値が検出されてもMACDヒストグラムの新高値が検出されない場合,下落差異信号が生成される.価格の新低値が検出されてもMACDヒストグラムの新低値が検出されない場合,上昇差異信号が生成される.ストップ・ロストとテイク・プロフィートのATRインジケーターと組み合わせると,トレンドをフォローする取引を実行する.

戦略の論理

この戦略の基本原理は,MACD指標とそのMACDヒストグラムを使用して価格動向の変化を反映し,MACDヒストグラムと価格の間の差異信号を取引信号のトリガー条件として検出することです.

具体的には,この戦略はまずMACD線,シグナル線,MACDヒストグラムを計算する.その後,MACDヒストグラムのピークと谷を検出するフラクタル関数を定義して,地元の最大値と最小値を抽出する.最高値と最低値と組み合わせて,MACDヒストグラムと価格の間に差があるかどうかを決定する.

価格が新たな低値に達するがMACDヒストグラムが新たな高値に達しない場合,regular_bearish_div (レギュラー_ベアッシュ_ディブ) のベアッシュディバージェンス信号が生成される.価格が新たな低値に低下するがMACDヒストグラムが新たな低値に低下しない場合,regular_bullish_div (レギュラー_ブルッシュ_ディブ) のベアッシュディバージェンス信号が生成される.

最後に,下落シグナルと上昇シグナルが生成されると,戦略はそれぞれショート・ロング・オーダーを発行し,ATRストップ・ロストとテイク・プロフィートでポジションを終了します.

利点分析

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

  1. MACDヒストグラムと価格の間の差の特徴を利用することで,価格動向の転換を早期に把握できます.

  2. ATRのストップ・ロースと得益設定は,取引毎の最大損失を効果的に制御するために合理的です.

  3. トレンドフォロー方法を使うと 利益は最大化できます

  4. 合理的なパラメータ設定は 騒々しい取引信号を フィルタリングします

  5. 戦略の論理は 明確で分かりやすく リアルタイム取引でも簡単に検証できます

リスク分析

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

  1. MACDの差異は必ずしも価格の逆転につながらないが,いくつかの誤った信号リスクがある.

  2. 不合理なストップ・ロースと取利益設定は,過度の損失または不十分な利益につながる可能性があります.

  3. 短周期の差異信号は騒音によって引き起こされ,適切にフィルタリングされるべきである.

  4. 互換性のない取引製品やパラメータ設定も 戦略のパフォーマンスに影響します

対応する解法:

  1. 誤った信号をフィルタリングするために 距離と大きさの要求を増やす.

  2. ATRをストップ・ロスト・ベンチマークとして使用し,ATR倍数を調整して,取引ごとにリスクを制御する.

  3. 異なる取引製品に対して異なるパラメータを選択します.最適なパラメータ組み合わせを見つけるためにパラメータ最適化を実行します.

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

この戦略は,次の方向でも最適化できます.

  1. 容量差の確認など,より複雑な差の確認

  2. MACD パラメータを最適化して 最適なパラメータの組み合わせを見つけます

  3. ATRのストップ・ロスの倍数を最適化して 利益を取ります

  4. マシン学習アルゴリズムを追加して ダイバージェンス信号の信頼性を判断します

  5. 価格逆転の確率を決定するためにモデル予測を追加します.

  6. 市場状況の変化に応じて戦略パラメータを動的に調整する.

概要

概要すると,このデミゴッドキャンドルストックMACDダイバージェンストレンドフォロー戦略は,トレンドを把握するためにMACDヒストグラムと価格の間のダイバージェンスを利用する.合理的なATRストップ損失と利益の設定は,取引ごとにリスクを制御することができます.戦略の論理は明確で理解しやすいので,ライブ取引で検証する価値があります.より良い結果を得るために,多くの側面でフォローアップ最適化を行うことができます.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bigwin_sun
// copyright: Tradingvue Limited    

//@version = 5
strategy(title = "Demigod : CDMA histogram Divergence strategy", shorttitle = "Demigod strategy", overlay = false, pyramiding = 100)

//macd input
fastMA = input.int(13, title = "fast Length", minval = 1,     group = "CDMA")
slowMA = input.int(34, title = "slow Length", minval = 1,     group = "CDMA")
src          = input.source(title = "source", defval = close, group = "CDMA")
signalSmooth = input.int(9, title="ma Length", minval = 1,    group = "CDMA")
//Divergenc
divLength    = input.int(title = "Divergenc Length",   defval = 5, minval = 1,   maxval = 50,  inline = "ATRLength",  group = "Divergence")
divStren     = input.float(title="Divergenc Strength", defval = 2, minval = 1.0, maxval = 5.0, inline = "ATRLength",  group = "Divergence")

//atr input
atrLength = input.int(13, title = "ATR Length", minval = 1,   inline = "ATRLength", group = "ATR")
m         = input.float(1.0,  "ATR multyple",   minval = 0.5, inline = "ATRLength", group = "ATR", step = 0.5)
collong   = input.color(color.teal, title = "upper color",  inline = "ATR显示", group = "ATR")
colshort  = input.color(color.red,  title = "under color",  inline = "ATR显示", group = "ATR")

// MACD---------------------------------------------------------------------------------------------------------------------------------
DivOffset = -2
macdLine   = ta.ema(src, fastMA) - ta.ema(src, slowMA)    
signalLine = ta.ema(macdLine, signalSmooth)
histogram  = macdLine - signalLine

histogramColor = if histogram > 0
    histogram > histogram[1] ? color.lime : color.green
else 
    histogram < histogram[1] ? color.maroon : color.red

// cdma histogram
plot(histogram, title = "MACD histogram", linewidth = 2, style = plot.style_histogram, color = histogramColor)
plot(0,         title = "zero line",      linewidth = 1,                               color = color.gray)

// Divergenc calculation-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//peak / valley fundation
f_top_fractal(_src)=>_src[4] < _src[2] and _src[3] < _src[2] and _src[2] > _src[1] and _src[2] > _src[0] and _src > 0
f_bot_fractal(_src)=>_src[4] > _src[2] and _src[3] > _src[2] and _src[2] < _src[1] and _src[2] < _src[0] and _src < 0
f_fractalize(_src)=>f_top_fractal(_src) ? 1 : f_bot_fractal(_src) ? -1 : 0

//peak / valley value
fractal_top1 = f_fractalize(histogram) > 0 ? true : false //histogram[2] : na
fractal_bot1 = f_fractalize(histogram) < 0 ? true : false //histogram[2] : na

//previouse peak or valley
high_prev1  = ta.valuewhen(fractal_top1, histogram[2], 0)[2]
high_price1 = ta.valuewhen(fractal_top1, high[2], 0)[2]
low_prev1   = ta.valuewhen(fractal_bot1, histogram[2], 0)[2]
low_price1  = ta.valuewhen(fractal_bot1, low[2], 0)[2]

//Divergenc : cdma histogram against candle value
regular_bearish_div1 = high[2] > high_price1 + divStren and histogram[2] < high_prev1 / divStren and ta.barssince(fractal_top1[1]) > divLength
regular_bullish_div1 = low[2]  < low_price1 - divStren  and histogram[2] > low_prev1 / divStren  and ta.barssince(fractal_bot1[1]) > divLength

//-------------------------cdma Divergenc range------------------------------------------------
//histogramColor
col1 = regular_bearish_div1 ? color.red : na
col2 = regular_bullish_div1 ? #00FF00EB : na
//plot
plot(title='看跌背离', series= fractal_top1 ? histogram[2] : na, color=col1, linewidth=3, offset=DivOffset)
plot(title='看涨背离', series= fractal_bot1 ? histogram[2] : na, color=col2, linewidth=3, offset=DivOffset)

// calculate ATR				--------------------------------------------------------------------------------------------------------------------------------------------------
atr = ta.ema(ta.tr(true), atrLength) * m
up = atr + high
dw = low - atr

//stratety : enrty and exit---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if regular_bearish_div1 and fractal_top1
//if regular_bullish_div1 and fractal_bot1
    //label.new(bar_index, histogram[2], text = "Short", textcolor = color.white, color = color.gray,  style = label.style_label_lower_left)
    strategy.entry("Short", strategy.short, qty = 1)
    strategy.exit("exitShort", "Short", stop = up, limit = dw - atr)
if regular_bullish_div1 and fractal_bot1
//if regular_bearish_div1 and fractal_top1   
    //label.new(bar_index, histogram[2], text = "Long", textcolor = color.white, color = color.fuchsia, style = label.style_label_upper_left)
	strategy.entry("Long", strategy.long, qty = 1)
    strategy.exit("exitLong", "Long", stop = dw, limit = up + atr)


もっと