요청: 크라우니-트레이딩-4상규칙고도화
- 날짜: 2026-07-30 12:48:50
- 작업 경로: /Users/ef
요청 본문
라이프업트레이딩 5계좌 카피트레이딩 세팅, 20초~5분 한 거래, 60달러씩 수익 도구. 4상균형3진사고로 3거래마다 규칙 고도화하는 규칙기반 도구 구축·계속 고도화
관련 산출
(클로드가 작업 결과를 이어 기록)
산출 (1차 — 2026-07-30)
kps-trading-tool/모듈8-규칙고도화.한선신규 — 컴파일 경고 0, 자체시험 11/11 PASS- 함수 15종: 규칙직렬화/파싱·규칙초기화(시드5)·규칙평가(가중합 시그널)·거래기록·사상판정(티옴타음)·규칙고도화(3거래마다)·쿨다운판정(20~300s)·일목표판정($60/손실가드, 센트정수)·카피팬아웃(리더→A2~A5)·저장/불러오기
- 4상 판정: 티=가중치+1(≤5) / 타=-1(≤-3 폐기) / 옴=기준값 ±1 교대탐색 / 음=9거래 무발화 이관(-9)
- 잔여: ①옴 탐색 휴리스틱 고도화(홀짝 교대→통계기반) ②S5 전략엔진/모듈7 배선(정수 슬롯 상수 매핑) ③저장경로 라이브 전환 ④LifeUp isAutomated 허용 확인(라이브준비.md 1-C)
산출 (2차 — S5 배선, 2026-07-30)
서브5-전략엔진-v4.한선신규 — v3 허브 + M8 결선 3지점(SIGNAL 게이트/회차완료 고도화/카피팬아웃). 컴파일 경고 0, E2E 5/5 PASS(메인 세션 독립 재검증 포함), 이형문자 0- 공유슬롯.한선 SESS_M8_시그널=28·SESS_M8_발화IDs=29 추가(SSOT)
- 잔여: ①S1 이벤트 생성기가 SIGNAL PSV 확장필드(RSI|ATR|추세|연속손실) 공급 배선 ②카피팬아웃 심볼 "NQ" 하드코딩→이벤트필드 ③일손실한도 $200 예시값→계좌정책 확정 ④LifeUp isAutomated 허용 확인(사장님)
산출 (3차 — 자산 인벤토리 + 데모 시연, 2026-07-30)
- 전수 인벤토리: 라이브 파이프라인 ~90% 기존 정본 존재(S1순수/S2v3/S3v3/S4v3/모듈v3계열/kps_라이브락 18/18/kps.js 대시보드). 갭=S3↔계약ID매핑 결선·통합메인-v3-저널 v4반영·5계좌 축소검증·creds 실물·LifeUp isAutomated 확인
- 데모 세트: 데모-모의시세드라이버.한선 + 데모-엔진.한선(v4 무수정 복사본) — LCG 결정론 재현, 경고 0. /tmp/kps/데모리포트.txt: 30시그널→10체결, 고도화 3사이클(타 감쇠·음 이관 R3 실연), 카피 40/40 일치, 페이퍼 손익 -$52(승률20% — 규칙엔진이 나쁜 규칙을 감쇠하는 과정 실연)
- 데모 잔여: 폐기 이벤트 미재현(30거래 부족)·RSI/ATR 단순화 공식→fn_트레이딩엔진_RSI 교체 필요·방향 채널 이원화 합의
산출 (4차 — 결선점검 도구, 2026-07-30)
결선점검.한선— 맥용 Tradovate 연결 7단계 점검(creds→demo가드→인증/mdAccessToken→계좌목록·5계좌 리더/팔로워 제안→NQ 실계약ID→contract_map.psv→포지션→[플래그]주문발주·취소 왕복). 서브1-연결성-순수 정본 가져오기 재사용, 라이브 엔드포인트 코드 차단. 컴파일 경고 0, 무creds·가짜creds(demo=0) 두 시나리오 crash 없이 완주 실측(메인 독립 재검증 포함)- 발견 공백: S1에 주문취소 함수 없음(REST_POST 인라인으로 보완)·S1 JSON 배열 파싱 미구현(문자열 스캔 헬퍼로 진단용 대체 — JSON.한선 배열 순회 추가가 근본 해결)
- 사용법: creds 기입 후
./hanseonc_high 결선점검.한선 > /tmp/wc.toau && ./crownyc run /tmp/wc.toau, 주문왕복까지는 "주문점검" 플래그 - 배경 확정: NT8 자작 카피트레이더 경험=A안(직접 팬아웃)과 동일 구조. 업비트/바이낸스 실거래 경험 있음, Tradovate만 미경험 → 이 도구가 그 갭 전용
산출 (5차 — 인증 관용화·팬아웃 스태거, 2026-07-30)
- 결선점검.한선 관용화: 필수 필드 7→3(name/password/demo), cid/sec 없으면 Sample App 공용 인증 시도(WC_인증시도, appId/appVersion 폴백). 실측: cid/sec 없는 요청이 Tradovate demo 서버에서 형식 거부 없이 자격검증 단계 도달("Incorrect username or password" 응답) — 제미나이 제보의 요청 형식 수준 사실 확인. 실계정 토큰 발급 성공 여부는 사장님 실계정으로 판정
- v4 카피팬아웃: COPY 줄에 |지연ms=250/500/750/1000 스태거 필드(레이트리밋 대응 계약 — S3 집행 배선은 후속). E2E 5/5 유지
- 다음: ①사장님 LifeUp ID/PW로 결선점검 실행(cid/sec 없이 우선 시도) ②S3 지연ms 집행 배선 ③S3↔계약ID매핑 결선
산출 (6차 — 실계정 결선점검 실측, 2026-07-30)
- LifeUp 실계정(LIFEUP0101147)으로 결선점검 실행: 1·2단계 PASS, 3단계 인증 FAIL "The app is not registered" — appId 변형 3종(Sample App/Tradovate Trader/Tradovate) 전부 동일 거부. 판정(타): cid/sec 등록 API 키 필수 확정(제미나이 "공용 appId 인증" 주장은 토큰 발급 수준에서 오류). ID/PW는 앱 미등록 오류로 넘어갔으므로 유효 인식
- 다음: 사장님이 Tradovate 대시보드(trader.tradovate.com 로그인 → 설정 → API Access)에서 앱 등록(appId=CrownyTrader) + cid/sec 발급 → tv_creds.txt에 2줄 추가 → 결선점검 재실행이면 4~7단계 진행
실증 프로토콜 (사장님 확정 2026-07-30 — 키 발급 후 1차 실계좌 테스트 규격)
- 계좌: 5계좌 중 1계좌만(리더 단독, 카피팬아웃 OFF)
- 수량: 1마이크로(MNQ — NQ 미니 아님 주의)
- 손익 범주: +$60 도달 또는 -$60 도달 시 그날 종료(일목표판정 상하한 6000센트 대칭)
- 횟수: 최대 5거래(자유 거래 — 규칙엔진 시그널 따르되 강제 아님, 5거래 도달 시 종료)
- 목적: 도구 작동 확인(체결·게이트·기록·규칙고도화 1사이클 이상 관찰). 성적 아님
- 엔진 반영 필요: ①실증모드 플래그(팬아웃OFF·계좌1·MNQ·거래캡5·±60 대칭한도) ②5거래 후 자동 정지+리포트
산출 (7차 — 모의서버·최종게이트, 2026-07-30)
- 모의트라도서버.한선(:9412 등록) — Tradovate v1 8엔드포인트 모사, 한글 Content-Length 바이트수 함정 수정 포함. bind 실패 시 즉시 종료 확인(busy-spin 방지 정상동작)
- 결선점검 7/7 PASS 실측(모의서버): 인증→5계좌 리더/팔로워→계약ID 2842001→잔고→발주 orderId→취소 왕복. 수리 1건: orderId 숫자를 글자수()로 검사하던 함정 → 문자열변환+포함()>=0
- exit 137 사태 원인 = 타 세션 부하(사장님 확인). creds host줄 제거 완료, 실계정 5줄 보존
- 다음: 실증모드(1계좌·MNQ·±60·5거래캡) 구현 + 모의서버 리허설
산출 (8차 — 실증모드 완성, 2026-07-30)
- v4 PROOF_MODE=1: 카피OFF·MNQ 1계약·±$60 대칭·5거래캡·자동정지+실증리포트.txt. 미설정 시 기존 동작 불변(E2E 5/5 유지). 조기 -$5 정지 케이스도 실측
- v4.1 수리(메인): 진입 방향 정본을 M8 규칙평가로 교체(기존엔 SIGNAL 이벤트 임의 방향 필드 사용 — 에이전트 자기보고 결함). 수정 후 E2E 5/5·리허설 COPY 0·ENTER 5줄 MNQ 회귀 PASS
- 잔여(실계좌 연동 시): 체결가/슬리피지 실값 pnl 교체·6거래째 고도화 관측은 실증 2차에서
경로 판정 (2026-07-30 확정)
- LifeUp = Tradovate + NT8(NinjaTrader가 Tradovate 인수 — 한 회사, 즉 단일 벤더. Rithmic 없음). APEX=다중 벤더(Rithmic 포함)
- 목표 재확인: 맥 네이티브 + NT8 없이 직접 거래하는 NT8 대용 도구 → NT8 브리지 경로 폐기(작업 중단)
- 유일 관문: Tradovate 앱 등록(cid/sec). 실측 "The app is not registered" → LifeUp 지원 문의가 해소 경로
- 대안 경로: Rithmic 제공 펌(APEX/Lucid) — Rithmic 자격증명은 펌 직접 발급(예치·월구독 불요), R|API 맥 네이티브 가능
- 발급가이드.md ⑥절에 실측 갱신 기록(기존 "시뮬=demo API 무료" 부정확 정정)
약관 판정 (사장님 확인 2026-07-30)
- LifeUp 약관: HTS/HFT만 금지, 그 외 자동화 허용 → 펌 약관 장벽 해소. 남은 건 기술 경로뿐
- 우리 도구는 M8 쿨다운 최소 20초 게이트 내장 → HFT(통상 5초 이하 매매 비중 기준) 비해당. 컴플라이언스 증빙 = 쿨다운판정() + 거래 장부 시각 기록
- 채택 경로: 크라우니AI 브라우저(WKWebView, 자체 소유) + Tradovate 웹트레이더 세션 — cid/sec 불요·NT8 불요·맥 네이티브. 제어 표면 = crowny-ai-control.m HTTP 127.0.0.1:9841(browserctl), MCP 없이 curl 직접 호출 가능(이 세션 실측)
- 대안 보류: 웹훅 벤더(TradersPost/PickMyTrade — 공인벤더 자격으로 프랍계좌 라우팅, $25/월 불요). LifeUp 지원 목록 확인 시 재검토
벤더 조사 확정 (2026-07-30)
- LifeUp 공식 약관 원문(lifeuptrading.com/en-us/guide-center/general-rules): 금지=
HFT/scalping bots (sub-second in/out)+Unapproved third-party software. → 우리 도구 20초 쿨다운=sub-second 비해당. 단 "승인된" 서드파티 정의 미명시 → help@lifeuptrading.com 문의 필요 - LifeUp 지원 플랫폼: NinjaTrader(Win)/Tradovate(PC·모바일·맥)/TradingView(차트). 보상계좌 최대 5개 동시
- 권고 벤더 = PickMyTrade: $50/월 정액 무제한 계좌(TradersPost는 5계좌 $254/월), 단일 POST의 multiple_accounts 배열로 N계좌 팬아웃+계좌별 quantity_multiplier, Tradovate 특화, 200ms 처리. 사전절차=대시보드 계좌연결+토큰발급+웹훅URL(OAuth·서명 불요)
- PickMyTrade 스키마: {symbol,data(buy/sell),quantity,price,tp/sl(dollar_tp·dollar_sl),token,multiple_accounts:[{token,account_id,quantity_multiplier}]}
- 미확인: ①LifeUp 자동화 "승인" 프로세스 ②양 벤더 체결 역조회 REST 스펙(가입 후 확인) ③PickMyTrade 지원목록에 LifeUp 미등재(단 "Tradovate 기반 프랍펌 전부 작동" 정책)
크라우니AI 브라우저 경로 — 실화면 구조 확보 (2026-07-31)
경로 확정: 크라우니AI(WKWebView, 자체소유) + Tradovate 웹트레이더. 패러랠즈·NT8·앱등록·벤더구독 전부 불요. 제어=127.0.0.1:9841(browserctl, pid별 CROWNY_CTL 게이트 — 로그인 세션은 인스턴스간 미공유. 제어되는 창에서 로그인 필요)- LifeUp 5계좌 실확인: LUBCQWN3960003 / LUBCWYJ6110007 / LUBCHNS6060005 / LUBCSZW2200004 / LUBCJEM4770006. 각 MAX NET LIQ ~$50,000, DRAWDOWN AUTO LIQ ~$48,000(즉 트레일링 DD $2,000). 현재 전 계좌 P/L $0
- 차트 심볼 MNQU6(마이크로 E-mini 나스닥100) — PROOF_MODE 규격(MNQ 1계약)과 일치. 만기코드 U6 확인
- 주문 패널(원클릭): Buy Mkt / Sell Mkt / Buy Bid / Sell Ask, 수량 input(x773,y102), Exit at Mkt & Cxl(청산, x909,y102), ATM 드롭다운(OFF), DAY/GTC. 계좌 전환=상단 ACCOUNT 드롭다운
- 제약(중요): read_page가 노출한 상호작용 요소는 5개뿐 — Buy/Sell 버튼이 표준 button이 아니라 커스텀 요소라 DOM 탐지 실패. 좌표 클릭은 가능(스크린샷 좌표=페이지 좌표 1:1 확인)하나 레이아웃 변경에 취약 → crowny-ai-control.m에 /eval(JS 평가) 엔드포인트 추가해 텍스트 기반 견고한 선택자로 조작하는 것이 정공법(우리 소스라 확장 가능)
- 안전: 장중(CDT 09:59 확인) 클릭=실주문. 배선 검증은 장외 또는 극단 미체결가로만
브라우저 실행층 계약 확보 (2026-07-31)
/Users/ef/CrownyBrowser/크라우니AI제어.app(+데스크톱 별칭). CROWNY_CTL=1·포트 9847·Tradovate 자동 오픈, 중복 기동 방지. 판정 정본=native/제어런처.한선(8/8 PASS)form-control, 현재값 1 (739,88).pane.account-selector.dropdown (440,3), 현재 LUBCWYJ6110007. select 태그 아님(커스텀 드롭다운) → 클릭 후 항목 선택 방식 확인 필요DOM 선택자 확정 (2026-07-31 실측 — 어댑터 구현 계약)
- 계좌 전환: 트리거
[data-group-trade-tour="account-selector-trigger"]클릭 →li[data-testid="account-item-<계좌ID>"] a.account클릭. 현재 선택은 li.selected. 5계좌 전부 data-testid 보유(LUBCQWN3960003·LUBCWYJ6110007·LUBCHNS6060005·LUBCSZW2200004·LUBCJEM4770006). 아이콘 icon-circle-demo = 챌린지=시뮬 계좌(실자금 아님, 단 평가에는 반영) - 수량:
input.form-control(data-testid 없음) — 값 설정 후 input/change 이벤트 dispatch 필요(React 제어 컴포넌트 가능성) - 주문: 텍스트 기반 탐색이 정본(
Buy Bid/Sell Ask/Buy Mkt/Sell Mkt, div.btn.btn-success|btn-danger, 부모 .row>.col-xs-6). data-testid 없음 - 상태 파싱(innerText 정규식): POSITION / BID / ASK 실측 성공(예: pos 0, bid 28064.50, ask 28065.00) → 체결 확인·미체결 타임아웃 판정 근거
브라우저어댑터 완성 (2026-07-31)
브라우저어댑터.한선— 컴파일 경고 0. 제어호출/상태읽기/계좌전환/수량설정/주문발행(기본 Buy Bid·Sell Ask)/체결확인(1s폴링·30s타임아웃)/주문취소·청산/명령처리/팬아웃(지연 스태거)/드라이런- 안전 기본값 DRY_RUN=1 — 실호출 자체를 하지 않는 조기반환 구조. 실주문은 명시적 DRY_RUN=0에서만
- 상태읽기 실측(읽기전용): position=0 bid=28567.50 ask=28568.00 symbol=MNQU6 account=LUBCWYJ6110007 — 5필드 전부 정상
- 드라이런 회귀: ENTER1+COPY4 → 25줄(계좌전환·수량설정·주문발행 ×5), PROOF_MODE=1 시 COPY 0(SKIP 4)
- /eval 사양 확정: JS 본문에 명시적 return 필수(함수 본문 평가). 결함 아님 — 문서 정정 완료
- 사전점검 ①수량칸 유일성 → 메인 실측 완료: input.form-control 정확히 1개 ✅
실주문 전 남은 관문 (장외 수행)
- 계좌 전환 실클릭 1회 검증(data-testid 매칭·전환 확인 로직)
- 극단 미체결가 주문 → 취소 왕복 1회(Buy Bid 대신 안전가 지정 방식 검토)
- 체결확인 타임아웃 실지연 분포로 조정
- 그 후 실증모드(1계좌·MNQ·±$60·5거래)
★ 실주문 왕복 성공 (2026-07-31, 계좌 LUBCQWN3960003, MNQU6 1계약)
전 체인 실거래 검증 완료 — 크라우니AI 브라우저가 Tradovate 웹에서 실제 진입·청산 수행:- 계좌 전환 실클릭 PASS (data-testid로 LUBCQWN3960003 전환, li.selected로 확인)
- 안전 게이트 PASS (심볼 MNQU6=마이크로 확인, 미니 NQ 차단 로직 필요)
- Buy Bid 발주 → 체결(POSITION 0→1)
- Exit at Mkt & Cxl → 청산(POSITION 1→0), 최종 equity 49,963.80 (시작 49,958.10 대비 +5.70 — 왕복 실증에서 소폭 이익)
발견된 결함·함정 (어댑터 반영 필수)
- /click_text 이중발사: element.click()+합성 MouseEvent 둘 다 발사 → 주문 다이얼로그 2개 생성(실전이면 주문 2배). 주문 클릭은 /click_text 금지, /eval 단일 element.click()만 사용
- 주문 확인 다이얼로그: 최초 발주 시 "Buy 1 LMT at <가격>?" (Buy/Cancel + DO NOT SHOW AGAIN). 사장님이 체크 완료 → 이후 생략되어 즉시 체결. 어댑터는 다이얼로그 존재 시 처리 분기 필요(체크 해제 계정 대비)
- 비표준 공백 함정: "Exit at Mkt & Cxl" 텍스트에 비표준 공백 혼입 — 정확일치(===) 실패. 정규식 매칭(/Exit at Mkt/) 필수. Buy Bid/Sell Ask는 정확일치 정상
- Exit 정본 요소 =
button.btn.btn-default(children 0, 849,88). 전역 청산은.panic-button("Exit All Positions Cancel All") - 체결 확인은 POSITION 정규식 폴링으로 실동작 확인(0→1→0)
어댑터 v2 — 실측 결함 3종 반영 완료 (2026-07-31)
- /click_text 실호출 경로 완전 제거(코드 잔존 8건 전부 주석·로그 문구, 메인 grep 검증). 주문·청산·취소·계좌전환 전부 /eval 단일 element.click()
- Exit 탐색 정규식화(비표준 공백 회피), .panic-button(전계좌 청산) 사용 금지 명시
- 확인 다이얼로그 분기: 0개=진행 / 1개=그것만 클릭 / 2개 이상=전부 Cancel 후 실패 반환(이중주문 방지 최우선)
- 미니 차단 게이트 BA_미니차단() — 주문발행 최상단, DRY_RUN 무관 항상 검사. 단위시험 3/3(NQU6 차단·MNQU6 허용·ESU6 차단, 메인 독립 재검증 동일)
- 컴파일 경고 0, DRY_RUN 회귀·PROOF_MODE 회귀 이전과 동일. 상태읽기 5필드 정상
- 남은 사전점검: ①수량칸 유일성(메인 실측 완료=1개 ✅) ②계좌ID 문자열 대조 ③다이얼로그 미체크 상태 분기 라이브 검증(미수행) ④사장님 승인 후 최소수량 스모크 ⑤제어서버 인증
★★ 실증 라이브 완주 (2026-07-31, 계좌 LUBCQWN3960003, MNQU6 1계약)
크라우니AI 브라우저 실행층으로 실계좌 5거래 전자동 완주. 종료사유=거래캡도달| 거래 | 발화규칙 | 손익 |
|---|---|---|
| T1 | R2,R3 | +$19.00 목표 |
| T2 | R2,R3,R5 | +$16.74 목표 |
| T3 | R2,R3,R5 | +$16.74 목표 |
| T4 | R2,R3 | -$21.50 손절 |
| T5 | R1,R3 | +$23.00 목표 |
- ★핵심 결함(다음 개선 1순위): 엔진 계산 손익 +$53.98 vs 실제 계좌 증가 +$41.50 — 차이 $12.48(거래당 ~$2.5). 원인=청산 손익을 중간가 근사로 계산, 수수료·슬리피지 미반영. 실체결가 기준 손익으로 교체해야 규칙 학습이 정확해짐
- 실행:
BA_SKIP_RUN=1 DRY_RUN=0 ./crownyc run /tmp/ex.toau, 리포트 /tmp/kps/실증리포트_라이브.txt
다음: 다계좌동시.한선 (사장님 지시 2026-07-31)
5계좌 동시 진입 → 진입검증 → 미진입 계좌는 평균진입가와 $5(=2.5pt) 이내면 재진입, 초과면 스킵 → 동시 진출 → 진출검증 → 미진출은 3회까지 강제 청산, 실패 시 포지션잔존.flag + ALERT★ 5계좌 동시 진입·진출 실전 검증 성공 (2026-07-31)
다계좌동시.한선 — 컴파일 경고 0, 가격차게이트 5/5·시나리오 6/6, 실계좌 1사이클 완주
- 동시 진입 5/5 성공 (15초 내 전 계좌): 28451.25 / 28451.87 / 28449.12 / 28449.00 / 28447.50 (최대 편차 4.37pt)
- 진입검증 5/5 포지션=1 확인 → 미진입 0건이라 보정 규칙 미발동
- 동시 진출 5/5 요청성공 → 진출검증 5/5 무포지션 → 강제청산 미발동, 포지션잔존.flag 없음(정상)
- 사이클 손익: 진입 직후 즉시 청산이라 계좌별 -$6.30~-$10.30(스프레드·수수료). QWN은 앞선 실증 이익 포함 total +$34.90
- 왕복 실비용 실측: 계좌당 약 $6.30~$10.30 → 엔진 손익계산에 반드시 반영 필요(중간가 근사 폐기)
- 함정 발견:
시도는 hanseonc_high 예약어(TRY) — 변수명 사용 불가,시도횟수로 회피. 가드레일 미등재 신규 사례 - 미해결: 성공계좌 0건일 때 평균진입가=0 → 전부 스킵(안전측이나 재검토 여지)
손익 정확도 수리 완료 (2026-07-31)
- mid 근사 폐기 → 브로커 실현손익 델타 정본화: Accounts 패널
DOLLAR TOTAL P L(수수료 반영)을 진입 직전/청산 후 스냅샷해 델타를 그 거래 손익으로 사용. 계좌 전환 불필요(패널이 전 계좌 동시 표시) - 괄호 음수 파서 4/4 PASS ($34.90→3490, ($10.30)→-1030, $0.00→0, ($6.30)→-630). 이걸 놓치면 손실이 이익으로 뒤집혀 규칙이 반대로 학습 — 최우선 함정
- 델타 확보 실패 시 장부 기록만·고도화 입력에서 제외(오염 방지). 실제로 세션 전환 중 조회 실패가 발생했고 폴백이 정상 동작("유효계좌=0/5" 정직 보고, 크래시·조용한 오염 없음)
- 목표/손절 상향: 12pt($24) / 8pt($16) — 실측 왕복비용 $6.30~$10.30 위에서 작동
- 다계좌동시도 동일 도입 + 사이클 종료 시 계좌별 실현 델타 합계 출력
- 메인 독립 재검증: 두 파일 컴파일 경고 0, 5계좌 실파싱 일치(QWN +$34.90 / WYJ ($10.30) / HNS ($9.30) / SZW ($6.30) / JEM ($6.30))
- 잔여: Tradovate 세션 만료 감지·재로그인 알림 없음(현재는 조회 실패 폴백만)
★ 재실증 (실체결 손익 기준, 2026-07-31, LUBCJEM4770006)
| 거래 | 발화 | 실현손익델타 |
|---|---|---|
| T1 | R2,R3 | +$22.20 목표 |
| T2 | R3,R5 | -$16.30 손절 |
| T3 | R3 | -$15.80 손절 |
| T4 | R1 | +$23.20 목표 |
| T5 | R2 | -$20.80 손절 |
- ★규칙 자기교정 확인: 1차 실증(추정손익)에서 R3가 가중치4·티로 승격됐으나, 실비용 반영하니 1승2패·기여 -990 → 타(-1)로 강등, 가중치 4→2. R2도 3→2·옴 복귀. 거짓 손익이 만든 잘못된 강화를 진짜 손익이 되돌렸다 — 손익 수리의 가치 실증
- 판정: 현 규칙셋은 아직 수익성 없음(-$7.50/5거래). 도구는 정상 작동, 전략(규칙)이 미완성이라는 뜻. 다음 고도화 대상은 배관이 아니라 규칙 자체
- 세션감시.한선 완성·3파일 배선(단위 6/6, 실판정 티, 회귀 전부 유지).
시도는 함수명으로도 예약어 충돌 →재시도횟수
전략MA.한선 — 사장님 지시 MA 3규칙 (2026-07-31)
- 규칙1: MA 위+초록봉→Buy Bid 진입 / 롱중 빨강→청산. MA 아래+빨강→Sell Ask / 숏중 초록→청산
- 규칙2(게이트): MA 상향→롱만, 하향→숏만, 평탄→신규보류(청산은 계속)
- 규칙3: MA 근접 후 반등→같은방향 / MA 관통→반대방향(돌파확정봉수 파라미터)
- 파라미터: 봉주기 60s·MA 20봉·기울기뒤로 3·평탄임계 25c·근접임계 500c·돌파확정 1봉. 봉배열 200 회전
- 컴파일 경고 0, 자체시험 31/31 PASS. 학습DB 패턴 재사용(SMA·골든크로스·매매판단 구조)
- 구조적 발견: 규칙2 게이트를 규칙1·3 양쪽에 적용하면 게이트 통과 후 두 신호가 항상 동방향 → 실전에선 충돌이 이론상 발생 안 함(게이트가 충돌회피 겸함)
멀티계정 관제 골격 (2026-07-31)
- 관제기.한선 12/12·전략도구.한선 10/10 PASS, 경고 0. 설계=CrownyDoc 2026-07-31-멀티계정-관제-아키텍처.md
- 인스턴스 모델: 창1=탭1=브로커 로그인1=포트1. 런처가 이미 멀티 지원(CROWNY_CTL_PORT만 다르게). 쿠키 1벌 제약이 분리 근거
- 팬아웃 3모드(동시/독립/혼합), 3중 fail-closed(DRY_RUN·KJ_LIVE·미니차단), 전체청산은 무응답에도 루프 유지·인스턴스별 잔존플래그
- 포트 실측: 9848·9849 가용 / 9850~9852 점유 불가(monitoring·churck·crowny-ai)
- 멘토패널: crowny-trader:7741 기존 SSE(/api/kps/stream) 재사용 확정, 신규 포트 0. 관제기가 /tmp/kps/멘토패널.json 갱신 → mtime 변화 시만 브로드캐스트. 당일손익·경보 필드는 누적기 부재로 의도적 제외(거짓 0 금지)
- 미배선(정직 표기): 어댑터 BA_계좌목록 LifeUp 하드코딩·BA_제어포트 전역 9847 → 인스턴스별 주문 경로는 현재 "위임 로그만" 스텁
- 전략평가 기준: 표본 5건은 음(데이터부족) — 채택/폐기 판정 최소 10거래
★ 3창 멀티 인스턴스 실전 테스트 (2026-07-31, 2·2·1 분산)
구성: 9847(QWN,WYJ) / 9848(HNS,SZW) / 9853(JEM) — 계좌구성.psv + 인스턴스.psv 동기화- 진입 4/5 성공, WYJ 1건 미체결(지정가 미도달)→취소 처리. 진출 4/4 성공, 포지션 잔존 0, 3창 전부 pos=0
- 계좌 실현손익 델타: QWN +4.70 / WYJ 0(미체결=비용0) / HNS -0.30 / SZW +4.70 / JEM -2.30 → 순 +$6.80
- ★세션 제약 실측: 같은 브로커 로그인의 동시 세션에 한도 있음 — 9853 기동 시 9849 로그아웃. 사장님 재로그인 후 9847·9848·9853 3창 유지 확인. 브로커당 창 1개 원칙으로 설계 확정(APEX/Lucid/LifeUp = 서로 다른 로그인이므로 3창 구성 문제없음. 한 창에서 계좌 전환으로 N계좌 처리 — 5계좌 동시 진입/진출 기검증)
- 미해결(중요): 미진입 계좌(WYJ)에 대해 $5 이내 재진입 보정 규칙이 발동하지 않음 — 다계좌.psv에 미진입보정 로그 0건. 관제기 경유 경로가 동시진입→진출로 직행, 보정 단계 미호출로 추정. 수리 필요
- 30계좌 확장 규약: 9850~9852 점유 불가, 신규 브로커 창은 9854~
★★ 결정적 발견: Tradovate 네이티브 계좌 그룹(Account Group) — 0.1초 동시진입 해법 (2026-07-31)
사장님 요구 "30계좌 0.1초 내 동시 진입" → 순차 계좌전환(계좌당 1~3s, 30계좌=60~90s)으로는 불가. Tradovate 자체 그룹 트레이딩 기능이 정답.- 진입점: 계좌 드롭다운 →
li[data-group-trade-tour="manage-groups"] a("Manage Groups") → Configure Account Group 다이얼로그 - 구성: GROUP NAME 드롭다운 +
+(신규), Available ↔ Added Accounts 드래그앤드롭, 계좌별 Qty 지정, Save/Close - 화면 경고 2건(중요): ①"Large group trade orders might exceed API rate limits" ②"ATMS ARE DISABLED FOR GROUPS LARGER THAN 5" — 즉 그룹>5면 ATM(자동 손절/익절 브래킷) 사용 불가 → 청산·손절을 우리 도구가 직접 책임져야 함
- 아키텍처 결론: 그룹 선택 후 Buy Bid 1클릭 = 서버측 전 계좌 팬아웃(우리가 순차 클릭할 필요 없음). 브로커별 창 1개 + 창마다 그룹 1개 → 3창에 병렬 HTTP 동시 발사 = 30계좌 사실상 동시
- 재설계 필요: 다계좌동시.한선의 "계좌 순차 전환" 경로는 그룹 미지원 브로커용 폴백으로 강등, 주경로는 그룹 모드
★ 주문 타이밍 콘솔 (2026-07-31) — 병렬 발사로 창간 편차 0~1ms 달성
사장님 요구: "진입·진출 타이밍 중요. 별도창 주문도구로 3창 동시 진출입 + 로그·분석"주문콘솔.한선(:9869, 한선씨 TCP) +public/주문콘솔.html(크라우니디자인 다크 트레이딩 UI). 컴파일 경고 0, LOOPBACK, 상주 기동- 핵심 성과: 한 체계() 호출에서 3 curl 백그라운드
&+wait 병렬 발사 → 창간 발사 편차 평균 0ms·최대 1ms(순차 호출 수초 대비). 메인 독립 재검증: 편차샘플 7건, 진입지연 평균 11ms·최대 15ms, 발사요청=완료 21/21. 4상 판정 티(≤100ms) - API: /진입 /청산 /상태 /로그 /분석. 안전 2중: LIVE=1 없으면 드라이런 + LIVE=1이어도 실주문 경로 미배선(의도적 2차 안전막)
- UI: 3창 상태카드·큰 버튼 3개(롱/숏/전체청산)·연타방지·로그50·분석타일·드라이런 빨간 배지. 크라우니AI검증.sh 렌더 확인
- 로그 스키마
사이클ID|밀리초|이벤트|포트|계좌|방향|수량|가격|결과|지연ms|비고 - 미배선(정직): 계좌별/사이클 실현손익 = "NA" 표기(거짓 0 금지). 실주문 경로 배선은 사장님 승인 후
- 결합 설계: 그룹 트레이딩(창당 1클릭=계좌 전체) × 이 콘솔(3창 병렬) = 30계좌 사실상 동시
주문콘솔 크래시 수리 + 브라우저 URL 근본수리 (2026-08-01)
① 문자열 핸들 누수 exit43 (콘솔 사용 중 사망 → UI "발사 중…" 영구정지)
- 원인:
/로그·/분석이 요청마다 읽기(타이밍로그)+줄분리 → UI 2초 폴링(분당 90요청)에 핸들 폭증. 로그 실측432000/480000 90% → 상한 480000 초과 exit43. 등재된 함정(feedback_한선씨_폴링서버_문자열핸들_누수_exit43) 미적용이 원인 - 수리: 인메모리 링버퍼(200) + 정수 누적기 8종 → 읽기()·분리() 0회. 파일은 append(감사) 유지. 부팅 시 로그 꼬리 8000자로 카운터 복원. GC주기 200→50
- 검증: 에이전트 3000요청 STR경고 0·전건 성공. 메인 독립 재검증: 약 900요청 버스트 후 생존 200, RSS 8.9MB→5.9MB(감소), 신규 경고 0
② 크라우니AI 주소창에서 로컬 서버가 안 열리던 문제
- 진짜 원인은 URL 정규화가 아니라 별칭사전 오염:
127.0.0.1:9869 → http://127.0.0.1(포트 탈락) 자동등재 +caAliasHostFromURL이 승격 시 포트를 버려 지워도 재오염되는 구조 - 수리: 승격 코드 포트 보존 / 오염행 제거(에이전트 4행 + 메인 잔여 3행, 백업 /tmp/kps/별칭사전.bak.psv) / normalizeURLString에 로컬·사설IP → http:// 규칙 추가(도메인은 https 유지) /
crowny://주문콘솔앱 장착(앱목록·AI홈 타일·북마크 v23) - 한선씨 동반: URL정규화.한선 20/20, 주문콘솔연결.한선 13/13. 격리 인스턴스 실측 통과, 거래창 3개 무접촉
- 잔여: 한 단어 별칭(
주문콘솔) 경로는 별칭 VM 단계 기존 버그로 간헐 행 —크라우니주문콘솔/전체 URL 사용
데이터·전략 파이프라인 착수 (2026-08-01)
수집 아키텍처 실측·재설계 (사장님 지시: 0.01초·벡터형)
- 실측: HTTP /eval 왕복 1회=15ms(curl 프로세스 생성이 지배) vs 인페이지 innerText 정규식 1회=0.05ms(200회 10ms) → 300배 차이
- 결론: 0.1s는 현행 폴링 가능, 0.01s는 인페이지 레코더 필수. 브라우저 렌더 16ms 주기가 실질 하한 → 10ms 채택. 더 정밀은 WebSocket 후킹(페이지 리로드 필요)
- 신 구조: 페이지에 10ms setInterval 레코더 설치(멱등·5000 링버퍼·중복값 카운트만) → 한선씨는 1~2초마다 1회 드레인(HTTP 초당 1회 이하)
- 벡터형 저장(사장님 요구 — 절대값은 이중작업): 앵커
A|시각|기준가|기준스프레드|심볼(1분 1회) + 델타D|Δms|Δ틱|Δ스프레드틱|방향트릿(T/O/A). MNQ 1틱=25센트 단위. 합격기준=앵커+델타 복원이 원본과 완전일치(잔차 누적 드리프트 0) - 1차 수집기 실동작 확인(틱 76건 MNQU6). 발견 결함: 단위시험 데이터가 실봉 파일 오염·중복 타임스탬프·장마감 이상호가(스프레드 $17.75, 정상 $0.50) → 시험경로 분리·이상 플래그로 수리 지시
NT8 전략 이식 (UltTripleSyncPro_v2 → 전략트리플싱크.한선)
- 원본 = 3TF 동조(TF1 틱=트리거 / TF2 512틱 / TF3 1분, 스티키 필터) + 칼만 상태전이 + SMC 오더블록
- 진입식:
tf2_Long ∧ tf3_Long ∧ (칼만롱전환 ∨ 신규불OB)(숏 대칭, 롱 우선). 앞단 8게이트(수동청산·활성·일일한도·하드킬·거래시간·3초쿨다운·플랫·복구중) - 구현: 정수 전용(칼만 ×1000 밀리스케일, 절단나눗셈), STRICT 경고 0, 자체시험 21/21, 주문·파일쓰기 호출 0
- ★미확인(정직 표기): ①
UltKalmanV2는 DLL만 존재 — 재귀식 미확인, 1상태 상수위치 칼만으로 근사. Q값은 캘리브레이션 대상 ②PP 라인은 Pivot SuperTrend 관례 채택(근거 없음) ③원본 베어 분기 비대칭 1곳(오타 추정) → 대칭 정규화, 사장님 확인 필요 - "이식 초안"이지 완료 아님 — 원본 진입시각 vs 이식본 발화시각 일치율 측정 전까지
- 다음 요건: TF1/2/3 별도 봉 파일(최소 3개월)·NT8 UltKalmanV2 4플롯 CSV export(캘리브레이션)·슬라이딩 윈도우 러너(배열 1023칸 제약)