다중 지표 결정 트리 전략: IMACD, EMA 및 Ichimoku

저자:차오장, 날짜: 2024-01-22 11:25:56
태그:

img

전반적인 설명

이 전략은 IMACD, EMA 및 Ichimoku와 같은 여러 기술적 지표를 통합하여 거래 신호를 생성하기위한 포괄적인 결정 트리 모델을 구축합니다.

전략 논리

  1. IMACD: ImpulseMACD와 ImpulseHisto를 통해 시장 트렌드를 더 잘 파악하기 위해 강화된 MACD
  2. 이치모쿠: 그래프 변환선, 기본선, 선도 스프랜 A, 선도 스프랜 B, 지원 및 저항 수준을 식별
  3. EMA 40: 트렌드 방향을 결정하는 데 도움이 됩니다.
  4. 긴/단 신호는 IMACD, 클라우드 컴포넌트 및 EMA 40 사이의 특정 조건에 따라 작동됩니다.

긴 신호: 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)


더 많은