당사 팬 페이지에 가입하십시오
KCI Standard: A Pure Kinematic Computing Engine for Market Singularity Detection - MetaTrader 5용 지표
- 조회수:
- 25
- 평가:
- 게시됨:
-
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동
초록
KCI(Kinetic Compression Index)는 시장의 매도세 고갈과 국부적인 압축 현상을 감지하기 위해 설계된 맞춤형 오실레이터입니다. KCI는 외부 표준 지표 핸들에 의존하지 않고 내부적으로 운동학적 지표를 계산함으로써 오버헤드를 줄이고, Expert Advisor(EA) 통합을 위한 버퍼 관리를 간소화합니다. 이 글은 MetaTrader 5에서 이 도구를 구현하고자 하는 개발자들을 위해 수학적 기초, 시스템 아키텍처, 버퍼 매핑 및 실용적인 통합 가이드를 상세히 설명합니다.서론
알고리즘 트레이딩에서 여러 외부 지표 핸들에 대한 의존도를 줄이면 Expert Advisor의 아키텍처를 간소화할 수 있습니다. 여러 iCustom 또는 표준 지표 핸들(이동평균 및 표준편차 등)을 호출하면 때때로 버퍼 관리 및 초기화 과정이 복잡해질 수 있습니다.
KCI는 단일 파일 내에서 가격 및 거래량 데이터를 네이티브 방식으로 처리하도록 설계되었습니다. 가격 변동의 급격한 둔화와 거래량 감소가 동시에 발생하는 지점을 식별함으로써, 통계적으로 국소적인 평균 회귀가 발생할 가능성이 높은 지점인 ‘고갈 이벤트’를 정확히 파악하는 것을 목표로 합니다.
문제 정의
KCI 아키텍처의 주요 목표는 다음과 같습니다:
-
핸들 의존성 감소: 지표 루프 내에서 이동 평균 및 편차를 네이티브 방식으로 계산하여 외부 핸들의 사용을 최소화합니다.
-
재현 가능한 지표 제공: EA에 명확하고 투명한 수학적 지표(속도, 편차, 분산)를 제공합니다.
-
비동기 안전성 보장: 종가 바에서만 유효성을 검증하는 신호 버퍼를 구축하여, EA가 바 내 재그리기 및 비동기 틱 데이터 지연으로부터 보호되도록 합니다.
이론 및 수학적 기초
KCI는 네 가지 기본 지표에 기반을 두고 있습니다. 완전한 재현성을 보장하기 위해 핵심 공식은 다음과 같이 정의됩니다(여기서 $n$은 BasePeriod입니다):

그림 설명 :
1. **Velocity Quotient (VQ)** – Measures the rate of price change. VQ_i=\frac{Close_i-Close_{i-n}}{n} Where: - \(Close_i\) = current closing price - \(Close_{i-n}\) = closing price \(n\) bars ago - \(n\) = lookback period 2. **Kinetic Displacement (KD)** – Measures the deviation of the current price from its local mean. KD_i=Close_i-SMA(Close,n)_i Where: - \(SMA(Close,n)_i\) = Simple Moving Average of the closing price over the last \(n\) periods. 3. **Energy Dispersion (ED)** – Acts as a dynamic volatility proxy, calculated as the standard deviation of the closing price. ED_i=\sqrt{\frac{\sum_{j=0}^{n-1}\left(Close_{i-j}-SMA_i\right)^2}{n}} Where: - \(SMA_i\) = local Simple Moving Average at bar \(i\). 4. **Phase Velocity (PV)** – Tracks the immediate momentum of the Velocity Quotient. PV_i=VQ_i-VQ_{i-1} Where: - \(VQ_i\) = current Velocity Quotient - \(VQ_{i-1}\) = previous Velocity Quotient // Or 1. Velocity Quotient (VQ) VQ(i) = (Close(i) - Close(i-n)) / n 2. Kinetic Displacement (KD) KD(i) = Close(i) - SMA(Close, n) 3. Energy Dispersion (ED) n-1 ----- \ ED(i) = sqrt( / (Close(i-j) - SMA(i))² / n ) ----- j=0 4. Phase Velocity (PV) PV(i) = VQ(i) - VQ(i-1)
Z-점수 정규화: 이 네 가지 지표는 서로 다른 척도(예: 가격 수준 대 순수 비율)를 가지므로, Raw_KCI로 합산되기 전에 정의된 ZScorePeriod에 걸쳐 롤링 Z-점수를 사용하여 정규화됩니다.
시스템 아키텍처 및 통합 버퍼 맵
CopyBuffer() 호출 중 흔히 발생하는 “인덱스 범위를 벗어남(Index Out of Bounds)” 오류나 버퍼 불일치 오류를 방지하기 위해, KCI는 다음의 통합 버퍼 매핑을 엄격하게 준수합니다. 이 매핑은 #property 선언, SetIndexBuffer() 및 EA 통합 전반에 걸쳐 일관되게 적용됩니다.| 버퍼 인덱스 | 버퍼 이름 | 유형 | 용도 |
| 0 | KCI_Main | INDICATOR_DATA | 시각적 편광 발진기 라인 |
| 1 | KCI_Color | INDICATOR_COLOR_INDEX | 메인 라인에 대한 동적 색상 매핑 |
| 2 | 매수 신호 | INDICATOR_DATA | 매수 신호 (1.0 = 매수, 0.0 = 중립) |
| 3 | 매도 신호 | INDICATOR_DATA | 매도 신호 (1.0 = 매도, 0.0 = 중립) |
| 4 | Internal_VQ | 지표_계산 | 속도 몫 배열 |
| 5 | Internal_KD | 지표_계산 | 운동 변위 배열 |
| 6 | Internal_ED | 지표_계산 | 에너지 분산 배열 (SL/TP에 사용됨) |
| 7 | Internal_PV | 지표_계산 | 위상 속도 배열 |
| 8 | Raw_KCI | 지표_계산 | 정규화된 행렬의 합 |
코드 해설: EA 통합 및 리스크 관리
EA에서 KCI를 호출할 때, 코드는 지표 핸들의 수명 주기를 처리하고, CopyBuffer가 데이터를 성공적으로 가져왔는지 확인하며, 해당 종목의 소수점 자릿수에 따라 손절매(SL) 및 익절(TP)에 대한 모든 가격 계산을 정규화해야 합니다.
다음은 수정되어 안정성이 강화된 EA 통합 템플릿입니다:
#include <Trade\Trade.mqh> CTrade trade; int handle_kci; datetime last_bar_time = 0; double buf_buy[], buf_sell[], buf_ed[]; int OnInit() { // KCI 핸들 초기화 handle_kci = iCustom(_Symbol, _Period, "KCI", 50, 2.0, 14); if(handle_kci == INVALID_HANDLE) { Print("Failed to create KCI handle!"); return(INIT_FAILED); } ArraySetAsSeries(buf_buy, true); ArraySetAsSeries(buf_sell, true); ArraySetAsSeries(buf_ed, true); return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { if(handle_kci != INVALID_HANDLE) IndicatorRelease(handle_kci); } void OnTick() { datetime current_time = (datetime)SeriesInfoInteger(_Symbol, _Period, SERIES_LASTBAR_DATE); if(current_time == last_bar_time) return; // 기본 필터: 심볼당 하나의 위치만 허용 if(PositionsTotal() > 0) { for(int i = PositionsTotal() - 1; i >= 0; i--) { if(PositionGetSymbol(i) == _Symbol) return; } } // 데이터 가져오기 (버퍼 2 = 매수, 버퍼 3 = 매도, 버퍼 6 = ED) if(CopyBuffer(handle_kci, 2, 1, 1, buf_buy) <= 0) return; if(CopyBuffer(handle_kci, 3, 1, 1, buf_sell) <= 0) return; if(CopyBuffer(handle_kci, 6, 1, 1, buf_ed) <= 0) return; // 데이터가 성공적으로 복사된 후에만 시간을 잠그기 last_bar_time = current_time; double dynamic_volatility = buf_ed[0]; if(dynamic_volatility == 0) return; double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT); int digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS); double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); // 정규화된 동적 변동성 손절매를 적용한 실행 로직 if(buf_buy[0] == 1.0) { double sl = NormalizeDouble(ask - (dynamic_volatility * 1.5), digits); double tp = NormalizeDouble(ask + (dynamic_volatility * 3.0), digits); trade.Buy(0.01, _Symbol, ask, sl, tp, "KCI Buy"); } if(buf_sell[0] == 1.0) { double sl = NormalizeDouble(bid + (dynamic_volatility * 1.5), digits); double tp = NormalizeDouble(bid - (dynamic_volatility * 3.0), digits); trade.Sell(0.01, _Symbol, bid, sl, tp, "KCI Sell"); } }
성능 및 제한 사항
현실적인 기대치를 설정하기 위해 개발자는 다음과 같은 구조적 제한 사항을 고려해야 합니다:
-
틱 볼륨 의존성: 외환/CFD의 경우, tick_volume은 실제 유동성이 아닌 가격 변동 빈도를 나타냅니다. 실제 거래량이 확인 가능한 중앙화된 거래소(주식/선물)에서는 볼륨 압축 지표의 작동 방식이 달라질 수 있습니다.
-
평균 회귀 취약성: KCI는 유한 진동 지표로서 추세 고갈 시점을 포착하는 것을 목표로 합니다. 강한 추세장이 형성된 시장에서는 연속적인 조기 반전 신호를 발생시킬 수 있습니다. 따라서 더 긴 시간대의 추세 필터(예: EMA 200)와 함께 사용해야 합니다.
-
단기 시간대의 잡음: M1 또는 M5에서 이 지표를 사용하면 마이크로 구조적 잡음에 노출될 수 있습니다. Z-스코어 정규화에는 안정적인 분포가 필요하며, 이는 M15 이상의 시간대에서 더 잘 나타납니다.
결론
키네틱 압축 지수(KCI)는 여러 표준 지표를 중첩하여 사용하는 대신, 투명하고 자체적으로 계산되는 대안을 제공합니다. 통합 버퍼 맵을 통해 종가 바의 방향성 신호와 동적 변동성 대리 지표(에너지 분산)를 모두 제시함으로써, MQL5 전문가 자문(EA)을 위한 신뢰할 수 있는 구조적 구성 요소로 기능합니다.차트 적용: (KCI Custom)
MetaQuotes Ltd에서 영어로 번역함.
원본 코드: https://www.mql5.com/en/code/74580
EA KCI Embeded Sniper
KCI 임베디드 스나이퍼는 고정밀 반전 진입을 위해 설계된 알고리즘 트레이딩 솔루션입니다. 외부 지표에 의존하는 기존 전문가 자문가(Expert Advisor, EA)와 달리(이러한 방식은 종종 스레드 비동기화 및 지연 현상을 겪습니다), 이 EA는 완전히 내장된 KCI(Kinetic Compression Index) 엔진을 특징으로 합니다. 속도 몫(Velocity Quotients), 운동 변위(Kinetic Displacement), 에너지 분산(Energy Dispersion), 위상 속도(Phase Velocity)를 계산하는 KCI의 전체 수학적 프레임워크를 EA의 핵심 로직에 직접 이식함으로써, “비동기적 지연”을 제거했습니다. 그 결과, 시장 고갈(싱귤래리티)과 모멘텀 극단치(윌리엄스 %R)를 마이크로초 단위의 정밀도로 검증하는 번개처럼 빠른 스나이퍼 엔진이 탄생했으며, 이 엔진은 완료된 바(bar)만을 기반으로 작동하여 리페인트가 전혀 발생하지 않는 성능을 보장합니다.
RSI Histogram
This is an MQL5 custom indicator for MetaTrader 5 called RSI Histogram. It plots the standard RSI line in a separate window, plus a color-coded histogram version of the same RSI values that changes color based on momentum:
GoldLondonBreakout
Locks in the Asian session range on XAUUSD, then places an OCO breakout pair (BuyStop/SellStop) for the London open, with ATR-based stops and risk-percent position sizing. No indicators, no discretion — the range is measured, not guessed.
Market Structure SMC: Swings, BOS/CHoCH, Order Blocks, FVG, QML
MT5용 SMC/ICT 시장 구조 지표: 종가 기준 확인된 스윙 고점/저점, BOS(추세 지속) 및 CHoCH(추세 반전), 오더 블록, 공정가치 갭, QML(Quasimodo) 수준. 모든 기능은 켜고 끌 수 있으며, 스윙 감도와 색상을 조정할 수 있습니다. 모든 종목 및 시간대에서 작동합니다.
