다지표 결정 트리 전략: IMACD, EMA 및 1차 평형표


창간 날짜: 2024-01-22 11:25:56 마지막 수정: 2024-01-22 11:25:56
복사: 0 클릭 수: 341
1
관심
1105
관심자

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

개요

이 전략은 IMACD, EMA 및 1차 평형표와 같은 다양한 기술 지표를 통합적으로 사용하여 구매 및 판매 신호를 발송하는 포괄적인 의사 결정 나무 모델을 구축합니다.

전략적 원칙

  1. IMACD: 증강된 MACD, ImpulseMACD와 ImpulseHisto를 통해 시장 추세를 더 잘 파악합니다.
  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)

                
            
더 많은 내용