Strategi Pohon Keputusan Multi-Indikator: IMACD, EMA dan Ichimoku

Penulis:ChaoZhang, Tanggal: 2024-01-22 11:25:56
Tag:

img

Gambaran umum

Strategi ini mengintegrasikan beberapa indikator teknis seperti IMACD, EMA dan Ichimoku untuk membangun model pohon keputusan yang komprehensif untuk menghasilkan sinyal perdagangan.

Logika Strategi

  1. IMACD: MACD yang ditingkatkan untuk lebih menangkap tren pasar melalui ImpulseMACD dan ImpulseHisto
  2. Ichimoku: Garis konversi grafik, garis dasar, rentang utama A, rentang utama B untuk mengidentifikasi level support dan resistance
  3. EMA 40: Membantu dalam menentukan arah tren
  4. Sinyal panjang/pendek dipicu berdasarkan kondisi khusus antara IMACD, komponen cloud dan EMA 40

Sinyal panjang: Ketika IMACD adalah warna tertentu dan EMA 40 berada di atas awan atas, pergi panjang

Sinyal pendek: Ketika IMACD berwarna merah dan EMA 40 berada di bawah awan bawah, pergi pendek

Analisis Keuntungan

  1. Kombinasi dari beberapa indikator meningkatkan akurasi penilaian tren
  2. Klasifikasi yang jelas dari model pohon keputusan menghasilkan sinyal perdagangan yang tidak ambigu
  3. Panjang EMA yang fleksibel untuk bantuan yang lebih baik dalam penentuan tren
  4. Mengidentifikasi level support dan resistance dengan lebih baik dengan indikator awan dan tren

Analisis Risiko

  1. Penyesuaian parameter yang kompleks dengan beberapa indikator
  2. Sinyal palsu dapat dipicu oleh panjang EMA yang tidak tepat
  3. Kesulitan dalam memantau banyak indikator secara bersamaan

Solusi Risiko: Optimalkan pengaturan parameter, menyesuaikan panjang EMA, menyederhanakan alur kerja.

Arahan Optimasi

  1. Meningkatkan stabilitas dengan mengoptimalkan parameter
  2. Batasi kerugian dengan strategi stop loss
  3. Meningkatkan kualitas sinyal dengan backtesting dengan data besar
  4. Membangun model pohon keputusan adaptif dengan pembelajaran mesin

Ringkasan

Strategi ini mengidentifikasi tren menggunakan beberapa indikator untuk membangun model pohon keputusan untuk menghasilkan sinyal perdagangan. Pro adalah sinyal berkualitas tinggi dan akurat. Ini terdiri dari ruang untuk pengoptimalan progresif.


/*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)


Lebih banyak