EMA-VWAP 및 CBC 반전 추세 추적 양적 거래 전략

EMA VWAP CBC PDH PDL PDVWAP PDC
생성 날짜: 2025-04-02 10:31:49 마지막으로 수정됨: 2025-04-02 10:31:49
복사: 0 클릭수: 488
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

EMA-VWAP 및 CBC 반전 추세 추적 양적 거래 전략 EMA-VWAP 및 CBC 반전 추세 추적 양적 거래 전략

전략 개요

EMA-VWAP 연동 CBC 역전 추세를 추적하는 수량 거래 전략은 여러 가지 기술 지표를 결합한 복합적인 거래 시스템이다. 이 전략의 핵심은 지수 이동 평균 ((EMA), 거래량 중화 평균 가격 ((VWAP) 및 핵심 가격 돌파 확인 ((CBC) 의 3 대 기술 지표의 연동 작용을 사용하여 정확한 거래 신호를 형성하는 것이다.

이 전략은 특히 트렌드가 명확한 시장 환경에 적합하며, 단기 및 중기 EMA의 방향성을 VWAP의 위치 관계와 결합하여 CBC 브레이크 확인을 첨부하여 가짜 브레이크와 노이즈 신호를 효과적으로 필터링합니다. 이 전략은 또한 전날 거래의 최고 (PDH), 낮은 (PDL), 마감 가격 (PDC) 및 VWAP 수준을 포함한 하루 동안의 중요한 가격 참조를 통합하고 월요일의 최고 (PDC) 및 낮은 (PDC) 수준을 일주일 내내 참조하여 거래 결정을 내리기 위해 풍부한 시장 배경 정보를 제공합니다.

이 전략은 명확한 입출장 규칙을 적용하여 입출장 신호가 여러 조건을 동시에 충족하도록 요구하고, 출장 신호는 간단히 CBC의 역전 신호에 의존하여 “상승을 위해, 역전을 위해 출장”하는 거래 철학을 구현합니다.

전략 원칙

이 전략의 핵심은 4개의 핵심 기술 요소의 상호 작용에 기반합니다.

  1. 다주기 EMA 시스템전략: 세 개의 EMA 라인 ((9주기, 20주기 및 200주기) 을 사용하여 트렌드 판단 프레임워크를 형성한다. 빠른 EMA ((9주기) 와 중간 EMA ((20주기) 의 상대적 위치를 단기 트렌드 방향을 판단하기 위해 사용한다. 빠른 EMA가 중간 EMA 위에있을 때, 낙관적 신호로 간주한다. 반대로 하향 신호로 간주한다.

  2. VWAP 기준: VWAP는 가격과 거래량의 균형 지점으로서 전략에서 핵심적인 지지/저항 기준선 역할을 한다. 전략은 가격, 빠른 EMA 및 중간 빠른 EMA가 VWAP의 같은 편에 있어야 함을 요구하며, 트렌드의 일관성과 강도를 확인한다.

  3. CBC (Close, Break, Close) 반전 신호이것은 전략의 핵심 촉발 메커니즘이며, 가격의 지난 거래 날의 높은 점 또는 낮은 점을 깨는 것을 검출하고, 종결 시에는 파열의 유효성을 확인합니다. 종결 가격이 전날의 높은 점을 초과했을 때, CBC는 낙점으로 전환됩니다. 종결 가격이 전날의 낮은 점을 넘어섰을 때, CBC는 하락으로 전환됩니다.

  4. 일일 핵심 가격 참조 시스템이 전략은 전날 거래의 최고, 최저, 마감 가격 및 VWAP 수준을 통합하고 월요일의 최고와 최저가 주간 참조로 통합되어 전체 시장 구조 참조 프레임워크를 형성합니다.

입시 논리는 다음과 같은 조건을 동시에 충족하도록 요구한다:

  • 다중 입구: CBC가 하락에서 호평으로 뒤바뀌었다 + 가격이 VWAP 위에 있었다 + EMA 시스템은 호평으로 배열되었다 ((빠른 EMA>중간 EMA) + 두 EMA 모두 VWAP 위에 있었다
  • 공허 입구: CBC가 시상자로부터 하향으로 전환 + 가격이 VWAP 아래에 있다 + EMA 시스템은 하향으로 배열된다 ((빠른 EMA <중간 EMA) + 두 EMA 모두 VWAP 아래에 있다

출구 논리는 CBC의 역전 (反轉) 에 직접 의존한다. 즉, 상자는 CBC에서 하향으로 평정되고, 공자는 CBC에서 하향으로 평정된다. 이는 전략의 부진 거래 본질을 나타낸다.

전략적 이점

이 전략의 코드 분석을 통해 다음과 같은 중요한 장점이 나타났습니다.

  1. 다중 인증 메커니즘이 전략은 EMA 트렌드 방향, 가격과 VWAP의 위치 관계, CBC 반전 신호의 3가지가 조화를 이루도록 요구하며 거래 신호를 유발합니다. 이는 잘못된 보고율을 효과적으로 감소시키고 신호 품질을 향상시킵니다.

  2. 트렌드 따라가는 것과 반전하는 것전략은 트렌드를 포착하고 (EMA와 VWAP의 일관성을 통해) 중요한 돌파구를 포착하기 위해 CBC 신호에 의존하며, 트렌드를 따라가는 것과 반전 거래의 장점을 균형을 맞추고 있습니다.

  3. 전체 시장 구조 참조: 전날의 핵심 가격과 월요일의 하위/높이를 통합하여 거래 결정을 위한 풍부한 시장 배경 정보를 제공하고, 더 큰 시장 구조에서 현재 가격의 위치를 이해하는 데 도움이 됩니다.

  4. 명확한 시각적 피드백전략은 배경 색상 변화, 모양 표시 및 태그를 포함한 풍부한 시각적 요소를 사용하여 거래자가 신호와 현재 시장 상태를 직관적으로 식별 할 수 있습니다.

  5. 간단한 출전 논리: CBC 역전환을 출전 신호로 사용하여, 조기 출전 또는 과도한 보유의 위험을 피하고, 출전 논리와 일치하고 대칭적인 시스템을 형성한다.

  6. 적응성 변수 설정전략은 날짜 필터 기능과 여러 표시 옵션을 제공하여 거래자가 자신의 필요에 따라 전략을 맞춤화 할 수있게하여 전략의 유연성과 적응력을 향상시킵니다.

  7. 자금 관리 통합전략: 계좌 자금의 일정한 수보다 백분율을 사용하여 거래하는 것이 기본으로 설정되어 있으며, 이는 장기적인 자금 성장과 위험 통제에 도움이되는 좋은 위험 관리 의식을 나타냅니다.

전략적 위험

이 전략은 많은 장점들을 가지고 있지만, 코드를 더 깊이 분석하면서 우리는 다음과 같은 잠재적인 위험들을 발견했습니다.

  1. 지연 위험:EMA는 본질적으로 뒤떨어진 지표이며, 격렬한 변동이있는 시장에서 신호 지연, 최적의 진입 지점을 놓치거나 뒤떨어진 출전이 발생하여 추가 손실을 초래할 수 있습니다. 해결책은 높은 변동 환경에서 EMA 매개 변수를 조정하거나 변동율 필터를 증가시키는 것을 고려하는 것입니다.

  2. 가짜 침입 위험: CBC 논리로는 종전 가격 확인이 요구되지만, 시장은 가짜 돌파 이후 급격히 역전되는 상황이 발생할 수 있다. 해결책은 거래량 확정을 늘리거나 돌파폭 필터링 조건을 설정하는 것을 고려하는 것이다.

  3. 너무 많은 VWAP 의존수평 또는 좁은 변동 시장에서 가격은 VWAP를 자주 통과하여 신호 소음을 증가시킬 수 있습니다. 해결책은 수평 시장에 도달 할 때 거래를 중지하거나 변동 폭을 증가시키는 조건을 추가하는 것입니다.

  4. 손해 방지 장치의 부재: 현재 전략에는 명확한 중지 손해 메커니즘이 없으며, CBC 역전 신호 평소에 전적으로 의존하고 있으며, 극단적 인 경우 큰 손실을 초래할 수 있습니다. 해결책은 고정 중지 또는 ATR 배수 중지를 늘리고 최대 손실 제한을 설정하는 것입니다.

  5. 날짜 필터가 부족하다: 전략은 날짜 필터 기능을 제공하지만, 전략의 성과에 대한 특별한 시장 이벤트 (예: 수익 보고서, 정책 발표 등) 의 영향을 고려하지 않습니다. 해결책은 중요한 이벤트 동안 자동으로 조정하거나 거래를 중지하는 경제 달력 기능을 통합하는 것입니다.

  6. 오차 감지전략적 사용:fill_orders_on_standard_ohlc = true매개 변수, 이는 재측정에서 실제 거래와 차이가 있을 수 있으며, 재측정 결과가 지나치게 낙관적일 수 있다. 해결책은 한 편의 시뮬레이션을 사용하거나 슬라이드 포인트와 거래 비용을 고려하여 보다 현실적인 재측정을 하는 것이다.

  7. 단일 사이클 의존: 전략은 단 하나의 시간주기에만 작동하며, 다주기 확인이 없고, 더 큰 주기의 반전 신호를 놓칠 수 있다. 해결책은 다주기 신호 확인 메커니즘을 통합하는 것을 고려하는 것이다.

전략 최적화 방향

정책 코드의 전체적인 분석을 바탕으로, 우리는 다음과 같은 최적화 방향을 추천합니다.

  1. 적응 변수를 추가합니다: EMA 주기는 시장의 변동률에 따라 동적으로 조정될 수 있으며, 높은 변동률의 시장에서는 짧은 주기를 사용하고, 낮은 변동률의 시장에서는 더 긴 주기를 사용하고, 다양한 시장 환경에 대한 전략의 적응성을 향상시킵니다. 이것은 ATR을 계산하여 EMA 주기의 범위에 매핑하여 달성 할 수 있습니다.

  2. 통합 트래픽 확인: CBC 리버팅 신호에 기초하여 트랜지먼트 확인이 요구되며, 트랜지먼트가 크게 증가했을 때만 신호를 유발하며, 낮은 품질의 돌파구를 필터링한다. 현재 트랜지먼트와 N주기 평균 트랜지먼트의 관계를 비교하여 달성할 수 있다.

  3. 손해배상 장치에 가입: ATR 기반의 동적 스톱 또는 고정 비율 스톱을 도입하여 CBC 역전 신호를 기다리는 동안 자금을 극단적 인 상황으로부터 보호하십시오. 가격의 유리한 방향으로 이동함에 따라 자동으로 스톱 수준을 조정하는 스톱 트래킹 기능을 구현하는 것이 좋습니다.

  4. 다주기 동기확인: 더 높은 시간 주기의 트렌드에 대한 검사를 추가하고, 큰 주기의 트렌드 방향이 현재 거래 방향과 일치할 때만 진입하여 신호 품질을 향상시킵니다. 더 높은 주기의 EMA 데이터를 요청하고 그 방향성을 검사하여 수행 할 수 있습니다.

  5. 시장 상태 분류: 시장 상태를 식별하는 모듈을 개발하여, 트렌드 시장과 가로 디스크 시장을 구분하고, 서로 다른 시장 상태에서 전략 파라미터를 조정하거나 거래를 중지한다. ADX ((평균 방향 지수) 또는 가격 변동 범위 분석을 사용하여 시장 상태를 식별 할 수 있다.

  6. 자금 관리 최적화: 변동률과 승률에 따라 동적으로 포지션 크기를 조정합니다. 높은 승률 신호에 포지션을 증가시키고 낮은 승률 신호에 포지션을 감소시킵니다. 역학적 신호 통계와 현재 시장 변동률을 계산하여 동적으로 포지션 조정할 수 있습니다.

  7. 필터링 시간을 추가합니다.: 일간 시간 필터를 도입하여, 상장과 상장 전의 높은 변동 시기를 피하고, 시장이 활발하지만 상대적으로 안정적인 시간대에 거래하는 데 집중한다. 다른 시장의 거래 시간 특성에 따라 최적화된 거래 시간을 설정할 수 있다.

  8. 환경 최적화사용:fill_orders_on_standard_ohlc = false실제 슬라이드 포인트, 수수료 설정, 실제 피드백에 더 가깝게 접근하여 보다 신뢰할 수 있는 전략 평가 결과를 얻을 수 있습니다.

요약하다

EMA-VWAP 협동 CBC 역전 추세를 추적하는 양적 거래 전략은 구조적으로 완전하고 논리적으로 명확한 거래 시스템으로, 여러 가지 기술 지표와 가격 행동 분석 방법을 통합하여 고품질의 거래 신호를 형성한다. 이 전략의 핵심 장점은 여러 확인 장치와 완전한 시장 구조 참조 시스템으로, 오류를 효과적으로 감소시키고 신호 품질을 향상시킨다.

전략은 “상향으로, 역향으로”의 거래 철학을 채택하고, 입장은 여러 조건의 협동확인을 요구하며, 출장은 CBC의 역전환 신호에 의존하여 논리적으로 일관되고 대칭적인 거래 시스템을 형성한다. 동시에, 전략은 풍부한 시각적 피드백 요소와 유연한 파라미터 설정을 통합하여 사용 경험과 적응성을 향상시킨다.

그러나, 이 전략에는 지연 위험, 가짜 돌파 위험, 그리고 손해 막기 장치의 부재와 같은 잠재적인 문제도 있다. 적응 변수를 추가하고, 거래량 확인을 통합하고, 손해 막기 장치와 다중 주기 동시 확인과 같은 최적화 조치를 추가함으로써, 전략의 안정성과 수익성을 더욱 향상시킬 수 있다.

전체적으로 이것은 잘 설계된 기본 전략 프레임 워크이며, 합리적인 최적화와 위험 관리 구성으로 안정적인 거래 시스템이 될 잠재력이 있습니다. 실제 적용에서 거래자는 자신의 위험 선호와 거래 목표에 따라 전략 매개 변수를 개인화하고 항상 적절한 자금 관리 규율을 유지해야합니다.

전략 소스 코드
/*backtest
start: 2024-04-02 00:00:00
end: 2025-04-01 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Maple&CBC Strategy", overlay = true, fill_orders_on_standard_ohlc = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)


// EMA's
fastEma = ta.ema(close, 9)
middleEma = ta.ema(close, 20)
slowEma = ta.ema(close, 200)
vwap = ta.vwap(close)

plot(fastEma, color=color.blue, title="9 EMA")
plot(middleEma, color=color.green, title="20 EMA")
plot(slowEma, color=color.red, title="200 EMA")
plot(vwap, color=color.yellow, title="VWAP")

// Input instellingen voor zichtbaarheid van lijnen
show_prev_day_high = input.bool(true, title="Toon Previous Day High")
show_prev_day_low = input.bool(true, title="Toon Previous Day Low")
show_prev_day_vwap = input.bool(true, title="Toon Previous Day VWAP")
show_prev_day_close = input.bool(true, title="Toon Previous Day Close")
show_monday_levels = input.bool(true, title="Toon Monday High/Low")

// Vorige dag niveaus
[dh, dl, dc, dv] = request.security(syminfo.tickerid, "D", [high[1], low[1], close[1], ta.vwap(close)[1]])

// Maandag High en Low
isMonday = dayofweek == dayofweek.monday
var float mondayHigh = na
var float mondayLow = na

if isMonday and barstate.isconfirmed
    mondayHigh := high
    mondayLow := low

// CBC Flip Logica
cbc = false
cbc := cbc[1]
if cbc and close < low[1]
    cbc := false
if not cbc and close > high[1]
    cbc := true

cbc_long = cbc and not cbc[1]
cbc_short = not cbc and cbc[1]

// EMA's bullish/bearish check
ema_bullish = fastEma > middleEma
ema_bearish = fastEma < middleEma

// Prijs boven/onder VWAP check
price_above_vwap = close > vwap
price_below_vwap = close < vwap

// ==================== STRATEGIE LOGICA ====================

// Long signaal: prijs boven VWAP + EMA's bullish + EMA's boven VWAP + CBC flip bullish
emas_above_vwap = fastEma > vwap and middleEma > vwap
longCondition = cbc_long and price_above_vwap and ema_bullish and emas_above_vwap and barstate.isconfirmed

// Short signaal: prijs onder VWAP + EMA's bearish + EMA's onder VWAP + CBC flip bearish
emas_below_vwap = fastEma < vwap and middleEma < vwap
shortCondition = cbc_short and price_below_vwap and ema_bearish and emas_below_vwap and barstate.isconfirmed

// Variabelen om bij te houden of we in een positie zitten
var bool inLongPosition = false
var bool inShortPosition = false

// Strategy entrypoints
if longCondition and not inLongPosition and not inShortPosition
    strategy.entry("Long", strategy.long)
    inLongPosition := true
    inShortPosition := false

if shortCondition and not inShortPosition and not inLongPosition
    strategy.entry("Short", strategy.short)
    inShortPosition := true
    inLongPosition := false

// Strategy exitpoints - wacht op tegenovergestelde CBC flip signaal
if cbc_short and inLongPosition
    strategy.close("Long", comment="Exit Long on CBC flip short")
    inLongPosition := false

if cbc_long and inShortPosition
    strategy.close("Short", comment="Exit Short on CBC flip long")
    inShortPosition := false

// Visuele weergave van signalen
plotshape(series=cbc_long, location=location.belowbar, color=color.green, style=shape.triangleup, title="Bulls")
plotshape(series=cbc_short, location=location.abovebar, color=color.red, style=shape.triangledown, title="Bears")

// Achtergrondkleur voor visuele ondersteuning
bgcolor(cbc_long ? color.rgb(255, 235, 59, 71) : cbc_short ? color.rgb(5, 185, 240, 59) : na)

// Extra achtergrondkleur voor trading signalen
bgcolor(longCondition ? color.rgb(0, 255, 0, 90) : shortCondition ? color.rgb(255, 0, 0, 90) : na)

// Labels voor de trading posities
if inLongPosition and barstate.islast
    label.new(bar_index, low - (low * 0.002), "IN LONG", color=color.green, style=label.style_label_up, textcolor=color.white, size=size.small)

if inShortPosition and barstate.islast
    label.new(bar_index, high + (high * 0.002), "IN SHORT", color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)