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

촛불 패턴 인식 거래 시스템과 함께 다단계 이동 평균

저자:차오장, 날짜: 2024-11-12 16:39:22
태그:EMASMAMA50MA200

img

전반적인 설명

이 전략은 고전적인 촛불 패턴 인식과 트렌드 분석을 결합한 포괄적인 기술 분석 거래 시스템이다. 이 시스템은 주로 10 개 이상의 다른 형식을 포함한 여러 고전적인 촛불 패턴을 식별하는 데 의존하며, 단기 및 장기 이동 평균을 통합하여 시장 추세를 확인하고 구매 / 판매 신호를 생성합니다. 이 전략은 다양한 시간 틀에 적응 할 수 있으며 단기 거래 및 중장기 포지션 보유 모두에 적합합니다.

전략 원칙

이 전략은 여러 계층의 신호 확인 메커니즘을 사용합니다.

  1. 단기 트렌드 지표로 6주기 기하급수적 이동 평균 (EMA) 을 사용합니다.
  2. 장기 트렌드 판단을 위해 50 및 200 기간 간단한 이동 평균 (SMA) 을 사용합니다.
  3. 여러 개의 촛불 패턴을 식별합니다.
    • 도지 가족 (정규 도지, 무덤 도지, 드래곤플라이 도지)
    • 해머 패턴 (해머, 목마, 뒤집은 해머, 쏘닝 스타)
    • 흡수 패턴
    • 내부 패턴
    • 아침 별/밤 별 패턴
    • 3군/3개 까마귀 패턴
  4. 트렌드와 패턴 분석을 결합하여 거래 신호를 생성합니다.

전략적 장점

  1. 다차원 확인: 이동 평균 및 촛불 패턴의 이중 확인을 통해 신호 신뢰성을 향상시킵니다.
  2. 높은 적응력: 다른 시장 환경에 적합하며 트렌드 및 역전 모두를 포착합니다.
  3. 포괄적 인 위험 관리: 엄격한 패턴 인식 기준을 통해 잘못된 신호를 줄입니다.
  4. 명확한 운영 논리: 각 거래 신호에는 특정 입시 조건이 있습니다.
  5. 높은 확장성: 전략 프레임워크는 새로운 패턴 인식 모듈을 쉽게 수용합니다.

전략 위험

  1. 패턴 인식 지연: 확인을 위해 필요한 여러 촛불은 최적의 입구 지점을 놓칠 수 있습니다.
  2. 신호 중복: 동시 패턴은 서로 충돌하는 신호를 일으킬 수 있습니다.
  3. 시장 소음: 불안정한 시장에서 과도한 잘못된 신호를 생성 할 수 있습니다.
  4. 매개 변수 민감성: 이동 평균 기간 선택은 전략 성과에 상당한 영향을 미칩니다.
  5. 계산 복잡성: 여러 패턴의 실시간 계산은 실행 효율성에 영향을 줄 수 있습니다.

전략 최적화 방향

  1. 신호 가중 시스템:
    • 다른 패턴에 대한 조정 가능한 무게를 구현
    • 시장 조건에 따라 무게를 동적으로 조정합니다.
  2. 시장 환경 인식:
    • 시장 상태를 식별하기 위해 변동성 지표를 추가합니다.
    • 시장 조건에 따라 전략 매개 변수를 조정
  3. 스톱 로스 최적화:
    • 패턴 특성에 기초한 동적 스톱 로스 설계
    • 후속 정지 메커니즘을 추가
  4. 신호 필터링:
    • 부피 확인 메커니즘을 포함
    • 트렌드 강도 필터를 추가
  5. 계산 효율성 최적화:
    • 패턴 인식 알고리즘을 단순화
    • 데이터 구조를 최적화

요약

이 전략은 완전한 거래 시스템을 구축하기 위해 여러 가지 기술 분석 도구를 통합합니다. 그것의 핵심 강점은 다차원 신호 확인 메커니즘에 있지만 신호 지연 및 잠재적 인 과잉 조정의 도전에 직면합니다. 시장 환경 인식 및 동적 매개 변수 조정 메커니즘을 추가하여 전략의 성능을 향상시킬 수 있습니다. 실제 응용에서는 백테스팅을 통해 매개 변수를 최적화하고 위험 관리 시스템과 함께 구현하는 것이 좋습니다.


/*backtest
start: 2023-11-12 00:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("hazed candles", shorttitle="hazed candles", overlay=true)

// Inputs
ema_input = input.int(6, title="EMA value to detect trend")

show_doji = input.bool(true, title="Doji star")
show_doji_grave = input.bool(true, title="Doji grave")
show_doji_dragonfly = input.bool(true, title="Doji dragonfly")
show_hammer = input.bool(true, title="Hammer")
show_hanginman = input.bool(true, title="Hanging man")
show_rhammer = input.bool(true, title="Reversed hammer")
show_falling_star = input.bool(true, title="Falling star")
show_absorption = input.bool(true, title="Absorptions")
show_tweezers = input.bool(true, title="Tweezers")
show_triple_inside = input.bool(true, title="Triple inside")
show_three_soldiers = input.bool(true, title="Three soldiers")
show_three_crows = input.bool(true, title="Three crows")
show_morning_evening_stars = input.bool(true, title="Morning / evening stars")
show_golden_death_cross = input.bool(true, title="Golden / Death cross")

// EMA calculation
prev_p_1 = ta.ema(close, ema_input)

// Variables
lowhigh_long_prop = 10
body_prop_size = 9

bar_size_h = high - close
bar_size_l = math.max(open, close) - math.min(close, open)
body_size_h = high - low

low_body_prop = close - low
high_body_prop = high - close

low_half_eq = (low_body_prop > body_size_h / 2.5 and low_body_prop < body_size_h / 1.65)
high_half_eq = (high_body_prop > body_size_h / 2.5 and high_body_prop < body_size_h / 1.65)
open_close_eq = (bar_size_l < body_size_h / body_prop_size)

///////////////// Doji star ///////////////
doji_star_up = show_doji and close <= prev_p_1 and open_close_eq and high_body_prop and low_half_eq
doji_star_down = show_doji and close > prev_p_1 and open_close_eq and high_body_prop and low_half_eq

plotshape(doji_star_up, style=shape.labelup, color=color.green, location=location.belowbar, size=size.large, text="Doji star")
plotshape(doji_star_down, style=shape.labeldown, color=color.red, location=location.abovebar, size=size.large, text="Doji star")

// Strategy entries for Doji star
if (doji_star_up)
    strategy.entry("Buy Doji Star", strategy.long)
if (doji_star_down)
    strategy.entry("Sell Doji Star", strategy.short)

///////////////// Doji grave ///////////////
long_high_body = (high_body_prop > bar_size_l * lowhigh_long_prop)
open_low_eq = ((close - low) < body_size_h / body_prop_size)

doji_grave = show_doji_grave and close > prev_p_1 and open_close_eq and open_low_eq and long_high_body
plotshape(doji_grave, style=shape.labeldown, color=color.red, location=location.abovebar, size=size.large, text="Doji grave")

// Strategy entries for Doji grave
if (doji_grave)
    strategy.entry("Sell Doji Grave", strategy.short)

///////////////// Doji dragonfly ///////////////
long_low_body = (low_body_prop > bar_size_l * lowhigh_long_prop)
open_high_eq = ((high - close) < body_size_h / body_prop_size)

doji_dragonfly = show_doji_dragonfly and close <= prev_p_1 and open_close_eq and open_high_eq and long_low_body
plotshape(doji_dragonfly, style=shape.labelup, color=color.green, location=location.belowbar, size=size.large, text="Doji dragonfly")

// Strategy entries for Doji dragonfly
if (doji_dragonfly)
    strategy.entry("Buy Doji Dragonfly", strategy.long)

///////////////// Hammer ///////////////
bottom_low = close - bar_size_h * 15
bottom_high = close - bar_size_h * 1.5
top_low = open + bar_size_l * 1.5
top_high = open + bar_size_l * 15

h_down = show_hammer and prev_p_1 > close and open == high and low > bottom_low and low < bottom_high
plotshape(h_down, style=shape.labelup, color=color.green, location=location.belowbar, size=size.large, text="Hammer")

// Strategy entries for Hammer
if (h_down)
    strategy.entry("Buy Hammer", strategy.long)

///////////////// Hanging man ///////////////
hm_down = show_hanginman and prev_p_1 < close and open == high and low > bottom_low and low < bottom_high
plotshape(hm_down, style=shape.labeldown, color=color.red, location=location.abovebar, size=size.large, text="Hanging man")

// Strategy entries for Hanging man
if (hm_down)
    strategy.entry("Sell Hanging Man", strategy.short)

///////////////// Reversed hammer ///////////////
rh_down = show_rhammer and prev_p_1 > open and low == close and high > top_low and high < top_high
plotshape(rh_down, style=shape.labelup, color=color.green, location=location.belowbar, size=size.large, text="Reversed hammer")

// Strategy entries for Reversed hammer
if (rh_down)
    strategy.entry("Buy Reversed Hammer", strategy.long)

///////////////// Fallling star ///////////////
fs_down = show_falling_star and prev_p_1 < close and low == close and high > top_low and high < top_high
plotshape(fs_down, style=shape.labeldown, color=color.red, location=location.abovebar, size=size.large, text="Falling star")

// Strategy entries for Falling star
if (fs_down)
    strategy.entry("Sell Falling Star", strategy.short)

///////////////// Absorption ///////////////
open_1 = open[1]
close_1 = close[1]
high_1 = high[1]
low_1 = low[1]

open_2 = open[2]
close_2 = close[2]
high_2 = high[2]
low_2 = low[2]

open_3 = open[3]
close_3 = close[3]
high_3 = high[3]
low_3 = low[3]

bar_1 = math.max(open_1, close_1) - math.min(open_1, close_1)
bar_2 = math.max(open_2, close_2) - math.min(open_2, close_2)
bar_3 = math.max(open_3, close_3) - math.min(open_3, close_3)
bar_h = math.max(open, close) - math.min(open, close)

bar_size_min = bar_1 * 1.2
bar_size_f = (bar_h > bar_size_min)

absorption_up = show_absorption and bar_size_f and open_1 > close_1 and open_1 != open and open_3 > open_2 and open_2 > open_1 and open_1 > open and close > open
absorption_down = show_absorption and bar_size_f and open_1 < close_1 and open_1 != open and open_3 < open_2 and open_2 < open_1 and open_1 < open and close < open

plotshape(absorption_up, style=shape.labelup, color=color.green, location=location.belowbar, size=size.large, text="Absorption")
plotshape(absorption_down, style=shape.labeldown, color=color.red, location=location.abovebar, size=size.large, text="Absorption")

// Strategy entries for Absorption
if (absorption_up)
    strategy.entry("Buy Absorption", strategy.long)
if (absorption_down)
    strategy.entry("Sell Absorption", strategy.short)

///////////////// Tweezer ///////////////
match_lows = (low_1 == low or (low_2 == low and open_2 == open_1))
sprici_up = show_tweezers and prev_p_1 > open and match_lows and open_3 > open_2 and open_2 > open_1 and open_1 > open and low != open and close_1 != low_1
plotshape(sprici_up, style=shape.labelup, color=color.green, location=location.belowbar, size=size.large, text="Tweezer")

match_highs = (high_1 == high or (high_2 == high and open_2 == open_1))
sprici_down = show_tweezers and prev_p_1 <= open and match_highs and open_3 < open_2 and open_2 < open_1 and open_1 < open and high != open and close_1 != high_1
plotshape(sprici_down, style=shape.labeldown, color=color.red, location=location.abovebar, size=size.large, text="Tweezer")

// Strategy entries for Tweezer
if (sprici_up)
    strategy.entry("Buy Tweezer", strategy.long)
if (sprici_down)
    strategy.entry("Sell Tweezer", strategy.short)

///////////////// Triple inside up/down ///////////////
open_close_min = math.min(close, open)
open_close_max = math.max(close, open)
bar = open_close_max - open_close_min
open_close_min_1 = math.min(close[1], open[1])
open_close_max_1 = math.max(close[1], open[1])
open_close_min_2 = math.min(close[2], open[2])
open_close_max_2 = math.max(close[2], open[2])

body_top_1 = math.max(close[1], open[1])
body_low_1 = math.min(close[1], open[1])

triple_inside_up = show_triple_inside and open_close_min_2 == open_close_min_1 and bar_1 > bar_2 * 0.4 and bar_1 < bar_2 * 0.6 and close > open_2 and bar > bar_1 and bar + bar_1 < bar_2 * 2
plotshape(triple_inside_up, style=shape.labelup, color=color.green, location=location.belowbar, size=size.large, text="Three inside")

triple_inside_down = show_triple_inside and open_close_max_2 == open_close_max_1 and bar_1 > bar_2 * 0.4 and bar_1 < bar_2 * 0.6 and close < open_2 and bar > bar_1 and bar + bar_1 < bar_2 * 2
plotshape(triple_inside_down, style=shape.labeldown, color=color.red, location=location.abovebar, size=size.large, text="Three inside")

// Strategy entries for Triple inside
if (triple_inside_up)
    strategy.entry("Buy Triple Inside", strategy.long)
if (triple_inside_down)
    strategy.entry("Sell Triple Inside", strategy.short)

///////////////// Triple soldiers / crows ///////////////
triple_solders = show_three_soldiers and prev_p_1 > open_2 and bar > bar_1 * 0.8 and bar < bar_1 * 1.2 and bar > bar_2 * 0.8 and bar < bar_2 * 1.2 and close > close_1 and close_1 > close_2 and open_2 < close_2 and open_1 < close_1
plotshape(triple_solders, style=shape.labelup, color=color.green, location=location.belowbar, size=size.large, text="Three soldiers")

triple_crows = show_three_crows and prev_p_1 < open_2 and bar > bar_1 * 0.8 and bar < bar_1 * 1.2 and bar > bar_2 * 0.8 and bar < bar_2 * 1.2 and close < close_1 and close_1 < close_2 and open_2 > close_2 and open_1 > close_1
plotshape(triple_crows, style=shape.labeldown, color=color.red, location=location.abovebar, size=size.large, text="Three crows")

// Strategy entries for Three soldiers and Three crows
if (triple_solders)
    strategy.entry("Buy Three Soldiers", strategy.long)
if (triple_crows)
    strategy.entry("Sell Three Crows", strategy.short)

///////////////// Golden death cross ///////////////
ma_50 = ta.sma(close, 50)
ma_200 = ta.sma(close, 200)

ma_50_200_cross = ta.crossover(ma_50, ma_200) or ta.crossunder(ma_50, ma_200)

golden_cross_up = show_golden_death_cross and ma_50_200_cross and ma_50 > ma_200
plotshape(golden_cross_up, style=shape.labelup, color=color.green, location=location.belowbar, size=size.large, text="Golden cross")

death_cross_down = show_golden_death_cross and ma_50_200_cross and ma_50 < ma_200
plotshape(death_cross_down, style=shape.labeldown, color=color.red, location=location.abovebar, size=size.large, text="Death cross")

// Strategy entries for Golden cross and Death cross
if (golden_cross_up)
    strategy.entry("Buy Golden Cross", strategy.long)
if (death_cross_down)
    strategy.entry("Sell Death Cross", strategy.short)

///////////////// Morning evening stars ///////////////
morning_star = show_morning_evening_stars and bar > bar_1 and bar_2 > bar_1 and bar > (bar_2 * 0.5) and open_close_min_2 > open_close_min_1 and open_close_min > open_close_min_1 and prev_p_1 > close_2 and prev_p_1 > close_1 and close > close_1 and close_3 > close_2 and close_2 > close_1 and close > body_top_1 and close_2 != close_1 and open != close and open_2 != close_2
plotshape(morning_star, style=shape.labelup, color=color.green, location=location.belowbar, size=size.large, text="Morning star")

evening_star = show_morning_evening_stars and bar > bar_1 and bar_2 > bar_1 and bar > (bar_2 * 0.5) and open_close_max_2 < open_close_max_1 and open_close_max < open_close_max_1 and prev_p_1 < close_2 and prev_p_1 < close_1 and close < close_1 and close_3 < close_2 and close_2 < close_1 and close < body_low_1 and close_2 != close_1 and open != close and open_2 != close_2
plotshape(evening_star, style=shape.labeldown, color=color.red, location=location.abovebar, size=size.large, text="Evening star")

// Strategy entries for Morning star and Evening star
if (morning_star)
    strategy.entry("Buy Morning Star", strategy.long)
if (evening_star)
    strategy.entry("Sell Evening Star", strategy.short)


관련

더 많은