리소스 로딩... 로딩...

다중 시간 프레임 결합 된 촛불 패턴 인식 거래 전략

저자:차오장, 날짜: 2024-12-11 11:04:35
태그:주식회사CPTS

img

전반적인 설명

이 전략은 촛불 패턴 인식에 기반한 자동화 거래 시스템이다. 5개의 상승 패턴 (머, 상승 포식, ピア싱 라인, 아침 별, 세 흰 군인) 과 5개의 하락 패턴 (박박한 남자, 하락 포식, 어두운 구름 덮개, 저녁 별, 세 검은 까마귀) 을 포함한 10개의 고전적인 촛불 패턴을 통합합니다. 이러한 패턴의 실시간 식별 및 분석을 통해 전략은 거래자에게 잠재적인 시장 역전 신호와 거래 기회를 제공합니다.

전략 원칙

전략의 핵심은 정확한 촛불 패턴 인식의 프로그래밍 구현에 있습니다. 각 패턴은 고유한 수학적 정의와 조건 기준이 있습니다.

  1. 단일 촛대 패턴 (하머, 헝킹맨과 같이) 에 대해서는 주로 몸과 그림자의 비율에 따라 판단됩니다.
  2. 두 개의 촛불 패턴의 경우 (용수, 피어싱 라인 같은 경우) 인접한 촛불의 상대적 위치를 비교하여 판단됩니다.
  3. 세 개의 촛불 패턴 (세 개의 흰 군인, 세 개의 검은 까마귀와 같이) 에 대해서는 동향 방향과 위치 관계와 관련된 여러 조건이 동시에 충족되어야합니다. 이 전략은 사용자가 매개 변수 설정을 통해 특정 패턴 인식을 유연하게 활성화 또는 비활성화 할 수 있습니다.

전략적 장점

  1. 포괄성: 가장 대표적인 열 개의 촛불 패턴을 포함하고, 다양한 유형의 시장 반전 신호를 포착 할 수 있습니다.
  2. 유연성: 사용자는 시장 조건과 개인 거래 스타일에 따라 패턴 조합을 자유롭게 선택할 수 있습니다.
  3. 시각화: 명확한 표시 시스템은 패턴 위치와 유형을 직관적으로 표시합니다.
  4. 자동화: 완전하게 프로그래밍 된 판단 과정은 주관적이고 감정적인 인간의 판단을 제거합니다.
  5. 실용성: 명확한 전략 논리는 다른 기술 지표 또는 거래 시스템과의 조합을 용이하게 합니다.

전략 위험

  1. 지연 위험: 패턴 확인은 촛불 폐쇄를 기다리는 것이 필요하며 약간의 진입 지연을 유발할 수 있습니다.
  2. 거짓 신호 위험: 촛불 패턴에만 의존하면 불안한 시장에서 수많은 거짓 신호를 생성 할 수 있습니다.
  3. 시장 환경 의존성: 전략은 트렌딩 시장에서 더 잘 수행되지만 다양한 시장에서 성과가 떨어질 수 있습니다.
  4. 매개 변수 설정 위험: 너무 많은 패턴 인식을 허용하면 판단에 영향을 미치는 신호가 과밀해질 수 있습니다.
  5. 스톱 로스 컨트롤 리스크: 전략에는 추가 리스크 제어 조치가 필요한 종합적인 스톱 로스 메커니즘이 내장되어 있지 않습니다.

전략 최적화 방향

  1. 트렌드 필터링을 구현: 이동 평균 또는 트렌드 지표와 결합하여 역 트렌드 신호를 필터링합니다.
  2. 볼륨 확인 추가: 볼륨 변경을 통해 패턴 효과를 검증
  3. 리스크 제어 강화: 동적 스톱 손실 및 수익 목표 설정 기능을 추가
  4. 패턴 매개 변수를 최적화: 다른 시장과 시간 프레임에 패턴 인식 매개 변수를 조정
  5. 패턴 가중을 추가: 패턴 신뢰성을 기반으로 다른 신호 가중 시스템을 설정

요약

이것은 잘 설계되고 논리적으로 명확한 촛불 패턴 인식 거래 전략입니다. 그것은 프로그래밍을 통해 전통적인 기술 분석의 가장 일반적으로 사용되는 촛불 패턴 판단을 구현하여 거래자에게 객관적이고 체계적인 거래 도구를 제공합니다. 적절한 최적화 및 다른 기술 도구와의 조합을 통해이 전략은 일부 고유 한 한계를 가지고 있지만 거래 결정에 귀중한 참조 신호를 제공할 수 있습니다. 전략의 모듈형 설계는 후속 기능 확장 및 성능 최적화에도 좋은 기반을 제공합니다.


/*backtest
start: 2024-11-10 00:00:00
end: 2024-12-09 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// Author: Raymond Ngobeni
strategy('Candlestick Pattern Strategy [Ubaton]', 'Ubaton - Candlestick Pattern Strategy', overlay = true, max_labels_count = 500, max_lines_count = 500, max_boxes_count = 500)

// User Inputs: Enable/Disable Patterns
// Bullish Patterns
enableHammer = input.bool(true, "Show Hammer")
enableBullEngulfing = input.bool(true, "Show Bullish Engulfing")
enablePiercingLine = input.bool(true, "Show Piercing Line")
enableMorningStar = input.bool(true, "Show Morning Star")
enableThreeWhiteSoldiers = input.bool(true, "Show Three White Soldiers")

// Bearish Patterns
enableHangingMan = input.bool(true, "Show Hanging Man")
enableBearEngulfing = input.bool(true, "Show Bearish Engulfing")
enableDarkCloudCover = input.bool(true, "Show Dark Cloud Cover")
enableEveningStar = input.bool(true, "Show Evening Star")
enableThreeBlackCrows = input.bool(true, "Show Three Black Crows")

// Helper Functions
isHammer() =>
    bodySize = math.abs(open - close)
    shadowSize = low < math.min(open, close) ? math.min(open, close) - low : na
    shadowSize >= 2 * bodySize and high - math.max(open, close) <= bodySize

isBullishEngulfing() =>
    close[1] < open[1] and close > open and open <= close[1] and close >= open[1]

isPiercingLine() =>
    close[1] < open[1] and close > close[1] + (open[1] - close[1]) * 0.5 and close < open[1]

isMorningStar() =>
    close[2] < open[2] and math.abs(close[1] - open[1]) < (high[1] - low[1]) * 0.3 and close > open

isThreeWhiteSoldiers() =>
    close > open and close[1] > open[1] and close[2] > open[2] and open > close[1] and open[1] > close[2]

isHangingMan() =>
    bodySize = math.abs(open - close)
    shadowSize = low < math.min(open, close) ? math.min(open, close) - low : na
    shadowSize >= 2 * bodySize and high - math.max(open, close) <= bodySize and close < open

isBearishEngulfing() =>
    close[1] > open[1] and close < open and open >= close[1] and close <= open[1]

isDarkCloudCover() =>
    close[1] > open[1] and open > close[1] and close < open[1] and close < close[1] + (open[1] - close[1]) * 0.5

isEveningStar() =>
    close[2] > open[2] and math.abs(close[1] - open[1]) < (high[1] - low[1]) * 0.3 and close < open

isThreeBlackCrows() =>
    close < open and close[1] < open[1] and close[2] < open[2] and open < close[1] and open[1] < close[2]

// Detect Patterns
// Bullish
hammerDetected = enableHammer and isHammer()
bullEngulfDetected = enableBullEngulfing and isBullishEngulfing()
piercingDetected = enablePiercingLine and isPiercingLine()
morningStarDetected = enableMorningStar and isMorningStar()
threeWhiteDetected = enableThreeWhiteSoldiers and isThreeWhiteSoldiers()

// Bearish
hangingManDetected = enableHangingMan and isHangingMan()
bearEngulfDetected = enableBearEngulfing and isBearishEngulfing()
darkCloudDetected = enableDarkCloudCover and isDarkCloudCover()
eveningStarDetected = enableEveningStar and isEveningStar()
threeBlackDetected = enableThreeBlackCrows and isThreeBlackCrows()

// Plot Bullish Patterns
plotshape(enableHammer and hammerDetected, title="Hammer", location=location.belowbar, color=color.green, style=shape.labelup, text="Hammer")
plotshape(enableBullEngulfing and bullEngulfDetected, title="Bullish Engulfing", location=location.belowbar, color=color.green, style=shape.labelup, text="Engulf")
plotshape(enablePiercingLine and piercingDetected, title="Piercing Line", location=location.belowbar, color=color.green, style=shape.labelup, text="Piercing")
plotshape(enableMorningStar and morningStarDetected, title="Morning Star", location=location.belowbar, color=color.green, style=shape.labelup, text="Morning")
plotshape(enableThreeWhiteSoldiers and threeWhiteDetected, title="Three White Soldiers", location=location.belowbar, color=color.green, style=shape.labelup, text="3 Soldiers")

// Plot Bearish Patterns
plotshape(enableHangingMan and hangingManDetected, title="Hanging Man", location=location.abovebar, color=color.red, style=shape.labeldown, text="Hanging")
plotshape(enableBearEngulfing and bearEngulfDetected, title="Bearish Engulfing", location=location.abovebar, color=color.red, style=shape.labeldown, text="Engulf")
plotshape(enableDarkCloudCover and darkCloudDetected, title="Dark Cloud Cover", location=location.abovebar, color=color.red, style=shape.labeldown, text="Dark Cloud")
plotshape(enableEveningStar and eveningStarDetected, title="Evening Star", location=location.abovebar, color=color.red, style=shape.labeldown, text="Evening")
plotshape(enableThreeBlackCrows and threeBlackDetected, title="Three Black Crows", location=location.abovebar, color=color.red, style=shape.labeldown, text="3 Crows")

// Strategy Execution
if hammerDetected or bullEngulfDetected or piercingDetected or morningStarDetected or threeWhiteDetected
    strategy.entry("Bullish Entry", strategy.long)

if hangingManDetected or bearEngulfDetected or darkCloudDetected or eveningStarDetected or threeBlackDetected
    strategy.entry("Bearish Entry", strategy.short)

관련

더 많은