マルチインデクタルの意思決定ツリー戦略:IMACD,EMA,第一バランス表


作成日: 2024-01-22 11時25分56秒 この記事へのトラックバック一覧です. 2024-01-22 11時25分56秒
コピー: ゼロ クリック数: 341名
1
懸念
1105
フォローする

多指标决策树策略:IMACD、EMA和一目均衡表

概要

この戦略は,IMACD,EMA,初等均衡表などの複数の技術指標を統合して,買取・売却信号を発信するための包括的な意思決定樹モデルを構築する.

戦略の原理

  1. IMACD:インパルスMACDとインパルスHistoにより市場動向をより良く把握するための強化MACD
  2. 一目均衡表:交代線,基線,先行線A,先行線Bなどを描画し,サポートとレジスタンスレベルを検知する.
  3. EMA40:傾向の方向性を判断する補助
  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)

                
            
もっと見る