Chiến lược cây quyết định đa chỉ số: IMACD, EMA và Ichimoku

Tác giả:ChaoZhang, Ngày: 2024-01-22 11:25:56
Tags:

img

Tổng quan

Chiến lược này tích hợp nhiều chỉ số kỹ thuật như IMACD, EMA và Ichimoku để xây dựng một mô hình cây quyết định toàn diện để tạo tín hiệu giao dịch.

Chiến lược logic

  1. IMACD: MACD nâng cao để nắm bắt tốt hơn xu hướng thị trường thông qua ImpulseMACD và ImpulseHisto
  2. Ichimoku: Đường chuyển đổi biểu đồ, đường cơ sở, đường dẫn A, đường dẫn B để xác định mức hỗ trợ và kháng cự
  3. EMA 40: Giúp xác định hướng xu hướng
  4. Các tín hiệu dài / ngắn được kích hoạt dựa trên các điều kiện cụ thể giữa IMACD, các thành phần đám mây và EMA 40

Tín hiệu dài: Khi IMACD là một màu sắc cụ thể và EMA 40 là trên đỉnh mây, đi dài

Tín hiệu ngắn: Khi IMACD màu đỏ và EMA 40 dưới đáy mây, đi ngắn

Phân tích lợi thế

  1. Kết hợp nhiều chỉ số cải thiện độ chính xác của đánh giá xu hướng
  2. Việc phân loại rõ ràng mô hình cây quyết định tạo ra các tín hiệu giao dịch rõ ràng
  3. Chiều dài EMA linh hoạt để hỗ trợ tốt hơn trong xác định xu hướng
  4. Xác định mức hỗ trợ và kháng cự tốt hơn với các chỉ số đám mây và xu hướng

Phân tích rủi ro

  1. Điều chỉnh tham số phức tạp với nhiều chỉ số
  2. Các tín hiệu sai có thể được kích hoạt bởi chiều dài EMA không chính xác
  3. Khó khăn trong việc theo dõi nhiều chỉ số đồng thời

Giải pháp rủi ro: Tối ưu hóa cài đặt tham số, điều chỉnh chiều dài EMA, đơn giản hóa quy trình làm việc.

Hướng dẫn tối ưu hóa

  1. Tăng độ ổn định bằng cách tối ưu hóa các thông số
  2. Giới hạn lỗ với chiến lược dừng lỗ
  3. Cải thiện chất lượng tín hiệu bằng cách kiểm tra lại với dữ liệu khổng lồ
  4. Xây dựng mô hình cây quyết định thích nghi với máy học

Tóm lại

Chiến lược này xác định xu hướng bằng cách sử dụng nhiều chỉ số để xây dựng mô hình cây quyết định để tạo ra tín hiệu giao dịch.


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


Thêm nữa