多指標決定樹戦略:IMACD,EMA,イチモク

作者: リン・ハーンチャオチャン開催日:2024年1月22日11時25分56秒
タグ:

img

概要

この戦略は,IMACD,EMA,Ichimokuなどの複数の技術指標を統合し,取引信号を生成するための包括的な意思決定ツリーモデルを構築します.

戦略の論理

  1. IMACD: ImpulseMACD と ImpulseHisto を使って市場動向をより良く把握するための強化MACD
  2. イチモク:プロット変換線,ベースライン,リードスパン A,リードスパン B サポートとレジスタンスのレベルを特定するために
  3. EMA 40: 傾向の方向性を決定する助け
  4. 長/短信号は,IMACD,クラウドコンポーネントとEMA40の間の特定の条件に基づいて起動されます.

長信号: IMACD が特定の色で EMA 40 が雲の上にあるとき,長

ショートシグナル: IMACD が赤色で EMA 40 が雲の下位以下になるとショートシグナル

利点分析

  1. 多数の指標を組み合わせることで,傾向判断の正確性が向上します
  2. 意思決定ツリーモデルの明確な分類は,明確な取引信号を生成します.
  3. トレンド決定に より良い支援のために柔軟なEMA長さ
  4. クラウドとトレンド指標でサポートとレジスタンスレベルをよりよく識別する

リスク分析

  1. 複数の指標で複雑なパラメータ調整
  2. 誤ったEMA長が誤った信号を誘発する可能性があります.
  3. 複数の指標を同時に監視する難しさ

リスクソリューション パラメータ設定を最適化 EMA長さを調整 ワークフローを簡素化

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

  1. パラメータを最適化することで安定性を向上させる
  2. ストップ・ロスの戦略で損失を制限する
  3. 大量のデータでバックテストすることで信号品質を向上させる
  4. 機械学習で適応型意思決定ツリーモデルを構築する

概要

この戦略は,複数の指標を使用してトレード信号を生成するための意思決定ツリーモデルを構築するトレンドを特定する.プロは高品質で正確な信号である.漸進的な最適化のための余地がある.長期的な安定したリターンのためのリスクを制御するためにパラメータチューニングとストップロスの集中が必要です.


/*backtest
start: 2024-01-14 00:00:00
end: 2024-01-21 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Decision Tree Strategy: IMACD, EMA and Ichimoku [cryptoonchain]", overlay=true)

lengthMA = input(34, title="Length MA")
lengthSignal = input(9, title="Length Signal")
conversionPeriods = input.int(9, minval=1, title="Conversion Line Length")
basePeriods = input.int(26, minval=1, title="Base Line Length")
laggingSpan2Periods = input.int(52, minval=1, title="Leading Span B Length")
displacement = input.int(26, minval=1, title="Lagging Span")
emaLength = input(40, title="EMA Length")  // Added user-configurable EMA length

calc_smma(src, len) =>
    smma = float(na)
    smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
    smma

calc_zlema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    d = ema1 - ema2
    ema1 + d

src = ohlc4
hi = calc_smma(high, lengthMA)
lo = calc_smma(low, lengthMA)
mi = calc_zlema(src, lengthMA)

md = (mi > hi) ? (mi - hi) : (mi < lo) ? (mi - lo) : 0
sb = ta.sma(md, lengthSignal)
sh = md - sb
mdc = src > mi ? (src > hi ? color.rgb(128, 255, 0, 26) : color.green) : (src < lo ? color.red : color.orange)

colorCondition = color.rgb(128, 255, 0, 26)

conversionLine = math.avg(ta.lowest(conversionPeriods), ta.highest(conversionPeriods))
baseLine = math.avg(ta.lowest(basePeriods), ta.highest(basePeriods))
leadLine1 = math.avg(conversionLine, baseLine)
leadLine2 = math.avg(ta.lowest(laggingSpan2Periods), ta.highest(laggingSpan2Periods))

// Use user-configurable length for EMA
ema40 = ta.ema(close, emaLength)

ebc = input(false, title="Enable bar colors")
barcolor(ebc ? mdc : na)

conversionLinePlot = plot(conversionLine, color=#2962FF, title="Conversion Line", display=display.none)
baseLinePlot = plot(baseLine, color=#B71C1C, title="Base Line", display=display.none)
laggingSpanPlot = plot(close, offset=-displacement + 1, color=#43A047, title="Lagging Span", display=display.none)
leadLine1Plot = plot(leadLine1, offset=displacement - 1, color=#A5D6A7, title="Leading Span A", display=display.none)
leadLine2Plot = plot(leadLine2, offset=displacement - 1, color=#EF9A9A, title="Leading Span B", display=display.none)
kumoCloudUpperLinePlot = plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, offset=displacement - 1, title="Kumo Cloud Upper Line", display=display.none)
kumoCloudLowerLinePlot = plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, offset=displacement - 1, title="Kumo Cloud Lower Line", display=display.none)
fill(kumoCloudUpperLinePlot, kumoCloudLowerLinePlot, color=leadLine1 > leadLine2 ? color.green : color.red)

a = (leadLine1 > leadLine2 ? leadLine1 : leadLine2) 
b = (leadLine1 < leadLine2 ? leadLine1 : leadLine2)  

if mdc == colorCondition and ema40 > a[displacement - 1]
    strategy.entry("Long", strategy.long)

if mdc == color.red and ema40 < b[displacement - 1]
    strategy.entry("Short", strategy.short)


もっと