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


생성 날짜: 2024-01-22 11:25:56 마지막으로 수정됨: 2024-01-22 11:25:56
복사: 0 클릭수: 670
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

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

개요

이 전략은 IMACD, EMA, 1시 균형표와 같은 여러 가지 기술 지표를 통합하여 구매 및 판매 신호를 발송하는 데 사용되는 포괄적인 의사 결정 나무 모델을 구축합니다.

전략 원칙

  1. IMACD: ImpulseMACD와 ImpulseHisto를 통해 시장 동향을 더 잘 포착하는 강화된 MACD
  2. 1인칭 평형표: 교환선, 기준선, 선행선 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)