
자동매매 시스템을 만들기 시작했을 때는 생각보다 단순하게 접근했다.
캔들 몇 개를 분석하고, 이동평균선을 확인하고, 상승이나 하락 조건을 정하면 어느 정도 매매를 자동화할 수 있을 것 같았다.
예를 들어 장대양봉이 발생하고 이동평균선이 상승하고 있다면 매수 신호를 만드는 방식이다.
그런데 실제 시장을 관찰하면서 생각이 달라졌다.
같은 장대양봉도 어디에서 발생했느냐에 따라 의미가 달랐다.
강한 상승 추세에서는 추세가 이어지는 신호처럼 보였지만, 이전 고점 부근에서는 오히려 상승이 끝나는 순간일 수도 있었다.
긴 아래꼬리가 나타났다고 해서 항상 반등하는 것도 아니었다.
때로는 강한 매수 반응이었지만, 어떤 상황에서는 하락 도중 잠깐 나타난 반등에 불과했다.
차트 분석을 공부할수록 지표 하나로 시장을 판단하는 것이 어렵다는 사실을 알게 됐다.
그래서 캔들에서 출발해 시장 구조, 스마트머니, 유동성 스윕, 오더블록, OTE까지 분석 범위를 넓혔다.
이 과정에서 Codex와 Claude를 활용했다.
머릿속에 있던 매매 아이디어를 조건문과 검증 가능한 규칙으로 정리하고, 여러 분석 방법을 하나의 시스템으로 연결하는 데 AI의 도움을 받았다.
그런데 개발을 진행하면서 가장 중요하게 느낀 부분은 따로 있었다.
실시간 시장 대응이다.
차트를 나중에 분석하면 어디가 고점이었고 어디가 저점이었는지 쉽게 보인다.
하지만 실제 거래에서는 그 순간이 고점인지 저점인지 알 수 없다.
시장이 움직이는 동안 조건을 확인하고 대응해야 한다.
특히 급격한 뉴스나 경제지표 발표로 가격이 빠르게 움직이는 상황에서는 분석이 맞더라도 대응이 늦으면 결과가 크게 달라질 수 있다.
그래서 기존의 차트 분석 시스템에 실시간 가격 감시와 시장 환경 분석을 결합하기 시작했다.
Grok을 이용해 뉴스와 SNS에서 발생하는 변화를 보조적으로 확인하고, 중요한 상황에서는 사람이 직접 모니터링하는 구조도 고려했다.
최근에는 JEV처럼 시장 상태를 입력받아 빠르게 판단하는 AI 모델을 매매에 활용하려는 시도도 등장했다.
하지만 이 시스템에서는 AI에게 매수와 매도를 모두 결정하게 하는 방식보다, 사전에 정한 시장 구조와 매매 규칙을 실시간으로 검증하고 대응하는 방식을 선택했다.
이번 글은 특정 종목을 언제 매수하거나 매도하라는 분석이 아니다.
AI를 활용해 차트 이론을 시스템으로 구현하고, 실시간 시장 변화에 대응하는 구조를 설계하면서 무엇이 중요하다고 느꼈는지 정리한 개발기다.
처음에는 기술적 분석을 단순하게 생각하기 쉽다.
주가가 이동평균선 위에 있으면 상승 추세라고 판단한다.
장대양봉이 나타나면 매수세가 강하다고 생각한다.
이전 고점을 돌파하면 상승이 계속될 가능성이 높다고 판단한다.
이를 코드로 만들면 비교적 간단하다.
현재 가격 > 이동평균선
+
이전 고점 돌파
+
양봉 발생
↓
매수 후보
그런데 실제 차트에서는 이런 조건만으로 설명되지 않는 움직임이 많다.
이전 고점을 강하게 돌파한 뒤 곧바로 하락하기도 한다.
지지선을 이탈하는 것처럼 보이다가 오히려 강하게 반등하는 경우도 있다.
그래서 단순한 지표 조합에 새로운 조건을 계속 추가하게 된다.
문제는 조건을 많이 추가한다고 반드시 좋은 전략이 만들어지는 것은 아니라는 점이다.
조건이 서로 충돌하기도 하고, 특정 시장에서는 잘 작동하던 규칙이 다른 시장에서는 거의 신호를 만들지 못하기도 한다.
이런 경험을 통해 자동매매 시스템의 목표도 달라졌다.
처음에는 상승과 하락을 맞히는 데 집중했다.
이후에는 어떤 시장 상황에서 어떤 조건이 성립하는지 일관되게 판단하는 것에 더 집중하게 됐다.
매매 판단을 규칙으로 만드는 이유는 감정적인 결정을 줄이기 위해서이기도 하다.
차트가 빠르게 움직이면 처음 정한 계획을 바꾸고 싶어진다.
손실이 발생하면 손절을 미루고, 수익이 발생하면 너무 일찍 청산하고 싶어질 수도 있다.
시스템은 이런 판단에 일관된 기준을 제공할 수 있다.
물론 규칙을 일관되게 실행한다고 해서 수익이 보장되는 것은 아니다.
하지만 적어도 어떤 조건에서 어떤 결정을 내렸는지 기록하고 검증할 수 있다.
AI 자동매매라고 하면 흔히 다음과 같은 구조를 떠올린다.
시장 데이터
↓
AI 모델
↓
BUY / SELL / HOLD
↓
주문 실행
이 방식은 단순하다.
시장 데이터를 AI에 전달하고 매수, 매도, 관망 중 하나를 선택하게 하는 것이다.
하지만 문제가 있다.
AI가 매수를 선택했을 때 왜 그런 결정을 내렸는지 검증하기 어려울 수 있다.
특히 실시간으로 판단이 바뀌는 상황에서는 이전 판단과 현재 판단이 어떤 조건 때문에 달라졌는지 추적하기 중요하다.
그래서 직접 만든 시스템에서는 다른 구조를 선택했다.
시장 데이터
↓
시장 구조 분석
↓
유동성·오더블록·OTE
↓
실시간 가격 반응
↓
사전에 정의한 조건 확인
↓
위험관리
↓
진입·청산 후보
↓
자동 실행 또는 사람 확인
이 구조에서는 AI가 모든 매매 판단을 즉석에서 만드는 것이 아니다.
개발자가 매매 가설을 정의하고, AI는 이를 구현하거나 검증하도록 돕는다.
예를 들어 가격이 특정 구간에 도달했을 때 거래한다는 규칙이 있다면, 그 구간을 어떻게 계산할지 명확히 정의해야 한다.
이전 고점과 저점은 어떤 기준으로 선택하는가?
어느 정도 돌파해야 유동성 스윕으로 판단하는가?
구조가 전환됐다는 것은 무엇을 의미하는가?
이런 질문에 답할 수 있어야 실제 프로그램으로 구현할 수 있다.
AI에게 판단을 맡기는 것과 AI를 활용해 판단 기준을 만드는 것은 다르다.
이번 개발에서는 후자에 더 집중했다.
캔들 차트는 일정 시간 동안 가격이 어떻게 움직였는지 보여준다.
기본적으로 네 가지 가격이 있다.
| 항목 | 의미 |
|---|---|
| Open | 시가 |
| High | 고가 |
| Low | 저가 |
| Close | 종가 |
이 네 가지 가격으로 캔들 하나가 만들어진다.
양봉 예시 종가가 시가보다 높은 경우 음봉 예시 종가가 시가보다 낮은 경우캔들에는 실체와 꼬리가 있다.
실체는 시가와 종가의 차이를 나타낸다.
위꼬리는 해당 시간 동안 올라갔지만 종가까지 유지하지 못한 가격 범위를 보여준다.
아래꼬리는 내려갔다가 다시 올라온 가격 범위다.
예를 들어 긴 아래꼬리가 만들어졌다면 낮은 가격에서 매수 반응이 나타났다고 해석할 수 있다.
하지만 그것이 반드시 상승 전환을 의미하지는 않는다.
강한 하락 추세에서는 긴 아래꼬리가 나타난 뒤에도 하락이 계속될 수 있다.
반대로 이전 저점 부근에서 긴 아래꼬리가 나타나고 이후 강한 상승 캔들이 이어진다면 의미가 달라질 수 있다.
그래서 캔들 하나의 모양보다 중요한 것은 어떤 가격 위치에서 나타났으며 이후 어떻게 반응했는가다.
거래량과 변동성도 참고할 수 있다.
다만 거래량이 많다고 반드시 기관의 매수가 유입됐다고 단정할 수는 없다. 거래량은 체결 규모를 보여주는 자료이지 매수·매도 주체의 의도를 직접 보여주지는 않기 때문이다.
또 현물 주식, 선물, 외환, 코인에서는 거래량 데이터의 성격과 범위가 다를 수 있다.
결국 캔들은 시장 분석의 출발점이지 그 자체로 완성된 매매 전략은 아니다.
캔들 하나만 보면 상승과 하락을 판단하기 어렵다.
그래서 다음으로 공부한 것이 시장 구조(Market Structure)다.
시장 구조는 고점과 저점이 어떤 관계로 형성되는지 살펴보는 방법이다.
상승 추세에서는 일반적으로 이전보다 높은 고점과 높은 저점이 형성된다.
Higher High
↑
│
Higher Low
↑
│
이전 고점·저점
이를 HH(Higher High), HL(Higher Low)이라고 부른다.
반대로 하락 추세에서는 낮아지는 고점과 저점이 반복되는 경우가 많다.
LH(Lower High), LL(Lower Low)이다.
하지만 실제 시장은 항상 이렇게 깔끔하게 움직이지 않는다.
횡보 구간에서는 이전 고점과 저점을 반복해서 돌파하다가 다시 돌아오는 움직임이 발생할 수 있다.
그래서 BOS와 CHOCH 같은 개념도 함께 살펴보게 된다.
BOS(Break of Structure)는 기존 시장 구조의 주요 고점이나 저점을 돌파하는 현상을 설명할 때 사용한다.
CHOCH(Change of Character)는 기존 추세와 다른 방향의 구조 변화가 나타날 가능성을 설명할 때 사용한다.
다만 이 용어의 세부 정의는 사용하는 ICT·SMC 전략에 따라 달라질 수 있다.
따라서 자동매매 시스템에서는 어느 고점과 저점을 기준으로 판단할지 명확히 정의해야 한다.
한 시간봉에서는 상승처럼 보여도 일봉에서는 큰 하락 추세의 일시적인 반등일 수 있다.
그래서 다중 시간대 분석을 사용한다.
| 시간대 | 주요 역할 |
|---|---|
| 주봉·일봉 | 큰 추세와 주요 가격 구간 |
| 4시간봉 | 중간 시장 구조와 유동성 |
| 1시간봉 | 구체적인 가격 반응 |
| 15분봉 이하 | 세부적인 실행 조건 |
이 시간대 구성은 설계 예시다.
시장과 전략에 따라 적절한 시간대는 달라질 수 있다.
중요한 것은 작은 시간봉의 신호를 큰 시장 구조와 분리해서 판단하지 않는 것이다.
차트 분석을 공부하면 자주 등장하는 말이 있다.
'세력'이다.
일반적으로 큰 자금으로 시장에 영향을 줄 수 있는 참여자를 가리킬 때 사용하는 표현이다.
하지만 시장의 모든 움직임을 특정 세력이 조종한 결과로 해석하는 것은 적절하지 않다.
시장에는 다양한 참여자가 존재한다.
기관투자자, 헤지펀드, 마켓메이커, 대형 트레이더, 개인투자자, 알고리즘 매매 시스템 등이 서로 다른 목적을 가지고 거래한다.
이들이 모두 같은 방향으로 움직이는 것도 아니다.
스마트머니(Smart Money) 개념은 이런 대형 참여자의 주문 흐름이 가격에 어떤 흔적을 남길 수 있는지 해석하려는 접근이다.
예를 들어 대규모 주문을 한 가격에 모두 체결하기는 어렵다.
충분한 반대 주문이 있어야 거래가 체결되기 때문이다.
이때 중요한 것이 유동성이다.
유동성은 특정 가격에서 얼마나 많은 거래를 상대적으로 적은 가격 충격으로 체결할 수 있는지를 나타내는 개념이다.
이전 고점이나 저점 부근에서는 돌파 주문과 손절 주문 등이 집중될 수 있다.
그래서 이런 구간이 시장 분석에서 중요하게 다뤄진다.
하지만 차트만 보고 실제로 어떤 기관이 얼마만큼 주문했는지 알 수 있는 것은 아니다.
스마트머니 분석은 보이지 않는 누군가의 비밀 계획을 알아내는 기술이 아니라, 가격과 거래량에 나타난 수급의 흔적을 해석하려는 접근으로 이해하는 편이 정확하다.
시장 구조를 분석하면서 특히 흥미로웠던 개념은 유동성 스윕(Liquidity Sweep)이다.
예를 들어 가격이 여러 번 도달하지 못했던 고점이 있다고 생각해보자.
그 가격 위에는 돌파를 기대하는 매수 주문이 있을 수 있다.
반대로 매도 포지션을 가진 투자자의 손절 주문도 존재할 수 있다.
가격이 고점을 돌파하면 이런 주문이 활성화되면서 거래가 증가할 수 있다.
그런데 돌파가 계속 이어지지 않고 가격이 다시 이전 구간으로 내려오는 경우가 있다.
이전 고점 접근
↓
고점 돌파
↓
돌파 주문·손절 주문 체결 가능
↓
후속 상승 실패
↓
이전 가격 범위로 재진입
↓
하락 반응 확인
이런 움직임을 유동성 스윕 후보로 해석할 수 있다.
반대로 이전 저점을 일시적으로 이탈한 뒤 다시 올라오는 경우도 있다.
여기서 중요한 점은 모든 고점·저점 돌파가 유동성 스윕은 아니라는 사실이다.
실제로 새로운 추세가 시작되는 돌파일 수도 있다.
따라서 단순히 이전 고점을 넘었다는 이유만으로 반대 방향을 판단하는 것은 위험하다.
이후 종가가 어느 위치에서 형성됐는지, 가격이 기존 구간으로 돌아왔는지, 후속 캔들에서 구조 변화가 발생하는지 등을 함께 확인해야 한다.
자동매매 시스템에서는 이런 조건을 미리 정의할 수 있다.
예를 들어 단순한 개념적 판단 흐름은 다음과 같다.
이전 주요 고점 돌파
↓
돌파 이후 가격 반응 확인
↓
기존 범위로 재진입
↓
구조 변화 여부 평가
↓
반전 후보 표시
다만 이러한 신호 자체가 미래 가격을 보장하는 것은 아니다.
개발 관점에서는 유동성 스윕이 정확히 무엇인지 정의하는 작업이 중요했다.
어느 시간대의 고점을 기준으로 할 것인가?
고점보다 얼마나 올라가야 돌파로 판단할 것인가?
가격이 다시 내려오는 데 허용할 시간은 얼마인가?
이런 기준을 정하지 않으면 사람마다 다른 판단을 내릴 수 있고, AI가 작성한 코드도 일관되지 않을 수 있다.
다음으로 살펴본 것은 오더블록(Order Block)이다.
ICT·SMC 분석에서는 강한 가격 이동이 발생하기 직전의 특정 캔들 또는 가격 구간을 오더블록 후보로 해석한다.
예를 들어 하락 캔들 이후 강한 상승이 발생하고 주요 고점을 돌파했다고 생각해보자.
이때 상승이 시작되기 직전의 하락 캔들 구간을 상승 오더블록 후보로 표시할 수 있다.
일시적인 하락
↓
강한 상승 이동
↓
시장 구조 돌파
↓
이전 가격 구간 표시
↓
가격 재접근 시 반응 관찰
하지만 모든 하락 캔들이 상승 오더블록은 아니다.
실제로 어떤 가격 구간이 의미 있는지 판단하려면 다음 요소를 함께 검토해야 한다.
오더블록은 차트 분석에서 자주 사용되는 개념이지만, 그 자체가 기관의 실제 주문이 존재한다는 직접적인 증거는 아니다.
따라서 시스템에서는 검증할 가격 구간 후보로 사용하는 것이 적절하다고 판단했다.
또 오더블록과 유동성 스윕, 시장 구조 변화가 서로 다른 조건인지 명확하게 구분해야 한다.
비슷한 가격 움직임을 서로 다른 이름의 신호로 중복 계산하면 실제보다 강한 근거가 있는 것처럼 판단할 수 있기 때문이다.
스마트머니와 함께 공부한 또 다른 개념은 OTE(Optimal Trade Entry)다.
OTE는 ICT 분석에서 피보나치 되돌림을 이용해 특정 가격 범위를 관찰하는 접근이다.
일반적으로 이전 가격 이동 폭의 약 0.62~0.79 되돌림 구간을 사용한다.
그중 0.705 부근도 자주 언급된다.
예를 들어 상승한 가격이 일정 부분 되돌아왔을 때 그 구간에서 새로운 반응이 나타나는지 관찰하는 것이다.
상승 이후 OTE 되돌림 구간 — 개념도 실제 가격 데이터가 아닌 설명용 그림. 구간에 도달했다고 해서 반전이나 진입 성공이 보장되지는 않는다.다만 OTE를 사용한다고 해서 해당 구간에서 반드시 가격이 반전하는 것은 아니다.
가격이 OTE까지 되돌아오지 않을 수도 있다.
반대로 OTE 구간을 지나 계속 하락할 수도 있다.
그래서 OTE를 단독 진입 신호로 사용하기보다 다른 조건과 함께 평가하도록 설계했다.
상위 시간대 방향
+
시장 구조
+
주요 오더블록
+
유동성 스윕
+
OTE 후보 구간
+
가격 반응 확인
여기서 중요한 점은 조건이 많아질수록 반드시 정확도가 높아지는 것은 아니라는 것이다.
일부 조건은 사실상 같은 가격 움직임을 다른 방식으로 표현할 수도 있다.
따라서 조건을 추가할 때마다 실제로 새로운 정보가 제공되는지 검증해야 한다.
OTE는 미래의 정답을 알려주는 숫자가 아니라, 기다릴 가격 범위를 좁히는 필터에 가깝다.
캔들, 시장 구조, 스마트머니, 오더블록, OTE를 각각 공부하는 것과 이를 하나의 매매 시스템으로 연결하는 것은 다른 일이다.
처음에는 분석 기법이 많아질수록 더 좋은 판단을 할 수 있을 것 같았다.
하지만 실제로는 조건끼리 충돌하는 경우도 있었다.
상위 시간대는 상승인데 작은 시간대에서는 하락 신호가 나타난다.
오더블록은 매수 후보를 가리키는데, 시장 구조는 아직 하락이다.
OTE 구간에 도착했지만 반전 신호가 나타나지 않을 수도 있다.
그래서 모든 조건을 단순히 더하는 방식보다 판단 순서를 정하는 것이 중요했다.
상위 시간대 시장 구조
↓
주요 고점·저점 탐색
↓
유동성 구간 표시
↓
오더블록·OTE 후보 계산
↓
실시간 가격 반응 확인
↓
구조 변화 검증
↓
거래 조건 충족 여부 평가
↓
위험 한도 확인
↓
거래·관망·보류 판단
여기서 가장 중요하게 추가한 개념은 거래하지 않는 조건이다.
매매 시스템을 만들다 보면 어떻게 진입할 것인지에 집중하기 쉽다.
하지만 실제 시장에서는 모든 시간에 거래할 이유가 없다.
시장이 횡보하고 있거나, 구조가 불분명하거나, 급격한 뉴스 발표가 임박했을 때는 진입을 보류하는 것도 하나의 전략적 판단이다.
또 중요한 것은 각 단계의 판단 결과를 기록하는 것이다.
예를 들어 최종적으로 매매하지 않았더라도 다음 정보를 남길 수 있다.
{
"market_state": "range",
"higher_timeframe": "neutral",
"liquidity_sweep": true,
"ote_candidate": true,
"structure_confirmation": false,
"decision": "no_trade",
"reason": "insufficient_confirmation"
}
이 값은 실제 시스템의 구현 결과가 아닌 설명용 예시다.
하지만 이런 구조를 사용하면 매매 여부뿐 아니라 왜 거래하지 않았는지도 추적할 수 있다.
이후 시스템을 개선할 때도 도움이 된다.
이 시스템을 개발하면서 AI에게 맡긴 것은 단순히 코드를 작성하는 일이 아니었다.
오히려 모호했던 매매 아이디어를 명확한 규칙으로 바꾸는 과정이 중요했다.
예를 들어 사람은 다음과 같이 말할 수 있다.
강한 상승 추세에서 좋은 눌림목을 찾아줘.
하지만 이것을 그대로 코드로 옮기기는 어렵다.
강한 상승 추세란 무엇인가?
좋은 눌림목은 어떻게 정의하는가?
가격이 어느 정도 되돌아와야 하는가?
추세가 무효화되는 조건은 무엇인가?
이런 질문에 답해야 한다.
그래서 Claude에는 주로 매매 논리와 설계의 일관성을 검토하는 역할을 맡겼다.
Codex에는 실제 구현과 반복적인 테스트, 버그 수정 등을 맡기는 방식으로 접근했다.
| 역할 | 활용한 작업 |
|---|---|
| Claude | 매매 가설 정리, 설계와 조건 검토 |
| Codex | 코드 구현, 테스트, 오류 수정 |
| 개발자 | 시장 해석, 조건 결정, 결과 검토 |
| 검증 절차 | 과거 데이터와 실제 실행 결과 비교 |
이 과정에서 특히 조심해야 했던 것이 미래 데이터 참조 오류(Look-ahead Bias)다.
예를 들어 과거 차트에서는 특정 캔들의 종가와 이후 가격 움직임을 모두 알고 있다.
하지만 실시간 매매 시점에는 아직 형성 중인 캔들의 최종 종가를 알 수 없다.
과거 데이터를 분석하는 코드에서 미래 데이터를 잘못 참조하면 실제로는 불가능한 매매 결과가 만들어질 수 있다.
또 신호가 발생한 시점과 실제 주문이 체결된 시점을 구분해야 한다.
코드가 정상적으로 실행됐다고 해서 전략의 수익성이 검증된 것도 아니다.
Codex와 Claude는 수익을 보장하는 전략을 만들어주는 도구가 아니라, 사람이 세운 가설을 일관된 규칙으로 구현하고 검증하는 개발 도구였다.
개발 과정에서 가장 중요하게 느낀 부분은 실시간 대응이었다.
차트는 나중에 보면 명확해 보인다.
이전 고점이 어디였고, 어느 지점에서 급격하게 반전했는지 쉽게 확인할 수 있다.
하지만 실제 거래 중에는 다르다.
가격이 계속 움직이고 있으며, 현재 캔들이 어느 위치에서 마감될지 알 수 없다.
실시간 대응 시스템이 필요한 이유도 여기에 있다.
예를 들어 가격이 이전 고점에 접근하고 있다고 해보자.
이전 고점 접근
↓
고점 돌파
↓
기존 범위로 재진입
↓
구조 변화 후보 감지
↓
후속 가격 반응 확인
↓
조건 충족 알림
과거 차트에서는 몇 초나 몇 분 사이에 일어난 과정이 하나의 캔들로 보일 수 있다.
하지만 실시간으로 감시하면 그 사이의 변화를 단계적으로 관찰할 수 있다.
이 차이는 진입과 청산 시점에 영향을 줄 수 있다.
특히 가격이 빠르게 반전하는 상황에서는 신호를 확인하는 데 걸리는 시간과 실제 대응 시간이 중요해진다.
직접 개발하면서도 분석 조건을 얼마나 많이 추가했는가보다, 시장이 움직이는 동안 중요한 변화를 놓치지 않는 것이 더 중요할 수 있다는 점을 체감했다.
그렇다고 반응 속도가 빠를수록 무조건 좋은 것은 아니다.
너무 빨리 반응하면 아직 확인되지 않은 신호에 진입할 수 있다.
반대로 지나치게 많은 확인 조건을 기다리면 가격이 이미 멀리 움직인 뒤에야 신호가 발생할 수 있다.
따라서 핵심은 속도 자체가 아니라 다음 두 가지의 균형이다.
확인할 만큼 확인하면서, 필요한 시점에는 늦지 않게 대응하는 것.
자동매매 시스템에서는 이 균형을 계속 조정하고 검증해야 한다.
자동매매에서 가장 매력적으로 느껴지는 목표 중 하나는 저점 부근에서 매수하고 고점 부근에서 청산하는 것이다.
반대로 하락을 예상하는 전략이라면 고점 부근에서 진입하고 저점 부근에서 청산하는 것을 생각할 수 있다.
하지만 문제는 분명하다.
시장의 정확한 고점과 저점은 지나고 나서야 확인할 수 있다는 것이다.
실시간으로 할 수 있는 것은 고점과 저점이 형성될 가능성이 있다고 정의한 구간을 감시하는 것이다.
예를 들어 이전 고점에서 유동성 스윕 후보가 발생했다고 해보자.
이후 가격이 기존 범위로 돌아오고, 작은 시간대의 시장 구조가 변화하는지 관찰할 수 있다.
시스템은 이런 조건을 실시간으로 감지하도록 설계할 수 있다.
그런데 신호를 감지했다고 해서 그 가격에 반드시 거래가 체결되는 것은 아니다.
실제 주문에서는 추가적인 지연과 비용이 발생한다.
시장 데이터 수신
↓
신호 계산
↓
조건 충족
↓
주문 생성
↓
브로커·거래소 전달
↓
체결 또는 미체결
특히 시장이 빠르게 움직일 때는 신호가 발생한 가격과 실제 체결 가격이 달라질 수 있다.
이 차이를 슬리피지(Slippage)라고 부른다.
따라서 실시간 대응의 효과를 평가하려면 단순히 차트에서 좋은 가격을 찾았는지보다 다음 항목을 측정해야 한다.
고점·저점 후보를 빠르게 감지하는 능력과 실제 그 구간에서 유리한 가격에 체결되는 능력은 다르다.
이 차이를 구분해야 시스템의 실제 성능을 평가할 수 있다.
차트는 가격과 거래량의 변화를 보여준다.
하지만 가격이 갑자기 움직인 이유를 항상 설명해주지는 않는다.
예를 들어 경제지표 발표, 기업 실적, 금리 관련 발언, 규제 발표, 지정학적 사건 등이 발생하면 시장의 변동성이 급격하게 커질 수 있다.
이런 상황을 확인하기 위해 Grok을 보조적으로 활용하는 구조를 고려했다.
Grok은 X 게시물과 웹 정보를 검색하고 요약하는 데 활용할 수 있다.
다만 SNS에 정보가 빨리 올라온다고 해서 정확한 정보라는 의미는 아니다.
게시물의 작성 시각과 실제 사건 발생 시각도 다를 수 있다.
따라서 Grok은 시장 가격의 공식 데이터 소스로 사용하지 않는다.
실제 가격과 체결 정보는 거래소나 브로커의 데이터로 확인한다.
Grok은 차트 밖에서 발생한 사건을 이해하고 위험도를 평가하는 보조 역할을 맡는다.
거래소·브로커 가격 데이터
+
실시간 캔들·시장 구조
+
Grok 뉴스·SNS 분석
↓
시장 환경 변화 감지
↓
기존 거래 조건 재평가
↓
위험 축소 / 보류 / 사람 확인
예를 들어 예상하지 못한 경제 뉴스가 발생했다면 기존 차트 신호의 신뢰도를 다시 평가할 수 있다.
이때 Grok의 요약만 믿고 즉시 거래하는 방식은 피한다.
중요한 뉴스라면 공식 발표나 신뢰할 수 있는 복수 출처에서 확인하는 것이 좋다.
또 자동화 환경에서는 정보의 최신성 기준을 명확히 해야 한다.
뉴스가 실제로 발생한 시각이 언제인지, 시스템이 이를 언제 감지했는지, 해당 정보가 거래 판단 전에 이용 가능했는지 기록해야 한다.
과거 뉴스 데이터를 사용해 백테스트할 때도 이 문제가 중요하다.
Grok의 역할은 미래 가격을 예측하는 것이 아니라, 시장이 갑자기 변했을 때 놓칠 수 있는 정보를 빠르게 확인하도록 돕는 것이다.
자동매매 시스템에서 가장 관심을 끄는 숫자는 아마 승률일 것이다.
특히 실시간으로 시장 변화를 감지하고 유리한 구간에서 대응한다면 높은 적중률을 기대하게 된다.
직접 시스템을 개발하면서 실시간 대응의 중요성을 체감한 이유도 여기에 있다.
하지만 승률은 반드시 측정 기준과 함께 봐야 한다.
특정 조건에서 높은 적중률을 경험했다고 해서 전체 전략의 장기 승률이 같다고 볼 수는 없다.
또 실제 90% 승률을 기록했다고 하더라도 전체 수익성이 좋다는 보장은 없다.
예를 들어 두 전략을 생각해보자.
| 지표 | 전략 A | 전략 B |
|---|---|---|
| 승률 | 90% | 55% |
| 평균 수익 거래 | +0.5% | +2.0% |
| 평균 손실 거래 | -6.0% | -1.0% |
| 거래당 단순 기대값 | -0.15% | +0.65% |
가상 비교 예시이며 수수료·슬리피지·복리 효과를 반영하지 않은 단순 기대값이다.
전략 A는 10번 중 9번을 이겨도 한 번의 큰 손실 때문에 전체 기대값이 마이너스일 수 있다.
반면 전략 B는 승률이 낮더라도 평균 수익이 평균 손실보다 충분히 크면 기대값이 플러스가 될 수 있다.
따라서 목표는 승률 하나를 극대화하는 것이 아니라 실제 수익과 위험을 함께 관리하는 것이다.
이번 개발에서 실시간 대응이 중요한 이유는 더 높은 승률을 보장하기 때문이 아니다.
정해진 조건이 나타났을 때 놓치지 않고 반응하고, 조건이 무효화됐을 때도 빠르게 판단할 수 있다는 점 때문이다.
90%라는 숫자를 실제 성과로 사용하려면 다음 자료가 필요하다.
실제 거래 횟수
검증 기간
시장별 거래 결과
승률
평균 이익·손실
수수료·슬리피지
최대 낙폭
실제 체결 기록
그리고 개발과 튜닝에 사용하지 않은 별도의 기간에서도 같은 성과가 유지되는지 확인해야 한다.
승률이 높게 나온 기간만 선택해서 공개하면 실제보다 전략이 우수해 보일 수 있다.
따라서 이 글에서 90%는 실시간 대응을 통해 탐구할 수 있는 목표이자 검증 질문으로 다루는 것이 적절하다.
JEV가 등장한 뒤, 개발자 커뮤니티에서는 판단형 AI에게 주식과 코인의 매수·매도를 맡기는 실험이 관심을 끌었다.
시장 데이터를 전달하면 AI가 빠르게 매수·매도·관망을 선택하고, 이를 주문 시스템에 연결하는 방식이다. 긴 답변을 생성하지 않고 구조화된 판단을 반환한다는 특징 때문에 실시간 자동매매에 활용하려는 시도도 이어졌다.
하지만 판단이 빠르다는 것과 매매를 잘한다는 것은 다른 문제였다.
공개된 한 독립 실험에서는 JEV 1.13.0에 시장 상태를 입력하고, 주요 코인 6종의 과거 데이터를 이용해 약 29만 8천 건의 모의 거래를 평가했다. 그 결과 15분 후 가격 방향 적중률은 약 48.4%였고, 수수료를 반영하기 전 평균 수익도 음수로 보고됐다.
다른 초단기 가격 예측 실험에서도 뚜렷한 우위가 확인되지 않았다. 해당 실험에서는 단순한 주문 흐름 기반 모델에 JEV의 판단을 추가했지만, 방향을 구분하는 성능 지표인 AUC가 0.527로 동일했다.
물론 이러한 결과는 특정 모델 버전과 입력 방식, 시장, 평가 기간에 한정된다. 실제 계좌에서 얻은 승률도 아니며, 모든 JEV 기반 전략이 같은 결과를 낸다는 뜻은 아니다. 그럼에도 공개된 일부 실험에서는 ‘빠른 판단형 AI에게 매매를 맡기면 높은 승률을 얻을 수 있다’는 기대를 뒷받침하지 못했다.
이 실험들이 보여준 문제는 판단형 AI 자체보다, 판단할 근거를 충분히 검증하지 않은 채 AI의 선택을 곧바로 매매 신호로 사용하는 방식에 있다.
빠르게 매수라고 답할 수 있어도, 그 거래가 왜 유리한지 설명하지 못하고 거래 비용을 넘는 우위도 확인하지 못했다면 좋은 매매 시스템이라고 보기 어렵다.
따라서 발전시켜야 할 방향은 판단형 AI를 버리는 것이 아니라, AI가 무엇을 근거로 판단하는지 바꾸는 것이다.
단순히 가격과 몇 가지 지표를 전달하고 상승·하락을 고르게 하는 데서 벗어나, 시장 구조와 수급의 흔적, 유동성 구간, 오더블록, OTE, 실시간 가격 반응을 일관된 기준으로 정리한 뒤 판단에 활용하는 것이다.
예를 들어 가격이 이전 고점을 돌파했다면, 단순히 상승 신호로 처리하지 않는다. 돌파 이후 가격이 유지되는지, 기존 범위로 다시 들어오는지, 상위 시간대의 추세와 충돌하는지, 실제 체결 흐름과 변동성에 어떤 변화가 나타났는지를 함께 살핀다.
여기서 말하는 스마트머니나 세력의 흐름은 특정 기관의 의도를 알아냈다는 뜻이 아니다. 가격·거래량·체결 데이터에 나타난 수급의 흔적을 분석하고, 그 해석이 실제 가격 반응과 일치하는지 확인한다는 의미다. 오더블록이나 OTE도 그 자체를 정답으로 취급하지 않고 검증할 가설과 후보 구간으로 사용한다.
이렇게 구성하면 AI에게 던지는 질문도 달라진다.
“지금 오를까, 내릴까?”가 아니라, “현재 시장 구조와 실시간 데이터가 미리 정의한 거래 조건을 충족하는가? 기존 판단을 무효화할 변화는 없는가?”를 묻게 된다.
Grok은 이 과정에서 뉴스와 시장 사건을 확인하는 보조 역할을 맡는다. 가격 신호가 좋아 보여도 중요한 발표나 돌발 사건이 있다면 위험 상태를 다시 평가한다. 손실 한도와 주문 크기, 거래 중단 같은 안전장치는 AI의 판단과 별개로 코드에서 유지하고, 예외적인 상황은 사람이 모니터링한다.
이 구조는 AI의 매수·매도 선택을 그대로 주문으로 연결하는 방식보다 판단 근거를 검증하고, 위험을 통제하며, 실패 원인을 분석한다는 점에서 더 발전된 접근이다. 단순히 어떤 모델이 마음에 들어 선택한 문제가 아니라, 매매 판단에 필요한 근거와 검증 절차를 시스템 안에 넣는 문제다.
물론 시장 이론과 데이터를 많이 추가했다고 수익률 우위까지 자동으로 증명되는 것은 아니다. 그 부분은 같은 조건의 백테스트와 실제 체결 기록으로 확인해야 한다. JEV 역시 이런 구조 안에서 판단을 보조하는 구성요소로 사용할 수 있다.
결국 중요한 차이는 모델 이름이 아니다.
판단형 AI에게 시장을 맞혀보라고 맡기는 것과, 시장의 구조·수급·실시간 데이터에 근거해 검증 가능한 판단을 내리게 하는 것의 차이다.
시장은 항상 같은 방식으로 움직이지 않는다.
강한 상승 추세에서는 되돌림이 짧게 끝날 수 있다.
횡보장에서는 고점과 저점을 반복해서 돌파하는 움직임이 나타날 수 있다.
경제지표 발표가 있는 날에는 기존 변동성 기준이 의미 없을 정도로 가격이 움직일 수도 있다.
따라서 하나의 고정된 신호만으로 모든 시장을 판단하기는 어렵다.
그렇다고 AI가 실시간으로 새로운 전략을 무제한 만들어 적용하는 것도 적절하지 않다.
시스템에서는 사전에 정의한 시장 상태를 분류하고 그에 맞는 규칙을 적용하는 접근을 사용할 수 있다.
| 시장 상태 | 시스템에서 검토할 대응 |
|---|---|
| 강한 추세장 | 추세 구조와 되돌림 조건 중점 확인 |
| 횡보장 | 상·하단 유동성 스윕과 반전 후보 평가 |
| 뉴스 고변동성 | 위험 축소 또는 신규 진입 보류 |
| 낮은 거래량 | 돌파 신호 신뢰도 별도 평가 |
| 구조 불명확 | 거래하지 않음 |
여기서 중요한 것은 시장 상태를 분류하는 규칙도 명확해야 한다는 점이다.
예를 들어 '강한 추세'를 단순히 직감으로 판단할 수는 없다.
시스템은 추세의 기울기와 고점·저점 구조, 변동성 등을 이용해 조건을 정의해야 한다.
또 실제 시장은 명확하게 추세장이나 횡보장으로 구분되지 않을 수 있다.
따라서 상태가 불확실할 때는 무리하게 분류하지 않고 관망 상태로 두는 것도 필요하다.
상황에 적응한다는 것은 매 순간 새로운 전략을 만드는 것이 아니라, 검증된 규칙을 현재 시장 상태에 맞춰 적용하는 것이다.
시장 구조와 캔들 분석의 기본 개념은 여러 시장에서 활용할 수 있다.
하지만 실제 거래 환경은 다르다.
주식 시장은 정해진 거래 시간이 있고 장 시작과 종료, 기업 실적 발표 등의 영향을 받는다.
코인 시장은 대부분 24시간 거래되며 거래소마다 가격과 유동성 차이가 발생할 수 있다.
선물 시장은 레버리지와 증거금, 만기 및 강제청산 위험이 중요하다.
| 시장 | 주요 특징 | 검증할 사항 |
|---|---|---|
| 주식 | 거래시간·갭·실적 | 장중·장외 데이터, 갭 위험 |
| 코인 | 24시간 거래·거래소 차이 | 거래소별 유동성, 급격한 변동 |
| 선물 | 레버리지·증거금·만기 | 계약 크기, 청산 위험, 만기 처리 |
같은 OTE 구간이나 유동성 스윕 신호라도 시장에 따라 의미가 달라질 수 있다.
특히 손절 거리와 포지션 크기를 모든 시장에 동일하게 적용하면 위험할 수 있다.
예를 들어 변동성이 큰 시장에서는 짧은 손절 기준이 자주 발동할 수 있다.
반대로 유동성이 부족한 시장에서는 설정한 손절 가격과 실제 체결 가격이 크게 달라질 수 있다.
따라서 공통 분석 로직과 시장별 설정을 분리하는 것이 중요하다.
공통 분석 엔진
- 캔들 구조
- 추세
- 유동성
- 오더블록
- OTE
↓
시장별 설정
- 거래시간
- 거래 비용
- 변동성
- 계약 크기
- 유동성
- 주문 방식
이런 구조는 여러 시장에 동일한 분석 개념을 적용하면서도 실제 거래 환경의 차이를 반영하는 데 도움이 된다.
자동매매 시스템을 개발하면서 가장 경계해야 하는 것은 과거 데이터에서 좋은 결과가 나왔다고 해서 미래에도 같은 결과가 나올 것이라고 믿는 것이다.
백테스트는 과거 데이터를 이용해 전략을 검증하는 방법이다.
하지만 여러 문제가 발생할 수 있다.
과거 차트에서는 이후 캔들의 결과를 모두 알고 있다.
하지만 실시간 거래 시점에는 미래 가격을 알 수 없다.
코드에서 미래 데이터를 잘못 참조하면 실제로는 불가능한 성과가 만들어질 수 있다.
과거 특정 기간에 가장 좋은 결과가 나오도록 조건을 계속 조정하는 것이다.
과거에는 높은 승률을 기록했더라도 다른 기간에는 성능이 크게 떨어질 수 있다.
백테스트에서 수익이 나더라도 수수료와 슬리피지를 반영하면 결과가 달라질 수 있다.
과거 가격 데이터에 표시된 가격으로 모든 주문이 체결됐다고 가정하면 실제 결과보다 유리하게 계산될 수 있다.
특히 유동성이 부족하거나 변동성이 큰 상황에서는 중요한 문제다.
진행 중인 캔들에서 발생한 신호가 캔들 마감 시점에는 사라질 수 있다.
따라서 신호가 언제 계산됐고, 당시 어떤 정보가 실제로 이용 가능했는지 기록해야 한다.
이런 문제를 줄이려면 검증 단계를 나누는 것이 좋다.
과거 데이터 백테스트
↓
튜닝에 사용하지 않은 기간 검증
↓
Walk-forward 검증
↓
모의매매
↓
실시간 신호 기록
↓
제한적인 실거래 검증
실제 성과를 비교할 때는 같은 기간의 단순 보유 전략과도 비교할 수 있다.
매매가 잦은 전략은 거래 비용이 커질 수 있으므로 전체 수익률뿐 아니라 위험 대비 성과를 함께 살펴봐야 한다.
자동매매의 목표는 사람이 계속 차트를 보지 않아도 정해진 규칙에 따라 시스템이 작동하도록 만드는 것이다.
그렇다면 사람의 모니터링은 불필요할까?
실제로는 그렇지 않다.
시장 데이터가 끊길 수 있다.
거래소의 주문 API가 오류를 반환할 수도 있다.
뉴스가 급격하게 확산되면서 기존 변동성 기준이 의미 없어질 수도 있다.
AI가 전달한 정보가 잘못된 경우도 있다.
이런 상황에서는 사람이 개입해야 할 수 있다.
다만 모든 주문을 사람이 실시간으로 확인해야 한다면 자동화의 장점이 줄어든다.
그래서 이번 시스템에서는 역할을 분리하는 방향을 고려했다.
| 역할 | 담당 |
|---|---|
| 매매 규칙 설계 | 개발자 |
| 코드 구현 | Codex |
| 전략 논리 검토 | Claude |
| 뉴스·SNS 보조 분석 | Grok |
| 실시간 가격 감시 | 자동매매 시스템 |
| 기본 위험 한도 확인 | 자동 안전장치 |
| 예외 상황 판단 | 개발자 |
| 최종 운영 책임 | 사람 |
특히 중요한 것은 위험 상황에서 시스템이 자동으로 중단할 수 있어야 한다는 점이다.
예를 들어 다음과 같은 조건을 설정할 수 있다.
가격 데이터 수신 실패
↓
신규 주문 중단
브로커 연결 불안정
↓
주문 상태 확인
↓
필요 시 사람 알림
일일 손실 한도 초과
↓
신규 거래 차단
↓
사람 승인 전까지 재개 금지
이런 기능은 시장 방향을 맞히는 능력과 별개다.
하지만 실제 자동매매 시스템에서는 매우 중요한 부분이다.
자동화가 잘 작동한다는 것은 사람이 없어도 거래를 많이 한다는 뜻이 아니라, 문제가 발생했을 때도 정해진 안전 기준을 지킨다는 의미에 가깝다.
자동매매 시스템을 개발하면서 처음에는 좋은 진입 조건을 찾는 데 관심이 많았다.
어떤 캔들이 상승 가능성을 보여주는지, 어느 가격 구간에서 반전이 나타나는지, 어떤 지표를 결합해야 신호가 정확해지는지 살펴봤다.
하지만 시스템이 복잡해질수록 중요하게 생각하는 부분이 달라졌다.
높은 승률은 매력적이다.
하지만 손실 거래의 규모가 크면 전체 성과는 나빠질 수 있다.
따라서 승률뿐 아니라 평균 손익비와 기대값, 최대 낙폭을 함께 확인해야 한다.
조건을 추가하면 불리한 거래를 줄일 수 있다.
하지만 신호가 지나치게 늦어질 수도 있고, 과거 데이터에만 맞는 전략이 만들어질 수도 있다.
각 조건이 실제로 새로운 정보를 제공하는지 검증해야 한다.
차트의 방향을 잘 분석해도 실제 대응이 늦으면 결과가 달라질 수 있다.
특히 가격이 급격하게 변하는 순간에는 신호 감지와 실제 체결 사이의 시간이 중요하다.
다만 실시간 대응이 언제나 유리한 것은 아니다.
잘못된 신호에도 더 빨리 반응할 수 있기 때문이다.
그래서 속도와 확인 조건을 함께 관리해야 한다.
AI가 특정 분석에 강한 확신을 표현하더라도 실제 통계적 근거가 부족할 수 있다.
중요한 것은 자연어 설명이 아니라 과거 검증과 실시간 기록, 실제 체결 결과다.
매매 시스템을 만들다 보면 가능한 많은 기회를 찾고 싶어진다.
하지만 시장 구조가 불명확하거나 위험이 큰 상황에서는 거래를 보류하는 것이 합리적일 수 있다.
시스템의 목적은 항상 매수·매도 신호를 만드는 것이 아니라 조건이 부족할 때 아무것도 하지 않는 판단까지 일관되게 수행하는 것이다.
처음에는 캔들 몇 개를 분석하면 자동매매 시스템을 만들 수 있을 것 같았다.
하지만 개발을 진행할수록 시장을 이해하는 일이 훨씬 복잡하다는 것을 알게 됐다.
캔들의 형태뿐 아니라 어디에서 발생했는지 살펴봐야 했다.
이전 고점과 저점이 어떤 구조를 만들고 있는지 확인해야 했다.
유동성과 오더블록, OTE 같은 개념도 서로 연결해야 했다.
그 과정에서 Codex와 Claude는 유용한 개발 도구가 됐다.
모호했던 매매 아이디어를 코드로 구현할 수 있는 조건으로 정리하고, 서로 충돌하는 규칙을 검토하고, 테스트하는 데 도움을 줬다.
그리고 실시간 대응의 중요성을 체감하면서 시스템의 방향도 달라졌다.
단순히 과거 차트에서 좋은 패턴을 찾는 것보다 시장이 실제로 움직이는 순간에 무엇이 달라졌는지 확인하고, 정해진 규칙에 따라 대응하는 것에 더 관심을 두게 됐다.
Grok은 뉴스와 SNS의 변화를 살피는 보조 도구로 활용할 수 있다.
하지만 가격과 주문 체결은 실제 시장 데이터로 확인해야 하고, 중요한 위험 판단에는 사람의 모니터링이 필요하다.
최근 JEV처럼 판단을 빠르게 반환하는 AI를 매매에 활용하려는 시도도 등장했다.
그런 방식도 하나의 접근이 될 수 있다.
다만 이번 개발에서는 AI가 직접 매수와 매도를 결정하도록 하기보다, 시장 구조를 명확한 규칙으로 구현하고 실시간으로 확인하는 방식이 더 적합하다고 판단했다.
물론 이 방식이 모든 시장에서 더 높은 수익률을 보장하는 것은 아니다.
실제 우위가 있는지는 충분한 기간의 거래 데이터와 비용을 포함한 검증을 통해 확인해야 한다.
그럼에도 개발 과정에서 얻은 가장 중요한 교훈은 분명했다.
자동매매의 핵심은 미래 가격을 정확히 예언하는 것이 아니라, 시장의 변화를 일관되게 감지하고 감당 가능한 위험 안에서 대응하도록 만드는 것이다.
AI는 이 과정을 대신 책임져 주는 존재가 아니다.
사람이 세운 가설을 구현하고, 검증하고, 개선하도록 돕는 개발 파트너에 가깝다.
그리고 아무리 많은 기술적 분석을 연결하더라도 최종적으로 중요한 것은 실제 시장에서의 결과다.
AI에게 다음 캔들의 방향을 맞히게 하는 것이 목표는 아니었다. 시장의 구조를 이해하고, 변화가 발생하면 정해진 규칙에 따라 빠르게 대응하는 시스템을 만드는 것이 목표였다.

피보나치 0.62~0.79 구간, 시장 구조와 유동성 스윕을 결합하는 방법을 설명한다. ICT 기반 교육 자료이며 해당 가격 구간의 예측력이 보장된다는 뜻은 아니다.
Optimal Trade Entry — ICT Guide
OTE의 구간 계산, 기준 고점·저점 선택과 실무적인 한계를 설명한다.
시장뿐 아니라 여러 분야의 상태 정보를 입력받아 구조화된 선택과 확률을 반환하는 판단형 AI 모델의 설계를 설명한다.
JEV가 판단을 제공하고 실제 실행 정책과 위험 제어는 애플리케이션 코드가 관리하는 구조를 설명한다.
TypeSafe AI — Introducing System One Models & Jev
JEV가 자연어 생성 대신 구조화된 선택과 확률을 반환하도록 설계됐다는 공식 소개. TypeSafe AI
Siim — Jev for trading: claim vs. measured
JEV 1.13.0을 이용한 코인 가격 방향 예측 실험. 약 29만 8천 건의 과거 데이터 기반 평가, 48.4%의 방향 적중률, 비용 반영 전 성과와 실험의 한계를 공개했다. GitHub
JevTrader — 초단기 가격 예측 실험
초단기 가격 예측과 주문 흐름 기반 모델에 JEV 판단을 추가했을 때의 성능을 비교한 개발자 실험. AUC는 방향 구분 성능 지표이며 매매 승률과는 다르다. GitHub
ClawStreet — Can Jev trade stocks?
주식 데이터를 JEV에 전달해 매수 판단과 거래 근거 검토를 시험한 사례. 가격 예측과 데이터에 근거한 판단 검토를 구분해 평가했다. clawstreet.io
X 게시물의 키워드·의미 검색과 스레드 조회 등 시장 뉴스·SNS 보조 모니터링에 활용할 수 있는 공식 검색 기능.
Codex CLI와 코딩 에이전트의 코드 작성, 테스트, 작업 자동화 기능을 확인할 수 있다.
Claude Code를 이용한 코드 분석, 프로젝트 지침, 작업 실행과 검토 기능.
자동화 거래, 시장 변동성, 선물·파생상품의 위험을 이해하기 위한 공식 자료.
U.S. Commodity Futures Trading Commission
투자 위험, 거래 비용과 시장 정보에 관한 공식 투자자 교육 자료.