My-Algo-Trading-Code
이곳에는 제가 신호 생성 및 Dhan API를 사용하여 데이터를 가져오는 프론트 테스트에 대해 작성한 모든 코드가 포함되어 있습니다.
실시간 거래 기록 (Live track record)
저는 2026년 5월부터 이 전략들을 **실제(live)**로 운영해 왔습니다 (실제 증권사 주문). 일별 결과는 여기에 기록되어 있습니다:
📈 실시간 결과 스프레드시트
코드 (The code)
비록 제가 코드를 소유하고 있지만, 실제 코딩 작업은 GPT-5.4-xhigh, GPT-5.5-xhigh, GPT-5.6 Sol xhigh 및 Claude Opus 4.7, Claude Opus 4.8, Claude Opus 5를 Max/Ultracode 노력으로 전적으로 수행했습니다. GPT가 신호 생성기(signal generators)와 데이터 가져오기 파일의 대부분을 작성했으며, Claude가 가장 큰 부분인 멀티스레드 프론트 테스트 워커(multithreaded Front Test worker)를 작성했습니다. 저는 검토 및 테스트만 진행했습니다. 한편, Claude Fable 5는 전체 리포지토리에 대한 철저한 감사를 수행했습니다.
포함된 내용 (What is included?)
-
NIFTY/BANKNIFTY/FINNIFTY 지수에 대한 과거 데이터를 추출하는 데이터 추출기(Data extractors)
-
백테스트에 사용했던 파일들
-
신호를 생성하기 위해 제가 만든 신호 생성기(Signal generators)
-
모든 전략을 함께 실행하기 위해 멀티스레딩을 사용하는 메인 프론트 테스트 파일
-
실제 증권사로의 실시간 주문 실행 기능 — Kotak Neo, Shoonya (Finvasia), Flattrade Pi v2, 그리고 Dhan 중에서 선택 가능하며, 전역 일시 정지 스위치(global kill-switch)와 전략별 모의/실시간 토글(paper/live toggles)로 제어됩니다 (모든 것은 기본적으로 모의 거래입니다).
-
실시간 Telegram 알림: 프론트 테스트 마스터 파일은 모든 진입/청산(옵션 상품, 로트 크기, 진입/청산 가격 및 P&L)을 Telegram 그룹/채널에 게시할 수 있습니다.
-
선택적 옵트인 LLM 트레이딩 에이전트 —
-
선택적 CPR Codex AI Agent가 Trend-Day Rider를 실행합니다: 백테스트된 호스트 게이트가 정오의 트렌드 데이 후보군을 플래그 지정하며, Codex는 (네 개의 동결된 읽기 전용 MCP 도구 뒤에) 이를 수락하거나 거부할 수만 있고, 모든 진입은 VWAP 스톱과 함께 반대 포지션의 현재 주간 ATM 옵션을 매도합니다. 안전한 비활성화 기본값 및 표준 실시간 더블 게이트
최근 추가 사항
-
CPR AI가 이제 Trend-Day Rider를 거래합니다. CPR Algo 4는 이전 SRSI/VWAP 플레이북을 가지고 있으며, 선택적 Codex 에이전트는 NIFTY의 5년 분기 일분봉 데이터와 실제 주간 옵션 프리미엄 (만료된 옵션 세트, 비용 및 2분 결정 지연 포함)에서 선택한 전략을 갖게 되었습니다. 테스트된 약 12가지 아이디어 중 하나가 살아남았습니다: 아침 늦게, 최근 ATR 범위를 벗어났고 VWAP 트렌드 측의 한쪽 극단에 고정된 세션은 그 극단 근처에서 마감되는 경향이 있습니다. 호스트는 이러한 봉을 플래그 지정합니다 (시작 시간 11:00-13:30, 범위 > ATR5, VWAP 트렌드 측의 바깥쪽 15% 내에서 종가, 강세의 경우 3가지 합치 요인 중 2개 필요) Signal Generators/CPR AI Agent/cpr_ai_trend_day.py를 통해; Codex는 이를 수락하거나 거부할 수 있지만, 절대 반전시키지는 않습니다. 모든 진입은 고정 VWAP 현물 스톱과 함께 반대 포지션의 현재 주간 ATM 옵션을 매도하며, 목표가나 세션당 한 번만 진입합니다. 백테스트: 264건 거래, 거래당 +9.6 프리미엄 포인트, 수익 계수(profit factor) 1.69, 매년 양수 (2025-26이 가장 약함); 매수 대신 관리된 PF는 1.27입니다. 이 데이터는 또한 여러 인기 있는 믿음들—OI 벽을 지지/저항으로 보는 것, 최대 OI 만기일 고정(pin), 좁은 CPR이 트렌드 데이를 예측하는 것, BankNIFTY 확인—을 반박했습니다. python algo.py backtest --strategy cpr-ai-trend-day로 재현하십시오. 매도 옵션에는 네이키드 옵션 마진이 필요합니다; 기본값인 CPR_AI_MAX_LOSS (Rs 5,500)는 일부 회복 중인 거래를 잘라냅니다. ADR-0019를 참조하십시오. ADR-0019 및 docs/lld/cpr-codex-ai-agent.md를 참조하십시오.
-
CPR Algo 4 — 결정론적 '장중 SRSI VWAP' 플레이북. 새로운 CPRAlgo4StrategyWorker는 선택적 CPR AI 에이전트가 모델로 판단했던 SRSI/VWAP 아이디어를 거래합니다 (이제 위에서 설명한 Trend-Day Rider를 실행). 하지만 모든 결정은 고정된 규칙에 따릅니다. 09:25 분봉 마감가가 영역 [MIN(S1, PDL), MAX(R1, PDH)]을 확정하여 당일 유형을 결정합니다: 내부 영역이면 SIDEWAYS (과매도 Stochastic RSI가 상승 돌파할 때 ATM CE 매수, 과매수 ATM PE 매수, 마지막 확인된 스윙 지점에서 손절); 외부 영역이면 그 방향으로 TRENDING 합니다 (VWAP을 가로질러 마감되면서 본체(body)의 최소 40% 이상이 넘어갈 경우에만 매수, RSI 및 EMA5/20 필터 적용, 진입 캔들에서 손절; 더 낮은 고점 + 더 낮은 저점 또는 더 높은 고점 + 더 높은 저점 플립은 거래를 끊고 리버설 시퀀스를 통해서만 재진입). 모든 거래는 30 포인트보다 넓거나 다음 CPR 레벨(1:1 비율로 2 포인트 적은)보다 가까운 손절을 건너뛰고, 버퍼링된 R2/S2에서 청산합니다. CPR_ALGO4_EXIT_MODE는 TARGET (1:1) 또는 TRAIL (본전가, 그 후 캔들별) 중 선택하며, 트렌딩 롱 포지션의 경우 옵트인 첫 30분 목표와 R1 추가 매수 기회가 있습니다. 이는 CPR 워커 안에 있는 네 번째 알고리즘이 아니라 자체적인 워커이므로, 자체 포지션, 라이브 게이트 (CPR_ALGO4_LIVE_TRADING, 기본값은 페이퍼) 및 Sheet 행을 유지하며 CPR, CPR Algo 3, CPR AI와 공존합니다. 브로커가 필요 없는 엔진은 Signal Generators/CPR Strategy/cpr_algo4_signal_generator.py에 존재하며, python algo.py backtest --strategy cpr-algo4를 통해 동일한 엔진을 5년 데이터에 걸쳐 재현(replay)합니다. P&L 계산 시 신뢰하려면 Sheet 행 'CPR Algo 4 Strategy', 'CPR Algo 4 Strategy [LIVE]', 'CPR Algo 4 Strategy [MIXED]'를 추가하십시오. 자세한 내용은 docs/lld/cpr-algo4.md와 docs/adr/0018을 참조하십시오.
-
충돌에 강한 세션 복구. 모든 진입/청산 및 전략별 실현된 P&L(Profit & Loss) 통합은 세션 동안 원자적으로 지속되며, 오픈 포지션은 30초마다 캐시에서 새로 고침됩니다.
재시작(restart)은 어떤 것도 쓰기 전에 정확한 이전 파일을 보관하며, 일일 최대 손실 한도가 초기화되는 것을 방지하기 위해 항상 당일 손실을 매칭 워커로 가져가고, 오프팅 페이퍼 전용 검증 게이트가 완전한 계약과 리스크 지오메트리를 수락할 때만 열린 포지션을 재개합니다. 로컬 종료 완료와 성공적인 Google Sheet 게시 기록은 별도로 저장되니 ADR-0012를 참조하십시오.
- CPR Codex AI 에이전트 (독립적, 옵트인).
CPRAIWorker는 세션 레벨, 모멘텀/VWAP, 시장 구조 및 포지션 상태를 5분봉 완료 시마다 한 번씩 동결합니다. Codex는 역동적인 체제(regime)/설정 또는 전제-이탈 판단을 내리는 반면, 호스트만 진입 지오메트리, 스톱 거리, 레벨, 사이즈 결정, 시간 제한, 생애 주기 상태 및 실행을 검증합니다. 수락된 횡보(SIDEWAYS) 설정은 네이키드 현물 만기 프리미엄 매도(강세 시 ATM PE 매도; 약세 시 ATM CE 매도)로 표현됩니다. 추세형(TRENDING) 설정은 기존의 ATM CE/PE 옵션 매수와 만기를 유지합니다. 이 워커는 기본적으로 비활성화되어 있으며 라이브에서도 기본적으로 비활성화되어 있습니다. 실제 매수 및 매도는 LIVE_TRADING_ENABLED=true와 CPR_AI_LIVE_TRADING=true가 모두 필요하며, 추가로 일반적인 시작 노출 감사/설정 검증이 필요합니다. 현물 스톱은 매수-종료(buy-to-close)를 유발하지만, 갭, 비유동성, 지연 시간 또는 거부된 이탈을 통해 손실 상한선을 보장할 수는 없습니다. CPR, CPR Algo 3, CPR Algo 4, Regime Adaptive, 그리고 CPR AI는 독립적인 전략이며 각각의 포지션과 개별 P&L로 함께 실행될 수 있습니다. 약 28개 전략으로 구성된 핵심 로스터는 두 가지 선택적 AI 에이전트가 모두 활성화되면 최대 약 30개의 설정 가능한 워커에 도달할 수 있으며, 활성화 및 가상 거래 게이트는 실행 중인 로스터 구성을 의존적으로 유지합니다. requirements-ai.txt (SL Hunting과 공유)에서 정확한 선택적 세트를 설치하십시오. 전략, 격리 경계, 제로 오더 스모크 명령어는 focused CPR AI README를 참조하십시오.
(SRSI/VWAP 플레이북과 SIDEWAYS/TRENDING 표현은 Trend-Day Rider로 대체되었습니다 -- 위의 첫 번째 항목을 참조하세요.)
- 설정 드리프트 감사 (Config-drift audit) —
python algo.py check-env. 설정이 세 곳에 존재하며 조용히 어긋나기 쉽습니다: gitignore된 .env, 커밋된 env.example 템플릿, 그리고 모든 _env_* 호출 뒤의 코드 내 기본값입니다. 코드와 템플릿에는 있지만 .env에는 누락된 키는 오류가 아니며 — 실행기가 단지 코드 내 기본값을 사용하기만 하므로 — 이것이 놓치기 쉬운 지점입니다: 보이지 않는 기본값이 실제 자금 거래를 지배하게 됩니다. 이 읽기 전용 명령어는 .env에서 누락되었거나 오타가 난(오타란 의도한 설정이 전혀 적용되지 않음을 의미) 또는 템플릿에 빠진 설정을 보고합니다. 발견된 사항이 있으면 비제로(non-zero)로 종료되어 사전 점검 스크립트(pre-flight script)를 통제할 수 있으며, .env의 값은 절대 출력하지 않고 키 이름만 출력하여 출력을 공유하기 안전하게 만듭니다. CI는 반대 방향에서도 동일한 규칙을 적용합니다: 새로운 _env_* 키가 추가되려면 반드시 그에 대한 env.example 항목이 있어야 합니다.
- 전략별 크기 승수 (Per-strategy size multiplier) —
<PREFIX>_SIZE_MULTIPLIER. 전략당 하나의 노브(knob)입니다 (기본값 1, 최대 25까지의 정수). 이 승수는 해당 전략 전체의 규모/위험 설정, 즉 로트 수, 거래당 위험 예산, 하드 로트 상한선, 일일 최대 손실 차단 스위치 등을 함께 조정합니다. 2로 설정하면 5랏 상한은 10이 되고, Rs.2,500 예산은 Rs.5,000이 되며, Rs.5,500 일일 상한은 Rs.11,000이 됩니다. 그리고 4랏을 사용했을 설정은 8랏을 사용하게 되므로, 네 가지를 수동으로 일관되게 유지해야 하는 대신 하나의 숫자를 편집하여 포지션 크기를 계정(account) 규모에 맞춰 성장시킬 수 있습니다. 의도적으로 전략별로만 적용됩니다 (글로벌 스위치가 없으므로 오타 하나가 활성화된 모든 전략을 확대할 수 없습니다) 그리고 모의 및 실거래 모두에 적용되므로, 크기가 커진 경우 먼저 모의 검증(paper-validated)을 할 수 있습니다. 잘못된 값(0, 2.5, 30, `
이전과 동일하게 거래하려면 모든 승수(multiplier)를 설정하지 않은 상태로 두세요. 알아두어야 할 두 가지 결과가 있습니다: 조정된 예산(scaled budget)은 또한 '랏 사이즈가 예산을 초과하는 경우' 건너뛰기(skip) 조건도 완화하며, 랏 사이즈는 하한선이 적용되므로 2배를 해도 순수한 두 배(pure doubling)보다 약간 높게 나올 수 있습니다 (여전히 조정된 예산 내에 엄격하게 포함됩니다). SL Hunting의 경우, BankNIFTY 미러가 이미 바스켓 위험을 대략 두 배로 늘리므로, 승수 M은 바스켓을 단일 레그(single-leg) 예산의 약 2xM 수준으로 유지합니다.