당사 팬 페이지에 가입하십시오
- 조회수:
- 25
- 평가:
- 게시됨:
-
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동
KCI-방향 행렬(KCI-DX)
는 가격 경로 길이와 변동성 에너지를 측정하여 시장 운동학을 추출하는, 물리학에서 영감을 받은 첨단 분석 도구입니다. 기존의 모멘텀 도구와 달리, KCI-DX는 시그모이드 활성화 함수와 결합된 동적 Z-스코어 정규화를 사용합니다. 이를 통해 출력이 0에서 100 사이로 완벽하게 제한되어, 과거의 극단적인 수치로 인한 왜곡 없이 매우 민감하게 추세 강도와 방향성 편향을 식별할 수 있습니다. KCI 방향성 매트릭스(KCI-DX) 는 독자적인 운동 에너지 압축 지수(Kinetic Compression Index) 프레임워크를 통해 시장 효율성, 방향성 압력 및 추세 확장을 측정하도록 설계된 정량적 방향성 분석 지표입니다.
주요 특징:
- 운동학적 방향성 추출: 경로 길이 분산을 활용하여 진정한 시장 에너지를 계산합니다.
- 동적 시그모이드 스케일링: 지표의 평탄화를 방지하는 적응형 정규화.
- 3선 매트릭스: 메인 KCI(추세/압축 강도), +KDI(강세 운동학), -KDI(약세 운동학)로 구성됩니다.
기존의 모멘텀 오실레이터와 달리, KCI-DX는 시장 움직임을 다음 세 가지 독립적인 차원으로 분해합니다:
- KCI 메인 – 전반적인 방향성 효율성과 추세 확장 강도를 측정합니다.
- +KDI(강세 운동 방향 지수) – 강세 방향의 우위를 정량화합니다.
- -KDI(약세 운동 방향 지수) – 강세 방향 우위를 정량화합니다.
이 지표는 다음을 결합합니다:
- 운동학적 방향성 추출
- 경로 효율성 분석
- 에너지 가중 이동 점수 산정
- 동적 Z-스코어 정규화
- 시그모이드 적응형 스케일링
그 결과, 다음을 식별할 수 있는 안정적인 0–100 방향 행렬이 생성됩니다:
- 추세 확대
- 방향성 우세
- 압축 단계
- 모멘텀 가속
- 변동성 이상 현상
- 시장 체제 전환
KCI-DX는 독립형 거래 도구로 사용하거나, Expert Advisors, 머신러닝 시스템, 시장 스캐너, 적응형 그리드, 동적 스톱 관리, 포트폴리오 수준 의사결정 엔진을 위한 특징 공학 구성 요소로 활용할 수 있습니다.
입력 매개변수:

KCI-DX: 시각적 빠른 시작 가이드
- 시각적 인터페이스 (화면에 표시되는 내용)
| 시각적 요소 | 색상 및 스타일 | 의미 |
|---|---|---|
| KCI 주선 | 금색 (실선) | 추세 강도 및 압축. 방향과 관계없이 시장에 얼마나 많은 운동 에너지가 존재하는지 보여줍니다. |
| +KDI 선 | 파란색 (점선) | 강세 에너지. 가격 상승 추세의 강도를 나타냅니다. |
| -KDI 선 | 빨간색 (점선) | 약세 모멘텀. 가격 하락세의 강도. |
| 80.0 수준 | 회색 (점선) | 극단/고갈 구간. 추세가 최대치에 도달한 상태입니다. |
| 20.0 수준 | 회색 (점선) | 압축 / 횡보 구역. 시장이 에너지를 축적하고 있습니다. |
- 시장 단계(구간) 시각화
골드 라인(KCI 메인) 이 어디에 위치해 있는지 확인하면 시장 상황을 즉시 파악할 수 있습니다:
그림 1

- 수면 구역 (0~20):
- 시각적 특징: 골드 라인이 평평하게 유지되며 바닥에 머물러 있습니다.
- 조치: 거래하지 마십시오. 시장은 좁은 범위 내에서 갇혀 횡보하고 있습니다.
- 액션 존(20~80):
- 시각적 특징: 골드 라인이 20 수준을 상향 돌파하며 가파르게 상승합니다.
- 조치: 진입 시점을 찾으십시오. 새로운 추세가 형성되고 있습니다. 방향 파악을 위해 파란색 또는 빨간색 점선을 따르십시오.
- 위험 구역 (80~100):
- 시각적 특징: 골드 라인이 상단 저항선(80 이상)에 도달합니다.
- 조치: 청산 준비. 현재 추세가 극도로 과열된 상태이며, 반전이나 깊은 조정이 임박했습니다.
시각적 매매 설정 (단계별)
- 시나리오 A: 강세 돌파 (매수)
- 골드 라인 확인: 골드라인이 상승하며 20 수준을 상향 돌파해야 합니다.
- 점선 확인: 파란 선(+KDI) 이 빨간 선(-KDI) 을 위로 교차해야 합니다.
- 실행: 매수 포지션을 진입합니다.
- 시나리오 B: 약세 돌파 (매도)
- 황금색 선 확인: 위쪽으로 교차하며 20 수준을 상향 돌파해야 합니다. (네, 하락 추세 중에도 위쪽으로 교차합니다. 하락 모멘텀이 증가하고 있기 때문입니다!)
- 점선 확인: 빨간 선(-KDI) 이 파란 선(+KDI) 을 위로 교차해야 합니다.
- 실행: 매도 포지션을 진입합니다.
- 시나리오 C: 이익 실현 (청산)
- 골드 라인 확인: 이미 포지션을 보유하고 있는 상태에서 골드 라인이 80 수준에 닿거나 이를 돌파해야 합니다.
- 실행: 손절매를 본전 수준으로 이동시키거나, 타이트한 추적 손절매를 설정하거나, 포지션을 청산하여 이익을 확보하십시오.
그림 2

전문가 팁: 파란색 선과 빨간색 선이 20 수준 아래에서 얽혀 있는 경우에는 절대 거래하지 마십시오. 두 선이 명확하게 분리되고 골드 라인이 돌파할 때까지 기다리세요!
KCI Directional Matrix Logic for Expert Advisors (EAs)
이 지표를 EA 내에서 사용할 경우, 다음과 같은 거래 규칙을 적용할 수 있습니다:
- 매수 진입 로직 (강세):
- KDI_Plus가 KDI_Minus를 상향 돌파(크로스오버)할 때.
- 필터: KCI_Main이 20 수준 이상이어야 합니다(시장이 압축/횡보 구간을 벗어났음을 확인).
- 매도 진입 로직 (약세):
- KDI Minus가 KDI Plus를 상향 돌파할 때 (크로스오버).
- 필터: KCI_Main이 20 수준 이상이어야 함.
- 청산 / 익절 / 추적 손절 로직:
- KCI_Main이 80 수준에 도달할 경우(극단적 추세), 추세 에너지가 최대치에 도달하여 조정 가능성이 있으므로 EA는 타이트한 추적 손절매를 활성화하거나 부분적인 익절을 실행해야 합니다.
- 비거래 로직 (횡보):
- KCI_Main이 20 미만일 경우, 시장이 압축 구간(에너지 저하)에 있으므로 EA는 신규 포지션 개설을 금지합니다.
iCustom Call
을 사용한 EA 코드 예시
이것이 가장 최적이며 권장되는 방법입니다. EA는 Indicators 폴더에 위치한 KCI-Directional_X.ex5 파일을 호출합니다.
코드 스니펫:
//+------------------------------------------------------------------+ //| EA_KCI_iCustom.mq5 | //+------------------------------------------------------------------+ #property copyright "Copyright 2026, Ritz" #property version "1.00" int kci_handle; double KCI_Main[], KDI_Plus[], KDI_Minus[]; int OnInit() { // 사용자 정의 지표 핸들을 생성합니다. // "KCI-Directional_X.ex5" 파일이 올바른 위치에 있는지 확인하십시오 // MQL5/Indicators 디렉터리에서. kci_handle = iCustom(_Symbol, _Period, "KCI-Directional_X", 9, 30, 1.5); if(kci_handle == INVALID_HANDLE) { Print("Failed to load the KCI-DX indicator."); return(INIT_FAILED); } // 지표 버퍼를 시계열로 구성 // (인덱스 0 = 현재 봉). ArraySetAsSeries(KCI_Main, true); ArraySetAsSeries(KDI_Plus, true); ArraySetAsSeries(KDI_Minus, true); return(INIT_SUCCEEDED); } void OnTick() { // 최신 지표 값 가져오기 // (현재 봉과 가장 최근에 마감된 봉). if(CopyBuffer(kci_handle, 0, 0, 2, KCI_Main) <= 0) return; if(CopyBuffer(kci_handle, 1, 0, 2, KDI_Plus) <= 0) return; if(CopyBuffer(kci_handle, 2, 0, 2, KDI_Minus) <= 0) return; // ------------------------------------------------------------ // KCI-DX 거래 로직 // 모든 매매 결정은 가장 최근에 마감된 캔들을 기준으로 합니다. // (인덱스 1) 아직 형성 중인 캔들의 신호를 배제하기 위해. // ------------------------------------------------------------ // 시장이 추세 국면에 있는지 여부를 파악합니다. bool isTrending = KCI_Main[1] > 20.0; // 상승 추세 방향성 크로스오버를 감지합니다. bool buySignal = (KDI_Plus[1] > KDI_Minus[1]) && (KDI_Plus[2] <= KDI_Minus[2]); // 하락 추세 방향의 크로스오버를 감지합니다. bool sellSignal = (KDI_Minus[1] > KDI_Plus[1]) && (KDI_Minus[2] <= KDI_Plus[2]); // 극단적인 추세 확장을 감지합니다. bool isExtreme = KCI_Main[1] >= 80.0; // 거래 실행 로직 예시. if(isTrending && buySignal) { Print("KCI-DX BUY signal detected."); // 매수 주문 체결 // (OrderSend 또는 CTrade::Buy)를 여기에 입력합니다. } else if(isTrending && sellSignal) { Print("KCI-DX SELL signal detected."); // 매도 주문 체결 // (OrderSend 또는 CTrade::Sell)을 여기에 입력합니다. } // 시장 추세가 뚜렷할 때 적용할 수 있는 선택적 거래 관리 전략. if(isExtreme) { Print("Extreme trend detected. Consider activating a trailing stop or managing existing positions."); } }
계산 기능이 내장된 EA 코드 예시 (직접 내장) (EA KCI-N Matrix 엔진에 내장)
이 방법은 외부 지표 파일 없이 수학적 알고리즘을 EA에 직접 통합합니다. Z-Score 계산에는 과거 데이터가 필요하므로, EA 내부의 특수 함수를 사용하여 가격 배열을 처리합니다.
코드 스니펫:
//+------------------------------------------------------------------+ //| EA_KCI_Embedded.mq5 | //+------------------------------------------------------------------+ #property copyright "Copyright 2026, Ritz" #property version "1.00" input int InpBasePeriod = 9; input int InpZScorePeriod = 30; input double InpSensitivity = 1.5; // KCI-DX 값 세 개를 모두 반환하는 데 사용되는 구조체 // 단일 계산에서 도출된 결과입니다. struct KCI_Result { double main; double plus; double minus; }; // 다음 용도로 사용되는 내부 Z-점수를 계산합니다. // 동적 정규화. double EmbeddedZScore(double &data_array[], int period) { if(period < 2) return 0.0; double sum = 0.0; double sum_sq = 0.0; for(int i = 0; i < period; i++) { sum += data_array[i]; sum_sq += data_array[i] * data_array[i]; } double mean = sum / period; double variance = (sum_sq / period) - (mean * mean); if(variance <= 1 e-10) return 0.0; return (data_array[0] - mean) / MathSqrt(variance); } // 지정된 값에 대한 KCI-DX 값을 계산합니다. // 히스토리 막대 (Shift). KCI_Result CalculateKCI(int shift) { KCI_Result res; res.main = 0.0; res.plus = 0.0; res.minus = 0.0; // 충분한 양의 과거 종가 데이터 가져오기 // 기준 기간과 Z-스코어 창 모두에 대해. int required_bars = InpZScorePeriod + InpBasePeriod; double close[]; ArraySetAsSeries(close, true); if(CopyClose(_Symbol, _Period, shift, required_bars, close) < required_bars) return res; // 과거 데이터가 부족합니다. double raw_plus[]; double raw_minus[]; double raw_trend[]; ArrayResize(raw_plus, InpZScorePeriod); ArrayResize(raw_minus, InpZScorePeriod); ArrayResize(raw_trend, InpZScorePeriod); // ------------------------------------------------------------ // 1단계: // 운동학적 방향 추출 // ------------------------------------------------------------ for(int i = 0; i < InpZScorePeriod; i++) { double path_len = 0.000001; double net_up = 0.0; double net_dn = 0.0; double mean_p = 0.0; for(int j = 0; j < InpBasePeriod; j++) { double diff = close[i + j] - close[i + j + 1]; path_len += MathAbs(diff); if(diff > 0) net_up += diff; else net_dn -= diff; mean_p += close[i + j]; } mean_p /= InpBasePeriod; double var_p = 0.0; for(int j = 0; j < InpBasePeriod; j++) var_p += MathPow(close[i + j] - mean_p, 2); double energy = MathSqrt(var_p / InpBasePeriod); raw_plus[i] = (net_up / path_len) * energy; raw_minus[i] = (net_dn / path_len) * energy; raw_trend[i] = (MathAbs(net_up - net_dn) / path_len) * energy; } // ------------------------------------------------------------ // 2단계: // 동적 시그모이드 정규화 // ------------------------------------------------------------ double z_plus = EmbeddedZScore(raw_plus, InpZScorePeriod); double z_minus = EmbeddedZScore(raw_minus, InpZScorePeriod); double z_trend = EmbeddedZScore(raw_trend, InpZScorePeriod); res.plus = 100.0 / (1.0 + MathExp(-InpSensitivity * z_plus)); res.minus = 100.0 / (1.0 + MathExp(-InpSensitivity * z_minus)); res.main = 100.0 / (1.0 + MathExp(-InpSensitivity * z_trend)); return res; } void OnTick() { // 다음의 KCI-DX 값을 계산합니다. // 가장 최근에 마감된 두 개의 캔들. KCI_Result kci_current = CalculateKCI(1); KCI_Result kci_prev = CalculateKCI(2); // ------------------------------------------------------------ // 거래 로직 예시 // 상승 추세 방향성 크로스오버를 감지합니다. // ------------------------------------------------------------ bool buySignal = (kci_current.plus > kci_current.minus) && (kci_prev.plus <= kci_prev.minus); // 시장이 특정 조건일 때만 거래 로직을 실행합니다. // 유효한 추세 상태에 있습니다. if(kci_current.main > 20.0 && buySignal) { Print("Embedded KCI-DX detected a BUY signal."); // 매수 주문 체결 // (OrderSend 또는 CTrade::Buy)를 여기에 입력합니다. } }
최상의 결과를 위한 권장 사항
컴파일 및 실전 거래를 시작하기 전에, KCI-Directional Matrix를 최대한 활용하기 위해 다음 모범 사례를 숙지하시기 바랍니다:
-
자산 유연성: 기본 매개변수(BasePeriod=9, ZScorePeriod=30)는 반응성이 매우 뛰어나며 주요 통화쌍에서 탁월한 성과를 보입니다. 그러나 금(XAUUSD), 암호화폐(BTC/ETH) 또는 지수와 같이 변동성이 매우 높은 상품에 적용하는 경우, 과도한 노이즈를 걸러내기 위해 ZScorePeriod를 약간 늘리는 것(예: 40 또는 50)을 고려해 보십시오.
-
알고리즘 최적화: 복잡하거나 다중 심볼 시스템을 구축하는 EA 개발자의 경우, 위에 제시된 ‘임베디드 계산(Embedded Calculation )’ 방식을 활용하는 것을 적극 권장합니다. 이 방식은 CPU 사용량을 극도로 낮게 유지하며, 외부 지표 호출 없이도 Expert Advisor가 완전히 독립적으로 작동하도록 보장합니다.
-
시너지 효과를 위한 조합: KCI-DX는 전용 운동학 및 변동성 엔진입니다. 이 도구는 단독으로도 뛰어난 방향성 편향을 제공하지만, 선호하는 구조적 필터(지지/저항 구간 등)나 거래량 이상 탐지기와 결합하여 최종 진입 시점을 검증할 때 비로소 진정한 위력을 발휘합니다.
마무리 말씀
저자의 말 / 결론: KCI-Directional Matrix를 살펴보아 주셔서 감사합니다. 이 코드베이스는 MQL5 커뮤니티에 가볍고, 수학적으로 엄밀하며, 적응성이 뛰어난 분석 도구를 제공하는 데 전적으로 초점을 맞춰 설계되었습니다. 정밀한 모멘텀 소진 지점을 찾는 수동 트레이더이든, 기계가 읽을 수 있는 데이터를 Expert Advisor에 통합하는 개발자이든, 이 지표가 여러분의 프로젝트에 견고한 토대가 되기를 바랍니다.
이 코드가 여러분의 트레이딩 시스템에 유용하다고 생각되신다면, 주저하지 말고 리뷰를 남기거나 창의적인 수정 내용을 공유해 주시거나, 아래 토론 섹션에 질문을 남겨 주시기 바랍니다. 함께 알고리즘 트레이딩의 한계를 계속해서 넓혀 나갑시다!
즐거운 코딩 되시고, 안전한 거래 하시길 바랍니다. — Ritz
MetaQuotes Ltd에서 영어로 번역함.
원본 코드: https://www.mql5.com/en/code/74839
EA KCI N-Matrix engine
알고리즘 그리드와 키네틱 모멘텀의 정점. KCI 네이티브 매트릭스 엔진에 오신 것을 환영합니다. 이 엔진은 MetaTrader 5를 위해 네이티브로 구축된, 무자비하고 수학적 원리에 기반한 알고리즘의 거대 괴물입니다. 고빈도 거래(HFT) 환경을 위해 설계된 이 EA는 부피가 큰 표준 라이브러리를 배제하고 서버 라우팅 수준에서 직접 작동합니다.
Trend Execution Planner - Regime and Risk Panel
Free open-source MT5 read-only chart utility that scores current trend conditions and builds broker-normalized long and short risk plans. It uses moving-average direction and slope, ADX, Efficiency Ratio, ATR, spread, account currency and symbol specifications. It never opens, modifies or closes trades.
Risk Based Position Size Calculator
Draggable Entry, Stop-Loss and Take-Profit lines with a live on-chart panel that calculates the exact lot size for a chosen account risk. No manual math, no guessing — drag the lines, read the size.
Swing High Low - Non-Repainting Pivots with Push/Email Alerts
Marks non-repainting swing highs and lows using configurable LeftBars / RightBars pivots. Sends push and email alerts on each new confirmed swing.