diff --git a/.cursor/rules/agent-shell-python-safety.mdc b/.cursor/rules/agent-shell-python-safety.mdc index 32cdae7..0db1353 100644 --- a/.cursor/rules/agent-shell-python-safety.mdc +++ b/.cursor/rules/agent-shell-python-safety.mdc @@ -43,3 +43,5 @@ print({m: len(a) for m, a in fn().items()} if callable(fn) else "no _scalp_grids - “한 번에 여러 전략 import + 조건부 트릭”보다 **짧은 확정 코드 1회**. - 실패 로그를 사용자에게 길게 반복 붙여 넣지 말 것. 고치고 결과만 보고. +- ImportError/AttributeError 시 비슷한 심볼명 추측 재실행 금지 → Grep 1회 (`invalidate_merged_env_cache` 등). +- 상세 절대규칙: `.cursorrules` CRITICAL §4. diff --git a/.cursor/rules/db-adhoc-query-safety.mdc b/.cursor/rules/db-adhoc-query-safety.mdc index ed9e86b..cca0192 100644 --- a/.cursor/rules/db-adhoc-query-safety.mdc +++ b/.cursor/rules/db-adhoc-query-safety.mdc @@ -48,3 +48,9 @@ rows = db.conn.execute( ("20260712%",), ).fetchall() ``` + +## 5. env 신규 키 — “patch했다” ≠ DB에 남음 (`.cursorrules` CRITICAL §4-3) + +- `MOMENTUM_*` 등은 `config_momentum` 키 목록·컬럼에 없으면 `apply_env_patch` 후에도 `get_env_from_db`가 빈값일 수 있음. +- 신규 키: ENV_CONFIG_KEYS(또는 전략 키 튜플) + code default + apply 맵 + 저장 후 **재조회 검증**. +- 캐시 무효: `invalidate_merged_env_cache()` (이름 추측 금지). diff --git a/.cursor/rules/domestic-port-ui-parity.mdc b/.cursor/rules/domestic-port-ui-parity.mdc new file mode 100644 index 0000000..a4727fa --- /dev/null +++ b/.cursor/rules/domestic-port-ui-parity.mdc @@ -0,0 +1,81 @@ +--- +description: 해외=국장 UI 최대한 동일. 꼭 다를 때만 선보고·승인. 이식 시 summary·저장·브라우저 검증. +alwaysApply: true +--- + +# 국내 이식·해외 UI 정합 (절대) + +## A. 해외 전략 UI = 국장과 최대한 동일 (선보고) + +- **기본**: 해외(`US_*`) 웹·Optuna·결과카드·버튼·표(Top5「보기」/폼/적용)·가상거래·차트는 **대응 국장 탭과 같은 UX**. +- “해외라서 단축·생략” **임의 판단 금지.** +- **꼭 다르게 해야 할 때만** (USD 표시, HTS 없음, 해외 WS 세션, 종목핀 테이블 등): + 1. **무엇을·왜** 다르게 하는지 **구현 전 짧게 보고** + 2. **사용자 승인 후** 구현 + 3. UI에 차이(「전역/종목」「USD」) **문구로 명시** +- 승인 없이 Optuna Top5·보기·후보선택·PF/수익률·설정저장 흐름을 빼거나 다르게 만들면 **위반**. +- 엔진도 국장과 동일이 기본(T−1/T·freeze). 체결가·호가 등 실매 차이도 **선보고**. + +--- + +국내 탭/API를 “그대로 가져왔다”는 **복사만으로는 완료가 아니다.** +해외·신규 탭에서 아래를 **브라우저로 확인**하기 전에는 “정합 OK / 버그 없음”을 **단정하지 마라.** + +## 0. 정신 (이 대화에서 실제로 난 사고) + +- 원인 미확인 상태로 **엔진·cfg 불일치**로 넘기지 마라. + UI가 Optuna 폼을 **탭 재클릭/종목 리로드로 DB 핀으로 덮어쓴** 경우처럼, **표시·적용 경로**를 먼저 검증하라. +- “국내랑 같은 코드” ≠ “국내랑 같은 화면 숫자.” + **summary 키·저장 테이블·버튼 의미**가 하나라도 빠지면 사용자에게는 버그다. +- Optuna「보기」없이 1위 단축만 두는 것도 **국장 UI와 다름** → 선보고 없이 하면 위반. + +## 1. 웹 백테 summary ↔ 렌더 키 (필수 체크리스트) + +국내 `summarize_trades` / 웹 렌더는 키가 다를 수 있다. 이식 시 **응답 JSON과 DOM id를 대조**하라. + +| 화면 | 흔한 버그 | 올바른 소스 | +|------|-----------|-------------| +| Profit Factor | `stats.profit_factor` 없음 → **0** | `stats["pf"]` → summary `profit_factor` | +| 총 수익률(운용한도) | summary에 미포함 → **0%** | `stats["bot_pct"]` | +| 일평균 수익률 | summary에 미포함 → **0%** | `stats["daily_avg_pct"]` | +| 누적/일별/사유 차트 | `equity`/`daily`/`reasons` 미포함 → 빈 차트 | 국내 모멘텀/스캘프 웹과 **동일 필드** | +| 피크 누적 | context 미표시 | `peak_cum_pnl` / `peak_cum_at` | + +**완료 전:** 백테 1회 후 PF·bot%·일평균%·PnL·거래수가 **0이 아닌 기대값**(또는 의도적 0)인지 확인. +`curl 200` / “거래만 나옴”만으로는 **미완료**. + +## 2. 통화·절삭 (해외 USD) + +- USD PnL·MDD·누적은 **`int()` 절삭 금지.** 소수(센트) 유지. +- `summarize_trades`가 `total_pnl`을 int로 돌려도, **해외 응답의 표시용 total_pnl은 거래 합산 float**을 쓸 것. +- 운용한도 분모(`total_budget_*`) 단위(USD vs KRW)를 라벨·bot_pct 계산과 **혼동하지 말 것.** + +## 3. 저장 대상 분리 (버튼·테이블·문구) + +| UI | 저장처 | 금지 | +|----|--------|------| +| **전역 설정 저장** | `config_us_momentum` (`US_MOMENTUM_*`) + env 스냅샷 | 종목행 테이블에 쓰는 척 | +| **종목행 적용 / 선택종목 저장** | `us_momentum_stock_config` | 전역 `US_MOMENTUM_*`만 바꾸고 종목핀 됐다고 말하기 | +| Optuna 탭(전역) | 전역만 | 종목 cfg에 몰래 쓰기 | +| 해외탭 종목 Optuna | 종목 cfg만 | 전역에 적용했다고 말하기 | + +- 버튼 문구에 **「전역」/「종목」**을 명시하라. (`봇에 설정저장`처럼 모호한 이름 금지 — 이식·신규 시) +- help 문구·tooltip에 **테이블명**을 적어라. + +## 4. 폼 · Optuna · 종목핀 · 백테 소스 오브 트루스 + +- **웹 백테 = 폼 값.** DB 종목핀을 몰래 덮어쓰지 마라 (`use_stock_cfg` 명시 시에만). +- **폼에 넣기 / 종목행 적용**은 사용자가 고른 후보(보기→선택) 또는 명시된 단축(학습1위)과 **같은 소스**. +- Optuna UI는 국장처럼 **Top5 + 보기 + 골라 적용**이 기본. 단축만 두고 보기 생략 = §A 위반. +- **폼에 넣기 직후 탭 click / 종목 select**가 폼을 DB로 덮으면 **버그**. 이미 활성 탭이면 재클릭 금지. +- upsert 시 Optuna가 안 준 컬럼을 **NULL로 지우지 마라**. + +## 5. “고쳤다/같다” 보고 전 최소 검증 + +1. 해당 탭 **하드 새로고침** (`192.168.0.149:5050` — localhost 금지) +2. **국장 대응 탭과 UI 목록 대조** (빠진 버튼·표·카드가 있으면 미완료 또는 선보고 차이 목록) +3. Optuna → 보기/선택 → 폼/종목행 → 백테 숫자가 **한 세트**로 일치 +4. summary: `profit_factor`, `bot_pct`, `daily_avg_pct` + equity/daily/reasons +5. 콘솔 `Uncaught`/`ReferenceError` 없음 + +하나라도 미확인이면 **안전하다/국내와 동일하다**고 말하지 마라. 잔여 위험을 명시하라. diff --git a/.cursor/rules/no-ohlc-fallback-parity.mdc b/.cursor/rules/no-ohlc-fallback-parity.mdc new file mode 100644 index 0000000..24b0167 --- /dev/null +++ b/.cursor/rules/no-ohlc-fallback-parity.mdc @@ -0,0 +1,45 @@ +--- +description: 백테·Optuna·파람서치에서 OHLC 폴백으로 체결·고점·PnL 숫자 변조 절대 금지 +alwaysApply: true +--- + +# OHLC 폴백 숫자 변조 절대 금지 (실매↔백테 정합) + +## 한 줄 + +틱 청산/틱 진입 ON 이면 **봉 OHLC(high/low)로 체결가·max_price·손익을 채우거나 보정하지 않는다.** +체크박스·env `*_TICK_FALLBACK_OHLC=true` 여도 **엔진은 무시**한다. Optuna/파람은 **강제 False**. + +## 왜 + +실매는 WS 틱만으로 고점·청산을 본다. +백테가 틱 전에 3분봉 `high`를 `max_price`에 넣거나, 틱 없을 때 OHLC intrabar로 래칫/손절을 내면 **미래 고점 look-ahead·유령 청산**으로 실매와 다른 엔진이 된다. + +## 절대 금지 + +- 틱 청산 루프에서 `pos["max_price"] = max(..., bar.high / holding_peak)` **선반영** +- `tick_fallback_ohlc or is_eod` 로 EOD에 OHLC 폴백 **강제** +- Optuna / Grid 파람 / 웹백테가 OHLC 폴백 ON 으로 **랭킹·PnL 변조** +- “틱 없으면 OHLC로라도 거래 수 맞추기” + +## 허용 + +- 틱 청산 **OFF** 인 레거시 순수 OHLC 모드 (폴백이 아님 — 봉이 본체) +- EOD: 틱 미청산 시 **직전가/종가로 장마감 플랫만** (봉 고저로 래칫 재계산 금지) + +## 해외 모멘텀 — 국장과 “다르게 설계”한 게 아님 (오해 금지) + +- **실매**: 국장·해외 모두 WS 현재가(틱 캐시)로 청산 판정 (`check_sell_signal_momentum_live`). DB `ws_ticks` 테이블을 장중 리플레이하지 않음. +- **백테/Optuna**: 동일 `momentum_backtest_*` 경로. `market=US` 이면 **`ws_ticks_us`** (국장은 `ws_ticks`). 틱 ON 기본 · OHLC로 고점/체결 변조 금지(본 규칙). +- “해외=순수 분봉·틱청산 해당 없음”은 **잘못된 메모**다. 틱+OHLC 혼입 버그 점검에서 해외를 빼 말하면 **안 된다** — 국장과 같은 정합 규칙을 적용한다. + +## 구현 앵커 + +- `resolve_backtest_sell`: `use_tick_exit` → OHLC 폴백 무시 +- `tail_engine` Phase1: 틱 ON 시 봉 high 로 max 선반영 금지 +- Optuna/파람: `backtest_tick_fallback_ohlc = False` 강제 +- UI: `*_FALLBACK_OHLC` / 꼬리 체크 = **빨간 음영** (위험 표시) + +## 보고 + +고치기 전 “폴백으로 맞추자”고 제안하지 말 것. 잔여 갭은 **틱 공백·체결 슬리피지·미청산 보유**로 분류. diff --git a/.cursorrules b/.cursorrules index 8b4610b..5a0e296 100644 --- a/.cursorrules +++ b/.cursorrules @@ -83,7 +83,12 @@ - 21. 백테 웹페이지 탭 ui 수정시 다른 전략 탭도 모두 수정되어야 한다. - 가상거래내역, 실거래내역 ui 는 모두 동일해야한다. - 22. **봉 정합 다음 할 일**은 `docs/정합성.md` §8 (깨끗한 장일 검증 → 웹백테 1회 → §5 체크). 새 ±1 보정·freeze OFF로 “해결”하지 말 것. -# [CRITICAL SYSTEM DIRECTIVES: 절대 엄수 사항 - 위반 시 작동 중지] +- 23. **키움/KIS 인프라** — CRITICAL §3 (유량≠빈응답, approval 공유, REST/키발급 한도 준수, 시세실키≠매매모의, REST 웜업 1차→실패시만 증량). +- 24. **에이전트 테스트·adhoc 뻘짓 금지** — CRITICAL §4 (스키마 먼저, import/캐시 실명, env 키=config 테이블 등록, 실패 1회만). +- 25. **의심·불확실 시 근본원인 먼저** — CRITICAL §5 (MCP·`docs/`·공식 API 문서·기존 SafeRequest/세마포어부터. 추측 패치·한도 무시 재시도 금지). +- 26. **국내→해외/탭 이식 — 복붙 ≠ 완료** — CRITICAL §6 (summary 키·전역/종목 저장·폼 덮어쓰기·브라우저 검증). 상세: `.cursor/rules/domestic-port-ui-parity.mdc` +- 27. **해외 전략 UI = 국장과 최대한 동일** — CRITICAL §6-1. 꼭 다르게 해야 하면 **구현 전 선보고·승인**. 임의로 생략·단축 금지. +# [CRITICAL SYSTEM DIRECTIVES: 절대 엄수 사항 - 위반 시 작업 중지] ## 0. 🚨 봉 정합·진입 정렬 — 절대 금지 (위반 시 작업 중지) - **신호 = T−1 확정봉, 진입 = T (시가/첫 틱).** `live_backtest_align=True` 잠금. @@ -92,6 +97,9 @@ - **`WS_CANDLE_FREEZE_ON_CONFIRM` 끄기(false) 절대 금지.** 사용자 **명시 승인** 없이 DB/기본값을 false·레거시 덮어쓰기로 되돌리지 마라. - **`*_SKIP_HTS_SCAN_DUPES` 를 true로 바꾸기 절대 금지.** (TAIL/MOMENTUM/BREAKOUT/SCALP 포함) 사용자가 명시하기 전까지 **false / 0 유지**. “HTS와 맞추려고” true로 바꾸지 마라. (상세: 항목 16 · `hts-condition-grids.mdc`) +- **OHLC 폴백으로 숫자 변조 절대 금지.** 틱 청산/진입 ON 이면 봉 OHLC(high/low)로 체결·`max_price`·PnL을 채우지 마라. + EOD에 OHLC 폴백 강제·틱 전 봉 high 선반영 = 실매와 다른 엔진. Optuna/파람/웹백테는 `*_TICK_FALLBACK_OHLC` **강제 OFF**. + UI에 남은 폴백 체크는 **빨간 위험 표시**일 뿐, 켜서 정합 “맞추기” 금지. (상세: `no-ohlc-fallback-parity.mdc`) ## 1. 🚨 하드코딩 절대 금지 (NO HARDCODING) - 어떠한 경우에도 코드 내부에 임계값, 비율, 점수, 시간 등의 수치를 직접 하드코딩하지 마라. @@ -103,6 +111,97 @@ - 사용자가 "A를 매수 체크 로직으로 옮겨"라고 지시하면, 단순히 A만 옮기지 마라. 사용자의 의도는 **"스캔(Scan) 단계에서는 조건 필터링을 최소화하여 후보를 DB에 최대한 많이 올리고, 실제 매수 직전(Trigger)에 모든 엄격한 필터(보조지표, 호가, 수급 등)를 한 번에 검사하라"**는 뜻이다. - 무거운 연산(API 추가 호출, 분봉 분석 등)은 절대 5분 주기 스캔 함수에 넣지 말고, 매수 타점 체크 함수에 넣어라. +## 3. 🚨 키움/KIS 인프라 — 유량·approval·REST/키발급 한도 (위반 시 폭주/키 무효) +### 3-0. REST·키 발급 한도 — 서버·계정 부하 금지 (필수) +- 작성·수정하는 코드·진단·스모크·adhoc는 **키움/한투 REST 초당·일일 유량, WS 구독 한도, OAuth·approval·접근토큰 발급 횟수**를 어기지 않게 설계한다. +- REST는 가능하면 **WS/캐시/DB 재사용**. 루프·재큐·벌크·Optuna prepare에서 한도 무시 연타 금지. `SafeRequest`·기존 세마포어·sleep·쿨다운을 **우회하는 새 경로**를 만들지 마라. +- **토큰/approval을 “안 되면 다시 발급”으로 때우지 마라.** 공유 캐시·만료 전 재사용·응급 하드캡(§3-2)을 지킨다. 진단 스크립트도 실매와 동일하게 한도를 존중한다. +- 한도·에러코드·도메인(실전/모의 REST·WS URL)이 헷갈리면 **추측하지 말고** §5(문서·MCP)로 확인한 뒤 구현한다. (`docs/계정.md` 등) + +### 3-1. API 에러 ≠ 데이터 없음 +- 키움 `return_code=5`(유량/한도) 등을 “빈 봉·조회 실패”로 취급해 재큐·재시도를 무한히 돌리지 마라. +- 유량/429/한도는 **백오프·세마포어·실패 상한 후 재큐 정지**가 필수. “고쳤다” 보고 전 API 폭주 여부를 로그로 확인하라. + +### 3-2. approval 키는 단일 공유 +- KIS Websocket `approval_key`는 국내·해외·검증 경로가 **같은 KISApprovalManager(공유 캐시)** 를 쓴다. +- 모듈/재시작마다 REST로 approval을 새로 받아 타 연결을 무효화하는 코드 금지. +- 응급 재발급은 **하드캡(기본 6h 1회)** 없이 돌리지 마라. + +### 3-3. 시세 실키 vs 매매 모의 +- 진단·스모크가 `KIS_MOCK`만 보고 “전체가 모의”라고 단정하지 마라. +- 시세(키움/한투 WS) 실키 강제와 매매 모의는 분리해서 보고·검증하라. + +### 3-4. 백테 REST 웜업 — 평소 최소, 실패 시에만 증량 +- 전일 장시작 시가 보강 REST는 **짧은 1차(기본 700)** 만 기본으로 한다. +- **전일(직전 세션) 장시작이 안 잡힐 때만** 긴 2차(기본 1500)를 **해당 종목 1회** 재시도한다. 전 종목·전 trial에 장봉을 상시 올리지 마라. +- Optuna/그리드 trial 경로에서 prepare 이후 **캐시 hit·영구실패면 INFO 로그·REST 재호출 금지**. + +### 3-5. Optuna 새 mode / apply 누락 +- Grid에 없는 mode(`tpe` 등)를 추가하면 `grids[mode]` **재조회·가정**을 전부 제거하고, 실행 1회로 KeyError 없는지 확인하라. +- `--apply-best`/JSON 적용 시 Optuna가 탐색한 축(`setup_*` 등)이 apply 패치·`config_*` 키 목록에 **빠지지 않았는지** 확인. 신규 env 키는 code default + DB 컬럼/키 등록을 한 세트로 한다. + +## 4. 🚨 에이전트 테스트·adhoc·셸 — 뻘짓·토큰 낭비 금지 +대화에서 실제로 낭비된 패턴을 **반복하지 마라.** 상세: `.cursor/rules/db-adhoc-query-safety.mdc`, `agent-shell-python-safety.mdc`. + +### 4-1. DB — 추측 SELECT/컬럼 금지 +- SQL 전 **반드시** `SHOW COLUMNS FROM ` (또는 DESCRIBE). “있을 것 같다”로 `strategy_id` 등 SELECT 금지. +- 대표: `target_candidates`에 **strategy_id 없음**. DDL/문서와 실DB가 다를 수 있음 → 스키마가 진실. +- PyMySQL: SQL 문자열 `%`는 포맷 → `LIKE '20260712%'` 금지. `LIKE %s` + `('20260712%',)` 또는 `%%`. +- `Unknown column` / `not enough arguments for format string` 나면 **원인 분류 후 1회만** 재실행. 날짜·strategy만 바꿔 같은 쿼리 반복 금지. + +### 4-2. Python 셸 — 문법·심볼 확인 후 실행 +- `from X import Y if cond else None` 등 **가짜 문법** heredoc 금지. 실행 전 문법 확인 또는 `py_compile` 1회. +- 심볼/함수명은 Grep·`hasattr`·`inspect.signature`로 확인 후 import. 시그니처 모르고 `()` 호출 금지. +- ImportError 나면 비슷한 이름(`invalidate_env_cache` vs `invalidate_merged_env_cache`, `prev_kr_trading_day` 등)을 **추측 재실행하지 말고** Grep 1회로 실명 확인. + +### 4-3. env/DB 저장 — “넣었다” ≠ “읽힌다” +- `MOMENTUM_*`/`TAIL_*`/`SCALP_*` 등은 `classify_config_key` → **해당 `config_*` 테이블**. `ENV_CONFIG_KEYS`·전략 키 튜플·컬럼 마이그레이션에 없으면 `apply_env_patch`해도 **저장·조회가 비거나 overflow만 돌고 get_env가 빈값**. +- 신규 키: (1) code `get_env_*` 기본값 (2) `database.py` ENV 키 목록 (3) 필요 시 `*_env_keys.py` (4) apply 패치 맵 — **네 군데 한 세트**. 저장 후 `get_env_from_db`로 **재조회 검증** 필수. +- 캐시 무효화는 실명 `invalidate_merged_env_cache()` (존재하지 않는 invalidate_* 추측 금지). + +### 4-4. 백테·Optuna·브라우저 운영 낭비 +- 주말/휴장 `end=오늘`로 Optuna/백테 돌리지 말 것 → 최근 거래일. +- categorical 그리드 변경 후 **같은 study-name 재사용 금지**. +- 긴 잡: nohup+로그 경로만. `for+sleep` 폴링 금지. +- 백테 웹 브라우저 검증 URL은 **`http://192.168.0.149:5050/` 만** (`127.0.0.1`/`localhost` 금지). +- 실패 로그를 사용자에게 길게 반복 붙여 넣지 말 것. 고치고 결과만 보고. + +## 5. 🚨 의심·불확실 → 근본원인 먼저 (땜빵·추측 패치 금지) +항목 19와 동일 정신. **코드를 고치기 전에** 원인을 문서로 확정한다. + +### 5-1. 조사 순서 (필수) +1. **증상 로그·에러코드** (유량=5, 429, invalid approval, Unknown column 등)를 있는 그대로 분류. +2. **`docs/`** (`정합성.md`, `계정.md`, 전략 QA 등) + 레포 내 기존 헬퍼(`SafeRequest`, `KISApprovalManager`, 세마포어) 검색. +3. **MCP** (브라우저·관련 서버) / 공식 OpenAPI·키움 문서로 한도·엔드포인트·실전·모의 도메인 확인. +4. 근본원인·설계를 **짧게 보고** → 승인 후 수정 (핵심 매매/인프라는 선보고). + +### 5-2. 금지 +- “일단 재시도·재발급·봉수 늘리기·±1 보정”으로 증상만 가리기. +- 한도·키 정책을 **문서 확인 없이** 추측 구현. +- 원인 미확정 상태에서 “고쳤다/안전하다” 단정. + +## 6. 🚨 국내→해외/탭 이식 — 복붙 ≠ 완료 (위반 시 허위 보고) +국내 탭/API를 “그대로 가져왔다”는 **복사만으로는 완료가 아니다.** +UI·summary·저장 테이블을 **브라우저로 확인**하기 전에는 “정합 OK / 버그 없음”을 **단정하지 마라.** +(상세: `.cursor/rules/domestic-port-ui-parity.mdc`) + +- **summary 키**: `summarize_trades` 의 `pf` → 응답 `profit_factor`. `bot_pct`·`daily_avg_pct` 필수. `equity`/`daily`/`reasons` 누락 금지 (PF·수익률 0% 버그 재발 금지). +- **해외 USD**: PnL·MDD·누적 **`int()` 절삭 금지.** +- **저장 분리**: **전역 설정 저장** = `config_us_momentum`(`US_MOMENTUM_*`) ≠ **종목행** `us_momentum_stock_config`. 버튼에 「전역」「종목」명시. +- **웹백테 = 폼.** Optuna 폼채우기/종목적용 후 탭·종목 리로드로 폼을 DB 핀으로 **덮어쓰기 금지.** 검증 = 하드새로고침 → 종목선택 → 폼=Optuna → 백테. +- **원인 미확인 시** 엔진/cfg 탓 단정 금지. UI 덮어쓰기·키 누락을 먼저 확인. +- **`curl`/거래수만 ≠ 완료.** PF·수익률·버튼·테이블까지 브라우저 확인 후 보고. + +### 6-1. 🚨 해외 전략 UI = 국장과 최대한 동일 (선보고 없이 다르게 만들지 말 것) +- **기본**: 해외(US_*) 웹·Optuna·결과카드·버튼·표(Top5「보기」/폼/적용)·가상거래·차트는 **대응 국장 탭과 같은 UX**로 맞춘다. + “해외라서 단축·생략해도 된다”고 **임의 판단 금지.** +- **꼭 다르게 해야 할 때만** (예: USD 표시, HTS 없음, 해외 WS 세션, 종목핀 테이블): + 1) **무엇을·왜** 국장과 다르게 하는지 **먼저 짧게 보고** + 2) **사용자 승인 후** 구현 + 3) UI에 「전역/종목」「USD」 등 차이를 **문구로 명시** +- 승인 없이 Optuna Top5·보기·후보선택·PF/수익률 카드·설정저장 흐름 등을 빼거나 다르게 만들면 **규칙 위반**. +- 엔진 정합(T−1/T·freeze)도 국장과 동일이 기본. 체결가·호가 등 실매 차이도 **선보고** (이미 CRITICAL §0·선수정 원칙과 동일). + OpenAPI Github 샘플코드 신규 업로드 안내 안녕하세요, KIS Developers팀입니다. diff --git a/__pycache__/database.cpython-312.pyc b/__pycache__/database.cpython-312.pyc index c9c5f07..8eac3e5 100644 Binary files a/__pycache__/database.cpython-312.pyc and b/__pycache__/database.cpython-312.pyc differ diff --git a/_test_ls_condition_realtime.py b/_test_ls_condition_realtime.py new file mode 100644 index 0000000..3f4cee5 --- /dev/null +++ b/_test_ls_condition_realtime.py @@ -0,0 +1,659 @@ +#!/usr/bin/env python3 +""" +_test_ls_condition_realtime.py — LS증권 서버저장조건 실시간검색 단독 테스트 +======================================================================= + +[목적] +실매/키움 조건검색과 무관하게, LS OpenAPI 로 + 1) 서버저장조건 목록 (t1866) + 2) 1회 스냅샷 검색 (t1859) + 3) 실시간 등록 (t1860) → WS AFR 편입/이탈 push +가 되는지 확인한다. (유니버스 소스 LS 전환의 전제조건) + +[공식 흐름] + REST POST /stock/item-search + t1866 서버저장조건 리스트조회 → query_index / query_name + t1859 서버저장조건 조건검색 → 현재 매칭 종목 스냅샷 + t1860 서버저장조건 실시간검색 → sFlag=E 등록 / D 중지, sAlertNum + WS wss://openapi.ls-sec.co.kr:9443/websocket + AFR API사용자조건검색실시간 tr_key = t1860OutBlock.sAlertNum + gsJobFlag: N=진입, R=재진입, O=이탈 + +[사용] + # 목록만 + python3 _test_ls_condition_realtime.py --user-id --list-only + + # 이름 매칭 + 스냅샷 + 실시간 수신 (기본 이름=momentum) + python3 _test_ls_condition_realtime.py --user-id --name momentum + + # query_index 직접 지정 + python3 _test_ls_condition_realtime.py --user-id --query-index + + # user-id 생략 시 DB env_config.LS_USER_ID (없으면 env LS_USER_ID) + python3 _test_ls_condition_realtime.py --list-only + python3 _test_ls_condition_realtime.py --name momentum + +[주의] +- 읽기·실시간 수신만. 주문/DB 저장 없음. +- 종목검색 TR 초당 1회 → 호출 사이 sleep. +- 주말·장외에는 AFR push 가 거의 없고, t1859 스냅샷·t1860 등록 ACK 로 성공 판정. +""" +from __future__ import annotations + +import argparse +import json +import logging +import os +import sys +import threading +import time +from datetime import datetime +from pathlib import Path +from typing import Any, Optional + +import requests + +SCRIPT_DIR = Path(__file__).resolve().parent +sys.path.insert(0, str(SCRIPT_DIR)) + +LS_REST_BASE = "https://openapi.ls-sec.co.kr:8080" +LS_WS_REAL = "wss://openapi.ls-sec.co.kr:9443/websocket" +LS_WS_MOCK = "wss://openapi.ls-sec.co.kr:29443/websocket" +ITEM_SEARCH_URL = f"{LS_REST_BASE}/stock/item-search" + +# 종목검색 TR 초당 1회 (스펙 transactionPerSec) +_TR_GAP_SEC = 1.1 + +AFR_JOB_KO = {"N": "진입", "R": "재진입", "O": "이탈"} + + +def _setup_logger(log_path: Path) -> logging.Logger: + logger = logging.getLogger("ls_cond_rt") + logger.setLevel(logging.INFO) + logger.handlers.clear() + fmt = logging.Formatter("[%(asctime)s] %(message)s", datefmt="%H:%M:%S") + sh = logging.StreamHandler(sys.stdout) + sh.setFormatter(fmt) + logger.addHandler(sh) + log_path.parent.mkdir(parents=True, exist_ok=True) + fh = logging.FileHandler(log_path, encoding="utf-8") + fh.setFormatter(fmt) + logger.addHandler(fh) + return logger + + +def load_ls_creds(*, use_mock: bool) -> tuple[str, str]: + """DB env_config 에서 LS AppKey/Secret 로드 (test_ls_ws 와 동일).""" + from database import TradeDB + + db = TradeDB() + try: + row = db.conn.execute( + "SELECT LS_APP_KEY_REAL, LS_APP_SECRET_REAL, " + "LS_APP_KEY_MOCK, LS_APP_SECRET_MOCK " + "FROM env_config ORDER BY id DESC LIMIT 1" + ).fetchone() + if not row: + return "", "" + r = dict(row) + if use_mock: + key = (r.get("LS_APP_KEY_MOCK") or "").strip() + secret = (r.get("LS_APP_SECRET_MOCK") or "").strip() + else: + key = (r.get("LS_APP_KEY_REAL") or "").strip() + secret = (r.get("LS_APP_SECRET_REAL") or "").strip() + return key, secret + finally: + db.close() + + +def fetch_access_token(app_key: str, app_secret: str, timeout: float = 15.0) -> str: + url = f"{LS_REST_BASE}/oauth2/token" + resp = requests.post( + url, + headers={"Content-Type": "application/x-www-form-urlencoded"}, + data={ + "grant_type": "client_credentials", + "appkey": app_key, + "appsecretkey": app_secret, + "scope": "oob", + }, + timeout=timeout, + ) + if resp.status_code >= 400: + raise RuntimeError(f"token HTTP {resp.status_code}: {resp.text[:400]}") + body = resp.json() + token = body.get("access_token") or body.get("accesstoken") + if not token: + raise RuntimeError(f"no access_token: {body}") + return str(token) + + +def _rest_headers(token: str, tr_cd: str, *, tr_cont: str = "N", tr_cont_key: str = "") -> dict: + return { + "content-type": "application/json; charset=UTF-8", + "authorization": f"Bearer {token}", + "tr_cd": tr_cd, + "tr_cont": tr_cont, + "tr_cont_key": tr_cont_key or "", + "mac_address": "", + } + + +def call_item_search( + token: str, + tr_cd: str, + body: dict, + *, + logger: logging.Logger, + timeout: float = 20.0, +) -> tuple[dict, dict]: + """POST /stock/item-search → (json body, response headers dict).""" + headers = _rest_headers(token, tr_cd) + logger.info("REST %s body=%s", tr_cd, json.dumps(body, ensure_ascii=False)[:300]) + resp = requests.post( + ITEM_SEARCH_URL, + headers=headers, + data=json.dumps(body), + timeout=timeout, + ) + text = resp.text + try: + data = resp.json() if text else {} + except Exception: + data = {"_raw": text[:800]} + rh = {k.lower(): v for k, v in resp.headers.items()} + logger.info( + "REST %s HTTP=%s rsp_cd=%s rsp_msg=%s", + tr_cd, + resp.status_code, + data.get("rsp_cd"), + data.get("rsp_msg"), + ) + if resp.status_code >= 400: + logger.error("REST %s fail: %s", tr_cd, text[:500]) + return data, rh + + +def t1866_list_conditions( + token: str, + user_id: str, + *, + logger: logging.Logger, + gb: str = "0", +) -> list[dict[str, str]]: + """서버저장조건 전체 목록 (연속조회 포함).""" + out: list[dict[str, str]] = [] + cont = "" + cont_key = "" + page = 0 + while True: + page += 1 + if page > 1: + time.sleep(_TR_GAP_SEC) + body = { + "t1866InBlock": { + "user_id": user_id, + "gb": gb, + "group_name": "", + "cont": cont or "", + "cont_key": cont_key or "", + } + } + # 연속은 header tr_cont 도 맞춤 + headers = _rest_headers( + token, + "t1866", + tr_cont="Y" if cont in ("1", "Y", "y") else "N", + tr_cont_key=cont_key or "", + ) + logger.info("REST t1866 page=%d cont=%r", page, cont) + resp = requests.post( + ITEM_SEARCH_URL, + headers=headers, + data=json.dumps(body), + timeout=20.0, + ) + data = resp.json() if resp.text else {} + logger.info( + "REST t1866 HTTP=%s rsp_cd=%s rsp_msg=%s raw_head=%s", + resp.status_code, + data.get("rsp_cd"), + data.get("rsp_msg"), + json.dumps(data, ensure_ascii=False)[:400], + ) + rows = data.get("t1866OutBlock1") or [] + if isinstance(rows, dict): + rows = [rows] + for r in rows: + if not isinstance(r, dict): + continue + out.append( + { + "query_index": str(r.get("query_index") or "").strip(), + "group_name": str(r.get("group_name") or "").strip(), + "query_name": str(r.get("query_name") or "").strip(), + } + ) + ob = data.get("t1866OutBlock") or {} + next_cont = str(ob.get("cont") or "").strip() + next_key = str(ob.get("contkey") or ob.get("cont_key") or "").strip() + # header 연속 폴백 + rh = {k.lower(): v for k, v in resp.headers.items()} + if not next_cont: + next_cont = str(rh.get("tr_cont") or "").strip() + if not next_key: + next_key = str(rh.get("tr_cont_key") or "").strip() + if next_cont in ("1", "Y", "y") and next_key: + cont, cont_key = next_cont, next_key + continue + break + return out + + +def t1859_snapshot( + token: str, + query_index: str, + *, + logger: logging.Logger, +) -> list[dict[str, Any]]: + """서버저장조건 1회 검색 스냅샷.""" + time.sleep(_TR_GAP_SEC) + data, _ = call_item_search( + token, + "t1859", + {"t1859InBlock": {"query_index": query_index}}, + logger=logger, + ) + ob = data.get("t1859OutBlock") or {} + logger.info( + "t1859 result_count=%s result_time=%s text=%s", + ob.get("result_count"), + ob.get("result_time"), + (ob.get("text") or "")[:80], + ) + rows = data.get("t1859OutBlock1") or [] + if isinstance(rows, dict): + rows = [rows] + return [r for r in rows if isinstance(r, dict)] + + +def t1860_realtime( + token: str, + query_index: str, + *, + flag: str, + alert_num: str = "", + logger: logging.Logger, +) -> dict[str, Any]: + """실시간 검색 등록(E) / 중지(D).""" + time.sleep(_TR_GAP_SEC) + data, _ = call_item_search( + token, + "t1860", + { + "t1860InBlock": { + "sSysUserFlag": "U", + "sFlag": flag, + "sAlertNum": alert_num or "", + "query_index": query_index, + } + }, + logger=logger, + ) + return data.get("t1860OutBlock") or {} + + +class AfrWatcher: + """LS WS 로 AFR(조건검색 실시간) 수신.""" + + def __init__(self, token: str, ws_url: str, logger: logging.Logger): + import websocket # websocket-client + + self._websocket = websocket + self.token = token + self.ws_url = ws_url + self.logger = logger + self._ws: Any = None + self._thread: Optional[threading.Thread] = None + self.opened = threading.Event() + self._stop = threading.Event() + self.events: list[dict[str, Any]] = [] + self.msg_count = 0 + self.errors: list[str] = [] + self._lock = threading.Lock() + + def start(self) -> None: + self._ws = self._websocket.WebSocketApp( + self.ws_url, + on_open=self._on_open, + on_message=self._on_message, + on_error=self._on_error, + on_close=self._on_close, + ) + self._thread = threading.Thread(target=self._run, name="ls-afr", daemon=True) + self._thread.start() + + def _run(self) -> None: + assert self._ws is not None + self._ws.run_forever(ping_interval=20, ping_timeout=10) + + def wait_open(self, timeout: float = 15.0) -> bool: + return self.opened.wait(timeout=timeout) + + def reg_afr(self, alert_num: str, *, tr_type: str = "3") -> None: + """tr_type 3=등록, 4=해제. tr_key = t1860 sAlertNum.""" + payload = { + "header": {"token": self.token, "tr_type": tr_type}, + "body": {"tr_cd": "AFR", "tr_key": alert_num}, + } + if self._ws is None: + raise RuntimeError("WS not started") + self._ws.send(json.dumps(payload, ensure_ascii=False)) + self.logger.info( + "AFR %s tr_key=%r", + "REG" if tr_type == "3" else "UNREG", + alert_num, + ) + + def stop(self) -> None: + self._stop.set() + if self._ws is not None: + try: + self._ws.close() + except Exception: + pass + + def _on_open(self, _ws: Any) -> None: + self.logger.info("WS OPEN %s", self.ws_url) + self.opened.set() + + def _on_close(self, _ws: Any, status: Any, msg: Any) -> None: + self.logger.info("WS CLOSE status=%s msg=%s", status, msg) + + def _on_error(self, _ws: Any, err: Any) -> None: + text = str(err) + self.errors.append(text) + self.logger.error("WS ERROR %s", text) + + def _on_message(self, _ws: Any, message: Any) -> None: + self.msg_count += 1 + try: + data = json.loads(message) if isinstance(message, str) else message + except Exception: + self.logger.warning("non-JSON: %s", str(message)[:200]) + return + header = data.get("header") or {} + body = data.get("body") or {} + tr_cd = str(header.get("tr_cd") or body.get("tr_cd") or "") + tr_key = str(header.get("tr_key") or body.get("tr_key") or "") + + # 등록 ACK / 일반 응답 + if tr_cd != "AFR" and not body.get("gsCode"): + self.logger.info( + "WS MSG#%d tr_cd=%s tr_key=%r head=%s body=%s", + self.msg_count, + tr_cd, + tr_key, + json.dumps(header, ensure_ascii=False)[:200], + json.dumps(body, ensure_ascii=False)[:300], + ) + return + + code = str(body.get("gsCode") or "").strip() + name = str(body.get("gshname") or "").strip() + job = str(body.get("gsJobFlag") or "").strip() + price = body.get("gsPrice") + chg = body.get("gsChgRate") + vol = body.get("gsVolume") + ev = { + "ts": datetime.now().strftime("%H:%M:%S"), + "tr_key": tr_key, + "code": code, + "name": name, + "job": job, + "job_ko": AFR_JOB_KO.get(job, job), + "price": price, + "chg_rate": chg, + "volume": vol, + "raw": body, + } + with self._lock: + self.events.append(ev) + self.logger.info( + "📶 AFR %s %s(%s) px=%s chg=%s%% vol=%s tr_key=%r", + AFR_JOB_KO.get(job, job or "?"), + code, + name, + price, + chg, + vol, + tr_key, + ) + # 원문 1회 더 (필드 확인용) + if len(self.events) <= 3: + self.logger.info("AFR raw body=%s", json.dumps(body, ensure_ascii=False)) + + +def _resolve_query( + rows: list[dict[str, str]], + *, + name: str, + query_index: str, +) -> Optional[dict[str, str]]: + if query_index: + for r in rows: + if r["query_index"] == query_index: + return r + return { + "query_index": query_index, + "group_name": "", + "query_name": "(직접지정)", + } + name_l = (name or "").strip().lower() + if not name_l: + return None + exact = [r for r in rows if r["query_name"].lower() == name_l] + if exact: + return exact[0] + soft = [r for r in rows if name_l in r["query_name"].lower()] + return soft[0] if soft else None + + +def main() -> int: + ap = argparse.ArgumentParser(description="LS 서버저장조건 실시간검색 테스트") + ap.add_argument( + "--user-id", + default="", + help="LS 로그인 ID (t1866 필수, 최대 8자). " + "생략 시 DB LS_USER_ID → env LS_USER_ID", + ) + ap.add_argument( + "--name", + default=(os.environ.get("LS_COND_NAME") or "momentum").strip(), + help="조건저장명 (query_name). 기본 momentum", + ) + ap.add_argument("--query-index", default="", help="t1866 query_index 직접 지정") + ap.add_argument("--list-only", action="store_true", help="목록(t1866)만 조회 후 종료") + ap.add_argument( + "--no-snapshot", + action="store_true", + help="t1859 스냅샷 생략", + ) + ap.add_argument( + "--no-realtime", + action="store_true", + help="t1860/AFR 실시간 생략 (목록+스냅샷만)", + ) + ap.add_argument( + "--watch-sec", + type=int, + default=int(os.environ.get("LS_COND_WATCH_SEC") or "45"), + help="AFR 수신 관찰 초 (기본 45)", + ) + ap.add_argument("--mock", action="store_true", help="모의 키/WS 사용") + args = ap.parse_args() + + ts = datetime.now().strftime("%Y%m%d_%H%M%S") + log_path = SCRIPT_DIR / "logs" / f"ls_condition_rt_{ts}.log" + logger = _setup_logger(log_path) + logger.info("log → %s", log_path) + logger.info( + "mode list_only=%s name=%r query_index=%r watch=%ds mock=%s", + args.list_only, + args.name, + args.query_index, + args.watch_sec, + args.mock, + ) + + user_id = (args.user_id or "").strip() + if not user_id: + try: + from kis_trader.utils.env import get_env_from_db + + user_id = (get_env_from_db("LS_USER_ID", "") or "").strip() + except Exception: + user_id = "" + if not user_id: + user_id = (os.environ.get("LS_USER_ID") or "").strip() + if not user_id: + logger.error( + "❌ LS 로그인 ID 필요. --user-id / DB LS_USER_ID / env LS_USER_ID " + "(OpenAPI/HTS 로그인 ID, 스펙 최대 8자)" + ) + return 1 + logger.info("LS_USER_ID=%s", user_id) + if len(user_id) > 8: + logger.warning("⚠️ user_id 길이 %d > 8 — 스펙은 8자. 그대로 시도합니다.", len(user_id)) + + try: + import websocket # noqa: F401 + except Exception as e: + logger.error("❌ websocket-client 미설치: %s", e) + return 1 + + app_key, app_secret = load_ls_creds(use_mock=bool(args.mock)) + if not app_key or not app_secret: + logger.error("❌ LS 앱키 미설정 (env_config LS_APP_KEY_REAL/SECRET_REAL)") + return 1 + logger.info("🔑 LS 키 OK (mock=%s, key앞8=%s…)", args.mock, app_key[:8]) + + try: + token = fetch_access_token(app_key, app_secret) + except Exception as e: + logger.error("❌ 토큰 실패: %s", e) + return 1 + logger.info("🎫 토큰 OK (앞8=%s…)", token[:8]) + + # ── 1) 목록 ── + rows = t1866_list_conditions(token, user_id, logger=logger) + logger.info("📋 서버저장조건 %d건", len(rows)) + for i, r in enumerate(rows): + logger.info( + " [%d] query_index=%s group=%s name=%s", + i, + r["query_index"], + r["group_name"], + r["query_name"], + ) + if not rows: + logger.error("❌ 조건 목록 비어 있음 — user_id / 서버저장조건 확인") + return 2 + + if args.list_only: + logger.info("✅ list-only 완료. log=%s", log_path) + return 0 + + target = _resolve_query(rows, name=args.name, query_index=args.query_index) + if not target or not target.get("query_index"): + logger.error("❌ 조건 미매칭 name=%r query_index=%r", args.name, args.query_index) + return 3 + qidx = target["query_index"] + logger.info( + "🎯 선택 query_index=%s name=%s group=%s", + qidx, + target.get("query_name"), + target.get("group_name"), + ) + + # ── 2) 스냅샷 ── + snap_codes: list[str] = [] + if not args.no_snapshot: + snap = t1859_snapshot(token, qidx, logger=logger) + for r in snap: + code = str(r.get("shcode") or "").strip() + if code: + snap_codes.append(code) + logger.info( + " SNAP %s %s px=%s diff=%s vol=%s", + code, + r.get("hname"), + r.get("price"), + r.get("diff"), + r.get("volume"), + ) + logger.info("📸 스냅샷 %d종목", len(snap_codes)) + + if args.no_realtime: + logger.info("✅ 스냅샷까지 완료 (realtime 생략). log=%s", log_path) + return 0 + + # ── 3) WS + t1860 + AFR ── + ws_url = LS_WS_MOCK if args.mock else LS_WS_REAL + watcher = AfrWatcher(token, ws_url, logger) + watcher.start() + if not watcher.wait_open(15.0): + logger.error("❌ WS OPEN 타임아웃") + watcher.stop() + return 4 + + alert_num = "" + try: + ob = t1860_realtime(token, qidx, flag="E", alert_num="", logger=logger) + logger.info("t1860 OutBlock=%s", json.dumps(ob, ensure_ascii=False)) + result_flag = str(ob.get("sResultFlag") or "").strip() + alert_num = str(ob.get("sAlertNum") or "").strip() + msg = str(ob.get("Msg") or "") + if result_flag != "S" or not alert_num: + logger.error("❌ t1860 등록 실패 result=%s msg=%s", result_flag, msg) + return 5 + logger.info("✅ t1860 등록 OK sAlertNum=%s msg=%s", alert_num, msg) + + watcher.reg_afr(alert_num, tr_type="3") + logger.info("👀 AFR 수신 대기 %d초 (장외면 push 0건 가능)…", args.watch_sec) + deadline = time.time() + max(1, int(args.watch_sec)) + while time.time() < deadline and not watcher._stop.is_set(): + time.sleep(0.5) + finally: + # 해제: AFR UNREG → t1860 D + if alert_num: + try: + watcher.reg_afr(alert_num, tr_type="4") + except Exception as e: + logger.warning("AFR UNREG 실패: %s", e) + try: + ob_d = t1860_realtime( + token, qidx, flag="D", alert_num=alert_num, logger=logger + ) + logger.info( + "t1860 중지 OutBlock=%s", + json.dumps(ob_d, ensure_ascii=False), + ) + except Exception as e: + logger.warning("t1860 D 실패: %s", e) + watcher.stop() + + logger.info( + "📊 요약 snap=%d AFR이벤트=%d WSmsg=%d errors=%d", + len(snap_codes), + len(watcher.events), + watcher.msg_count, + len(watcher.errors), + ) + logger.info("✅ 완료. log=%s (tail -f %s)", log_path, log_path) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/backtest_web.py b/backtest_web.py index a9d3b3e..45634a1 100644 --- a/backtest_web.py +++ b/backtest_web.py @@ -13,9 +13,10 @@ backtest_web.py — 매매 성과 분석 & 백테스트 웹 대시보드 탭4. 꼬리잡기 백테스트 → ws_candles 3분봉 기반, tail_engine 연동 (V3 방어 파라미터 지원) """ -import sys, os, math, json, logging, threading, uuid +import sys, os, math, json, logging, threading, uuid, subprocess, time from datetime import datetime, timedelta -from typing import Any, List, Dict, Optional, Tuple +from pathlib import Path +from typing import Any, List, Dict, Optional, Tuple, Generator sys.path.insert(0, os.path.dirname(__file__)) from database import TradeDB @@ -35,7 +36,7 @@ from kis_trader.utils.strategy_ids import ( _LEGACY_STRATEGY_SQL = ", ".join(["%s"] * len(EXCLUDED_STRATEGY_IDS)) _PORTFOLIO_EXCLUDED_SQL = ", ".join(["%s"] * len(PORTFOLIO_EXCLUDED_STRATEGY_IDS)) -from flask import Flask, jsonify, request, render_template +from flask import Flask, Response, jsonify, request, render_template, stream_with_context logging.basicConfig(level=logging.INFO) logger = logging.getLogger("backtest_web") @@ -417,18 +418,39 @@ def _trades_recent_first(trades: List[Dict], limit: int = 200) -> List[Dict]: def _momentum_source_label(kind: str, src: str) -> str: s = str(src or "").strip().lower() if kind == "entry": - if s == "ws_ticks": + if s in ("ws_ticks", "tick"): return "틱진입" - if s == "ohlc_open": + if s in ("ohlc_open", "open"): return "시가" + if s in ("ohlc_low", "ohlc_fallback", "ohlc_high", "ohlc_intrabar"): + return "진입OHLC" return s or "-" - if s == "ws_ticks": + if s in ("ws_ticks", "tick"): return "틱청산" - if s == "ohlc_bar": - return "OHLC" + if s in ("ohlc_bar", "ohlc_fallback"): + return "청산OHLC" + if s in ("eod_flat", "wallclock_eod", "wallclock_last"): + return "틱공백EOD" return s or "-" +def _parity_exception_causes(t: Dict[str, Any]) -> List[str]: + """정합 예외 경로 라벨 — UI 빨간 행용 (시가 align 은 정상, OHLC폴백·틱공백EOD 만).""" + causes: List[str] = [] + es = str(t.get("entry_source") or "").strip().lower() + xs = str(t.get("exit_source") or "").strip().lower() + reason = str(t.get("sell_reason") or t.get("reason") or "") + if es in ("ohlc_low", "ohlc_fallback", "ohlc_high", "ohlc_intrabar", "ohlc_bar"): + causes.append("진입OHLC") + if xs in ("ohlc_bar", "ohlc_fallback"): + causes.append("청산OHLC") + if xs in ("eod_flat", "wallclock_eod"): + causes.append("틱공백EOD") + if "ghost_purge" in reason.lower(): + causes.append("ghost_purge") + return causes + + def _enrich_momentum_trades_debug( trades: List[Dict], *, @@ -446,12 +468,17 @@ def _enrich_momentum_trades_debug( cum += pnl t["cum_pnl"] = int(round(cum)) t["cum_return_pct"] = round(cum / tb * 100.0, 2) if tb > 0 else 0.0 + causes = _parity_exception_causes(t) + t["parity_exception"] = bool(causes) + t["parity_cause"] = "+".join(causes) if causes else "" if with_tick_debug: el = _momentum_source_label("entry", str(t.get("entry_source") or "")) xl = _momentum_source_label("exit", str(t.get("exit_source") or "")) t["entry_source_label"] = el t["exit_source_label"] = xl t["debug_tick"] = f"{el}→{xl}" + if causes: + t["debug_tick"] = f"{t['debug_tick']} · {t['parity_cause']}" def _peak_cum_from_trades(trades: List[Dict]) -> Tuple[float, str]: @@ -478,12 +505,14 @@ def _resolve_backtest_universe( sim_kind: Optional[str] = None, scan_interval_min: int = 5, strategy_id: Optional[str] = None, + history_source: Optional[str] = None, ) -> Tuple[Optional[Dict[str, List[str]]], str, int, int]: """ 백테스트 유니버스 소스 통합 (param_search·신봇 실매와 동일 조회). - ``use_saved_history=True`` + ``strategy_id``: ``TradeDBExt.get_universe_by_candle_time`` — 전략별 event_time → 1분봉 키. + ``history_source``: kiwoom(기본) | ls - ``sim_kind`` reversal/momentum: 이력 없거나 미사용 시 ``scalping_engine`` 시뮬 (5분 슬롯). - 둘 다 아니면 ``None`` → ws_candles 전 종목 (꼬리·돌파). @@ -500,6 +529,10 @@ def _resolve_backtest_universe( from kis_trader.backtest.universe_timeline import ( universe_exit_debounce_sec_for_strategy, ) + from kis_trader.backtest.universe_history_source import ( + history_source_label, + resolve_backtest_universe_history_source, + ) # EXIT 디바운스 = 전략 공통 (CONDITION_EXIT_GRACE / 전략별 오버라이드) # SCALP만 특수처리하면 웹↔Optuna 유니버스 두께가 어긋남 (7/20 스캘핑 −1만 사례) @@ -515,6 +548,7 @@ def _resolve_backtest_universe( strict = momentum_backtest_universe_strict_enabled() strict_lag = momentum_backtest_universe_strict_lag_min() + hs = resolve_backtest_universe_history_source(history_source) history = _get_ext_db().get_universe_by_candle_time( strategy_id=strategy_id, start_ymd=start_ymd, @@ -522,10 +556,10 @@ def _resolve_backtest_universe( strict=strict, strict_lag_minutes=strict_lag, exit_debounce_sec=debounce_sec, + history_source=hs, ) if history: - src = "history_strict" if strict else "history" - return history, src, len(history), 1 + return history, history_source_label(hs, strict=strict), len(history), 1 except Exception as exc: logger.debug( "유니버스 이력 조회 실패(strategy_id=%s): %s", strategy_id, exc, @@ -561,12 +595,15 @@ def _parse_backtest_universe_arg( sim_kind: Optional[str] = None, ) -> Tuple[bool, str, Optional[str]]: """ - 백테스트 유니버스 쿼리 통일 — 모두 ``target_candidates_history`` 동일 테이블. + 백테스트 유니버스 쿼리 통일 — history/sim/all. - ``universe=history`` : 저장 후보 이력(슬롯·코드) - ``universe=sim`` : 시뮬 유니버스 (scalping_engine, sim_kind 필수) - ``universe=all`` : ws_candles 전 종목 (필터 없음) + 이력 테이블(키움/LS)은 ``universe_history_source`` 별도 쿼리 + (``_parse_universe_history_source_arg``). + 레거시 별칭: scalp_universe, mom_universe, tail_universe, bo_universe 등 """ raw = ( @@ -587,6 +624,20 @@ def _parse_backtest_universe_arg( return False, "all", None +def _parse_universe_history_source_arg(request) -> str: + """키움 target_candidates_history vs LS ls_candidates_history.""" + from kis_trader.backtest.universe_history_source import ( + resolve_backtest_universe_history_source, + ) + raw = ( + request.args.get("universe_history_source") + or request.args.get("hist_src") + or request.args.get("history_source") + or None + ) + return resolve_backtest_universe_history_source(raw) + + # ──────────────────────────────────────────────────────────────────────────── # API: 실거래 분석 # ──────────────────────────────────────────────────────────────────────────── @@ -616,18 +667,11 @@ def api_actual(): rows = db.conn.execute(sql, params).fetchall() trades = [dict(r) for r in rows] - # 잔고 동기화 이슈로 생성된 0원 강제정리 레코드는 실거래 성과를 왜곡하므로 분석 집계에서 제외 - # (실제 체결 손익이 아니라 로컬-브로커 불일치 정리용 레코드) + # 잔고 동기화·유령정리(ghost_purge) 레코드는 실체결이 아님 → 성과·목록에서 제외 filtered_out = 0 cleaned: List[Dict] = [] for t in trades: - reason = str(t.get("sell_reason") or "") - try: - sell_price = float(t.get("sell_price") or 0) - except Exception: - sell_price = 0.0 - is_forced_ghost = ("잔고없음(강제정리)" in reason) or ("잔고동기화(외부매도)" in reason) - if is_forced_ghost and sell_price <= 0: + if _is_forced_ghost_trade(t): filtered_out += 1 continue cleaned.append(t) @@ -661,15 +705,17 @@ def api_actual(): hold_min = 0 unrealized = (cur_px - buy_px) * qty if buy_px > 0 else 0.0 profit_rate = ((cur_px - buy_px) / buy_px * 100.0) if buy_px > 0 else 0.0 + # 해외(US_*)는 달러 소수 유지 — 정수원 반올림 금지 + _is_us_strat = str(strategy or "").upper().startswith("US_") open_trades.append({ "code": row.get("code"), "name": row.get("name"), "strategy": row.get("strategy"), - "buy_price": _int_display_price(buy_px), - "sell_price": _int_display_price(cur_px), + "buy_price": (round(buy_px, 4) if _is_us_strat else _int_display_price(buy_px)), + "sell_price": (round(cur_px, 4) if _is_us_strat else _int_display_price(cur_px)), "qty": qty, "realized_pnl": None, - "unrealized_pnl": round(unrealized), + "unrealized_pnl": (round(unrealized, 4) if _is_us_strat else round(unrealized)), "profit_rate": round(profit_rate, 2), "hold_minutes": hold_min, "buy_date": bd_str, @@ -774,13 +820,21 @@ def api_actual(): strat_u = (strategy or "SCALP").upper() if strat_u == "MOMENTUM": port = resolve_momentum_portfolio_params(env_row, {}) + total_budget_krw = float(port.get("total_budget_krw") or 0) + elif strat_u == "US_MOMENTUM": + # 해외 전용 한도 — 없으면 모멘텀 포트 폴백 + from kis_trader.utils.env import get_env_float as _gef + total_budget_krw = float(_gef("US_MOMENTUM_TOTAL_BUDGET", 0) or 0) + if total_budget_krw <= 0: + port = resolve_momentum_portfolio_params(env_row, {}) + total_budget_krw = float(port.get("total_budget_krw") or 0) else: # SHORT/TAIL → 꼬리 한도(120만). SCALP 키로 폴백되면 600만 오표시. port_strat = _portfolio_strategy_key(strat_u) if port_strat not in ("TAIL", "SHORT", "SCALP", "BREAKOUT", "RANGE_BREAK", "UPDOW", "DBBAND"): port_strat = "SCALP" port = resolve_portfolio_params(env_row, strategy=port_strat) - total_budget_krw = float(port.get("total_budget_krw") or 0) + total_budget_krw = float(port.get("total_budget_krw") or 0) except Exception: total_budget_krw = 0.0 @@ -821,7 +875,7 @@ def api_actual(): logger.warning("api_actual tick coverage: %s", _cov_ex) tick_live = {} - return jsonify({ + payload = { "summary": { "total_trades": total, "win_trades": len(wins), @@ -837,6 +891,8 @@ def api_actual(): "params": { "strategy": strategy, "total_budget_krw": round(total_budget_krw), + "start": start, + "end": end, }, "meta": { "filtered_forced_rows": filtered_out, @@ -849,11 +905,204 @@ def api_actual(): "reasons": reasons, "top_codes": top_list, "trades": _trades_recent_first(trades, 200), - }) + } + # 해외 전략만 표시용 USD + 당일 환율 원 환산 (국내 핸들러 로직 변경 없음) + if str(strategy or "").upper().startswith("US_"): + try: + from kis_trader.utils.usd_krw_fx import enrich_payload_with_usd_krw_fx + enrich_payload_with_usd_krw_fx(payload) + except Exception as _fx_ex: + logger.warning("api_actual FX enrich: %s", _fx_ex) + payload["currency"] = "USD" + return jsonify(payload) finally: db.close() +@app.route("/api/paper/actual", methods=["GET"]) +def api_paper_actual(): + """페이퍼 전용 실거래 조회 — trade_history_paper + active_trades_paper. + + 실매 ``/api/actual`` · 보유·매도 탭과 절대 섞지 않음. + """ + from kis_trader.database.paper_store import ( + ensure_paper_tables, + get_active_trades_paper, + list_trade_history_paper, + ) + + strategy = request.args.get("strategy", "US_MOMENTUM") + start = request.args.get("start", "") + end = request.args.get("end", "") + like_pattern = strategy_like_pattern(strategy) or "US_MOMENTUM%" + + db = _db() + try: + ensure_paper_tables(db) + closed_trades = list_trade_history_paper( + db, strategy_like=like_pattern, start=start, end=end + ) + for t in closed_trades: + for k in ("buy_date", "sell_date"): + if t.get(k): + t[k] = str(t[k]) + t["is_open"] = False + t["paper"] = True + + open_map = get_active_trades_paper( + db, + strategy_id=None if (strategy or "").upper() == "ALL" else strategy, + ) + open_trades: List[Dict] = [] + now_dt = datetime.now() + for code, row in open_map.items(): + if (strategy or "").upper() != "ALL": + if str(row.get("strategy") or "").upper() != str(strategy).upper(): + # LIKE prefix: US_MOMENTUM vs US + if not str(row.get("strategy") or "").upper().startswith( + str(strategy).upper().rstrip("%") + ): + continue + bd_str = str(row.get("buy_date") or "") + if start and bd_str and bd_str < start + " 00:00:00": + continue + if end and bd_str and bd_str > end + " 23:59:59": + continue + buy_px = float(row.get("avg_buy_price") or 0) + cur_px = float(row.get("current_price") or buy_px) + qty = int(row.get("current_qty") or 0) + if qty <= 0: + continue + try: + buy_time = datetime.strptime(bd_str[:19], "%Y-%m-%d %H:%M:%S") + hold_min = int((now_dt - buy_time).total_seconds() / 60) + except Exception: + hold_min = 0 + unrealized = (cur_px - buy_px) * qty if buy_px > 0 else 0.0 + profit_rate = ((cur_px - buy_px) / buy_px * 100.0) if buy_px > 0 else 0.0 + open_trades.append({ + "code": code, + "name": row.get("name"), + "strategy": row.get("strategy"), + "buy_price": buy_px, + "sell_price": cur_px, + "qty": qty, + "realized_pnl": None, + "unrealized_pnl": round(unrealized, 4), + "profit_rate": round(profit_rate, 2), + "hold_minutes": hold_min, + "buy_date": bd_str, + "sell_date": None, + "sell_reason": "보유중(paper)", + "is_open": True, + "paper": True, + }) + + trades = open_trades + closed_trades + total = len(closed_trades) + wins = [t for t in closed_trades if float(t.get("realized_pnl") or 0) > 0] + losses = [t for t in closed_trades if float(t.get("realized_pnl") or 0) < 0] + total_pnl = sum(float(t.get("realized_pnl") or 0) for t in closed_trades) + avg_hold = ( + sum(float(t.get("hold_minutes") or 0) for t in closed_trades) / total + ) if total else 0.0 + payload = { + "ok": True, + "paper": True, + "summary": { + "total_trades": total, + "win_trades": len(wins), + "loss_trades": len(losses), + "win_rate": round(len(wins) / total * 100, 1) if total else 0, + "total_pnl": round(total_pnl, 4), + "avg_hold_min": round(avg_hold, 1), + "open_count": len(open_trades), + }, + "params": { + "strategy": strategy, + "start": start, + "end": end, + }, + "trades": trades, + } + # 페이퍼 기본 = 해외 US — 표시용 달러 + 당일 환율 원 환산 + if str(strategy or "").upper().startswith("US_") or not strategy: + try: + from kis_trader.utils.usd_krw_fx import enrich_payload_with_usd_krw_fx + enrich_payload_with_usd_krw_fx(payload) + except Exception as _fx_ex: + logger.warning("api_paper_actual FX enrich: %s", _fx_ex) + payload["currency"] = "USD" + return jsonify(payload) + finally: + db.close() + + +@app.route("/api/fx/usd_krw", methods=["GET"]) +def api_fx_usd_krw(): + """표시용 USD→KRW 일자별 환율. dates=YYYY-MM-DD,YYYY-MM-DD 또는 start&end.""" + from kis_trader.utils.env import get_env_int + from kis_trader.utils.usd_krw_fx import ( + get_display_usd_krw_rate, + get_usd_krw_rates, + norm_fx_ymd, + ) + + dates_raw = (request.args.get("dates") or "").strip() + start = (request.args.get("start") or "").strip() + end = (request.args.get("end") or "").strip() + days: List[str] = [] + if dates_raw: + for part in dates_raw.replace(";", ",").split(","): + y = norm_fx_ymd(part) + if y: + days.append(y) + if start or end: + s = norm_fx_ymd(start) + e = norm_fx_ymd(end) or s + if s and e: + try: + a = datetime.strptime(s, "%Y-%m-%d").date() + b = datetime.strptime(e, "%Y-%m-%d").date() + if b < a: + a, b = b, a + days.extend([a.isoformat(), b.isoformat()]) + max_span = int(get_env_int("FX_USD_KRW_RANGE_MAX_DAYS", 31)) + span = (b - a).days + if 0 < span <= max_span: + cur = a + while cur <= b: + days.append(cur.isoformat()) + cur += timedelta(days=1) + except Exception: + pass + if not days: + # 오늘 1건 — HTTP 없이 표시용 + today = datetime.now().strftime("%Y-%m-%d") + rate = get_display_usd_krw_rate(today) + return jsonify({ + "ok": True, + "pair": "USD/KRW", + "rates": {today: round(float(rate), 4)}, + "display_rate": round(float(rate), 4), + "source": "cache_or_fallback", + }) + rates = get_usd_krw_rates(days) + # 빠진 날은 표시용 폴백으로 채움 (UI 병기용) + filled = dict(rates) + for y in days: + if y not in filled or not filled.get(y): + filled[y] = round(float(get_display_usd_krw_rate(y)), 4) + disp = get_display_usd_krw_rate(days[-1] if days else "") + return jsonify({ + "ok": True, + "pair": "USD/KRW", + "rates": filled, + "display_rate": round(float(disp), 4), + "source": "cache_or_fallback", + }) + + # ──────────────────────────────────────────────────────────────────────────── # API: 실거래 당일 운영 대시보드 (전략별 + 합계) # ──────────────────────────────────────────────────────────────────────────── @@ -895,7 +1144,14 @@ def _portfolio_strategy_key(strategy_id: str) -> str: def _is_forced_ghost_trade(row: Dict[str, Any]) -> bool: + """실체결이 아닌 정리용 레코드 — 실거래 분석·대시보드 집계에서 제외. + + - ghost_purge:* : 브로커 잔고 0주 유령 정리 (PnL=0 장부용) + - 잔고없음(강제정리) / 잔고동기화(외부매도) + 매도가 0 + """ reason = str(row.get("sell_reason") or "") + if "ghost_purge" in reason.lower(): + return True try: sell_price = float(row.get("sell_price") or 0) except Exception: @@ -1645,6 +1901,121 @@ def _load_momentum_search_json(path: Optional[str] = None) -> Tuple[Optional[str return p, None +def _us_momentum_ui_defaults_from_db(snap: Optional[Dict[str, Any]] = None) -> Dict[str, Any]: + """US_MOMENTUM_* (env_config) → 해외 모멘텀 탭 초기값. 국내 MOMENTUM_* 와 분리.""" + if snap is None: + try: + db = _db() + try: + env: Dict[str, Any] = dict(db.get_merged_env_snapshot() or {}) + finally: + db.close() + except Exception: + env = {} + else: + env = dict(snap or {}) + + def pickf(keys: Tuple[str, ...], default: float) -> float: + for k in keys: + v = env.get(k) + if v not in (None, "", "None"): + try: + return float(v) + except (ValueError, TypeError): + continue + return float(default) + + def picki(keys: Tuple[str, ...], default: int) -> int: + for k in keys: + v = env.get(k) + if v not in (None, "", "None"): + try: + return int(float(v)) + except (ValueError, TypeError): + continue + return int(default) + + def pick_sl_tp_pct(keys: Tuple[str, ...], default_pct: float) -> float: + for k in keys: + v = env.get(k) + if v not in (None, "", "None"): + try: + x = abs(float(v)) + if x == 0: + return 0.0 + return x if x >= 0.5 else round(x * 100, 3) + except (ValueError, TypeError): + continue + return float(default_pct) + + def pick_bool(keys: Tuple[str, ...], default: bool) -> bool: + for k in keys: + v = env.get(k) + if v not in (None, "", "None"): + return str(v).strip().lower() in ("1", "true", "t", "y", "yes", "on") + return bool(default) + + cd_sec = picki(("US_MOMENTUM_COOLDOWN_SEC",), 300) + min_margin = pickf(("US_MOMENTUM_MIN_PROFIT_PCT",), 0.2) + + return { + "mom_rsi_min": pickf(("US_MOMENTUM_RSI_MIN",), 50.0), + "mom_rsi_max": pickf(("US_MOMENTUM_RSI_MAX",), 90.0), + "mom_vol_mult": pickf(("US_MOMENTUM_VOL_MULT",), 1.5), + "mom_vol_win": picki(("US_MOMENTUM_VOL_WIN",), 5), + "time_start": picki(("US_MOMENTUM_TIME_START",), 2230), + "mom_time_start_hm": picki(("US_MOMENTUM_TIME_START",), 2230), + "time_end": picki(("US_MOMENTUM_TIME_END",), 500), + "mom_time_end_hm": picki(("US_MOMENTUM_TIME_END",), 500), + "sell_time_end": picki(("US_MOMENTUM_SELL_TIME_END",), 630), + "sl_pct": pick_sl_tp_pct(("US_MOMENTUM_STOP_LOSS_PCT",), 1.5), + "tp_pct": pick_sl_tp_pct(("US_MOMENTUM_TAKE_PROFIT_PCT",), 2.5), + "tp_max_pct": pick_sl_tp_pct(("US_MOMENTUM_TP_MAX_PCT",), 2.0), + "shoulder_min_high": pick_sl_tp_pct(("US_MOMENTUM_SHOULDER_MIN_HIGH_PCT",), 0.5), + "shoulder_cut_pct": pick_sl_tp_pct(("US_MOMENTUM_SHOULDER_CUT_PCT",), 0.3), + "trail_pct": pick_sl_tp_pct(("US_MOMENTUM_TRAIL_PCT",), 0.0), + "trail_arm_pct": pick_sl_tp_pct(("US_MOMENTUM_TRAIL_ARM_PCT",), 0.0), + "max_hold_bars": picki(("US_MOMENTUM_MAX_HOLD_BARS",), 0), + "ratchet_tiers": str(env.get("US_MOMENTUM_RATCHET_TIERS") or "").strip(), + "cooldown_min": max(0, int(cd_sec // 60)), + "max_daily": picki(("US_MOMENTUM_MAX_DAILY",), 5), + "slot_money": picki(("US_MOMENTUM_SLOT_MONEY", "US_MOMENTUM_MAX_BUY_AMOUNT"), 200000), + "slots": picki(("US_MOMENTUM_MAX_STOCKS",), 4), + "mom_slots": picki(("US_MOMENTUM_MAX_STOCKS",), 4), + "total_budget_krw": picki(("US_MOMENTUM_TOTAL_BUDGET",), 800000), + "high_chase_thr": pickf(("US_MOMENTUM_HIGH_CHASE_THR",), 0.96), + "max_daily_chg": pickf(("US_MOMENTUM_MAX_DAILY_CHG",), 20.0), + "min_price": pickf(("US_MOMENTUM_MIN_PRICE",), 1.0), + "max_loss_krw": picki(("US_MOMENTUM_MAX_LOSS_PER_TRADE",), 0), + "min_margin": min_margin, + "mom_max_from_open_pct": pickf(("US_MOMENTUM_MAX_FROM_OPEN_PCT",), 999.0), + "mom_min_from_open_pct": pickf(("US_MOMENTUM_MIN_FROM_OPEN_PCT",), -999.0), + "use_defense_filters": pick_bool(("US_MOMENTUM_USE_DEFENSE_FILTERS",), True), + "use_high_chase_filter": pick_bool(("US_MOMENTUM_USE_HIGH_CHASE_FILTER",), False), + "use_daily_range_filter": pick_bool(("US_MOMENTUM_USE_DAILY_RANGE_FILTER",), False), + "use_ema_filter": pick_bool(("US_MOMENTUM_USE_EMA_FILTER",), True), + "use_rsi_max_filter": pick_bool(("US_MOMENTUM_USE_RSI_MAX_FILTER",), False), + "pattern_breakout": pick_bool(("US_MOMENTUM_PATTERN_BREAKOUT",), True), + "pattern_pullback": pick_bool(("US_MOMENTUM_PATTERN_PULLBACK",), True), + "chase_lookback_min": picki(("US_MOMENTUM_CHASE_LOOKBACK_MIN",), 10), + "pullback_lookback_min": picki(("US_MOMENTUM_PULLBACK_LOOKBACK_MIN",), 15), + "pullback_min_pct": pickf(("US_MOMENTUM_PULLBACK_MIN_PCT",), 0.3), + "pullback_max_pct": pickf(("US_MOMENTUM_PULLBACK_MAX_PCT",), 3.0), + "setup_vol_max_mult": pickf(("US_MOMENTUM_SETUP_VOL_MAX_MULT",), 0.8), + "setup_bear_bars_min": picki(("US_MOMENTUM_SETUP_BEAR_BARS_MIN",), 1), + "ema_fast_period": picki(("US_MOMENTUM_EMA_FAST_PERIOD",), 9), + "ema_slow_period": picki(("US_MOMENTUM_EMA_SLOW_PERIOD",), 21), + "eod_enabled": pick_bool(("US_MOMENTUM_EOD_ENABLED",), False), + "eod_hm": str(env.get("US_MOMENTUM_EOD_HM") or "05:00").strip() or "05:00", + "daily_profit_enabled": pick_bool(("US_MOMENTUM_DAILY_PROFIT_TARGET_ENABLED",), False), + "daily_trail_tiers": str(env.get("US_MOMENTUM_DAILY_PROFIT_TRAIL_TIERS") or "").strip(), + "daily_profit_mode": ( + str(env.get("US_MOMENTUM_DAILY_PROFIT_MODE") or "trailing").strip().lower() + or "trailing" + ), + } + + def _scalp_ui_defaults_from_db() -> Dict[str, Any]: """config_scalp + env_config 병합에서 스캘핑 reversal 웹·백테 초기값.""" _d = se.get_scalping_defaults_from_db() @@ -2201,6 +2572,21 @@ def _daily_trail_params_from_request( "_backtest_daily_profit_trail": bool(enabled), "daily_profit_mode": mode, } + # B: 리스크버짓 — 쿼리 우선, 없으면 DB 전략키 (기본 false) + raw_rb = req.args.get("daily_risk_budget_enabled") + if raw_rb is None or raw_rb == "": + try: + from kis_trader.utils.env import get_env_bool + sid = str(prefix or "SHORT").strip().upper() + if sid == "TAIL": + sid = "SHORT" + rb_on = bool(get_env_bool(f"{sid}_DAILY_PROFIT_RISK_BUDGET_ENABLED", False)) + except Exception: + rb_on = False + else: + rb_on = _truthy(raw_rb, False) + out["daily_risk_budget_enabled"] = rb_on + out["_backtest_daily_profit_risk_budget"] = bool(rb_on) and bool(enabled) if not enabled: return out if tiers and tiers.lower() != "off": @@ -2215,6 +2601,7 @@ def _daily_trail_save_patch(body: Dict[str, Any], prefix: str) -> Dict[str, str] """ 당일 누적손익 다단 트레일 — 봇저장 패치. ``daily_profit_enabled`` → ``{prefix}_DAILY_PROFIT_TARGET_ENABLED`` (마스터). + ``daily_risk_budget_enabled`` → ``{prefix}_DAILY_PROFIT_RISK_BUDGET_ENABLED`` (B, 기본 OFF). 다단 문자열은 규칙만 저장 — 값 있다고 ENABLED를 강제 true 하지 않음. """ out: Dict[str, str] = {} @@ -2225,6 +2612,13 @@ def _daily_trail_save_patch(body: Dict[str, Any], prefix: str) -> Dict[str, str] or str(en).strip().lower() in ("1", "true", "t", "y", "yes", "on") ) out[f"{prefix}_DAILY_PROFIT_TARGET_ENABLED"] = "true" if on else "false" + if "daily_risk_budget_enabled" in body: + en = body.get("daily_risk_budget_enabled") + on = ( + en is True + or str(en).strip().lower() in ("1", "true", "t", "y", "yes", "on") + ) + out[f"{prefix}_DAILY_PROFIT_RISK_BUDGET_ENABLED"] = "true" if on else "false" if "daily_trail_tiers" in body: tiers = str(body.get("daily_trail_tiers") or "").strip() if tiers and tiers.lower() != "off": @@ -2274,6 +2668,11 @@ def api_backtest_scalping(): mode = (request.args.get("mode") or "reversal").strip().lower() if mode not in ("reversal", "momentum"): mode = "reversal" + # 해외 US 는 /api/backtest/us_momentum — 이 핸들러에 market=US if 넣지 말 것 + if (request.args.get("market") or "").strip().upper() == "US": + return jsonify({ + "error": "해외 모멘텀은 /api/backtest/us_momentum 을 사용하세요", + }), 400 _mom_def: Optional[Dict[str, Any]] = ( _momentum_ui_defaults_from_db(_def) if mode == "momentum" else None ) @@ -2406,27 +2805,15 @@ def api_backtest_scalping(): start_key = (start.replace("-", "") + "0000") if start else "20260101" end_key = (end.replace("-", "") + "2359") if end else "99991231" - codes_raw = db.conn.execute( - "SELECT DISTINCT code FROM ws_candles WHERE timeframe=1 " - "AND candle_time >= %s AND candle_time <= %s ORDER BY code", - [start_key, end_key] - ).fetchall() - codes = [r["code"] for r in codes_raw] + # 국내 핸들러 — history_source=ls 이면 ls_ws_candles (모멘텀 모드는 키움 유지) + _univ_hs = _parse_universe_history_source_arg(request) + from kis_trader.backtest.scalping_backtest_common import load_scalp_candles_by_code - codes_candles: Dict[str, List[Dict]] = {} - for code in codes: - rows = db.conn.execute( - "SELECT candle_time, open, high, low, close, volume " - "FROM ws_candles " - "WHERE timeframe=1 AND code=%s " - "AND candle_time >= %s AND candle_time <= %s " - "AND is_confirmed=1 " - "ORDER BY candle_time ASC", - [code, start_key, end_key] - ).fetchall() - if len(rows) < rsi_period + 5: - continue - codes_candles[code] = [dict(r) for r in rows] + _candle_hs = "kiwoom" if str(mode).strip().lower() == "momentum" else _univ_hs + codes_candles, _ = load_scalp_candles_by_code( + db, start_key, end_key, rsi_period=rsi_period, + history_source=_candle_hs, + ) # 방어로직: 쿼리 인자로 넘어오면 우선 사용 (웹 입력란), 없으면 DB 기본값 _high_chase = request.args.get("high_chase_thr") @@ -2654,10 +3041,9 @@ def api_backtest_scalping(): else int(_mom_eng.get("ema_slow_period", 21)) ) # 유니버스 — 통일 쿼리 universe=history|sim|all (동일 테이블 target_candidates_history) - _univ_default = "history" use_saved_history, universe_mode, sim_kind_univ = _parse_backtest_universe_arg( request, - default=_univ_default, + default="history", sim_kind=("momentum" if mode == "momentum" else "reversal"), ) _hist_strategy_id = "MOMENTUM" if mode == "momentum" else "SCALP" @@ -2671,9 +3057,12 @@ def api_backtest_scalping(): sim_kind=sim_kind_univ, scan_interval_min=5, strategy_id=_hist_strategy_id, + history_source=_univ_hs, ) ) params["scan_interval_min"] = _scan_iv + # scan_at 타임라인 ↔ 슬롯 dict 동일 이력소스 (키움/LS) + params["_universe_history_source"] = _univ_hs latest_env = db.get_latest_env() env_row = dict(latest_env["snapshot"]) if latest_env else {} @@ -2875,8 +3264,11 @@ def api_backtest_scalping(): "budget_warning": portfolio.get("budget_warning"), "peak_cum_pnl": round(peak_cum), "peak_cum_at": (peak_cum_at[:19] if peak_cum_at else ""), - "tick_backtest": bt_meta.get("tick_backtest") if mode == "momentum" else None, - "skip_stats": bt_meta.get("skip_stats") if mode == "momentum" else None, + "tick_backtest": bt_meta.get("tick_backtest"), + "backtest_buy_source": bt_meta.get("backtest_buy_source"), + "skip_stats": bt_meta.get("skip_stats") or ( + (bt_meta.get("engine_params") or {}).get("_portfolio_skip_stats") + ), }, "equity": equity, "daily": daily_list, @@ -3042,8 +3434,14 @@ def _tail_engine_dict_to_ui( str(snap.get("SHORT_DAILY_PROFIT_TARGET_ENABLED") or "false").strip().lower() in ("1", "true", "t", "y", "yes", "on") ), + "daily_risk_budget_enabled": ( + str(snap.get("SHORT_DAILY_PROFIT_RISK_BUDGET_ENABLED") or "false").strip().lower() + in ("1", "true", "t", "y", "yes", "on") + ), "daily_trail_tiers": str(snap.get("SHORT_DAILY_PROFIT_TRAIL_TIERS") or "").strip(), "daily_profit_mode": str(snap.get("SHORT_DAILY_PROFIT_MODE") or "trailing").strip().lower() or "trailing", + "daily_trail_arm_krw": int(float(snap.get("SHORT_DAILY_PROFIT_TRAIL_ARM_KRW") or 0) or 0), + "daily_trail_drop_pct": float(snap.get("SHORT_DAILY_PROFIT_TRAIL_DROP_PCT") or 0) or 0.0, "ratchet_presets": str(snap.get("BT_RATCHET_PRESETS") or "").strip(), "daily_trail_presets": str(snap.get("BT_DAILY_TRAIL_PRESETS") or "").strip(), "eod_enabled": ( @@ -3378,9 +3776,50 @@ def api_backtest_dbband_legacy(): return api_dbband_backtest() +@app.route("/api/backtest/us_momentum", methods=["GET"]) +def api_backtest_us_momentum(): + """ + 해외 모멘텀 전용 백테. + ※ 국내 /api/backtest/momentum · api_backtest_scalping 에 market=US 분기 넣지 말 것. + """ + from kis_trader.backtest.us_momentum_web_backtest import run_us_momentum_web_backtest + + args = request.args.to_dict(flat=True) + start = (args.get("start") or "").strip() + end = (args.get("end") or "").strip() + if not start or not end: + return jsonify({"error": "start/end 필요"}), 400 + db = _db() + try: + ui_def = _us_momentum_ui_defaults_from_db() + out = run_us_momentum_web_backtest( + args, + db=db, + ui_def=ui_def, + enrich_trades_fn=_enrich_momentum_trades_debug, + enrich_names_fn=_enrich_trades_with_names, + trades_recent_fn=_trades_recent_first, + period_days_fn=_backtest_period_days, + ) + return jsonify(out) + except Exception as e: + logger.exception("us_momentum backtest failed: %s", e) + return jsonify({"error": str(e)}), 500 + finally: + try: + db.close() + except Exception: + pass + + @app.route("/api/backtest/momentum", methods=["GET"]) def api_backtest_momentum(): """모멘텀 전용 백테스트 — momentum_engine + momentum_backtest_common (SCALP reversal 분리).""" + # 해외는 전용 엔드포인트 — 국내 핸들러에 market=US if 금지 + if (request.args.get("market") or "").strip().upper() == "US": + return jsonify({ + "error": "해외 모멘텀은 /api/backtest/us_momentum 을 사용하세요 (국내 API 분기 금지)", + }), 400 args = request.args.to_dict(flat=True) args["mode"] = "momentum" with app.test_request_context( @@ -3428,6 +3867,196 @@ def api_backtest_momentum_save_config(): return jsonify({"error": str(e)}), 500 +@app.route("/api/backtest/us_momentum/save_config", methods=["POST"]) +def api_backtest_us_momentum_save_config(): + """해외 모멘텀 탭 → US_MOMENTUM_* 만 (국내 MOMENTUM_/SCALP_ 미오염).""" + body = request.get_json(force=True, silent=True) or {} + try: + patch = _us_momentum_tab_save_patch(body) + if not patch: + return jsonify({"error": "저장할 필드 없음"}), 400 + # 안전: US_ 접두만 + bad = [k for k in patch if not str(k).startswith("US_MOMENTUM_")] + if bad: + return jsonify({"error": f"비-US 키 차단: {bad[:5]}"}), 400 + db = _db() + try: + latest = db.get_latest_env() + snap = dict(latest["snapshot"]) if latest else {} + _accumulate_preset( + snap, patch, "BT_DAILY_TRAIL_PRESETS", body.get("daily_trail_tiers") + ) + for k, v in patch.items(): + snap[k] = v + env_id = db.insert_env_snapshot(snap) + if env_id is None: + return jsonify({"error": "env 저장 실패"}), 500 + from config_schema import classify_config_key + saved_by_table: Dict[str, List[str]] = {} + for k in patch: + saved_by_table.setdefault(classify_config_key(k), []).append(k) + return jsonify({ + "ok": True, + "env_id": env_id, + "saved_keys": list(patch.keys()), + "saved_by_table": saved_by_table, + }) + finally: + db.close() + except Exception as e: + logger.error("해외 모멘텀 설정저장 오류: %s", e) + return jsonify({"error": str(e)}), 500 + + +@app.route("/api/us_momentum/stocks", methods=["GET"]) +def api_us_momentum_stocks(): + """영구구독 US + us_momentum_stock_config 행 목록.""" + try: + db = _db() + try: + from kis_trader.strategies.us_momentum_stock_cfg import ( + ensure_us_momentum_stock_config_table, + list_us_momentum_stock_rows, + seed_us_momentum_stock_from_permanent, + row_to_ui_dict, + ) + from permanent_subs import codes_by_market + ensure_us_momentum_stock_config_table(db) + if request.args.get("seed") in ("1", "true", "yes"): + seed_us_momentum_stock_from_permanent(db) + cfg_rows = {str(r.get("code") or "").upper(): row_to_ui_dict(r) + for r in list_us_momentum_stock_rows(db)} + perm = codes_by_market(db, "US", enabled_only=False) or [] + out = [] + seen = set() + for p in perm: + code = str(p.get("code") or p.get("symbol") or "").upper() + if not code or code in seen: + continue + seen.add(code) + cfg = cfg_rows.get(code) or {} + out.append({ + "code": code, + "exchange": cfg.get("exchange") or p.get("exchange") or "NASD", + "symbol": cfg.get("symbol") or p.get("symbol") or code, + "name": cfg.get("name") or p.get("note") or code, + "enabled": bool(p.get("enabled", True)), + "stock_group": cfg.get("stock_group") or "STOCK", + "has_stock_cfg": code in cfg_rows, + "cfg": cfg if code in cfg_rows else None, + }) + for code, cfg in cfg_rows.items(): + if code in seen: + continue + out.append({ + "code": code, + "exchange": cfg.get("exchange") or "NASD", + "symbol": cfg.get("symbol") or code, + "name": cfg.get("name") or code, + "enabled": True, + "stock_group": cfg.get("stock_group") or "STOCK", + "has_stock_cfg": True, + "cfg": cfg, + }) + return jsonify({"stocks": out, "count": len(out)}) + finally: + db.close() + except Exception as e: + logger.error("api_us_momentum_stocks: %s", e) + return jsonify({"error": str(e)}), 500 + + +@app.route("/api/us_momentum/stock_cfg", methods=["GET", "POST", "DELETE"]) +def api_us_momentum_stock_cfg(): + """종목별 TRIGGER/청산 핀 — GET ?code= / POST body / DELETE ?code=.""" + try: + from kis_trader.strategies.us_momentum_stock_cfg import ( + delete_us_momentum_stock_config, + get_us_momentum_stock_row, + row_to_ui_dict, + upsert_us_momentum_stock_config, + ) + db = _db() + try: + if request.method == "GET": + code = (request.args.get("code") or "").strip().upper() + if not code: + return jsonify({"error": "code 필수"}), 400 + row = get_us_momentum_stock_row(db, code) + return jsonify({ + "code": code, + "has_stock_cfg": bool(row), + "cfg": row_to_ui_dict(row) if row else None, + }) + if request.method == "DELETE": + code = (request.args.get("code") or "").strip().upper() + if not code: + body = request.get_json(force=True, silent=True) or {} + code = str(body.get("code") or "").strip().upper() + if not code: + return jsonify({"error": "code 필수"}), 400 + ok = delete_us_momentum_stock_config(db, code) + return jsonify({"ok": ok, "code": code}) + body = request.get_json(force=True, silent=True) or {} + code = str(body.get("code") or "").strip().upper() + if not code: + return jsonify({"error": "code 필수"}), 400 + fields = {} + for k in ( + "sl_pct", "tp_pct", "tp_max_pct", + "shoulder_min_high_pct", "shoulder_cut_pct", + "trail_pct", "trail_arm_pct", "ratchet_tiers", + "max_hold_bars", "cooldown_sec", "max_daily", "slot_money", + "rsi_min", "rsi_max", "vol_mult", "vol_win", + "chase_lookback_min", "pullback_lookback_min", + "pullback_min_pct", "pullback_max_pct", + "setup_vol_max_mult", "setup_bear_bars_min", + "high_chase_thr", "max_daily_chg", "min_price", + "ema_fast_period", "ema_slow_period", + "use_defense_filters", "use_high_chase_filter", + "use_daily_range_filter", "use_ema_filter", "use_rsi_max_filter", + "pattern_breakout", "pattern_pullback", + ): + if k not in body: + continue + v = body.get(k) + if v is None or v == "": + fields[k] = None + elif k.startswith("use_") or k.startswith("pattern_"): + fields[k] = 1 if str(v).lower() in ("1", "true", "yes", "on") else 0 + elif k == "ratchet_tiers": + fields[k] = str(v).strip() + else: + try: + fields[k] = float(v) if "." in str(v) or k.endswith("_pct") or k in ( + "slot_money", "vol_mult", "rsi_min", "rsi_max", + "high_chase_thr", "max_daily_chg", "min_price", + "pullback_min_pct", "pullback_max_pct", "setup_vol_max_mult", + ) else int(float(v)) + except (TypeError, ValueError): + fields[k] = v + ok = upsert_us_momentum_stock_config( + db, + code, + exchange=str(body.get("exchange") or "NASD"), + symbol=str(body.get("symbol") or code), + name=str(body.get("name") or code), + stock_group=str(body.get("stock_group") or "STOCK"), + fields=fields, + ) + row = get_us_momentum_stock_row(db, code) if ok else None + return jsonify({ + "ok": ok, + "code": code, + "cfg": row_to_ui_dict(row) if row else None, + }) + finally: + db.close() + except Exception as e: + logger.error("api_us_momentum_stock_cfg: %s", e) + return jsonify({"error": str(e)}), 500 + + @app.route("/api/backtest/momentum/search_results", methods=["GET"]) def api_backtest_momentum_search_results(): """최신 param_search_momentum JSON 상위 N — 웹 폼 프리필·Apply UX.""" @@ -3759,6 +4388,165 @@ def _momentum_tab_save_patch(body: Dict[str, Any]) -> Dict[str, str]: return patch +def _us_momentum_tab_save_patch(body: Dict[str, Any]) -> Dict[str, str]: + """해외 모멘텀 탭 → US_MOMENTUM_* 만 (국내 MOMENTUM_/SCALP_ 이중저장 금지).""" + if not isinstance(body, dict): + return {} + patch: Dict[str, str] = {} + + def gv(key: str) -> Any: + v = body.get(key) + if v is None or v == "": + return None + return v + + x = gv("mom_rsi_min") + if x is not None: + patch["US_MOMENTUM_RSI_MIN"] = str(float(x)) + x = gv("mom_rsi_max") + if x is not None: + patch["US_MOMENTUM_RSI_MAX"] = str(float(x)) + x = gv("mom_vol_mult") + if x is not None: + patch["US_MOMENTUM_VOL_MULT"] = str(float(x)) + x = gv("mom_vol_win") + if x is not None: + patch["US_MOMENTUM_VOL_WIN"] = str(int(float(x))) + x = gv("time_start") + if x is not None: + patch["US_MOMENTUM_TIME_START"] = str(int(float(x))) + x = gv("time_end") + if x is not None: + patch["US_MOMENTUM_TIME_END"] = str(int(float(x))) + x = gv("sell_time_end") + if x is not None: + patch["US_MOMENTUM_SELL_TIME_END"] = str(int(float(x))) + + x = gv("sl_pct") + if x is not None: + patch["US_MOMENTUM_STOP_LOSS_PCT"] = str(abs(float(x)) / 100.0) + x = gv("tp_pct") + if x is not None: + patch["US_MOMENTUM_TAKE_PROFIT_PCT"] = str(abs(float(x)) / 100.0) + x = gv("tp_max_pct") + if x is not None: + patch["US_MOMENTUM_TP_MAX_PCT"] = str(abs(float(x)) / 100.0) + + x = gv("shoulder_min_high") + if x is not None: + patch["US_MOMENTUM_SHOULDER_MIN_HIGH_PCT"] = str(abs(float(x)) / 100.0) + x = gv("shoulder_cut_pct") + if x is not None: + patch["US_MOMENTUM_SHOULDER_CUT_PCT"] = str(abs(float(x)) / 100.0) + + x = gv("trail_pct") + if x is not None: + patch["US_MOMENTUM_TRAIL_PCT"] = str(abs(float(x)) / 100.0) + x = gv("trail_arm_pct") + if x is not None: + patch["US_MOMENTUM_TRAIL_ARM_PCT"] = str(abs(float(x)) / 100.0) + x = gv("max_hold_bars") + if x is not None: + patch["US_MOMENTUM_MAX_HOLD_BARS"] = str(int(float(x))) + x = gv("ratchet_tiers") + if x is not None: + patch["US_MOMENTUM_RATCHET_TIERS"] = str(x).strip() + + x = gv("cooldown_min") + if x is not None: + patch["US_MOMENTUM_COOLDOWN_SEC"] = str(int(float(x) * 60)) + x = gv("max_daily") + if x is not None: + patch["US_MOMENTUM_MAX_DAILY"] = str(int(float(x))) + x = gv("slots") + if x is not None: + patch["US_MOMENTUM_MAX_STOCKS"] = str(int(float(x))) + x = gv("slot_money") + if x is not None: + sms = str(int(float(x))) + patch["US_MOMENTUM_SLOT_MONEY"] = sms + patch["US_MOMENTUM_MAX_BUY_AMOUNT"] = sms + x = gv("total_budget_krw") + if x is not None: + patch["US_MOMENTUM_TOTAL_BUDGET"] = str(int(float(x))) + + x = gv("high_chase_thr") + if x is not None: + hx = float(x) + patch["US_MOMENTUM_HIGH_CHASE_THR"] = str(hx if 0 < hx <= 1 else hx / 100.0) + x = gv("max_daily_chg") + if x is not None: + patch["US_MOMENTUM_MAX_DAILY_CHG"] = str(float(x)) + x = gv("min_price") + if x is not None: + patch["US_MOMENTUM_MIN_PRICE"] = str(float(x)) + x = gv("max_loss_krw") + if x is not None: + patch["US_MOMENTUM_MAX_LOSS_PER_TRADE"] = str(int(float(x))) + x = gv("min_margin") + if x is not None: + patch["US_MOMENTUM_MIN_PROFIT_PCT"] = str(float(x)) + + x = gv("mom_max_from_open_pct") + if x is not None: + patch["US_MOMENTUM_MAX_FROM_OPEN_PCT"] = str(float(x)) + x = gv("mom_min_from_open_pct") + if x is not None: + patch["US_MOMENTUM_MIN_FROM_OPEN_PCT"] = str(float(x)) + + if "use_defense_filters" in body: + patch["US_MOMENTUM_USE_DEFENSE_FILTERS"] = _env_bool_10(body.get("use_defense_filters")) + if "use_high_chase_filter" in body: + patch["US_MOMENTUM_USE_HIGH_CHASE_FILTER"] = _env_bool_10(body.get("use_high_chase_filter")) + if "use_daily_range_filter" in body: + patch["US_MOMENTUM_USE_DAILY_RANGE_FILTER"] = _env_bool_10(body.get("use_daily_range_filter")) + if "use_ema_filter" in body: + patch["US_MOMENTUM_USE_EMA_FILTER"] = _env_bool_10(body.get("use_ema_filter")) + if "use_rsi_max_filter" in body: + patch["US_MOMENTUM_USE_RSI_MAX_FILTER"] = _env_bool_10(body.get("use_rsi_max_filter")) + if "pattern_breakout" in body: + patch["US_MOMENTUM_PATTERN_BREAKOUT"] = _env_bool_10(body.get("pattern_breakout")) + if "pattern_pullback" in body: + patch["US_MOMENTUM_PATTERN_PULLBACK"] = _env_bool_10(body.get("pattern_pullback")) + + x = gv("chase_lookback_min") + if x is not None: + patch["US_MOMENTUM_CHASE_LOOKBACK_MIN"] = str(int(float(x))) + x = gv("pullback_lookback_min") + if x is not None: + patch["US_MOMENTUM_PULLBACK_LOOKBACK_MIN"] = str(int(float(x))) + x = gv("pullback_min_pct") + if x is not None: + patch["US_MOMENTUM_PULLBACK_MIN_PCT"] = str(float(x)) + x = gv("pullback_max_pct") + if x is not None: + patch["US_MOMENTUM_PULLBACK_MAX_PCT"] = str(float(x)) + x = gv("setup_vol_max_mult") + if x is not None: + patch["US_MOMENTUM_SETUP_VOL_MAX_MULT"] = str(float(x)) + x = gv("setup_bear_bars_min") + if x is not None: + patch["US_MOMENTUM_SETUP_BEAR_BARS_MIN"] = str(int(float(x))) + x = gv("ema_fast_period") + if x is not None: + patch["US_MOMENTUM_EMA_FAST_PERIOD"] = str(int(float(x))) + x = gv("ema_slow_period") + if x is not None: + patch["US_MOMENTUM_EMA_SLOW_PERIOD"] = str(int(float(x))) + + if "eod_enabled" in body: + patch["US_MOMENTUM_EOD_ENABLED"] = _env_bool_10(body.get("eod_enabled")) + x = gv("eod_hm") + if x is not None: + eod_s = str(x).strip() + if eod_s and ":" not in eod_s and len(eod_s) == 4 and eod_s.isdigit(): + eod_s = f"{eod_s[:2]}:{eod_s[2:]}" + patch["US_MOMENTUM_EOD_HM"] = eod_s + + patch.update(_daily_trail_save_patch(body, "US_MOMENTUM")) + return patch + + def _scalp_reversal_tab_save_patch(body: Dict[str, Any]) -> Dict[str, str]: """스캘핑 reversal 탭 saveScalpConfig JSON → SCALP_* env.""" if not isinstance(body, dict): @@ -4469,13 +5257,17 @@ def api_backtest_tail(): } start_ymd = start_key[:8] end_ymd = end_key[:8] + _univ_hs = _parse_universe_history_source_arg(request) universe_by_slot, universe_source, universe_history_slots, _scan_iv = ( tbc.resolve_tail_universe( - start_ymd, end_ymd, use_saved_history=use_saved_history_tail, + start_ymd, end_ymd, + use_saved_history=use_saved_history_tail, + history_source=_univ_hs, ) ) params["scan_interval_min"] = _scan_iv params["timeframe"] = tail_tf + params["_universe_history_source"] = _univ_hs # 백테 전용 필터 토글 (이 1회 백테에만 적용. 비우면 DB=실매값) _ob_tg = _backtest_filter_toggle(request.args.get("ob_filter")) if _ob_tg is not None: @@ -4946,27 +5738,15 @@ def api_backtest_breakout(): start_key = (start.replace("-", "") + "0000") if start else "20260101" end_key = (end.replace("-", "") + "2359") if end else "99991231" - codes_raw = db.conn.execute( - "SELECT DISTINCT code FROM ws_candles WHERE timeframe=1 " - "AND candle_time >= %s AND candle_time <= %s ORDER BY code", - [start_key, end_key], - ).fetchall() - codes = [r["code"] for r in codes_raw] + _univ_hs = _parse_universe_history_source_arg(request) + from kis_trader.backtest.breakout_backtest_common import load_breakout_candles_by_code - codes_candles: Dict[str, List[Dict]] = {} - for code in codes: - rows = db.conn.execute( - "SELECT candle_time, open, high, low, close, volume " - "FROM ws_candles " - "WHERE timeframe=1 AND code=%s " - "AND candle_time >= %s AND candle_time <= %s " - "AND is_confirmed=1 " - "ORDER BY candle_time ASC", - [code, start_key, end_key], - ).fetchall() - if len(rows) < 5: - continue - codes_candles[code] = [dict(r) for r in rows] + codes_candles, _ = load_breakout_candles_by_code( + db, start_key, end_key, + lookback_min=int(engine.get("lookback_min") or 1), + vol_window=int(engine.get("vol_window") or 7), + history_source=_univ_hs, + ) use_saved_history, bo_univ_mode, _ = _parse_backtest_universe_arg( request, default="history", sim_kind=None, @@ -4979,8 +5759,12 @@ def api_backtest_breakout(): use_saved_history, codes_candles, strategy_id="BREAKOUT", + history_source=_univ_hs, ) ) + # scan_at 타임라인 ↔ 슬롯 dict 동일 이력소스 + # (engine_params 는 아래 ui/engine 병합 시 복사되므로 engine에도 넣음) + engine["_universe_history_source"] = _univ_hs latest_env = db.get_latest_env() env_row = dict(latest_env["snapshot"]) if latest_env else {} @@ -5226,6 +6010,7 @@ def api_backtest_range_break(): use_saved_history, codes_candles, strategy_id="RANGE_BREAK", + history_source=_parse_universe_history_source_arg(request), ) ) @@ -6308,33 +7093,276 @@ def api_updown_box_stock_cfg_save(): db.close() +# ── US 모멘텀: 해외 1분봉 → ws_candles.market=US ────────────────────────── +_us_candle_fetch_jobs: Dict[str, Dict[str, Any]] = {} + + +@app.route("/api/ws_candles/fetch_us", methods=["POST"]) +def api_ws_candles_fetch_us(): + """ + 영구구독 US 전 종목(또는 body.codes) KIS 해외 분봉 → ws_candles (market=US). + 기본 tf=1. rollup_3m=true 면 1m→3m 롤업 후 저장 (국내 갭보정과 동일 철학). + """ + import threading + import uuid as _uuid + body = request.get_json(force=True, silent=True) or {} + start = str(body.get("start") or "").strip() + end = str(body.get("end") or "").strip() or start + try: + tf = int(body.get("tf", 1)) + except (TypeError, ValueError): + tf = 1 + if tf not in (1, 3, 5, 15, 30, 60): + return jsonify({"error": f"tf 허용: 1/3/5/15/30/60 (요청 {tf})"}), 400 + rollup_3m = str(body.get("rollup_3m", True)).lower() in ("1", "true", "yes", "on") + if not start: + return jsonify({"error": "start 필수"}), 400 + + codes_req = body.get("codes") + job_id = _uuid.uuid4().hex[:8] + _us_candle_fetch_jobs[job_id] = { + "status": "running", + "saved": 0, + "codes": 0, + "rollup_3m": 0, + "current": "", + "error": None, + } + + def _run(): + import holding_bot as hb + from permanent_subs import codes_by_market + from kis_trader.engine.candle_rollup import rollup_1m_bars_to_tf + db = _db() + try: + if codes_req: + rows = [ + { + "code": str(c).upper(), + "exchange": "NASD", + "symbol": str(c).upper(), + } + for c in codes_req + ] + else: + rows = codes_by_market(db, "US", enabled_only=True) + if not rows: + raise RuntimeError("영구구독 US 종목 없음") + job = _us_candle_fetch_jobs[job_id] + job["codes"] = len(rows) + total_saved = 0 + total_rollup = 0 + for r in rows: + code = str(r.get("code") or "").upper() + ex = str(r.get("exchange") or "NASD").upper() + sym = str(r.get("symbol") or code).upper() + job["current"] = f"{code}/{sym}" + bars = hb.fetch_60min_via_kiwoom( + code=code, + start_date=start, + end_date=end, + kiwoom_key="", + kiwoom_secret="", + is_mock=False, + tf_min=tf, + market_type="US", + exchange=ex, + symbol=sym, + ) + norm_1m = [] + for b in bars or []: + cd = str(b.get("candle_date") or "") + digits = "".join(ch for ch in cd if ch.isdigit()) + ctime = (digits + "0000")[:12] + if len(ctime) < 12: + continue + row_bar = { + "candle_time": ctime, + "open": float(b.get("open") or 0), + "high": float(b.get("high") or 0), + "low": float(b.get("low") or 0), + "close": float(b.get("close") or 0), + "volume": int(b.get("volume") or 0), + } + if row_bar["close"] <= 0: + continue + norm_1m.append(row_bar) + db.upsert_ws_candle( + code=code, + timeframe=tf, + candle_time=ctime, + open_=row_bar["open"], + high=row_bar["high"], + low=row_bar["low"], + close=row_bar["close"], + volume=row_bar["volume"], + is_confirmed=1, + source="kis_us_rest", + market="US", + ) + total_saved += 1 + if rollup_3m and tf == 1 and norm_1m: + rolled = rollup_1m_bars_to_tf(norm_1m, 3) or [] + for rb in rolled: + ctime = str(rb.get("candle_time") or "")[:12] + if len(ctime) < 12: + continue + db.upsert_ws_candle( + code=code, + timeframe=3, + candle_time=ctime, + open_=float(rb.get("open") or 0), + high=float(rb.get("high") or 0), + low=float(rb.get("low") or 0), + close=float(rb.get("close") or 0), + volume=int(rb.get("volume") or 0), + is_confirmed=1, + source="rollup_1m", + market="US", + ) + total_rollup += 1 + job["saved"] = total_saved + job["rollup_3m"] = total_rollup + job["status"] = "done" + job["current"] = "" + except Exception as e: + logger.exception("US ws_candles fetch 실패: %s", e) + _us_candle_fetch_jobs[job_id]["status"] = "error" + _us_candle_fetch_jobs[job_id]["error"] = str(e) + finally: + try: + db.close() + except Exception: + pass + + threading.Thread(target=_run, daemon=True, name=f"us-candle-{job_id}").start() + return jsonify({"ok": True, "job_id": job_id}) + + +@app.route("/api/ws_candles/fetch_us/status/", methods=["GET"]) +def api_ws_candles_fetch_us_status(job_id: str): + job = _us_candle_fetch_jobs.get(job_id) + if not job: + return jsonify({"error": "없는 job_id"}), 404 + return jsonify(job) + + @app.route("/api/permanent_subs", methods=["GET"]) def api_permanent_subs_list(): """영구구독(국내 WS + 해외 WS) 목록. 해외(US)는 ws_tr_key(D+거래소+심볼) 포함.""" import permanent_subs as ps + from kis_trader.utils.env import get_env_int + from kis_trader.utils.stock_name import resolve_stock_display_name + from kis_trader.utils.usd_krw_fx import get_display_usd_krw_rate + # light=1: 자동새로고침 — 종목명 REST 스킵 (느림 방지) + light = str(request.args.get("light") or "").strip().lower() in ( + "1", "true", "yes", "y", "on", + ) db = _db() try: ps.ensure_permanent_subs_table(db) + # 기존 60/15 혼재 → 기준봉(기본 1분)으로 정리 (1분이면 상위봉 롤업) + try: + nfix = ps.normalize_all_tf_to_base(db) + if nfix: + logger.info("영구구독 tf_min 기준봉 통일 %d건", nfix) + except Exception as e: + logger.debug("영구구독 tf 정규화 스킵: %s", e) + base_tf = int(get_env_int("PERM_SUB_BASE_TF_MIN", 1)) + if base_tf < 1: + base_tf = 1 rows = ps.list_permanent_subs(db, enabled_only=False) + # 현재가: ws_candles 만 (틱 전수스캔·외부 FX HTTP 금지) + try: + quotes = ps.last_quotes_for_codes( + db, + [str(r.get("code") or "") for r in rows], + tf_min=base_tf, + ) + except Exception as e: + logger.debug("영구구독 현재가 스킵: %s", e) + quotes = {} + try: + refresh_sec = int(get_env_int("PERM_SUB_UI_REFRESH_SEC", 15)) + except (TypeError, ValueError): + refresh_sec = 15 + if refresh_sec < 5: + refresh_sec = 5 + fx_rate = float(get_display_usd_krw_rate()) + fx_ymd = datetime.now().strftime("%Y-%m-%d") + # KR 종목명 일괄 보강용 클라이언트 (루프마다 새로 만들지 않음) + name_client = None out = [] for r in rows: mt = str(r.get("market_type") or "KR").strip().upper() ex = str(r.get("exchange") or "").strip().upper() - sym = str(r.get("symbol") or r.get("code") or "").strip().upper() - # 해외만 실시간 WS tr_key 표기, 국내는 종목코드 자체가 키 - ws_tr_key = ps.us_ws_tr_key(ex, sym) if mt == "US" else str(r.get("code") or "") + code = str(r.get("code") or "").strip().upper() + sym = str(r.get("symbol") or code).strip().upper() + ws_tr_key = ps.us_ws_tr_key(ex, sym) if mt == "US" else code + name = "" + if mt == "KR" and code: + try: + name = resolve_stock_display_name(db, code, fallback="") + if name == code: + name = "" + except Exception: + name = "" + if (not name) and (not light): + try: + if name_client is None: + from kis_trader.execution.kis_client import KISClient + # 시세/종목정보 = 실전 도메인 (모의 search-stock-info 500) + name_client = KISClient(mock=False) + fetched = name_client.inquire_stock_name(code) + if fetched and fetched != code: + name = fetched + if hasattr(db, "upsert_stock_meta"): + try: + db.upsert_stock_meta(code, name=name) + except Exception: + pass + except Exception as e: + logger.debug("영구구독 종목명 REST 스킵 %s: %s", code, e) + elif mt == "US": + name = sym + q = quotes.get(code) or {} + try: + px = float(q.get("price") or 0) + except (TypeError, ValueError): + px = 0.0 + price_krw = None + if mt == "US" and px > 0 and fx_rate > 0: + price_krw = int(round(px * fx_rate)) out.append({ - "code": r.get("code"), + "code": code, + "name": name or "", "market_type": mt, "exchange": ex, "symbol": sym, - "tf_min": r.get("tf_min"), + "tf_min": base_tf, "enabled": int(r.get("enabled", 1)), "note": r.get("note") or "", "ws_tr_key": ws_tr_key, + "price": px, + "price_krw": price_krw, + "price_src": q.get("price_src") or "", + "candle_time": q.get("candle_time") or "", + "tick_time": q.get("tick_time") or "", + "chg_pct": q.get("chg_pct"), + "volume": int(q.get("volume") or 0), + "quote_updated_at": q.get("updated_at") or "", }) - return jsonify({"ok": True, "rows": out}) + return jsonify({ + "ok": True, + "rows": out, + "base_tf_min": base_tf, + "refresh_sec": refresh_sec, + "fx_rate": round(fx_rate, 4), + "fx_ymd": fx_ymd, + "fx_pair": "USD/KRW", + "fx_note": "표시용(캐시/폴백) · 체결환율 아님", + }) except Exception as e: return jsonify({"ok": False, "error": str(e), "rows": []}), 500 finally: @@ -6345,15 +7373,19 @@ def api_permanent_subs_list(): def api_permanent_subs_save(): """영구구독 1건 등록/수정 (code UNIQUE upsert).""" import permanent_subs as ps + from kis_trader.utils.env import get_env_int body = request.get_json(force=True, silent=True) or {} code = str(body.get("code") or "").strip().upper() if not code: return jsonify({"ok": False, "error": "code 필수"}), 400 + # 기준봉 고정 (요청 tf 무시) — 1분 저장 + 롤업 try: - tf_min = int(float(body.get("tf_min") or 15)) + tf_min = int(get_env_int("PERM_SUB_BASE_TF_MIN", 1)) except (TypeError, ValueError): - tf_min = 15 + tf_min = 1 + if tf_min < 1: + tf_min = 1 db = _db() try: ps.upsert_permanent_sub( @@ -6366,7 +7398,7 @@ def api_permanent_subs_save(): enabled=bool(body.get("enabled", True)), note=str(body.get("note") or ""), ) - return jsonify({"ok": True, "code": code}) + return jsonify({"ok": True, "code": code, "tf_min": tf_min}) except Exception as e: return jsonify({"ok": False, "error": str(e)}), 500 finally: @@ -6392,9 +7424,6 @@ def api_permanent_subs_delete(): db.close() - db.close() - - # ───────────────────────────────────────────────────────────────────────────── # DART 수주 공시 SCAN / 워치 / 백테 # ───────────────────────────────────────────────────────────────────────────── @@ -6998,6 +8027,158 @@ def api_portfolio_active(): }) +def _portfolio_live_quote_enabled() -> bool: + from kis_trader.utils.env import get_env_bool + return bool(get_env_bool("PORTFOLIO_LIVE_QUOTE_ENABLED", True)) + + +def _portfolio_live_quote_ms() -> int: + from kis_trader.utils.env import get_env_int + return max(200, int(get_env_int("PORTFOLIO_LIVE_QUOTE_MS", 400) or 400)) + + +def _portfolio_live_quote_max_age_sec() -> float: + from kis_trader.utils.env import get_env_float + return max(1.0, float(get_env_float("PORTFOLIO_LIVE_QUOTE_MAX_AGE_SEC", 120.0) or 120.0)) + + +def _parse_live_quote_codes(raw: str) -> List[str]: + out: List[str] = [] + seen = set() + for part in str(raw or "").replace(";", ",").split(","): + c = part.strip() + if not c or c in seen: + continue + seen.add(c) + out.append(c) + if len(out) >= 80: + break + return out + + +def _recv_ts_age_ms(recv_ts: str) -> Optional[int]: + s = str(recv_ts or "").strip() + if not s: + return None + for fmt in ("%Y-%m-%d %H:%M:%S", "%Y-%m-%d %H:%M:%S.%f"): + try: + dt = datetime.strptime(s[:26], fmt) + return max(0, int((datetime.now() - dt).total_seconds() * 1000)) + except ValueError: + continue + return None + + +def _build_portfolio_live_quotes(codes: List[str]) -> Dict[str, Any]: + """ + ws_ticks / ws_ticks_us 최신 SELECT — 증권사 REST/WS 추가 호출 없음. + 국내 6자리 → KR, 그 외 → US. + day_chg_pct = 전일(직전세션) 종가 대비 당일 등락% (HTS 전일대비와 동일 취지). + """ + kr = [c for c in codes if c.isdigit() and len(c) == 6] + us = [c for c in codes if c not in set(kr)] + db = _db() + merged: Dict[str, Dict[str, Any]] = {} + prev_map: Dict[str, float] = {} + if kr: + merged.update(db.get_latest_ws_tick_quotes(kr, market="KR")) + prev_map.update(db.get_prev_close_map(kr, market="KR")) + if us: + merged.update(db.get_latest_ws_tick_quotes(us, market="US")) + prev_map.update(db.get_prev_close_map(us, market="US")) + max_age = _portfolio_live_quote_max_age_sec() + quotes: Dict[str, Dict[str, Any]] = {} + for code, q in merged.items(): + age_ms = _recv_ts_age_ms(str(q.get("recv_ts") or "")) + stale = age_ms is not None and (age_ms / 1000.0) > max_age + px = float(q.get("price") or 0) + prev = float(prev_map.get(code) or 0) + day_chg = None + if px > 0 and prev > 0: + day_chg = round((px - prev) / prev * 100.0, 4) + quotes[code] = { + "price": px, + "ts": q.get("recv_ts") or "", + "tick_time": q.get("tick_time") or "", + "source": q.get("source") or "", + "currency": q.get("currency") or "KRW", + "market": q.get("market") or "KR", + "age_ms": age_ms, + "stale": bool(stale), + "prev_close": prev if prev > 0 else None, + "day_chg_pct": day_chg, + } + return { + "ok": True, + "enabled": True, + "quotes": quotes, + "max_age_sec": max_age, + "interval_ms": _portfolio_live_quote_ms(), + } + + +@app.route("/api/portfolio/live_quotes", methods=["GET"]) +def api_portfolio_live_quotes(): + """보유·실거래「보유중」표시용 — DB 틱 스냅샷만 (매매 경로 비접촉).""" + if not _portfolio_live_quote_enabled(): + return jsonify({ + "ok": True, + "enabled": False, + "quotes": {}, + "interval_ms": _portfolio_live_quote_ms(), + }) + codes = _parse_live_quote_codes(request.args.get("codes") or "") + if not codes: + return jsonify({ + "ok": True, + "enabled": True, + "quotes": {}, + "interval_ms": _portfolio_live_quote_ms(), + }) + return jsonify(_build_portfolio_live_quotes(codes)) + + +@app.route("/api/portfolio/live_quotes_stream", methods=["GET"]) +def api_portfolio_live_quotes_stream(): + """SSE: 주기적으로 live_quotes 푸시. 브라우저 탭 닫으면 루프 종료.""" + if not _portfolio_live_quote_enabled(): + def _off() -> Generator[str, None, None]: + yield "data: " + json.dumps({ + "ok": True, "enabled": False, "quotes": {}, + }, ensure_ascii=False) + "\n\n" + return Response( + stream_with_context(_off()), + mimetype="text/event-stream", + headers={"Cache-Control": "no-cache", "X-Accel-Buffering": "no"}, + ) + + codes = _parse_live_quote_codes(request.args.get("codes") or "") + interval_s = _portfolio_live_quote_ms() / 1000.0 + + def _gen() -> Generator[str, None, None]: + while True: + try: + payload = _build_portfolio_live_quotes(codes) if codes else { + "ok": True, "enabled": True, "quotes": {}, + "interval_ms": _portfolio_live_quote_ms(), + } + yield "data: " + json.dumps(payload, ensure_ascii=False) + "\n\n" + except GeneratorExit: + break + except Exception as e: + logger.debug("live_quotes_stream: %s", e) + yield "data: " + json.dumps({ + "ok": False, "error": str(e)[:200], + }, ensure_ascii=False) + "\n\n" + time.sleep(interval_s) + + return Response( + stream_with_context(_gen()), + mimetype="text/event-stream", + headers={"Cache-Control": "no-cache", "X-Accel-Buffering": "no"}, + ) + + @app.route("/api/portfolio/sell", methods=["POST"]) def api_portfolio_sell(): """ @@ -7271,17 +8452,22 @@ def api_env_params(): from kis_trader.engine.momentum_engine import get_momentum_defaults_from_db as _mom_def_db from kis_trader.utils.kr_trading_day import trading_dates_payload _mom_ui = _momentum_ui_defaults_from_db(_mom_def_db()) + _us_mom_ui = _us_momentum_ui_defaults_from_db(snap) _scalp_ui = _scalp_ui_defaults_from_db() _bo_ui = _bo_defaults_from_db() _rb_ui = _rb_defaults_from_db() # 당일 누적손익 다단 트레일 현재값 + 프리셋 목록(꼬리와 공유) — 모멘텀·돌파 _dt_presets = str(snap.get("BT_DAILY_TRAIL_PRESETS") or "").strip() - for _ui, _pfx in ((_mom_ui, "MOMENTUM"), (_bo_ui, "BREAKOUT")): + for _ui, _pfx in ((_mom_ui, "MOMENTUM"), (_bo_ui, "BREAKOUT"), (_us_mom_ui, "US_MOMENTUM")): if isinstance(_ui, dict): _ui["daily_profit_enabled"] = ( str(snap.get(f"{_pfx}_DAILY_PROFIT_TARGET_ENABLED") or "false").strip().lower() in ("1", "true", "t", "y", "yes", "on") ) + _ui["daily_risk_budget_enabled"] = ( + str(snap.get(f"{_pfx}_DAILY_PROFIT_RISK_BUDGET_ENABLED") or "false").strip().lower() + in ("1", "true", "t", "y", "yes", "on") + ) _ui["daily_trail_tiers"] = str(snap.get(f"{_pfx}_DAILY_PROFIT_TRAIL_TIERS") or "").strip() _ui["daily_profit_mode"] = ( str(snap.get(f"{_pfx}_DAILY_PROFIT_MODE") or "trailing").strip().lower() or "trailing" @@ -7295,6 +8481,7 @@ def api_env_params(): "scalp": _scalp_ui, "tail": _tail_ui_defaults_from_db(snap), "momentum": _mom_ui, + "us_momentum": _us_mom_ui, "breakout": _bo_ui, "range_break": _rb_ui, "dbband": _dbband_ui_defaults_from_db(snap) if _DBBAND_ENGINE_AVAILABLE else {}, @@ -7522,6 +8709,499 @@ def _build_live_config_status( } +# ── Optuna 웹 잡 (타임아웃 회피: start 즉시 반환 + status 폴링) ───────────── +@app.route("/api/optuna/start", methods=["POST"]) +def api_optuna_start(): + """Optuna subprocess 시작. apply-best 없음. + body: strategies[] 또는 strategy, start, end, trials, mode[, symbol]. + symbol 있으면 us_momentum 종목 cfg Optuna (1종목). + """ + from kis_trader.backtest import optuna_web_jobs as owj + + body = request.get_json(silent=True) or {} + # form 도 허용 + strategy = (body.get("strategy") or request.form.get("strategy") or "").strip() + strategies = body.get("strategies") + if strategies is None and request.form.get("strategies"): + strategies = request.form.get("strategies") + start = (body.get("start") or request.form.get("start") or "").strip() + end = (body.get("end") or request.form.get("end") or "").strip() + mode = (body.get("mode") or request.form.get("mode") or "tpe").strip() + symbol = (body.get("symbol") or request.form.get("symbol") or "").strip() + try: + trials = int(body.get("trials") or request.form.get("trials") or 200) + except (TypeError, ValueError): + trials = 200 + try: + meta = owj.start_optuna_job( + strategy=strategy or None, + strategies=strategies, + start=start, + end=end, + trials=trials, + mode=mode, + symbol=symbol or None, + ) + return jsonify({"ok": True, "job": meta}) + except Exception as e: + logger.warning("optuna start failed: %s", e) + return jsonify({"ok": False, "error": str(e)}), 400 + + +@app.route("/api/optuna/status/", methods=["GET"]) +def api_optuna_status(job_id: str): + from kis_trader.backtest import optuna_web_jobs as owj + + meta = owj.load_job(job_id) + if not meta: + return jsonify({"ok": False, "error": "없는 job_id"}), 404 + return jsonify({"ok": True, "job": owj.refresh_job_status(meta)}) + + +@app.route("/api/optuna/jobs", methods=["GET"]) +def api_optuna_jobs(): + from kis_trader.backtest import optuna_web_jobs as owj + + limit = request.args.get("limit", 20, type=int) + sort = (request.args.get("sort") or "started").strip().lower() + if sort not in ("started", "finished"): + sort = "started" + # CLI/순차 스크립트 JSON 도 웹 목록에 보이게 (기본 ON) + import_cli = request.args.get("import_cli", "1") + imported = [] + if str(import_cli).strip() not in ("0", "false", "False", "no"): + try: + imported = owj.import_recent_cli_results(limit_per_strategy=3) + except Exception as e: + logger.warning("optuna import_cli: %s", e) + jobs = [] + for m in owj.list_jobs(limit, sort=sort): + try: + jobs.append(owj.refresh_job_status(m)) + except Exception: + jobs.append(m) + # refresh 가 save 해도 정렬 키는 started/finished — 응답 직전에 한 번 더 정렬 + jobs.sort(key=lambda x: owj._job_sort_ts(x, sort), reverse=True) + return jsonify({"ok": True, "jobs": jobs, "imported_n": len(imported), "sort": sort}) + + +@app.route("/api/optuna/import-cli", methods=["POST"]) +def api_optuna_import_cli(): + """results/optuna_*_tpe_*.json → 웹 잡 목록 등록.""" + from kis_trader.backtest import optuna_web_jobs as owj + + body = request.get_json(silent=True) or {} + try: + lim = int(body.get("limit_per_strategy") or 3) + except (TypeError, ValueError): + lim = 3 + try: + imported = owj.import_recent_cli_results(limit_per_strategy=lim) + return jsonify({ + "ok": True, + "imported_n": len(imported), + "jobs": imported, + }) + except Exception as e: + return jsonify({"ok": False, "error": str(e)}), 400 + + +@app.route("/api/optuna/active", methods=["GET"]) +def api_optuna_active(): + """상단 바용: 실행 중 잡 + (참고) CLI 외부 프로세스.""" + from kis_trader.backtest import optuna_web_jobs as owj + + running = owj.find_running_jobs() + external = owj.any_optuna_python_running() + latest = None + try: + lp = Path(__file__).resolve().parent / "logs" / "optuna_web_latest_job.txt" + if lp.is_file(): + jid = lp.read_text(encoding="utf-8").strip() + if jid: + meta = owj.load_job(jid) + if meta: + latest = owj.refresh_job_status(meta) + except Exception: + latest = None + return jsonify({ + "ok": True, + "running": running, + "latest": latest, + "external": external, + }) + + +@app.route("/api/optuna/stop/", methods=["POST"]) +def api_optuna_stop(job_id: str): + from kis_trader.backtest import optuna_web_jobs as owj + + try: + meta = owj.stop_optuna_job(job_id) + return jsonify({"ok": True, "job": meta}) + except FileNotFoundError: + return jsonify({"ok": False, "error": "없는 job_id"}), 404 + except Exception as e: + return jsonify({"ok": False, "error": str(e)}), 400 + + +@app.route("/api/optuna/defaults", methods=["GET"]) +def api_optuna_defaults(): + """날짜 기본값(거래일).""" + from kis_trader.utils.kr_trading_day import ( + default_kr_trading_end, + default_kr_trading_start, + ) + + end = default_kr_trading_end() + start = default_kr_trading_start(1, end=end) # 최근 2거래일 느낌: end-1일 보정 + return jsonify({ + "ok": True, + "start": start, + "end": end, + "trials": 200, + "mode": "tpe", + "strategies": ["momentum", "tail", "breakout", "scalp", "all"], + "note": "apply-best 없음. 탐색 게이트 WR/PF=0, 사후 results_gated.", + }) + + +@app.route("/api/optuna/candidate", methods=["GET"]) +def api_optuna_candidate(): + """보기: gated/learn/mode 후보 파라미터 미리보기.""" + from kis_trader.backtest import optuna_web_jobs as owj + + job_id = (request.args.get("job_id") or "").strip() or None + result_json = (request.args.get("result_json") or "").strip() or None + source = (request.args.get("source") or "gated").strip() + try: + rank = int(request.args.get("rank") or 1) + except (TypeError, ValueError): + rank = 1 + try: + out = owj.get_candidate_detail( + job_id=job_id, result_json=result_json, source=source, rank=rank, + ) + return jsonify(out) + except Exception as e: + return jsonify({"ok": False, "error": str(e)}), 400 + + +@app.route("/api/optuna/apply", methods=["POST"]) +def api_optuna_apply(): + """완료 잡의 gated/mode/learn 후보 → DB 적용 (confirm 후 호출). + body.symbol 있으면 us_momentum → stock_config 행만. + """ + from kis_trader.backtest import optuna_web_jobs as owj + + body = request.get_json(silent=True) or {} + job_id = (body.get("job_id") or "").strip() or None + result_json = (body.get("result_json") or "").strip() or None + source = (body.get("source") or "gated").strip() + symbol = (body.get("symbol") or "").strip() or None + exchange = (body.get("exchange") or "").strip() or None + stock_group = (body.get("stock_group") or "").strip() or None + try: + rank = int(body.get("rank") or 1) + except (TypeError, ValueError): + rank = 1 + force = bool(body.get("allow_non_positive_pnl")) + try: + out = owj.apply_optuna_result( + job_id=job_id, + result_json=result_json, + source=source, + rank=rank, + allow_non_positive_pnl=force, + symbol=symbol, + exchange=exchange, + stock_group=stock_group, + ) + return jsonify(out) + except Exception as e: + logger.warning("optuna apply failed: %s", e) + return jsonify({"ok": False, "error": str(e)}), 400 + + +# ── 전략 백테 CLI 잡 (꼬리·스캘핑·돌파·모멘텀 공용) ───────────────────────── +@app.route("/api/backtest/job/start", methods=["POST"]) +def api_bt_job_start(): + """백그라운드 백테 시작. strategy=tail|scalp|breakout|momentum.""" + from kis_trader.backtest import bt_web_jobs as bj + + body = request.get_json(silent=True) or {} + strategy = (body.get("strategy") or "tail").strip().lower() + start = (body.get("start") or "").strip() + end = (body.get("end") or "").strip() + try: + tf_raw = body.get("timeframe") or body.get("tf") + tf = int(tf_raw) if tf_raw not in (None, "") else None + except (TypeError, ValueError): + tf = None + univ = (body.get("universe") or "history").strip().lower() + hist_src = (body.get("universe_history_source") or "").strip().lower() or None + tick_db = body.get("backtest_use_tick_db") + tick_exit = body.get("backtest_use_tick_exit") + if tick_db is not None: + tick_db = str(tick_db).strip().lower() in ("1", "true", "t", "y", "yes", "on") + if tick_exit is not None: + tick_exit = str(tick_exit).strip().lower() in ("1", "true", "t", "y", "yes", "on") + ob = (body.get("orderbook_filter") or "off").strip().lower() or "off" + env_tl = str(body.get("env_timeline") or "").strip().lower() in ( + "1", "true", "t", "y", "yes", "on", + ) + try: + job = bj.start_bt_job( + strategy=strategy, + start=start, + end=end, + timeframe=tf, + universe=univ, + universe_history_source=hist_src, + tick_db=tick_db, + tick_exit=tick_exit, + orderbook_filter=ob, + env_timeline=env_tl, + ) + return jsonify({"ok": True, "job": job}) + except Exception as e: + logger.warning("bt job start failed: %s", e) + return jsonify({"ok": False, "error": str(e)}), 400 + + +@app.route("/api/backtest/job/status", methods=["GET"]) +def api_bt_job_status(): + from kis_trader.backtest import bt_web_jobs as bj + + job_id = (request.args.get("job_id") or "").strip() + if not job_id: + return jsonify({"ok": False, "error": "job_id 필요"}), 400 + job = bj.refresh_job(job_id) + if not job: + return jsonify({"ok": False, "error": "job 없음"}), 404 + return jsonify({"ok": True, "job": job}) + + +@app.route("/api/backtest/job/stop", methods=["POST"]) +def api_bt_job_stop(): + from kis_trader.backtest import bt_web_jobs as bj + + body = request.get_json(silent=True) or {} + job_id = (body.get("job_id") or request.args.get("job_id") or "").strip() + if not job_id: + return jsonify({"ok": False, "error": "job_id 필요"}), 400 + try: + job = bj.stop_bt_job(job_id) + return jsonify({"ok": True, "job": job}) + except Exception as e: + return jsonify({"ok": False, "error": str(e)}), 400 + + +@app.route("/api/backtest/job/result", methods=["GET"]) +def api_bt_job_result(): + from kis_trader.backtest import bt_web_jobs as bj + + job_id = (request.args.get("job_id") or "").strip() + if not job_id: + return jsonify({"ok": False, "error": "job_id 필요"}), 400 + job = bj.refresh_job(job_id) + if not job: + return jsonify({"ok": False, "error": "job 없음"}), 404 + rj = job.get("result_json") + if not rj or not Path(str(rj)).is_file(): + return jsonify({"ok": False, "error": "결과 파일 없음", "job": job}), 404 + try: + data = json.loads(Path(str(rj)).read_text(encoding="utf-8")) + except Exception as e: + return jsonify({"ok": False, "error": f"결과 파싱 실패: {e}"}), 400 + web_shaped = bool( + data.get("summary") + and (data.get("equity") is not None or data.get("trades") is not None) + ) + out = { + "ok": True, + "job_id": job_id, + "strategy": job.get("strategy") or data.get("strategy") or "tail", + "result_json": str(rj), + "summary": data.get("summary") or {}, + "trades": data.get("trades") or [], + "meta": data.get("meta") or {}, + "params": data.get("params") or {}, + "params_used": data.get("params_used") or {}, + "equity": data.get("equity") or [], + "daily": data.get("daily") or [], + "reasons": data.get("reasons") or {}, + "timeframe": data.get("timeframe") or job.get("timeframe"), + "universe_source": data.get("universe_source") + or ((data.get("params") or {}).get("universe_source")) + or job.get("universe"), + "data": data if web_shaped else data.get("data"), + "raw": data, + } + return jsonify(out) + + +# 하위호환: 꼬리 전용 URL +@app.route("/api/backtest/tail/job/start", methods=["POST"]) +def api_tail_bt_job_start(): + body = dict(request.get_json(silent=True) or {}) + body["strategy"] = "tail" + # 기존 클라이언트가 timeframe 기본을 기대 + if body.get("timeframe") in (None, ""): + body["timeframe"] = 3 + with app.test_request_context( + "/api/backtest/job/start", method="POST", json=body, + ): + return api_bt_job_start() + + +@app.route("/api/backtest/tail/job/status", methods=["GET"]) +def api_tail_bt_job_status(): + return api_bt_job_status() + + +@app.route("/api/backtest/tail/job/stop", methods=["POST"]) +def api_tail_bt_job_stop(): + return api_bt_job_stop() + + +@app.route("/api/backtest/tail/job/result", methods=["GET"]) +def api_tail_bt_job_result(): + return api_bt_job_result() + + +# ── 운영/모의(KIS_MOCK) 토글 — 매매 클라이언트만. 시세 실키는 유지. ───────── +_KIS_TRADER_UNIT = "kis_trader_main.service" + + +def _systemctl_kis_trader(verb: str, *, use_sudo: bool = True, timeout: int = 30) -> Tuple[int, str]: + """kis_trader_main.service 전용 systemctl (mm_butler 와 동일 화이트리스트).""" + cmd: List[str] = [] + if use_sudo: + cmd.append("sudo") + cmd.extend(["/bin/systemctl", verb, _KIS_TRADER_UNIT]) + try: + r = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout) + out = ((r.stdout or "") + (r.stderr or "")).strip() + return int(r.returncode), out + except subprocess.TimeoutExpired: + return 124, "systemctl 시간 초과" + except FileNotFoundError as e: + return 127, f"systemctl 불가: {e}" + except Exception as e: + return 1, str(e) + + +def _kis_mock_from_db() -> bool: + from kis_trader.utils.env import get_env_bool, invalidate_merged_env_cache + + invalidate_merged_env_cache() + return bool(get_env_bool("KIS_MOCK", True)) + + +def _kis_mock_status_payload() -> Dict[str, Any]: + kis_mock = _kis_mock_from_db() + rc, status = _systemctl_kis_trader("is-active", use_sudo=False, timeout=10) + bot_active = (status or "").strip() == "active" + return { + "ok": True, + "kis_mock": kis_mock, + "label": "모의" if kis_mock else "실전", + "bot_active": bot_active, + "bot_status": (status or "").strip() or "unknown", + "unit": _KIS_TRADER_UNIT, + "is_active_rc": rc, + } + + +@app.route("/api/ops/kis_mock", methods=["GET"]) +def api_ops_kis_mock_get(): + """매매 모의/실전(KIS_MOCK) + 봇 active 상태.""" + try: + return jsonify(_kis_mock_status_payload()) + except Exception as e: + logger.exception("ops kis_mock GET 실패") + return jsonify({"ok": False, "error": str(e)}), 500 + + +@app.route("/api/ops/kis_mock", methods=["POST"]) +def api_ops_kis_mock_set(): + """KIS_MOCK DB 저장 후 kis_trader_main 재시작 (매매 client 재생성). + + 시세 market_client(실키) 정책은 봇 기동 로직 그대로. 웹 프로세스는 재시작하지 않음. + """ + body = request.get_json(silent=True) or {} + raw = body.get("kis_mock", None) + if raw is None: + return jsonify({"ok": False, "error": "kis_mock 필수"}), 400 + if isinstance(raw, bool): + want_mock = raw + else: + want_mock = str(raw).strip().lower() in ("1", "true", "t", "yes", "y", "on") + + db_ok = False + env_id = None + try: + from kis_trader.utils.env import invalidate_merged_env_cache + + db = TradeDB() + try: + env_id = db.insert_env_snapshot({ + "KIS_MOCK": "true" if want_mock else "false", + }) + db_ok = bool(env_id) + finally: + db.close() + invalidate_merged_env_cache() + except Exception as e: + logger.exception("ops kis_mock DB 저장 실패") + return jsonify({ + "ok": False, + "db_ok": False, + "restart_ok": False, + "error": f"DB 저장 실패: {e}", + }), 500 + + if not db_ok: + return jsonify({ + "ok": False, + "db_ok": False, + "restart_ok": False, + "error": "insert_env_snapshot 실패", + }), 500 + + rc, out = _systemctl_kis_trader("restart", use_sudo=True, timeout=45) + # 기동 여유 + import time as _time + _time.sleep(2.0) + rc2, status = _systemctl_kis_trader("is-active", use_sudo=False, timeout=10) + bot_active = (status or "").strip() == "active" + restart_ok = (rc == 0 and bot_active) + payload = { + "ok": bool(db_ok and restart_ok), + "db_ok": db_ok, + "env_id": env_id, + "kis_mock": want_mock, + "label": "모의" if want_mock else "실전", + "restart_ok": restart_ok, + "restart_rc": rc, + "restart_out": out, + "bot_active": bot_active, + "bot_status": (status or "").strip() or "unknown", + "is_active_rc": rc2, + "unit": _KIS_TRADER_UNIT, + "note": "시세는 실키 유지 · 매매/계좌만 KIS_MOCK", + } + if not restart_ok: + payload["error"] = ( + f"DB는 저장됨(KIS_MOCK={'true' if want_mock else 'false'}) " + f"하지만 봇 재시작 실패(rc={rc}, status={status}). " + f"수동: sudo systemctl restart {_KIS_TRADER_UNIT}" + ) + return jsonify(payload), 500 + return jsonify(payload) + + @app.route("/") def index(): return render_template("backtest.html") diff --git a/config_schema.py b/config_schema.py index f5cc067..5cb5534 100644 --- a/config_schema.py +++ b/config_schema.py @@ -16,6 +16,7 @@ CONFIG_TABLE_NAMES: Tuple[str, ...] = ( "config_scalp", "config_short", "config_momentum", + "config_us_momentum", "config_breakout", "config_range_break", "config_updow", @@ -27,6 +28,7 @@ STRATEGY_ID_TO_TABLE: Dict[str, str] = { "SCALP": "config_scalp", "SHORT": "config_short", "MOMENTUM": "config_momentum", + "US_MOMENTUM": "config_us_momentum", "BREAKOUT": "config_breakout", "RANGE_BREAK": "config_range_break", "UPDOW": "config_updow", @@ -39,6 +41,7 @@ _EXPLICIT_KEY_TABLE: Dict[str, str] = { "STRATEGY_SCALP_ENABLED": "config_scalp", "STRATEGY_SHORT_ENABLED": "config_short", "STRATEGY_MOMENTUM_ENABLED": "config_momentum", + "STRATEGY_US_MOMENTUM_ENABLED": "config_us_momentum", "STRATEGY_BREAKOUT_ENABLED": "config_breakout", "STRATEGY_RANGE_BREAK_ENABLED": "config_range_break", "STRATEGY_UPDOW_ENABLED": "config_updow", @@ -101,6 +104,9 @@ def classify_config_key(key: str) -> str: return "config_breakout" if k.startswith("RANGE_BREAK_"): return "config_range_break" + # US_MOMENTUM_* 는 MOMENTUM_* 보다 먼저 (접두 접힘 방지) + if k.startswith("US_MOMENTUM_") or k == "STRATEGY_US_MOMENTUM_ENABLED": + return "config_us_momentum" if k.startswith("MOMENTUM_"): return "config_momentum" if k.startswith("SCALP_"): diff --git a/database.py b/database.py index 27bbc0b..8dffd59 100644 --- a/database.py +++ b/database.py @@ -277,7 +277,7 @@ ENV_CONFIG_KEYS = ( "SCAN_MIN_PREV_DAY_PCT", "UPDATE_UNIVERSE_MIN_CANDIDATES", "UPDATE_UNIVERSE_MIN_SCORE", "UPDATE_UNIVERSE_FALLBACK_TOP_N", "UPDATE_UNIVERSE_TOP_LOG", "UPDATE_UNIVERSE_TOP_N", "SCAN_INTERVAL_SEC", # 유니버스 스캔 주기(초), kiwoom_universe_scanner 전용 - "USE_RANDOM_SPLIT", "FORCE_MARKET_OPEN", "FORCE_BUY_TEST", "TOTAL_DEPOSIT", + "USE_RANDOM_SPLIT", "FORCE_MARKET_OPEN", "FORCE_BUY_TEST", "FORCE_BUY_TEST_CODE", "TOTAL_DEPOSIT", # POP/LOCK·금액 손절 관련 추가 키 "ROUND_TRIP_COST_PCT", "POP_NET_PCT", "LOCK_NET_PCT", "MAX_LOSS_PER_TRADE_KRW", # 금액손실컷 발동 최소 하락률(%): 이 하락률 미만이면 슬리피지/흔들림으로 간주하고 금액손실컷 미발동 (꼬리잡기) @@ -305,8 +305,8 @@ ENV_CONFIG_KEYS = ( "MM_DUAL_CHANNEL_ENABLED", # OpenRouter API 연동용 키 "OPENROUTER_API_KEY", "OPENROUTER_MODEL_ID", - # Open DART — API키만 env_config, 나머지 config_dart (classify) - "DART_API_KEY", + # Open DART — 폐기. API키도 env_config 물리컬럼에서 제거 (row size 확보). + # 전략 키(DART_* / STRATEGY_DART_*) 는 아래 목록·config_dart 에만 잔존(미사용). "STRATEGY_DART_ENABLED", "KIS_DART_MM_CHANNEL", # SCAN 감시 "DART_SCAN_ENABLED", # 폴링·DB·MM (구 DART_ENABLED) @@ -358,9 +358,16 @@ ENV_CONFIG_KEYS = ( "KIS_WS_SUBSCRIBE_GAP_MIN_SEC", "KIS_WS_SUBSCRIBE_GAP_MAX_SEC", "KIS_WS_RECONNECT_SESSION_WAIT_SEC", "KIS_WS_RECONNECT_REFRESH_KEY", "KIS_WS_APPROVAL_MIN_REISSUE_SEC", "KIS_WS_APPROVAL_MAX_VALID_SEC", + # invalid approval 연속 시 6h 가드 우회 REST 재발급 (죽은 키 루프 방지) + "KIS_WS_INVALID_APPROVAL_REISSUE_AFTER", "KIS_WS_INVALID_APPROVAL_BYPASS_6H", + "KIS_WS_EMERGENCY_REISSUE_MIN_SEC", "ENV_MERGED_CACHE_TTL_SEC", "KIS_WS_INSTANT_DROP_SEC", "KIS_WS_INSTANT_DROP_MAX", "KIS_WS_INSTANT_DROP_COOLDOWN_SEC", + # 국내↔해외 WS approval 세션 시간분할 (1키=1세션). HHMM, 여유 버퍼 포함. + "KIS_WS_KR_HOLD_START_HM", "KIS_WS_KR_HOLD_END_HM", + "KIS_WS_US_HOLD_START_HM", "KIS_WS_US_HOLD_END_HM", + "KIS_WS_SESSION_GUARD_SEC", # 재진입 쿨다운: 매도 후 같은 종목 재매수를 N초 동안 차단 (반복매매 루프 방지) "REENTRY_COOLDOWN_SEC", # 꼬리잡기/단타 매수 허용 시간대 (HHMM 정수, 930=09:30, 1500=15:00) — 백테스트·실매 공통 @@ -405,6 +412,15 @@ ENV_CONFIG_KEYS = ( "ERROR_WATCH_IGNORE_REGEX", "ERROR_WATCH_MM_JITTER", "ERROR_WATCH_STARTUP_NOTIFY", + # API 거절/예외 JSONL 백로그 (나중에 고칠 목록) + 영구형 거절 주문 쿨다운 + "KIS_API_REJECT_LOG_ENABLED", + "KIS_API_REJECT_LOG_PATH", + "KIS_API_REJECT_LOG_DEDUP_SEC", + "KIS_API_REJECT_ORDER_COOLDOWN_ENABLED", + "KIS_API_REJECT_ORDER_COOLDOWN_SEC", + "KIS_API_REJECT_COOLDOWN_MSG_CD", + "KIS_API_REJECT_COOLDOWN_MSG_SUBSTR", + "KIS_API_REJECT_COOLDOWN_HTTP_MIN", # 미등록 보유분 일괄 시장가매도 시 종목 간 간격(초) — 429 방지 "BULK_SELL_INTERVAL_SEC", @@ -417,6 +433,13 @@ ENV_CONFIG_KEYS = ( "ORPHAN_RECONCILE_PRE_EOD_LEAD_MIN", # Pre/Post EOD 고아복구와 동일 잔고조회에서 DB有·브로커0 유령 삭제 "GHOST_PURGE_ON_RECONCILE", + # 당일 청산(장마감청산 등) 히스토리 있으면 고아복구로 active 재등록 금지 + "ORPHAN_SKIP_AFTER_SELL_HISTORY", + # 재등록 금지 sell_reason 키워드(쉼표). 비우면 매수 이후 모든 청산 히스토리 금지 + "ORPHAN_SKIP_SELL_REASONS", + # active 에 남아 있는데 매수시각 이후 청산 히스토리가 있으면 DB 행 정리 + "ORPHAN_PURGE_ACTIVE_AFTER_SELL_HISTORY", + # insert 실패(주문DB중복) 시 브로커 체결 조회 복구 "DUPLICATE_ORDER_FILL_RECOVERY_ENABLED", "DUPLICATE_ORDER_RECOVERY_WAIT_SEC", @@ -428,15 +451,37 @@ ENV_CONFIG_KEYS = ( "SCALP_CANDLE_KEEP_DAYS", # ws_ticks 실시간 체결 틱 (RAM 링버퍼 + 배치 INSERT, C안) "WS_TICK_SAVE_ENABLED", + "WS_TICK_SAVE_US_ENABLED", "WS_TICK_BUFFER_MAX_PER_CODE", "WS_TICK_DB_BATCH_SIZE", "WS_TICK_DB_FLUSH_SEC", "WS_TICK_WRITE_QUEUE_MAX", "WS_TICK_KEEP_DAYS", + "WS_TICK_CLEANUP_CHUNK", + "WS_TICK_CLEANUP_MAX_LOOPS", + # 백테/Optuna ws_ticks 벌크 로드 (일별 청크) — TradeDB 기본 read_timeout(30s) 우회 + "WS_TICK_LOAD_READ_TIMEOUT", + "WS_TICK_LOAD_MAX_RETRIES", "WS_TICK_RECORD_SCOPE", "WS_TICK_DEFAULT_MARKET", "WS_TICK_DEFAULT_EXCHANGE", "WS_TICK_DEFAULT_CURRENCY", + # 영구구독 기준봉(분) — 1분이면 15/60 롤업. UI·저장 통일. + "PERM_SUB_BASE_TF_MIN", + # 영구구독 탭 현재가 자동새로고침 초 (웹 UI) + "PERM_SUB_UI_REFRESH_SEC", + # 해외 탭 표시용 USD→KRW (Frankfurter 등). 매매 체결환율 아님. + "FX_USD_KRW_API_BASE", + "FX_USD_KRW_CACHE_DIR", + "FX_USD_KRW_TIMEOUT_SEC", + "FX_USD_KRW_MIN_INTERVAL_SEC", + "FX_USD_KRW_MAX_RETRIES", + "FX_USD_KRW_LOOKBACK_DAYS", + "FX_USD_KRW_FALLBACK", + "FX_USD_KRW_RANGE_MAX_DAYS", + "FX_USD_KRW_HTTP_LOOKBACK", + # 외부 환율 HTTP (Frankfurter). 기본 OFF — 캐시/폴백만으로 $↔원 표시 + "FX_USD_KRW_HTTP_ENABLED", # 백테 틱재생: 실매 후보=키움 정합. 분봉에 kiwoom 있으면 kis(과거 volume 오염) 제외 "WS_TICK_PREFER_KIWOOM", # 후보/보유 이탈 후 틱 구독·저장 유지 (키움 한도 내, KIS 영구구독과 분리) @@ -478,6 +523,15 @@ ENV_CONFIG_KEYS = ( "BREAKOUT_BACKTEST_CANDLE_WARMUP_BARS", "BREAKOUT_BACKTEST_UNIVERSE_SCAN_AT", "BREAKOUT_UNIVERSE_EXIT_DEBOUNCE_SEC", + # 백테 유니버스 이력 소스: kiwoom(target_candidates_history) | ls(ls_candidates_history) + "BACKTEST_UNIVERSE_HISTORY_SOURCE", + "BACKTEST_LS_UNIVERSE_SESSION_ONLY", + # 실매 유니버스슬롯 정합 이력 테이블 (비우면 UNIVERSE_SOURCE 로 자동: ls_condition→ls) + "LIVE_UNIVERSE_HISTORY_SOURCE", + "SCALP_LIVE_UNIVERSE_HISTORY_SOURCE", + "BREAKOUT_LIVE_UNIVERSE_HISTORY_SOURCE", + "SHORT_LIVE_UNIVERSE_HISTORY_SOURCE", + "MOMENTUM_LIVE_UNIVERSE_HISTORY_SOURCE", "TAIL_BACKTEST_USE_TICK_EXIT", "TAIL_BACKTEST_POLL_MS", "TAIL_BACKTEST_SELL_SLIP_PCT", @@ -505,6 +559,13 @@ ENV_CONFIG_KEYS = ( "MOMENTUM_BACKTEST_SCAN_SEC", "MOMENTUM_BACKTEST_UNIVERSE_SCAN_AT", "MOMENTUM_BACKTEST_CANDLE_WARMUP_BARS", + # 백테 REST 전일봉 웜업: 1차 봉수 · 전일 장시작 미확보 시만 재시도 봉수 + "MOMENTUM_BACKTEST_REST_WARMUP", + "MOMENTUM_BACKTEST_REST_WARMUP_BARS", + "MOMENTUM_BACKTEST_REST_WARMUP_BARS_RETRY", + "MOMENTUM_BACKTEST_REST_MAX_CODES", + "MOMENTUM_BACKTEST_REST_SLEEP_SEC", + "MOMENTUM_BACKTEST_REST_KIWOOM_MOCK", "MOMENTUM_PREV_DAY_OPEN_HM_MAX", "MOMENTUM_UNIVERSE_EXIT_DEBOUNCE_SEC", "MOMENTUM_LIVE_ALIGN_USE_FORMING_BAR", @@ -541,6 +602,8 @@ ENV_CONFIG_KEYS = ( "TAIL_WHIPSAW_LOOKBACK_SEC", "TAIL_WHIPSAW_DIP_PCT", "TAIL_WHIPSAW_RECOVERY_TOL_PCT", + "TAIL_WHIPSAW_MIN_SUBBARS", + "TAIL_WHIPSAW_TICK_BUFFER_LIMIT", # 스캘핑 전용 손절 % (꼬리잡기 STOP_LOSS_PCT와 분리, 기본 1.5%) # 1분봉 초단타: 손절이 넓으면(-4%) 자금이 묶여 회전율 0 → 타이트하게 "SCALP_STOP_LOSS_PCT", @@ -622,6 +685,21 @@ ENV_CONFIG_KEYS = ( "AUTO_CANCEL_PARTIAL_BUY_REMAINDER", # heartbeat poll_pending_fills: 당일 체결 1 REST 일괄 조회 (실매 전용) "PENDING_POLL_BATCH_FETCH", + # 일별주문체결조회 TR (기본 실전 TTTC0081R / 모의 VTTC0081R — 레거시 *8001R 금지) + "DAILY_CCLD_TR_ID", + "DAILY_CCLD_MAX_PAGES", + "DAILY_CCLD_PAGE_GAP_SEC", + "DAILY_CCLD_EXCG_ID", + # 매수가능조회(inquire-psbl-order) — 주문가능현금 전용 + "PSBL_ORDER_REF_CODE", + "PSBL_ORDER_CMA_ICLD", + "PSBL_ORDER_OVRS_ICLD", + # 익절지정가 취소실패+잔고0 → 정상 매도확정 / PENDING매도 시 유령금지 + "SELL_LIMIT_CANCEL_BEFORE_MARKET_RETRY", + "SELL_LIMIT_RECHECK_WAIT_SEC", + "SELL_LIMIT_CANCEL_FAIL_BALANCE_CONFIRM", + "GHOST_PURGE_BLOCK_WHILE_PENDING_SELL", + "GHOST_PURGE_RECORD_HISTORY", # 잔고 연속조회 최대 페이지 (1p=실전50/모의20종목) — 보유 많을 때 누락 방지 "BALANCE_MAX_PAGES", # WebSocket 실시간 가격 캐시 유효기간(초): 이 시간 이상 지나면 REST 재조회 @@ -663,6 +741,13 @@ ENV_CONFIG_KEYS = ( "KIWOOM_APP_KEY_REAL", "KIWOOM_APP_SECRET_REAL", "KIWOOM_APP_KEY_MOCK", "KIWOOM_APP_SECRET_MOCK", "KIWOOM_APP_KEY", "KIWOOM_APP_SECRET", + # ── LS증권 Open API 키 (시세/주문 연동용 — 값 수동 입력) ───────────── + # LS_APP_KEY_REAL / LS_APP_SECRET_REAL : 실전 + # LS_APP_KEY_MOCK / LS_APP_SECRET_MOCK : 모의투자 (별도 키 페어) + # LS_USER_ID : HTS/OpenAPI 로그인 ID (t1866 서버저장조건 목록 조회용, 최대 8자) + "LS_APP_KEY_REAL", "LS_APP_SECRET_REAL", + "LS_APP_KEY_MOCK", "LS_APP_SECRET_MOCK", + "LS_USER_ID", # ── WebSocket 영구 구독 종목 (시장 방향 필터용) ───────────────────── # KOSPI/KOSDAQ 지수 ETF는 매매 후보와 무관하게 항상 구독 유지. # 60분봉 RSI 로 상승장/하락장 체크 → 스캘핑/꼬리잡기 진입 방향 결정. @@ -689,6 +774,12 @@ ENV_CONFIG_KEYS = ( "ACCOUNT_CASH_PERSIST_SEC", # 라이브 진입 타이밍 = 백테 (신호봉 확정 → 다음 봉 시가) "SCALP_LIVE_BACKTEST_ALIGN", "SCALP_LIVE_SIGNAL_LOOKBACK_BARS", + "SCALP_LIVE_ALIGN_USE_FORMING_BAR", + "SCALP_BACKTEST_USE_TICK_ENTRY", "SCALP_BACKTEST_TICK_FALLBACK_OHLC", + # 실매 진입 계산가: RAM 틱 첫가 → 없으면 분봉 시가 (백테 align_entry_price_from_ticks 정합) + "LIVE_ALIGN_ENTRY_FROM_TICK_BUFFER", "LIVE_ENTRY_TICK_BUFFER_LIMIT", + # 중분 편입 시 해당 진입봉 시가 매수 보류(다음 분) — 실매·백테·Optuna 공통 + "ALIGN_DEFER_MID_BAR_ENROLL", "BACKTEST_EXIT_CHECKS_PER_BAR", "SHORT_LIVE_BACKTEST_ALIGN", "SHORT_LIVE_SIGNAL_LOOKBACK_BARS", "MOMENTUM_LIVE_BACKTEST_ALIGN", "MOMENTUM_LIVE_SIGNAL_LOOKBACK_BARS", @@ -739,6 +830,18 @@ ENV_CONFIG_KEYS = ( "CONDITION_SHORT_KIWOOM_NAME", "CONDITION_BREAKOUT_KIWOOM_NAME", "CONDITION_MOMENTUM_KIWOOM_NAME", + # LS 서버저장조건 전용 이름 (비우면 KIWOOM/CONDITION_NAME 동명) + "CONDITION_SCALP_LS_NAME", + "CONDITION_SHORT_LS_NAME", + "CONDITION_BREAKOUT_LS_NAME", + "CONDITION_MOMENTUM_LS_NAME", + "LS_CONDITION_MANAGER_ENABLED", + "LS_CONDITION_FLUSH_SEC", + # LS HTS 조건 CRUD 후 재시작 없이 이름→index/AFR 재부착 + "LS_CONDITION_REMAP_SEC", + "LS_CONDITION_SNAPSHOT_REFRESH_SEC", + "LS_CONDITION_TR_GAP_SEC", + "LS_CONDITION_MISSING_WARN_SEC", # 유니버스 히스토리(백테스트용) — 기본 true, 배치 INSERT 로 DB 부담 최소화 "UNIVERSE_HISTORY_SAVE", # WS 갭보정 파라미터 (KIS_FALLBACK 은 기본 false — 모의서버 500 폭탄 회피) @@ -750,6 +853,17 @@ ENV_CONFIG_KEYS = ( "WS_CANDLE_FORCE_CONFIRM_GRACE_SEC", "WS_CANDLE_STALE_CHECK_INTERVAL_SEC", "WS_GAP_FILL_MAX_RETRIES", "WS_GAP_FILL_RETRY_DELAY_SEC", + # 갭보정 실패 후 전략 force 재큐 차단(초) · 빈응답 전역 회로차단 + "WS_GAP_FILL_GIVE_UP_SEC", + "WS_GAP_FILL_EMPTY_CIRCUIT_WINDOW_SEC", + "WS_GAP_FILL_EMPTY_CIRCUIT_MAX", + "WS_GAP_FILL_EMPTY_CIRCUIT_PAUSE_SEC", + "WS_GAP_FILL_EMPTY_LOG_SEC", + "WS_GAP_FILL_ABORT_TF_ON_EMPTY", + "KIWOOM_KA10080_MAX_INFLIGHT", + "KIWOOM_KA10080_RATE_RETRIES", + "KIWOOM_KA10080_RATE_RETRY_BASE_SEC", + "KIWOOM_KA10080_PAGE_SLEEP_SEC", "WS_GAP_BULK_REFILL_DEBOUNCE_SEC", "WS_GAP_FILL_PRIORITY_TFS", "WS_GAP_FILL_TF_SLEEP_MIN_SEC", "WS_GAP_FILL_TF_SLEEP_MAX_SEC", @@ -791,11 +905,29 @@ ENV_CONFIG_KEYS = ( "KIS_REST_BACKOFF_CAP_SEC", "KIS_REST_TIMEOUT_SEC", # 도메인별 REST 최소 호출 간격 (한투 유량: 실전 18건/초, 모의 1건/초) "KIS_MIN_INTERVAL_SEC_MOCK", "KIS_MIN_INTERVAL_SEC_REAL", + # 해외주식 주문/시세 (미국) — 표시·실주문 공통 + "KIS_OVRS_DEFAULT_EXCG", + "KIS_OVRS_ORD_DVSN", + "KIS_OVRS_ORD_SVR_DVSN_CD", + "KIS_OVRS_ORDER_PATH", + "KIS_OVRS_US_BUY_TR_ID", + "KIS_OVRS_US_SELL_TR_ID", + "KIS_OVRS_PRICE_DECIMALS", + "KIS_OVRS_BUY_LIMIT_SLIPPAGE_PCT", + "KIS_OVRS_SELL_LIMIT_SLIPPAGE_PCT", + "KIS_OVRS_TEST_SYMBOL", + "KIS_OVRS_TEST_EXCHANGE", # 스캔 루프 회전율 sleep (REST 유량과 별개 · WS 따라가기 속도 · 비우면 전략별 기본값) "SCAN_REJECT_SLEEP_MIN", "SCAN_REJECT_SLEEP_MAX", "SCAN_BUY_OK_SLEEP_MIN", "SCAN_BUY_OK_SLEEP_MAX", "SCAN_BUY_FAIL_SLEEP_MIN", "SCAN_BUY_FAIL_SLEEP_MAX", "STRATEGY_LOOP_SLEEP_MIN", "STRATEGY_LOOP_SLEEP_MAX", + # 틱매도 — WS 현재가 갱신 시 매도 검사 (기본 false · 루프 매도 유지 + 틱 보강) + "TICK_SELL_ENABLED", "TICK_SELL_MIN_INTERVAL_MS", + "SHORT_TICK_SELL_ENABLED", "SCALP_TICK_SELL_ENABLED", + "BREAKOUT_TICK_SELL_ENABLED", "MOMENTUM_TICK_SELL_ENABLED", + "RANGE_BREAK_TICK_SELL_ENABLED", "UPDOW_TICK_SELL_ENABLED", + "DBBAND_TICK_SELL_ENABLED", # ── 시장 급락 서킷브레이커 (KOSPI/KOSDAQ 지수 폭락 시 신규 매수 차단) ── # 거래소 공식 서킷브레이커는 -8% 이지만, 봇 보호용으로 더 빨리(-2%) 반응. # PANIC 모드 시 매수만 차단, 매도는 평소처럼 동작 (포지션 정리 가능). @@ -870,11 +1002,87 @@ ENV_CONFIG_KEYS = ( "NON_STOCK_EXCLUDE_ALPHA_SUFFIX", # ETF 등 이름 키워드(콤마). 비우면 코드 기본목록. '파워' 단독은 넣지 말 것(오탐). "NON_STOCK_NAME_KEYWORDS", + # 봉부족 시 force 갭/로그 스로틀 (특수코드 REST·로그 폭주 방지) + "BREAKOUT_CANDLE_GAP_FORCE_SEC", + "BREAKOUT_CANDLE_SHORT_LOG_SEC", + "SCALP_CANDLE_GAP_FORCE_SEC", + "SCALP_CANDLE_SHORT_LOG_SEC", # SCALP 일일 진입 횟수 "SCALP_MAX_DAILY", # ── MOMENTUM 전략 (SCALP reversal 과 분리된 독립 전략) ───────────── # 키움 'momentum' 조건검색(E∧F∧H∧I). env 키는 MOMENTUM_* 전용. "STRATEGY_MOMENTUM_ENABLED", + # 해외 모멘텀 (영구구독 US · dry-run 기본) + "STRATEGY_US_MOMENTUM_ENABLED", + "US_MOMENTUM_TIME_START", + "US_MOMENTUM_TIME_END", + "US_MOMENTUM_SESSION_START", + "US_MOMENTUM_BUY_WAIT_LOG_SEC", + "US_MOMENTUM_SELL_TIME_END", + "US_MOMENTUM_DRY_RUN", + "US_MOMENTUM_MAX_STOCKS", + "US_MOMENTUM_SLOT_MONEY", + "US_MOMENTUM_FEE_RATE", + "US_MOMENTUM_SELL_TAX", + "US_MOMENTUM_FX_FEE_RATE", + "US_MOMENTUM_MIN_PRICE", + "US_MOMENTUM_LIVE_MIN_CANDLES", + "US_MOMENTUM_EOD_ENABLED", + "US_MOMENTUM_EOD_HM", + "US_MOMENTUM_MAX_BUY_AMOUNT", + "US_MOMENTUM_TOTAL_BUDGET", + "US_MOMENTUM_MAX_ORDER_QTY", + "US_MOMENTUM_FORCE_BUY_QTY", + "US_MOMENTUM_RELOAD_INTERVAL_SEC", + "US_MOMENTUM_PSAMOUNT_CACHE_SEC", + "US_MOMENTUM_TRADES_CACHE_SEC", + "US_MOMENTUM_LOOP_SLEEP_MIN", + "US_MOMENTUM_LOOP_SLEEP_MAX", + "US_MOMENTUM_SCAN_REJECT_SLEEP_MIN", + "US_MOMENTUM_SCAN_REJECT_SLEEP_MAX", + # 해외 모멘텀 TRIGGER/청산 (국내 MOMENTUM_* 와 분리 저장) + "US_MOMENTUM_RSI_MIN", + "US_MOMENTUM_RSI_MAX", + "US_MOMENTUM_VOL_MULT", + "US_MOMENTUM_VOL_WIN", + "US_MOMENTUM_MAX_FROM_OPEN_PCT", + "US_MOMENTUM_MIN_FROM_OPEN_PCT", + "US_MOMENTUM_STOP_LOSS_PCT", + "US_MOMENTUM_TAKE_PROFIT_PCT", + "US_MOMENTUM_TP_MAX_PCT", + "US_MOMENTUM_SHOULDER_MIN_HIGH_PCT", + "US_MOMENTUM_SHOULDER_CUT_PCT", + "US_MOMENTUM_RATCHET_TIERS", + "US_MOMENTUM_TRAIL_PCT", + "US_MOMENTUM_TRAIL_ARM_PCT", + "US_MOMENTUM_MAX_HOLD_BARS", + "US_MOMENTUM_MAX_DAILY", + "US_MOMENTUM_MAX_DAILY_CHG", + "US_MOMENTUM_HIGH_CHASE_THR", + "US_MOMENTUM_USE_DEFENSE_FILTERS", + "US_MOMENTUM_USE_HIGH_CHASE_FILTER", + "US_MOMENTUM_USE_DAILY_RANGE_FILTER", + "US_MOMENTUM_USE_EMA_FILTER", + "US_MOMENTUM_EMA_FAST_PERIOD", + "US_MOMENTUM_EMA_SLOW_PERIOD", + "US_MOMENTUM_USE_RSI_MAX_FILTER", + "US_MOMENTUM_PATTERN_BREAKOUT", + "US_MOMENTUM_PATTERN_PULLBACK", + "US_MOMENTUM_CHASE_LOOKBACK_MIN", + "US_MOMENTUM_PULLBACK_LOOKBACK_MIN", + "US_MOMENTUM_PULLBACK_MIN_PCT", + "US_MOMENTUM_PULLBACK_MAX_PCT", + "US_MOMENTUM_SETUP_VOL_MAX_MULT", + "US_MOMENTUM_SETUP_BEAR_BARS_MIN", + "US_MOMENTUM_MAX_LOSS_PER_TRADE", + "US_MOMENTUM_MIN_PROFIT_PCT", + "US_MOMENTUM_COOLDOWN_SEC", + "US_MOMENTUM_DAILY_PROFIT_TARGET_ENABLED", + "US_MOMENTUM_DAILY_PROFIT_TRAIL_TIERS", + "US_MOMENTUM_DAILY_PROFIT_MODE", + "KIS_US_MOMENTUM_MM_CHANNEL", + "US_MOMENTUM_DAILY_PROFIT_RISK_BUDGET_ENABLED", + "US_MOMENTUM_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC", # MM 체결 알림 alias (mm_config.json channels 키) → config_momentum / config_breakout / config_updow "KIS_MOMENTUM_MM_CHANNEL", "KIS_BREAKOUT_MM_CHANNEL", @@ -964,42 +1172,49 @@ ENV_CONFIG_KEYS = ( "SCALP_DAILY_PROFIT_HALT_NEW_BUYS", "SCALP_DAILY_PROFIT_MODE", "SCALP_DAILY_PROFIT_TRAIL_TIERS", "SCALP_DAILY_PROFIT_TRAIL_DROP_PCT", "SCALP_DAILY_PROFIT_TRAIL_ARM_KRW", "SCALP_DAILY_PROFIT_TRAIL_ARM_PCT", + "SCALP_DAILY_PROFIT_RISK_BUDGET_ENABLED", "SCALP_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC", "SHORT_DAILY_PROFIT_TARGET_ENABLED", "SHORT_DAILY_PROFIT_TARGET_KRW", "SHORT_DAILY_PROFIT_TARGET_PCT", "SHORT_DAILY_PROFIT_HALT_NEW_BUYS", "SHORT_DAILY_PROFIT_MODE", "SHORT_DAILY_PROFIT_TRAIL_TIERS", "SHORT_DAILY_PROFIT_TRAIL_DROP_PCT", "SHORT_DAILY_PROFIT_TRAIL_ARM_KRW", "SHORT_DAILY_PROFIT_TRAIL_ARM_PCT", + "SHORT_DAILY_PROFIT_RISK_BUDGET_ENABLED", "SHORT_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC", "MOMENTUM_DAILY_PROFIT_TARGET_ENABLED", "MOMENTUM_DAILY_PROFIT_TARGET_KRW", "MOMENTUM_DAILY_PROFIT_TARGET_PCT", "MOMENTUM_DAILY_PROFIT_HALT_NEW_BUYS", "MOMENTUM_DAILY_PROFIT_MODE", "MOMENTUM_DAILY_PROFIT_TRAIL_TIERS", "MOMENTUM_DAILY_PROFIT_TRAIL_DROP_PCT", "MOMENTUM_DAILY_PROFIT_TRAIL_ARM_KRW", "MOMENTUM_DAILY_PROFIT_TRAIL_ARM_PCT", + "MOMENTUM_DAILY_PROFIT_RISK_BUDGET_ENABLED", "MOMENTUM_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC", "BREAKOUT_DAILY_PROFIT_TARGET_ENABLED", "BREAKOUT_DAILY_PROFIT_TARGET_KRW", "BREAKOUT_DAILY_PROFIT_TARGET_PCT", "BREAKOUT_DAILY_PROFIT_HALT_NEW_BUYS", "BREAKOUT_DAILY_PROFIT_MODE", "BREAKOUT_DAILY_PROFIT_TRAIL_TIERS", "BREAKOUT_DAILY_PROFIT_TRAIL_DROP_PCT", "BREAKOUT_DAILY_PROFIT_TRAIL_ARM_KRW", "BREAKOUT_DAILY_PROFIT_TRAIL_ARM_PCT", + "BREAKOUT_DAILY_PROFIT_RISK_BUDGET_ENABLED", "BREAKOUT_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC", "RANGE_BREAK_DAILY_PROFIT_TARGET_ENABLED", "RANGE_BREAK_DAILY_PROFIT_TARGET_KRW", "RANGE_BREAK_DAILY_PROFIT_TARGET_PCT", "RANGE_BREAK_DAILY_PROFIT_HALT_NEW_BUYS", "RANGE_BREAK_DAILY_PROFIT_MODE", "RANGE_BREAK_DAILY_PROFIT_TRAIL_TIERS", "RANGE_BREAK_DAILY_PROFIT_TRAIL_DROP_PCT", "RANGE_BREAK_DAILY_PROFIT_TRAIL_ARM_KRW", "RANGE_BREAK_DAILY_PROFIT_TRAIL_ARM_PCT", + "RANGE_BREAK_DAILY_PROFIT_RISK_BUDGET_ENABLED", "RANGE_BREAK_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC", "UPDOW_DAILY_PROFIT_TARGET_ENABLED", "UPDOW_DAILY_PROFIT_TARGET_KRW", "UPDOW_DAILY_PROFIT_TARGET_PCT", "UPDOW_DAILY_PROFIT_HALT_NEW_BUYS", "UPDOW_DAILY_PROFIT_MODE", "UPDOW_DAILY_PROFIT_TRAIL_TIERS", "UPDOW_DAILY_PROFIT_TRAIL_DROP_PCT", "UPDOW_DAILY_PROFIT_TRAIL_ARM_KRW", "UPDOW_DAILY_PROFIT_TRAIL_ARM_PCT", + "UPDOW_DAILY_PROFIT_RISK_BUDGET_ENABLED", "UPDOW_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC", "DBBAND_DAILY_PROFIT_TARGET_ENABLED", "DBBAND_DAILY_PROFIT_TARGET_KRW", "DBBAND_DAILY_PROFIT_TARGET_PCT", "DBBAND_DAILY_PROFIT_HALT_NEW_BUYS", "DBBAND_DAILY_PROFIT_MODE", "DBBAND_DAILY_PROFIT_TRAIL_TIERS", "DBBAND_DAILY_PROFIT_TRAIL_DROP_PCT", "DBBAND_DAILY_PROFIT_TRAIL_ARM_KRW", "DBBAND_DAILY_PROFIT_TRAIL_ARM_PCT", + "DBBAND_DAILY_PROFIT_RISK_BUDGET_ENABLED", "DBBAND_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC", # ── 시세 WS 공급자 토글 (키움 시세 마이그레이션) ───────────────── # 운영(매매 의사결정)에는 항상 KIS WS 만 사용. 키움 WS 는 검증 모드에서만 # 백그라운드 동시 구독 → ws_price_validation 테이블에 가격 비교 기록. @@ -1018,11 +1233,78 @@ ENV_CONFIG_KEYS = ( # 모의 도메인은 장외 데이터 제공 X / 실시간 표본도 빈약 → 시세 비교/마이그레이션 가치 없음. # true (기본) = 실키 강제, false = KIS_MOCK 따라 자동 (디버그용). "KIWOOM_WS_FORCE_REAL", + # ── LS 시세 그림자 검증 (실매 경로 미사용) ───────────────────────── + # true 시 LS 실키 WS 기동 → ls_ws_ticks / ls_ws_candles 적재 + ws_price_validation_ls + "LS_WS_VALIDATION_ENABLED", + # LS 조건 이력만 수집 (실매 UNIVERSE_SOURCE 와 분리). true → ls_candidates_history + "LS_CONDITION_HISTORY_ENABLED", + # true → LS 조건 유니버스 diff 를 LS WS 구독(owner=condition)에 반영 + "LS_WS_FOLLOW_CONDITION_UNIVERSE", + # true → 조건 구독 시 6자리 숫자 종목만 (우선주/특이코드 스킵) + "LS_WS_CONDITION_PLAIN6_ONLY", + "LS_WS_FORCE_REAL", + "LS_WS_TICK_SAVE", + "LS_WS_CANDLE_SAVE", + "LS_WS_CANDLE_TF_MIN", + # ls_condition 전략 갭보정 (t8412) — 키움 ka10080 과 분리 + "LS_GAP_FILL_ENABLED", + "LS_GAP_FILL_LIMIT", + "LS_GAP_FILL_INTERVAL_SEC", + "LS_GAP_FILL_MAX_RETRIES", + "LS_GAP_FILL_TIMEOUT_SEC", + "LS_GAP_FILL_FAIL_MAX", + "LS_GAP_FILL_WORKERS", + "LS_WS_CONFIRMED_MAX", + "LS_WS_VALIDATION_INTERVAL_SEC", + "LS_WS_VALIDATION_DIFF_WARN_PCT", + "LS_WS_ALSO_HOGA", + # LS 호가(UH1) → ls_ws_orderbook 적재 (프로그램 UPH 는 미사용·미구독) + "LS_WS_ORDERBOOK_SAVE", + # 종목당 DB INSERT 최소 간격(ms) — 호가 폭주 시 DB 부하 완화 (RAM 캐시는 매 틱) + "LS_WS_ORDERBOOK_SAVE_MS", + # LS VI(UVI) 구독·적재 — 워치독 오탐 방지·백테 구간 마킹 (프로그램·상하한가 미포함) + "LS_WS_UVI_ENABLED", + "LS_WS_VI_SAVE", + # VI 해제 누락 시 RAM 만료(초). 통상 VI ~2분 → 기본 180 + "LS_WS_VI_STALE_SEC", + # true=구독 KR이 전부 VI 중이면 틱 silence 강제재연결 스킵 + "LS_WS_WATCHDOG_SKIP_WHEN_VI", + "LS_WS_PING_INTERVAL_SEC", + "LS_WS_PING_TIMEOUT_SEC", + "LS_WS_OPEN_REG_DELAY_MS", + "LS_WS_REG_GAP_MS", + # s3k3=콘솔 S3_/K3_+6자리(실험), us3(기본)=통합 US3 — 실측 장중·장후 틱은 us3 + "LS_WS_TR_MODE", + "LS_WS_WATCHDOG_ENABLED", + "LS_WS_WATCHDOG_SILENCE_SEC", + "LS_WS_WATCHDOG_OPEN_GRACE_SEC", + "LS_WS_WATCHDOG_POLL_SEC", + # 틱 없이 연속 강제재연결 N회 후 silence 배수 백오프 (장외·TR불일치 폭주 방지) + "LS_WS_WATCHDOG_EMPTY_BACKOFF_AFTER", + "LS_WS_WATCHDOG_EMPTY_BACKOFF_MULT", + # true=정규장(JIF/벽시계)에서만 틱 silence 강제재연결 (VI·점심·장외 오탐 방지) + "LS_WS_WATCHDOG_SESSION_GATE", + "LS_WS_WATCHDOG_SESSION_START_HM", + "LS_WS_WATCHDOG_SESSION_END_HM", + # JIF 장운영정보 구독 (스마트 워치독 세션 판정) — 앱 하트비트 TR 아님 + "LS_WS_JIF_ENABLED", + "LS_WS_JIF_TR_KEY", + # send 락 대기 상한(초) — half-open 블로킹으로 REG 워커 정지 방지 + "LS_WS_SEND_LOCK_TIMEOUT_SEC", + # true 시 LS 복구/비연결 중 신규매수 차단 (그림자 기본 false) + "LS_WS_BLOCK_BUY_WHILE_RECOVERING", + # 웹 보유·실거래「보유중」라이브 시세 (ws_ticks SELECT만 — 실매 WS/주문 경로 비접촉) + "PORTFOLIO_LIVE_QUOTE_ENABLED", + "PORTFOLIO_LIVE_QUOTE_MS", + "PORTFOLIO_LIVE_QUOTE_MAX_AGE_SEC", # 키움 WS: 그룹당 최대 구독 수·REG 전송 레이트(초기 기동 시 TRNM 건수 초과 완화) "KIWOOM_WS_MAX_SUBSCRIPTIONS", "KIWOOM_WS_REG_CHUNK_SIZE", "KIWOOM_WS_REG_GAP_SEC", "KIWOOM_WS_REG_DEBOUNCE_SEC", + # 키움 WS 재연결: 토큰거부(805004) 연타 후 영구 OFF 방지 (기본=쿨다운 리셋) + "KIWOOM_WS_HARD_DISABLE_ON_MAX_RECONNECT", + "KIWOOM_WS_MAX_RECONNECT_COOLDOWN_SEC", # ── Updow(직전 분봉 음봉·몸통 하락 → 다음 봉 시가 매수) — 백테·웹·CLI 공통 ── "UPDOW_BODY_DROP_MIN_PCT", "UPDOW_TP_PCT", @@ -1159,6 +1441,7 @@ ENV_GLOBAL_KEYS = _CONFIG_SPLIT["env_config"] CONFIG_SCALP_KEYS = _CONFIG_SPLIT["config_scalp"] CONFIG_SHORT_KEYS = _CONFIG_SPLIT["config_short"] CONFIG_MOMENTUM_KEYS = _CONFIG_SPLIT["config_momentum"] +CONFIG_US_MOMENTUM_KEYS = _CONFIG_SPLIT["config_us_momentum"] CONFIG_BREAKOUT_KEYS = _CONFIG_SPLIT["config_breakout"] CONFIG_RANGE_BREAK_KEYS = _CONFIG_SPLIT["config_range_break"] CONFIG_UPDOW_KEYS = _CONFIG_SPLIT["config_updow"] @@ -1169,6 +1452,7 @@ CONFIG_TABLE_KEYS: Dict[str, Tuple[str, ...]] = { "config_scalp": CONFIG_SCALP_KEYS, "config_short": CONFIG_SHORT_KEYS, "config_momentum": CONFIG_MOMENTUM_KEYS, + "config_us_momentum": CONFIG_US_MOMENTUM_KEYS, "config_breakout": CONFIG_BREAKOUT_KEYS, "config_range_break": CONFIG_RANGE_BREAK_KEYS, "config_updow": CONFIG_UPDOW_KEYS, @@ -1426,6 +1710,7 @@ class TradeDB: CREATE TABLE IF NOT EXISTS ws_candles ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, code VARCHAR(20) NOT NULL, + market VARCHAR(8) NOT NULL DEFAULT 'KR', timeframe TINYINT NOT NULL, candle_time VARCHAR(12) NOT NULL, `open` DOUBLE NOT NULL, @@ -1439,7 +1724,8 @@ class TradeDB: is_confirmed TINYINT NOT NULL DEFAULT 1, source VARCHAR(10) NOT NULL DEFAULT 'ws', updated_at VARCHAR(30) NOT NULL, - UNIQUE KEY uq_candle (code, timeframe, candle_time) + UNIQUE KEY uq_candle (code, timeframe, candle_time), + KEY idx_ws_candles_market (market, code, timeframe, candle_time) ) CHARACTER SET utf8mb4 """) @@ -1460,7 +1746,27 @@ class TradeDB: recv_ts VARCHAR(30) NOT NULL, KEY idx_ws_ticks_lookup (market, code, tick_time), KEY idx_ws_ticks_recv (recv_ts) - ) CHARACTER SET utf8mb4 + ) ENGINE=InnoDB CHARACTER SET utf8mb4 + """) + + # 11a. 해외(US) 체결 틱 — 국내 ws_ticks 와 물리 분리 (인덱스·스캔·정리 격리) + self.conn.execute(""" + CREATE TABLE IF NOT EXISTS ws_ticks_us ( + id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + market VARCHAR(8) NOT NULL DEFAULT 'US', + exchange VARCHAR(16) DEFAULT NULL, + code VARCHAR(32) NOT NULL, + tick_time VARCHAR(14) NOT NULL, + price DOUBLE NOT NULL, + volume BIGINT NOT NULL DEFAULT 0, + tick_seq BIGINT DEFAULT NULL, + session VARCHAR(8) DEFAULT NULL, + currency VARCHAR(8) NOT NULL DEFAULT 'USD', + source VARCHAR(16) NOT NULL DEFAULT 'kis_us', + recv_ts VARCHAR(30) NOT NULL, + KEY idx_ws_ticks_us_lookup (market, code, tick_time), + KEY idx_ws_ticks_us_recv (recv_ts) + ) ENGINE=InnoDB CHARACTER SET utf8mb4 """) # 11b. TRIGGER 호가 스냅샷 (키움 0D — 백테·파람서치 재현) @@ -1548,6 +1854,12 @@ class TradeDB: ) CHARACTER SET utf8mb4 """) + try: + from kis_trader.database.paper_store import ensure_paper_tables + ensure_paper_tables(self) + except Exception as e: + logger.debug("paper 테이블 ensure 스킵: %s", e) + self._migrate_add_columns() self._migrate_env_config_to_columns() logger.info("📊 DB 테이블 생성/확인 완료") @@ -1614,11 +1926,25 @@ class TradeDB: try: self._migrate_config_table_columns() self._migrate_strategy_keys_from_env_config() + self._migrate_us_momentum_from_ext() self._migrate_short_time_to_tail_time() except Exception as e: logger.debug(f"migrate config tables: {e}") try: cols = self.conn.get_columns("ws_candles") + if "market" not in cols: + self.conn.execute( + "ALTER TABLE ws_candles ADD COLUMN market VARCHAR(8) NOT NULL DEFAULT 'KR' " + "COMMENT 'KR|US' AFTER code" + ) + logger.info("📌 ws_candles.market 컬럼 추가") + try: + self.conn.execute( + "CREATE INDEX idx_ws_candles_market ON ws_candles " + "(market, code, timeframe, candle_time)" + ) + except Exception: + pass if "holding_peak" not in cols: self.conn.execute( "ALTER TABLE ws_candles ADD COLUMN holding_peak DOUBLE NULL " @@ -1695,6 +2021,141 @@ class TradeDB: logger.info("📌 ws_price_validation 테이블 확인/생성") except Exception as e: logger.warning(f"migrate ws_price_validation 실패: {e}") + # ── LS 그림자 시세 (틱/1분봉/갭비교) — 실매 ws_candles 와 분리 ───── + try: + self.conn.execute(""" + CREATE TABLE IF NOT EXISTS ls_ws_ticks ( + id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + ts DATETIME(3) NOT NULL, + code VARCHAR(20) NOT NULL, + price DOUBLE NOT NULL, + volume DOUBLE NULL, + tot_volume DOUBLE NULL, + chetime VARCHAR(16) NULL, + tr_cd VARCHAR(8) NULL, + INDEX idx_ls_tick_ts (ts), + INDEX idx_ls_tick_code_ts (code, ts) + ) CHARACTER SET utf8mb4 + """) + logger.info("📌 ls_ws_ticks 테이블 확인/생성") + except Exception as e: + logger.warning(f"migrate ls_ws_ticks 실패: {e}") + try: + self.conn.execute(""" + CREATE TABLE IF NOT EXISTS ls_ws_candles ( + code VARCHAR(20) NOT NULL, + datetime VARCHAR(20) NOT NULL, + tf_min INT NOT NULL DEFAULT 1, + open DOUBLE NOT NULL, + high DOUBLE NOT NULL, + low DOUBLE NOT NULL, + close DOUBLE NOT NULL, + volume DOUBLE NOT NULL DEFAULT 0, + tick_count INT NOT NULL DEFAULT 0, + updated_at DATETIME(3) NOT NULL, + PRIMARY KEY (code, datetime, tf_min), + INDEX idx_ls_cndl_dt (datetime) + ) CHARACTER SET utf8mb4 + """) + logger.info("📌 ls_ws_candles 테이블 확인/생성") + except Exception as e: + logger.warning(f"migrate ls_ws_candles 실패: {e}") + try: + self.conn.execute(""" + CREATE TABLE IF NOT EXISTS ls_ws_orderbook ( + id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + market VARCHAR(8) NOT NULL DEFAULT 'KR', + code VARCHAR(32) NOT NULL, + snap_time VARCHAR(14) NOT NULL, + best_bid BIGINT NOT NULL DEFAULT 0, + best_ask BIGINT NOT NULL DEFAULT 0, + total_bid_qty BIGINT NOT NULL DEFAULT 0, + total_ask_qty BIGINT NOT NULL DEFAULT 0, + bid_qty_l3 BIGINT NOT NULL DEFAULT 0, + ask_qty_l3 BIGINT NOT NULL DEFAULT 0, + levels_json MEDIUMTEXT, + source VARCHAR(16) NOT NULL DEFAULT 'ls_uh1', + recv_ts VARCHAR(30) NOT NULL, + KEY idx_ls_ob_lookup (market, code, snap_time), + KEY idx_ls_ob_recv (recv_ts), + KEY idx_ls_ob_code (code) + ) CHARACTER SET utf8mb4 + """) + logger.info("📌 ls_ws_orderbook 테이블 확인/생성") + except Exception as e: + logger.warning(f"migrate ls_ws_orderbook 실패: {e}") + try: + self.conn.execute(""" + CREATE TABLE IF NOT EXISTS ls_ws_vi ( + id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + ts DATETIME(3) NOT NULL, + code VARCHAR(20) NOT NULL, + event_time VARCHAR(16) NULL, + vi_gubun VARCHAR(4) NOT NULL DEFAULT '0', + krx_vi_gubun VARCHAR(4) NULL, + nxt_vi_gubun VARCHAR(4) NULL, + svi_recprice DOUBLE NULL, + dvi_recprice DOUBLE NULL, + vi_trgprice DOUBLE NULL, + tr_cd VARCHAR(8) NULL, + exchname VARCHAR(8) NULL, + INDEX idx_ls_vi_ts (ts), + INDEX idx_ls_vi_code_ts (code, ts), + INDEX idx_ls_vi_gubun (vi_gubun) + ) CHARACTER SET utf8mb4 + """) + logger.info("📌 ls_ws_vi 테이블 확인/생성") + except Exception as e: + logger.warning(f"migrate ls_ws_vi 실패: {e}") + try: + self.conn.execute(""" + CREATE TABLE IF NOT EXISTS ws_price_validation_ls ( + id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + ts DATETIME(3) NOT NULL, + code VARCHAR(20) NOT NULL, + kis_price DOUBLE NULL, + kiwoom_price DOUBLE NULL, + ls_price DOUBLE NULL, + diff_kis_ls_pct DOUBLE NULL, + diff_kw_ls_pct DOUBLE NULL, + kis_age_ms INT NULL, + kiwoom_age_ms INT NULL, + ls_age_ms INT NULL, + INDEX idx_lsval_ts (ts), + INDEX idx_lsval_code (code), + INDEX idx_lsval_diff (diff_kis_ls_pct) + ) CHARACTER SET utf8mb4 + """) + logger.info("📌 ws_price_validation_ls 테이블 확인/생성") + except Exception as e: + logger.warning(f"migrate ws_price_validation_ls 실패: {e}") + # ── LS 유니버스 히스토리 (슬롯별 수집 종목·퀄리티 스냅샷) ─────────── + # 실매 target_candidates_history 와 분리. LS 섀도 피드 커버리지/구멍 점검용. + try: + self.conn.execute(""" + CREATE TABLE IF NOT EXISTS ls_universe_history ( + id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + slot_key VARCHAR(12) NOT NULL, + scan_time VARCHAR(30) NOT NULL, + code VARCHAR(20) NOT NULL, + name VARCHAR(100) NOT NULL DEFAULT '', + price DOUBLE NOT NULL DEFAULT 0, + tick_count INT NOT NULL DEFAULT 0, + candle_1m_count INT NOT NULL DEFAULT 0, + last_tick_ts DATETIME(3) NULL, + last_candle_dt VARCHAR(20) NULL, + gap_1m_missing INT NOT NULL DEFAULT 0, + source VARCHAR(16) NOT NULL DEFAULT 'ls_ws', + note VARCHAR(200) NULL, + UNIQUE KEY uq_ls_univ_slot_code (slot_key, code), + INDEX idx_ls_univ_slot (slot_key), + INDEX idx_ls_univ_code (code), + INDEX idx_ls_univ_scan (scan_time) + ) CHARACTER SET utf8mb4 + """) + logger.info("📌 ls_universe_history 테이블 확인/생성") + except Exception as e: + logger.warning(f"migrate ls_universe_history 실패: {e}") # ── stock_share_meta (유통주식수, 백테·라이브 공통) ───────────────── try: self.conn.execute(""" @@ -2837,6 +3298,282 @@ class TradeDB: logger.debug("ws_price_validation INSERT 실패: %s", e) return False + def insert_ws_price_validation_ls( + self, + *, + code: str, + kis_price: Optional[float], + kiwoom_price: Optional[float], + ls_price: Optional[float], + kis_age_ms: Optional[int] = None, + kiwoom_age_ms: Optional[int] = None, + ls_age_ms: Optional[int] = None, + ) -> bool: + """KIS/키움/LS 3자 비교 1행 (그림자 검증 전용).""" + if kis_price is None and kiwoom_price is None and ls_price is None: + return False + diff_kis_ls = None + diff_kw_ls = None + try: + if kis_price not in (None, 0) and ls_price is not None: + diff_kis_ls = (float(ls_price) - float(kis_price)) / float(kis_price) * 100.0 + if kiwoom_price not in (None, 0) and ls_price is not None: + diff_kw_ls = (float(ls_price) - float(kiwoom_price)) / float(kiwoom_price) * 100.0 + except (ValueError, ZeroDivisionError): + pass + try: + now = datetime.datetime.now() + self.conn.execute( + "INSERT INTO ws_price_validation_ls " + "(ts, code, kis_price, kiwoom_price, ls_price, " + "diff_kis_ls_pct, diff_kw_ls_pct, kis_age_ms, kiwoom_age_ms, ls_age_ms) " + "VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)", + ( + now, code, kis_price, kiwoom_price, ls_price, + diff_kis_ls, diff_kw_ls, kis_age_ms, kiwoom_age_ms, ls_age_ms, + ), + ) + return True + except Exception as e: + logger.debug("ws_price_validation_ls INSERT 실패: %s", e) + return False + + def insert_ls_ws_tick( + self, + *, + code: str, + ts, + price: float, + volume: Optional[float] = None, + tot_volume: Optional[float] = None, + chetime: str = "", + tr_cd: str = "", + ) -> bool: + try: + self.conn.execute( + "INSERT INTO ls_ws_ticks " + "(ts, code, price, volume, tot_volume, chetime, tr_cd) " + "VALUES (%s,%s,%s,%s,%s,%s,%s)", + (ts, code, price, volume, tot_volume, chetime or None, tr_cd or None), + ) + return True + except Exception as e: + logger.debug("ls_ws_ticks INSERT 실패: %s", e) + return False + + def upsert_ls_ws_candle( + self, + *, + code: str, + candle: Dict[str, Any], + ) -> bool: + """ls_ws_candles upsert (확정된 1분 버킷).""" + try: + now = datetime.datetime.now() + self.conn.execute( + "INSERT INTO ls_ws_candles " + "(code, datetime, tf_min, open, high, low, close, volume, tick_count, updated_at) " + "VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) " + "ON DUPLICATE KEY UPDATE " + "open=VALUES(open), high=VALUES(high), low=VALUES(low), close=VALUES(close), " + "volume=VALUES(volume), tick_count=VALUES(tick_count), updated_at=VALUES(updated_at)", + ( + code, + candle.get("datetime"), + int(candle.get("tf_min") or 1), + float(candle["open"]), + float(candle["high"]), + float(candle["low"]), + float(candle["close"]), + float(candle.get("volume") or 0), + int(candle.get("tick_count") or 0), + now, + ), + ) + return True + except Exception as e: + logger.debug("ls_ws_candles upsert 실패: %s", e) + return False + + @staticmethod + def _ls_datetime_to_candle_time(dt_s: str) -> str: + """``YYYY-MM-DD HH:MM:00`` → ``YYYYMMDDHHMM`` (전략/백테 호환).""" + s = (dt_s or "").strip() + if len(s) >= 16 and s[4] == "-" and s[10] == " ": + return s[0:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + digits = "".join(ch for ch in s if ch.isdigit()) + return digits[:12] + + @staticmethod + def _candle_time_to_ls_datetime(ct: str) -> str: + """``YYYYMMDDHHMM`` → ``YYYY-MM-DD HH:MM:00``.""" + d = "".join(ch for ch in (ct or "") if ch.isdigit())[:12] + if len(d) < 12: + return "" + return f"{d[0:4]}-{d[4:6]}-{d[6:8]} {d[8:10]}:{d[10:12]}:00" + + def get_ls_ws_candles( + self, + code: str, + tf_min: int = 1, + limit: int = 100, + *, + start_dt: Optional[str] = None, + end_dt: Optional[str] = None, + as_strategy_schema: bool = True, + ) -> list: + """ + ls_ws_candles 최근/기간 조회. + as_strategy_schema=True → candle_time(YYYYMMDDHHMM), is_confirmed=1 등 + CandleAggregator/get_ws_candles 호환 dict. + """ + try: + tf = max(1, int(tf_min or 1)) + lim = max(1, min(int(limit or 100), 2000)) + params: list = [code, tf] + cond = "code=%s AND tf_min=%s" + if start_dt: + cond += " AND datetime >= %s" + params.append(start_dt) + if end_dt: + cond += " AND datetime <= %s" + params.append(end_dt) + params.append(lim) + rows = self.conn.execute( + f"SELECT datetime, open, high, low, close, volume, tick_count, tf_min " + f"FROM ls_ws_candles WHERE {cond} " + f"ORDER BY datetime DESC LIMIT %s", + tuple(params), + ).fetchall() + result = [] + for r in reversed(list(rows or [])): + d = dict(r) + if as_strategy_schema: + ct = self._ls_datetime_to_candle_time(str(d.get("datetime") or "")) + result.append({ + "candle_time": ct, + "open": float(d.get("open") or 0), + "high": float(d.get("high") or 0), + "low": float(d.get("low") or 0), + "close": float(d.get("close") or 0), + "volume": float(d.get("volume") or 0), + "tick_count": int(d.get("tick_count") or 0), + "is_confirmed": 1, + "source": "ls", + "rsi_2": None, + "rsi_3": None, + "rsi_5": None, + }) + else: + result.append(d) + return result + except Exception as e: + logger.error("get_ls_ws_candles 실패(%s): %s", code, e) + return [] + + def get_ls_ws_candles_range( + self, + code: str, + start_key: str, + end_key: str, + tf_min: int = 1, + ) -> list: + """백테용: candle_time 12자리 범위 → ls_ws_candles 조회 (스키마 변환).""" + s_dt = self._candle_time_to_ls_datetime(start_key) + e_dt = self._candle_time_to_ls_datetime(end_key) + if not s_dt or not e_dt: + return [] + return self.get_ls_ws_candles( + code, + tf_min=tf_min, + limit=5000, + start_dt=s_dt, + end_dt=e_dt, + as_strategy_schema=True, + ) + + def insert_ls_ws_orderbook( + self, + *, + code: str, + snap: Dict[str, Any], + market: str = "KR", + ) -> bool: + """LS UH1 호가 스냅샷 → ls_ws_orderbook (키움 ws_orderbook 스키마 대칭).""" + try: + recv_ts = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3] + snap_time = str(snap.get("snap_time") or "").strip() + if len(snap_time) < 14: + snap_time = datetime.datetime.now().strftime("%Y%m%d%H%M%S") + self.conn.execute( + "INSERT INTO ls_ws_orderbook " + "(market, code, snap_time, best_bid, best_ask, " + "total_bid_qty, total_ask_qty, bid_qty_l3, ask_qty_l3, " + "levels_json, source, recv_ts) " + "VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)", + ( + (market or "KR")[:8], + code, + snap_time[:14], + int(snap.get("best_bid") or 0), + int(snap.get("best_ask") or 0), + int(snap.get("total_bid_qty") or 0), + int(snap.get("total_ask_qty") or 0), + int(snap.get("bid_qty_l3") or 0), + int(snap.get("ask_qty_l3") or 0), + snap.get("levels_json"), + str(snap.get("source") or "ls_uh1")[:16], + recv_ts, + ), + ) + return True + except Exception as e: + logger.debug("ls_ws_orderbook INSERT 실패: %s", e) + return False + + def insert_ls_ws_vi( + self, + *, + code: str, + ts=None, + event_time: str = "", + vi_gubun: str = "0", + krx_vi_gubun: Optional[str] = None, + nxt_vi_gubun: Optional[str] = None, + svi_recprice: Optional[float] = None, + dvi_recprice: Optional[float] = None, + vi_trgprice: Optional[float] = None, + tr_cd: str = "", + exchname: str = "", + ) -> bool: + """LS UVI/VI_ 발동·해제 이벤트 → ls_ws_vi (백테 '이때 VI' 구간용).""" + try: + if ts is None: + ts = datetime.datetime.now() + self.conn.execute( + "INSERT INTO ls_ws_vi " + "(ts, code, event_time, vi_gubun, krx_vi_gubun, nxt_vi_gubun, " + "svi_recprice, dvi_recprice, vi_trgprice, tr_cd, exchname) " + "VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)", + ( + ts, + code, + (event_time or None), + str(vi_gubun or "0")[:4], + (str(krx_vi_gubun)[:4] if krx_vi_gubun not in (None, "") else None), + (str(nxt_vi_gubun)[:4] if nxt_vi_gubun not in (None, "") else None), + svi_recprice, + dvi_recprice, + vi_trgprice, + (tr_cd or None), + (exchname or None), + ), + ) + return True + except Exception as e: + logger.debug("ls_ws_vi INSERT 실패: %s", e) + return False + def get_ws_validation_stats( self, *, hours: int = 24, code: Optional[str] = None, ) -> Dict[str, Any]: @@ -2938,6 +3675,66 @@ class TradeDB: except Exception as e: logger.debug("strategy keys env→config migrate: %s", e) + def _migrate_us_momentum_from_ext(self) -> None: + """env_config_ext 의 US_MOMENTUM_* → config_us_momentum 이전 후 ext 삭제.""" + try: + tbl = "config_us_momentum" + keys = CONFIG_TABLE_KEYS.get(tbl, ()) + if not keys: + return + rows = self.conn.execute( + "SELECT env_key, env_value FROM env_config_ext WHERE env_key LIKE %s", + ("US_MOMENTUM%",), + ).fetchall() + # STRATEGY_US_MOMENTUM_ENABLED 도 + rows2 = self.conn.execute( + "SELECT env_key, env_value FROM env_config_ext WHERE env_key=%s", + ("STRATEGY_US_MOMENTUM_ENABLED",), + ).fetchall() + all_rows = list(rows or []) + list(rows2 or []) + if not all_rows: + return + patch: Dict[str, str] = {} + for er in all_rows: + ek = er["env_key"] if isinstance(er, dict) else er[0] + ev = er["env_value"] if isinstance(er, dict) else er[1] + if not ek: + continue + if classify_config_key(str(ek)) != tbl: + continue + if ev is None or str(ev).strip() == "": + continue + patch[str(ek)] = str(ev) + if not patch: + return + latest = self._read_latest_config_table(tbl, keys) + merged = dict(latest) + # 최신 테이블에 이미 값이 있으면 유지, 비어 있을 때만 ext 로 채움 + for k, v in patch.items(): + if not str(merged.get(k) or "").strip(): + merged[k] = v + now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + rid = self._insert_config_table_row(tbl, merged, keys, now) + if rid: + for k in patch: + try: + self.conn.execute( + "DELETE FROM env_config_ext WHERE env_key=%s", (k,) + ) + except Exception: + pass + logger.info( + "📌 config_us_momentum ← env_config_ext 이전 %d키 (row id=%s)", + len(patch), rid, + ) + try: + from kis_trader.utils.env import invalidate_merged_env_cache + invalidate_merged_env_cache() + except Exception: + pass + except Exception as e: + logger.debug("us_momentum ext→config migrate: %s", e) + def _migrate_short_time_to_tail_time(self) -> None: """ 레거시 ``SHORT_TIME_START`` / ``SHORT_TIME_END`` → ``TAIL_TIME_*`` 이전 후 단일화. @@ -3405,34 +4202,37 @@ class TradeDB: open_: float, high: float, low: float, close: float, volume: int, is_confirmed: int = 0, source: str = "ws", rsi_2: float = None, rsi_3: float = None, rsi_5: float = None, - holding_peak: float = None): + holding_peak: float = None, market: str = "KR"): """ 봉 1개를 INSERT OR REPLACE 로 저장. - 진행 중인 봉(is_confirmed=0): 틱마다 close/high/low/volume 갱신 - 확정 봉(is_confirmed=1): RSI 계산 후 최종 저장 - holding_peak: SHORT 보유 중 WS 트레일 고점 (백테 실매 정합용, 선택) + - market: KR(국내) | US(해외) — ws_candles.market """ now_str = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + mk = (market or "KR").strip().upper()[:8] or "KR" try: with self.conn: self.conn.execute(""" INSERT INTO ws_candles - (code, timeframe, candle_time, open, high, low, close, volume, + (code, market, timeframe, candle_time, open, high, low, close, volume, rsi_2, rsi_3, rsi_5, is_confirmed, source, holding_peak, updated_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - ON CONFLICT(code, timeframe, candle_time) DO UPDATE SET - high = MAX(high, excluded.high), - low = MIN(low, excluded.low), - close = excluded.close, - volume = excluded.volume, - rsi_2 = COALESCE(excluded.rsi_2, rsi_2), - rsi_3 = COALESCE(excluded.rsi_3, rsi_3), - rsi_5 = COALESCE(excluded.rsi_5, rsi_5), - is_confirmed = excluded.is_confirmed, - source = excluded.source, - holding_peak = MAX(COALESCE(holding_peak, 0), COALESCE(excluded.holding_peak, 0)), - updated_at = excluded.updated_at - """, (code, timeframe, candle_time, open_, high, low, close, volume, + VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + ON DUPLICATE KEY UPDATE + market = IF(VALUES(market) IS NULL OR VALUES(market)='', market, VALUES(market)), + high = GREATEST(high, VALUES(high)), + low = LEAST(low, VALUES(low)), + close = VALUES(close), + volume = VALUES(volume), + rsi_2 = COALESCE(VALUES(rsi_2), rsi_2), + rsi_3 = COALESCE(VALUES(rsi_3), rsi_3), + rsi_5 = COALESCE(VALUES(rsi_5), rsi_5), + is_confirmed = VALUES(is_confirmed), + source = VALUES(source), + holding_peak = GREATEST(COALESCE(holding_peak, 0), COALESCE(VALUES(holding_peak), 0)), + updated_at = VALUES(updated_at) + """, (code, mk, timeframe, candle_time, open_, high, low, close, volume, rsi_2, rsi_3, rsi_5, is_confirmed, source, holding_peak, now_str)) except Exception as e: logger.error("upsert_ws_candle 실패(%s): %s", code, e) @@ -3506,6 +4306,16 @@ class TradeDB: # ws_ticks — 실시간 체결 틱 (TickRecorder 배치 INSERT) # ================================================================== + @staticmethod + def new_raw_connection(): + """틱 writer 등 전용 커넥션 (앱 TradeDB._lock 과 분리).""" + return _MariaDBConn() + + @staticmethod + def ws_ticks_table_for_market(market: str = "KR") -> str: + """국내=ws_ticks / 해외=ws_ticks_us.""" + return "ws_ticks_us" if str(market or "KR").strip().upper() == "US" else "ws_ticks" + def ensure_ws_ticks_table(self) -> None: """런타임 테이블 보장 (구 DB 마이그레이션).""" try: @@ -3525,19 +4335,56 @@ class TradeDB: recv_ts VARCHAR(30) NOT NULL, KEY idx_ws_ticks_lookup (market, code, tick_time), KEY idx_ws_ticks_recv (recv_ts) - ) CHARACTER SET utf8mb4 + ) ENGINE=InnoDB CHARACTER SET utf8mb4 """) except Exception as e: logger.debug("ensure_ws_ticks_table: %s", e) - def insert_ws_ticks_batch(self, batch: List[Dict]) -> int: - """체결 틱 배치 append INSERT (중복 키 없음 — 이벤트 로그).""" + def ensure_ws_ticks_us_table(self) -> None: + """해외 체결 틱 테이블 보장 (InnoDB, 국내 ws_ticks 와 분리).""" + try: + self.conn.execute(""" + CREATE TABLE IF NOT EXISTS ws_ticks_us ( + id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + market VARCHAR(8) NOT NULL DEFAULT 'US', + exchange VARCHAR(16) DEFAULT NULL, + code VARCHAR(32) NOT NULL, + tick_time VARCHAR(14) NOT NULL, + price DOUBLE NOT NULL, + volume BIGINT NOT NULL DEFAULT 0, + tick_seq BIGINT DEFAULT NULL, + session VARCHAR(8) DEFAULT NULL, + currency VARCHAR(8) NOT NULL DEFAULT 'USD', + source VARCHAR(16) NOT NULL DEFAULT 'kis_us', + recv_ts VARCHAR(30) NOT NULL, + KEY idx_ws_ticks_us_lookup (market, code, tick_time), + KEY idx_ws_ticks_us_recv (recv_ts) + ) ENGINE=InnoDB CHARACTER SET utf8mb4 + """) + except Exception as e: + logger.debug("ensure_ws_ticks_us_table: %s", e) + + def _insert_ws_ticks_batch_into( + self, + table: str, + batch: List[Dict], + *, + default_market: str = "KR", + default_currency: str = "KRW", + default_source: str = "kis", + conn=None, + ) -> int: + """공통 배치 INSERT (table=ws_ticks|ws_ticks_us).""" if not batch: return 0 + table = (table or "ws_ticks").strip() + if table not in ("ws_ticks", "ws_ticks_us"): + logger.error("insert_ws_ticks: 허용되지 않은 테이블 %s", table) + return 0 rows = [] for it in batch: rows.append(( - (it.get("market") or "KR")[:8], + (it.get("market") or default_market)[:8], (it.get("exchange") or None), (it.get("code") or "")[:32], (it.get("tick_time") or "")[:14], @@ -3545,19 +4392,20 @@ class TradeDB: int(it.get("volume") or 0), it.get("tick_seq"), (it.get("session") or None), - (it.get("currency") or "KRW")[:8], - (it.get("source") or "kis")[:16], + (it.get("currency") or default_currency)[:8], + (it.get("source") or default_source)[:16], it.get("recv_ts") or datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), )) + exec_conn = conn or self.conn try: ph = "(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" placeholders = ", ".join([ph] * len(rows)) flat: List[Any] = [] for row in rows: flat.extend(row) - self.conn.execute( + exec_conn.execute( f""" - INSERT INTO ws_ticks + INSERT INTO {table} (market, exchange, code, tick_time, price, volume, tick_seq, session, currency, source, recv_ts) VALUES {placeholders} @@ -3566,9 +4414,149 @@ class TradeDB: ) return len(rows) except Exception as e: - logger.error("insert_ws_ticks_batch 실패: %s", e) + logger.error("insert_%s_batch 실패: %s", table, e) return 0 + def insert_ws_ticks_batch(self, batch: List[Dict], *, conn=None) -> int: + """국내 체결 틱 배치 append INSERT (중복 키 없음 — 이벤트 로그).""" + return self._insert_ws_ticks_batch_into( + "ws_ticks", batch, + default_market="KR", default_currency="KRW", default_source="kis", + conn=conn, + ) + + def insert_ws_ticks_us_batch(self, batch: List[Dict], *, conn=None) -> int: + """해외 체결 틱 → ws_ticks_us (전용 conn 권장 — TradeDB 락 분리).""" + return self._insert_ws_ticks_batch_into( + "ws_ticks_us", batch, + default_market="US", default_currency="USD", default_source="kis_us", + conn=conn, + ) + + def get_latest_ws_tick_quotes( + self, + codes: List[str], + *, + market: str = "KR", + ) -> Dict[str, Dict[str, Any]]: + """ + 종목별 최신 1틱 (웹 보유 라이브 표시용 SELECT). + 실매 메모리 캐시와 무관 — INSERT 경로만 공유, 주문/전략 비접촉. + """ + uniq: List[str] = [] + seen = set() + for c in codes or []: + cc = str(c or "").strip() + if not cc or cc in seen: + continue + seen.add(cc) + uniq.append(cc[:32]) + if not uniq: + return {} + mkt = (market or "KR").strip().upper() + table = self.ws_ticks_table_for_market(mkt) + if table == "ws_ticks_us": + self.ensure_ws_ticks_us_table() + else: + self.ensure_ws_ticks_table() + ph = ", ".join(["%s"] * len(uniq)) + try: + rows = self.conn.execute( + f""" + SELECT t.code, t.price, t.recv_ts, t.tick_time, t.source, t.currency + FROM {table} t + INNER JOIN ( + SELECT code, MAX(id) AS mid + FROM {table} + WHERE code IN ({ph}) + GROUP BY code + ) x ON t.id = x.mid + """, + tuple(uniq), + ).fetchall() + except Exception as e: + logger.debug("get_latest_ws_tick_quotes 실패 market=%s: %s", mkt, e) + return {} + out: Dict[str, Dict[str, Any]] = {} + for r in rows or []: + code = str(r.get("code") or "").strip() + if not code: + continue + try: + px = float(r.get("price") or 0) + except (TypeError, ValueError): + px = 0.0 + if px <= 0: + continue + out[code] = { + "price": px, + "recv_ts": str(r.get("recv_ts") or ""), + "tick_time": str(r.get("tick_time") or ""), + "source": str(r.get("source") or ""), + "currency": str(r.get("currency") or ("USD" if mkt == "US" else "KRW")), + "market": mkt, + } + return out + + def get_prev_close_map( + self, + codes: List[str], + *, + market: str = "KR", + timeframe: int = 1, + ) -> Dict[str, float]: + """당일 등락률용 전일(직전 세션) 종가 — ws_candles 1분봉 마지막 close. + + KR: 당일 09:00 미만 최신 봉. US: 당일 00:00 미만 최신 봉. + REST 없이 SELECT 만 (웹 라이브 표시용). + """ + uniq: List[str] = [] + seen = set() + for c in codes or []: + cc = str(c or "").strip() + if not cc or cc in seen: + continue + seen.add(cc) + uniq.append(cc[:32]) + if not uniq: + return {} + mkt = (market or "KR").strip().upper() + tf = max(1, int(timeframe or 1)) + today = datetime.datetime.now().strftime("%Y%m%d") + # candle_time = YYYYMMDDHHMM + cutoff = today + ("0900" if mkt == "KR" else "0000") + ph = ", ".join(["%s"] * len(uniq)) + try: + rows = self.conn.execute( + f""" + SELECT c.code, c.close + FROM ws_candles c + INNER JOIN ( + SELECT code, MAX(candle_time) AS mt + FROM ws_candles + WHERE market=%s AND timeframe=%s + AND code IN ({ph}) + AND candle_time < %s + GROUP BY code + ) x ON c.code = x.code AND c.candle_time = x.mt + WHERE c.market=%s AND c.timeframe=%s + """, + (mkt, tf) + tuple(uniq) + (cutoff, mkt, tf), + ).fetchall() + except Exception as e: + logger.debug("get_prev_close_map 실패 market=%s: %s", mkt, e) + return {} + out: Dict[str, float] = {} + for r in rows or []: + code = str(r.get("code") or "").strip() + try: + px = float(r.get("close") or 0) + except (TypeError, ValueError): + px = 0.0 + if code and px > 0: + out[code] = px + return out + def get_ws_ticks( self, code: str, @@ -3578,14 +4566,16 @@ class TradeDB: end_tick_time: str = "", limit: int = 5000, ) -> List[Dict]: - """백테·분석용 틱 조회 (오래된→최신).""" + """백테·분석용 틱 조회 (오래된→최신). US → ws_ticks_us.""" code = (code or "").strip() if not code: return [] limit = max(1, min(int(limit), 500000)) + mkt = (market or "KR")[:8].upper() + table = self.ws_ticks_table_for_market(mkt) try: cond = "market=%s AND code=%s" - params: List[Any] = [(market or "KR")[:8], code[:32]] + params: List[Any] = [mkt, code[:32]] if start_tick_time: cond += " AND tick_time >= %s" params.append(start_tick_time[:14]) @@ -3596,7 +4586,7 @@ class TradeDB: f""" SELECT market, exchange, code, tick_time, price, volume, tick_seq, session, currency, source, recv_ts - FROM ws_ticks + FROM {table} WHERE {cond} ORDER BY tick_time ASC LIMIT %s @@ -3605,23 +4595,48 @@ class TradeDB: ).fetchall() return [dict(r) for r in rows] except Exception as e: - logger.error("get_ws_ticks 실패(%s): %s", code, e) + logger.error("get_ws_ticks 실패(%s/%s): %s", mkt, code, e) return [] - def cleanup_old_ws_ticks(self, keep_days: int = 7) -> None: - """recv_ts 기준 오래된 틱 삭제.""" + def _cleanup_old_ticks_table(self, table: str, keep_days: int) -> None: if keep_days <= 0: return + table = (table or "").strip() + if table not in ("ws_ticks", "ws_ticks_us"): + return cutoff = ( datetime.datetime.now() - datetime.timedelta(days=keep_days) ).strftime("%Y-%m-%d %H:%M:%S") + chunk = max(1000, int(os.environ.get("WS_TICK_CLEANUP_CHUNK", "5000") or 5000)) + max_loops = max(1, int(os.environ.get("WS_TICK_CLEANUP_MAX_LOOPS", "200") or 200)) + total = 0 try: - self.conn.execute( - "DELETE FROM ws_ticks WHERE recv_ts < %s", (cutoff,) - ) - logger.info("🧹 ws_ticks 정리 완료 (recv_ts < %s)", cutoff) + import time as _time + for _ in range(max_loops): + cur = self.conn.execute( + f"DELETE FROM {table} WHERE recv_ts < %s LIMIT %s", + (cutoff, chunk), + ) + n = int(getattr(cur, "rowcount", 0) or 0) + total += n + if n < chunk: + break + _time.sleep(0.05) + if total: + logger.info( + "🧹 %s 정리 %d행 (recv_ts < %s, chunk=%d)", + table, total, cutoff, chunk, + ) except Exception as e: - logger.error("cleanup_old_ws_ticks 실패: %s", e) + logger.error("cleanup_old_%s 실패: %s", table, e) + + def cleanup_old_ws_ticks(self, keep_days: int = 7) -> None: + """recv_ts 기준 오래된 틱 삭제 (청크 — 단일 거대 DELETE 가 TradeDB 락을 장시간 점유하지 않게).""" + self._cleanup_old_ticks_table("ws_ticks", keep_days) + + def cleanup_old_ws_ticks_us(self, keep_days: int = 7) -> None: + """해외 ws_ticks_us 오래된 틱 정리.""" + self._cleanup_old_ticks_table("ws_ticks_us", keep_days) # ================================================================== # ws_orderbook / ws_program — TRIGGER 스냅샷 (TriggerSnapshotRecorder) diff --git a/kis_approval_manager.py b/kis_approval_manager.py index 566c08a..bb0cc02 100644 --- a/kis_approval_manager.py +++ b/kis_approval_manager.py @@ -10,6 +10,10 @@ REST access_token(.kis_token_cache_*.json) 과 동일 패턴: 문제(기존): - kis_ws / kis_ws_overseas 가 각각 /oauth2/Approval 호출 → 나중 키가 앞 키 무효화 - 메모리만 사용 → 재시작마다 새 발급 → invalid approval 루프 + +응급 예외(invalid approval): + - 서버가 캐시 키를 이미 거부하는데 6h 가드만 지키면 동일 키 루프 + - bypass_min_reissue / emergency_reissue 로 REST 재발급 허용 """ from __future__ import annotations @@ -34,6 +38,9 @@ LOCK_TIMEOUT_S = 60 DEFAULT_MIN_REISSUE_SEC = 21600.0 DEFAULT_MAX_VALID_SEC = 82800.0 +# 응급 재발급 하드캡 파일 (실전/모의 공통 간격 — 앱키당 1키 정책) +EMERGENCY_META_REAL = ROOT / ".kis_approval_emergency_real.json" +EMERGENCY_META_MOCK = ROOT / ".kis_approval_emergency_mock.json" _am_instances: dict = {} _am_instances_lock = threading.Lock() @@ -55,6 +62,18 @@ def _max_valid_sec() -> float: return DEFAULT_MAX_VALID_SEC +def _emergency_cap_sec() -> float: + """응급 재발급 최소 간격(초). 기본=6h — 영구정지 위험 완화.""" + try: + raw = os.environ.get("KIS_WS_EMERGENCY_REISSUE_MIN_SEC", "").strip() + if raw: + return max(0.0, float(raw)) + # 미설정 시 정상 6h 가드와 동일 + return _min_reissue_sec() + except (ValueError, TypeError): + return DEFAULT_MIN_REISSUE_SEC + + def _acquire_lock() -> bool: deadline = time.time() + LOCK_TIMEOUT_S while time.time() < deadline: @@ -177,6 +196,109 @@ class KISApprovalManager: self._load_from_file() return self._approval_key + def clear_cached_key(self, reason: str = "") -> None: + """메모리·파일 캐시 삭제 (죽은 키 루프 탈출용).""" + with self._lock: + had = bool(self._approval_key) + self._approval_key = None + self._issued_ts = 0.0 + self._app_key_prefix = "" + try: + self._cache_path.unlink(missing_ok=True) + except Exception as exc: + logger.warning("approval 캐시 파일 삭제 실패: %s", exc) + if had or reason: + logger.info( + "🧹 approval_key 캐시 삭제 [%s]%s", + self._mode_str, + f" ({reason})" if reason else "", + ) + + def _emergency_meta_path(self) -> Path: + return EMERGENCY_META_MOCK if self._is_mock else EMERGENCY_META_REAL + + def _last_emergency_ts(self) -> float: + path = self._emergency_meta_path() + if not path.exists(): + return 0.0 + try: + data = json.loads(path.read_text(encoding="utf-8")) + return float(data.get("last_emergency_ts") or 0.0) + except Exception: + return 0.0 + + def _save_emergency_ts(self, ts: float, reason: str = "") -> None: + path = self._emergency_meta_path() + try: + path.write_text( + json.dumps( + { + "last_emergency_ts": ts, + "last_emergency_at": datetime.fromtimestamp(ts).strftime( + "%Y-%m-%d %H:%M:%S" + ), + "reason": (reason or "")[:200], + "mock": self._is_mock, + }, + ensure_ascii=False, + indent=2, + ), + encoding="utf-8", + ) + except Exception as exc: + logger.warning("응급 재발급 메타 저장 실패: %s", exc) + + def emergency_reissue( + self, + app_key: str, + app_secret: str, + base_url: str, + *, + reason: str = "invalid approval", + ) -> Optional[str]: + """ + 서버가 캐시 키를 거부할 때 6h 가드를 우회해 REST 재발급. + ★ 하드캡: KIS_WS_EMERGENCY_REISSUE_MIN_SEC(기본 6h) 내 1회만 허용. + (정상 재연결 경로에서는 호출하지 말 것 — invalid 연속·수동 응급만) + """ + cap = _emergency_cap_sec() + last = self._last_emergency_ts() + now = time.time() + if cap > 0 and last > 0 and (now - last) < cap: + remain = cap - (now - last) + logger.error( + "⛔ approval 응급 재발급 하드캡 — %.0f분 전 이미 1회 사용 " + "(남은 대기 %.0f분, 간격 %.0fh). 죽은 키 루프여도 REST 재발급 안 함. " + "reason=%s", + (now - last) / 60.0, + remain / 60.0, + cap / 3600.0, + reason, + ) + # 캐시가 있으면 그대로 반환(루프는 WS 쪽 쿨다운), 없으면 None + with self._lock: + self._load_from_file() + return self._approval_key + + logger.warning( + "🚨 approval_key 응급 REST 재발급 시작 [%s] reason=%s " + "(하드캡: %.0fh에 1회)", + self._mode_str, + reason, + cap / 3600.0 if cap > 0 else 0.0, + ) + self.clear_cached_key(reason=reason) + key = self.get_approval_key( + app_key, + app_secret, + base_url, + force_refresh=True, + bypass_min_reissue=True, + ) + if key: + self._save_emergency_ts(time.time(), reason=reason) + return key + @property def issued_ts(self) -> float: return self._issued_ts @@ -188,11 +310,13 @@ class KISApprovalManager: base_url: str, *, force_refresh: bool = False, + bypass_min_reissue: bool = False, ) -> Optional[str]: """ 유효한 approval_key 반환. - 24h 이내: 파일/메모리 캐시 재사용 (재연결 포함) - 6h 미경과: force_refresh=True 여도 REST 재발급 금지 + (단 bypass_min_reissue=True 이면 응급 재발급 허용) - 6h 경과 + 24h 미만 + force_refresh: REST 재발급 허용 - 24h 경과: REST 재발급 """ @@ -213,9 +337,9 @@ class KISApprovalManager: or self._app_key_prefix.startswith(app_key[:8]) ) if self._approval_key and age < max_valid and prefix_ok: - if force_refresh and age >= min_reissue: + if force_refresh and (bypass_min_reissue or age >= min_reissue): pass - elif force_refresh and age < min_reissue: + elif force_refresh and age < min_reissue and not bypass_min_reissue: logger.info( "🔑 approval_key REST 재발급 생략 (KIS 6h — %.0f분/%.0fh, %s 재사용)", age / 60, @@ -236,7 +360,9 @@ class KISApprovalManager: self._load_from_file() age = self.age_sec() if self._approval_key and age < max_valid: - if not force_refresh or age < min_reissue: + if not force_refresh: + return self._approval_key + if age < min_reissue and not bypass_min_reissue: return self._approval_key key = _issue_rest(app_key, app_secret, base_url) @@ -252,11 +378,12 @@ class KISApprovalManager: self._save_to_file() logger.info( "✅ WebSocket approval_key 발급·저장 (%s, 앞8자: %s…, " - "다음 REST 가능: %.0fh 후 → %s)", + "다음 REST 가능: %.0fh 후 → %s%s)", self._mode_str, key[:8], min_reissue / 3600, self._cache_path.name, + ", 응급우회" if bypass_min_reissue else "", ) return key finally: diff --git a/kis_trader/backtest/backtest_portfolio_common.py b/kis_trader/backtest/backtest_portfolio_common.py index a30ca06..a37435d 100644 --- a/kis_trader/backtest/backtest_portfolio_common.py +++ b/kis_trader/backtest/backtest_portfolio_common.py @@ -9,6 +9,29 @@ from datetime import datetime from typing import Any, Dict, List, Optional, Tuple +def ensure_meta_db(meta_out: Optional[Dict[str, Any]]) -> Any: + """``meta_out['db']`` 보장 — 틱/스냅샷 로드용. + + 웹 API는 항상 db 를 넣지만, CLI·잡·일부 스크립트에서 빠지면 + 틱 미로드 → OHLC만 청산 → 실매와 크게 어긋난다. + 없을 때만 TradeDB 를 만들고 ``_db_created_for_bt`` 표시. + """ + if meta_out is None: + return None + db = meta_out.get("db") + if db is not None: + return db + try: + from database import TradeDB + + db = TradeDB() + meta_out["db"] = db + meta_out["_db_created_for_bt"] = True + return db + except Exception: + return None + + def flatten_remaining_portfolio_trades( portfolio: Dict[str, Dict[str, Any]], ctx_by_code: Dict[str, Dict[str, Any]], @@ -168,6 +191,13 @@ STRATEGY_PORTFOLIO_KEYS: Dict[str, Dict[str, Tuple[str, ...]]] = { "per_stock_cap": ("MOMENTUM_MAX_BUY_AMOUNT", "MAX_BUY_AMOUNT_PER_STOCK"), "min_invest_env": ("MOMENTUM_MIN_INVEST_RATIO_OF_SLOT", "MIN_INVEST_RATIO_OF_SLOT"), }, + "US_MOMENTUM": { + "max_stocks": ("US_MOMENTUM_MAX_STOCKS",), + "total_budget": ("US_MOMENTUM_TOTAL_BUDGET", "US_MOMENTUM_TOTAL_BUDGET_KRW"), + "slot": ("US_MOMENTUM_SLOT_MONEY",), + "per_stock_cap": ("US_MOMENTUM_MAX_BUY_AMOUNT",), + "min_invest_env": ("US_MOMENTUM_MIN_INVEST_RATIO_OF_SLOT", "MIN_INVEST_RATIO_OF_SLOT"), + }, "BREAKOUT": { "max_stocks": ("BREAKOUT_MAX_STOCKS", "MAX_STOCKS"), "total_budget": ("BREAKOUT_TOTAL_BUDGET_KRW", "SHORT_TOTAL_BUDGET_KRW"), @@ -323,7 +353,18 @@ def merge_param_search_apply_source( def session_env_patch(strategy: str, p: Dict[str, Any]) -> Dict[str, str]: - """매매시간 HHMM → env (전략별 TIME_*). 꼬리(SHORT/TAIL)는 TAIL_TIME_* 만.""" + """매매시간 HHMM → env (전략별 TIME_*). 꼬리(SHORT/TAIL)는 TAIL_TIME_* 만. + + 기본 OFF — 파라서치/Optuna apply 가 TIME_* 를 덮어쓰지 않음 + (짧은 창 과적합 → 실매 오후 진입 잠금 방지). 운영 시간은 DB·웹에서 수동. + 켜려면 PARAM_SEARCH_APPLY_SESSION_TIME=1. + """ + try: + from kis_trader.utils.env import get_env_bool + if not get_env_bool("PARAM_SEARCH_APPLY_SESSION_TIME", False): + return {} + except Exception: + return {} patch: Dict[str, str] = {} ts = p.get("time_start_hm") te = p.get("time_end_hm") @@ -341,6 +382,8 @@ def session_env_patch(strategy: str, p: Dict[str, Any]) -> Dict[str, str]: patch["TIME_START"] = v elif strat == "MOMENTUM": patch["MOMENTUM_TIME_START"] = v + elif strat == "US_MOMENTUM": + patch["US_MOMENTUM_TIME_START"] = v elif strat == "BREAKOUT": patch["BREAKOUT_TIME_START"] = v elif strat == "RANGE_BREAK": @@ -356,6 +399,8 @@ def session_env_patch(strategy: str, p: Dict[str, Any]) -> Dict[str, str]: patch["TIME_END"] = v elif strat == "MOMENTUM": patch["MOMENTUM_TIME_END"] = v + elif strat == "US_MOMENTUM": + patch["US_MOMENTUM_TIME_END"] = v elif strat == "BREAKOUT": patch["BREAKOUT_TIME_END"] = v patch["BREAKOUT_GOLDEN_END_HM"] = v @@ -368,8 +413,9 @@ def session_env_patch(strategy: str, p: Dict[str, Any]) -> Dict[str, str]: # 전략 전용 키 prefix — 쓰기 시 '남의 전략' 키 오염 방지용. # (읽기 fallback 튜플엔 타 전략 키가 폴백으로 들어있어, 그대로 쓰면 SCALP·SHORT 등이 덮인다) +# US_MOMENTUM_ 은 MOMENTUM_ 보다 먼저 매칭되도록 앞에 둠. _KNOWN_STRATEGY_PREFIXES: Tuple[str, ...] = ( - "TAIL_", "SHORT_", "SCALP_", "MOMENTUM_", + "TAIL_", "SHORT_", "SCALP_", "US_MOMENTUM_", "MOMENTUM_", "BREAKOUT_", "RANGE_BREAK_", "UPDOW_", "DBBAND_", ) @@ -613,6 +659,10 @@ def apply_daily_profit_halt_sim( 고점대비 trail_drop_pct% 되돌림이 처음 발생한 시각 이후의 신규 진입을 차단한다. (보유분 청산은 그대로 — 실매 buy_allowed 와 동일: 신규매수만 중단.) + B(리스크버짓): ``_backtest_daily_profit_risk_budget`` ON 이면 hit 시점에 + 미청산 포지션의 최악손절합 > cushion 인 종목을 **손절가 전량청산**으로 근사 + (실매 plan_risk_budget_trim 과 동일 선정 · 체결가는 stop 보수 가정). + 게이트: - params['_backtest_daily_profit_trail'] 명시 시 그 값 (웹 손익감시 스위치). - 미지정이면 실매 ``{pfx}_DAILY_PROFIT_TARGET_ENABLED`` 추종. @@ -634,12 +684,29 @@ def apply_daily_profit_halt_sim( from kis_trader.engine.daily_profit_halt import ( _guard_active, _target_reached, _trail_reached, + plan_risk_budget_trim, resolve_stop_price, position_stop_risk_krw, ) cfg = _daily_halt_cfg(p) if not _guard_active(cfg): return trades mode = str(cfg.get("mode") or "fixed").lower() + rb_gate = p.get("_backtest_daily_profit_risk_budget") + if rb_gate is None: + sid = str(p.get("_daily_profit_strategy_id") or p.get("strategy_id") or "SHORT").strip().upper() + if sid == "TAIL": + sid = "SHORT" + try: + from kis_trader.engine.daily_profit_halt import load_strategy_profit_target + rb_gate = bool(load_strategy_profit_target(sid).get("risk_budget_enabled")) + except Exception: + from kis_trader.utils.env import get_env_bool + rb_gate = get_env_bool(f"{sid}_DAILY_PROFIT_RISK_BUDGET_ENABLED", False) + rb_on = bool(rb_gate) + sid_rb = str(p.get("_daily_profit_strategy_id") or p.get("strategy_id") or "SHORT").strip().upper() + if sid_rb == "TAIL": + sid_rb = "SHORT" + by_day: Dict[str, List[Dict]] = {} for t in trades: et = str(t.get("entry_time") or t.get("buy_time") or "") @@ -653,6 +720,8 @@ def apply_daily_profit_halt_sim( cum = 0.0 peak = 0.0 trigger_time: Optional[str] = None + trail_hit = False + fixed_hit = False for t in closes: cum += float(t.get("pnl") or 0) peak = max(peak, cum) @@ -662,9 +731,63 @@ def apply_daily_profit_halt_sim( if fixed_hit or trail_hit: trigger_time = str(t.get("exit_time") or t.get("sell_time") or "") break + + # B: hit 시점 미청산 → 리스크버짓 전량(손절가) 근사 + force_codes: set = set() + if rb_on and trigger_time: + open_rows: List[Dict[str, Any]] = [] + for t in ts: + et = str(t.get("entry_time") or t.get("buy_time") or "") + xt = str(t.get("exit_time") or t.get("sell_time") or "") + if et and et < trigger_time and (not xt or xt > trigger_time): + entry = float(t.get("buy_price") or t.get("entry") or 0) + qty = int(t.get("qty") or 1) + stop = float(t.get("stop_price") or 0) + stop = resolve_stop_price( + entry=entry, stop_price=stop, strategy_id=sid_rb, + ) + risk = position_stop_risk_krw(qty=qty, entry=entry, stop_price=stop) + code = str(t.get("code") or t.get("ticker") or id(t)) + open_rows.append({ + "code": code, + "_trade": t, + "qty": qty, + "buy_price": entry, + "stop_price": stop, + "risk_krw": risk, + }) + plan = plan_risk_budget_trim( + pnl_krw=cum, + peak_krw=peak, + cfg=cfg, + budget_krw=budget_krw, + positions=open_rows, + trail_hit=trail_hit, + fixed_hit=fixed_hit, + ) + if plan.get("action") == "trim": + for row in plan.get("closes") or []: + tr = row.get("_trade") + if not tr: + continue + code = str(row.get("code") or "") + force_codes.add(code) + stop = float(row.get("stop_price") or 0) + entry = float(row.get("buy_price") or 0) + qty = int(row.get("qty") or 1) + # 보수: 손절가 청산으로 pnl 재계산 (수수료 미차감 — 기존 trade pnl 스케일 유지) + if entry > 0 and stop > 0: + tr["sell_price"] = stop + tr["exit"] = stop + tr["pnl"] = round((stop - entry) * qty) + tr["exit_time"] = trigger_time + tr["sell_time"] = trigger_time + tr["sell_reason"] = "리스크버짓" + tr["_risk_budget_force"] = True + for t in ts: et = str(t.get("entry_time") or t.get("buy_time") or "") - if trigger_time and et >= trigger_time: + if trigger_time and et >= trigger_time and not t.get("_risk_budget_force"): continue # 트리거 후 신규매수 차단 kept.append(t) return kept @@ -676,14 +799,21 @@ def attach_scalp_trade_pnl( fee_rate: float, sell_tax: float, slip_pct: float = 0.0, + fx_fee_rate: float = 0.0, + pnl_decimals: int = 0, ) -> None: """스캘핑·모멘텀·돌파 공통 손익 (buy_time/sell_time 필드). slip_pct: 백테 체결 슬리피지(편도 %). 시장가 즉시 체결 가정이라 매수는 불리(+)· 매도는 불리(-) 로 진입·청산 양측 반영. 표시용 가격은 그대로 두고 pnl 에만 반영. 0=OFF(동작 불변). + fx_fee_rate: 환전 스프레드 **편도** 비율 (예: 0.0005=0.05%). 매수·매도 금액에 각각 적용. + 해외 US 등 — 0=OFF(국장 동작 불변). + pnl_decimals: 손익 반올림 자리 (국장 기본 0=원 단위 int, 해외 USD는 4 권장). """ slip = max(0.0, float(slip_pct or 0.0)) / 100.0 + fx = max(0.0, float(fx_fee_rate or 0.0)) + nd = max(0, int(pnl_decimals or 0)) for t in trades: if t.get("pnl") is not None and t.get("pnl") != 0: continue @@ -695,9 +825,19 @@ def attach_scalp_trade_pnl( xp = xp * (1.0 - slip) # 매도 체결 불리 buy_amt = ep * qty sell_amt = xp * qty - t["pnl"] = round( - sell_amt - buy_amt - buy_amt * fee_rate - sell_amt * fee_rate - sell_amt * sell_tax + # 매매수수료(편도×2) + 매도세 + 환전(편도×매수·매도) + pnl = ( + sell_amt - buy_amt + - buy_amt * float(fee_rate) + - sell_amt * float(fee_rate) + - sell_amt * float(sell_tax) + - (buy_amt + sell_amt) * fx ) + t["pnl"] = round(pnl, nd) if nd > 0 else round(pnl) + t["fee_rate"] = float(fee_rate) + t["sell_tax"] = float(sell_tax) + if fx > 0: + t["fx_fee_rate"] = fx bt = t.get("buy_time") or t.get("entry_time") st = t.get("sell_time") or t.get("exit_time") if bt and st: @@ -763,6 +903,8 @@ def resolve_trigger_snapshots_for_backtest( start_key = str(meta_out.get("start_key") or "") end_key = str(meta_out.get("end_key") or "") db = meta_out.get("db") + if db is None and start_key and end_key: + db = ensure_meta_db(meta_out) if db and start_key and end_key: ob_loaded, pg_loaded, snap_meta = load_trigger_snapshots_by_code( db, start_key, end_key, set(candles_by_code.keys()), diff --git a/kis_trader/backtest/breakout_backtest_common.py b/kis_trader/backtest/breakout_backtest_common.py index 50559a0..a0b43eb 100644 --- a/kis_trader/backtest/breakout_backtest_common.py +++ b/kis_trader/backtest/breakout_backtest_common.py @@ -310,19 +310,26 @@ def resolve_breakout_universe( *, use_saved_history: bool, strategy_id: str = BREAKOUT_STRATEGY_ID, + history_source: str = "kiwoom", ) -> Tuple[Optional[Dict[str, List[str]]], str, int, int]: if use_saved_history and strategy_id: try: from kis_trader.database.db_manager import get_db as _get_ext_db + from kis_trader.backtest.universe_history_source import ( + history_source_label, + resolve_backtest_universe_history_source, + ) + hs = resolve_backtest_universe_history_source(history_source) history = _get_ext_db().get_universe_by_candle_time( strategy_id=strategy_id, start_ymd=start_ymd, end_ymd=end_ymd, exit_debounce_sec=breakout_universe_exit_debounce_sec(), + history_source=hs, ) if history: - return history, "history", len(history), 1 + return history, history_source_label(hs), len(history), 1 except Exception: pass return None, "all", 0, 1 @@ -334,12 +341,21 @@ def load_breakout_candles_by_code( end_key: str, lookback_min: int = 1, vol_window: int = 7, + *, + history_source: str = "kiwoom", ) -> Tuple[Dict[str, List[Dict]], int]: - """ws_candles 1분봉 전 종목 로드.""" + """1분봉 전 종목 로드. history_source=ls → ls_ws_candles.""" min_bars = breakout_min_bars_required({ "lookback_min": lookback_min, "vol_window": int(vol_window), }) + hs = str(history_source or "kiwoom").strip().lower() + if hs in ("ls", "ls_condition", "ls_ws"): + from kis_trader.backtest.ls_history_loaders import load_ls_candles_by_code + + return load_ls_candles_by_code( + db, start_key, end_key, min_bars=min_bars, + ) ind_cols = ws_candles_select_indicator_cols(db) codes_raw = db.conn.execute( @@ -427,11 +443,22 @@ def run_breakout_backtest_web_aligned( _sk, _ek = min(_days), max(_days) if len(_sk) >= 8 and len(_ek) >= 8: from kis_trader.backtest.universe_timeline import build_universe_timeline + from kis_trader.backtest.universe_history_source import ( + resolve_backtest_universe_history_source, + ) + _deb = breakout_universe_exit_debounce_sec() + # 슬롯 dict(resolve_breakout_universe)와 동일 소스 — LS 라벨인데 키움 타임라인 쓰는 사고 방지 + _hs = resolve_backtest_universe_history_source( + engine_params.get("_universe_history_source") + or engine_params.get("universe_history_source") + ) + engine_params["_universe_history_source"] = _hs _tl = build_universe_timeline( strategy_id=BREAKOUT_STRATEGY_ID, start_ymd=_sk[:8], end_ymd=_ek[:8], debounce_sec=_deb, strict=False, strict_lag_minutes=0, + history_source=_hs, ) if _tl is not None: engine_params["_universe_timeline"] = _tl @@ -439,6 +466,7 @@ def run_breakout_backtest_web_aligned( meta_out["universe_timing"] = "scan_at" meta_out["universe_timeline_snapshots"] = _tl.snapshot_count meta_out["universe_exit_debounce_sec"] = _deb + meta_out["universe_history_source"] = _hs db_for_share = (meta_out or {}).get("db") if db_for_share and "share_denom_by_code" not in engine_params: @@ -453,17 +481,38 @@ def run_breakout_backtest_web_aligned( start_key = str(meta_out.get("start_key") or "") end_key = str(meta_out.get("end_key") or "") db = meta_out.get("db") + if db is None and start_key and end_key: + from kis_trader.backtest.backtest_portfolio_common import ensure_meta_db + + db = ensure_meta_db(meta_out) if db and start_key and end_key: - loaded_ticks, tick_rows = load_breakout_ticks_by_code( - db, start_key, end_key, set(candles_by_code.keys()), - ) + _hs_tick = str( + engine_params.get("_universe_history_source") + or engine_params.get("universe_history_source") + or (meta_out or {}).get("universe_history_source") + or "kiwoom" + ).strip().lower() + if _hs_tick in ("ls", "ls_condition", "ls_ws"): + from kis_trader.backtest.ls_history_loaders import load_ls_ticks_by_code + + loaded_ticks, tick_rows = load_ls_ticks_by_code( + db, start_key, end_key, set(candles_by_code.keys()), + ) + _tick_tbl = "ls_ws_ticks" + else: + loaded_ticks, tick_rows = load_breakout_ticks_by_code( + db, start_key, end_key, set(candles_by_code.keys()), + ) + _tick_tbl = "ws_ticks" tick_meta = tick_coverage_stats(candles_by_code, loaded_ticks) tick_meta["ws_tick_rows_loaded"] = tick_rows + tick_meta["tick_table"] = _tick_tbl if tick_rows <= 0: from kis_trader.utils.logger import get_logger as _get_logger _get_logger("kis_trader.breakout_backtest").warning( - "⚠️ ws_ticks 데이터 없음 — B안 OHLC high 폴백 (틱 수집 후 재백테 권장)", + "⚠️ %s 데이터 없음 — B안 OHLC high 폴백 (틱 수집 후 재백테 권장)", + _tick_tbl, ) elif loaded_ticks: tick_meta = tick_coverage_stats(candles_by_code, loaded_ticks) diff --git a/kis_trader/backtest/breakout_portfolio_backtest.py b/kis_trader/backtest/breakout_portfolio_backtest.py index ad29ee8..aa8bdd4 100644 --- a/kis_trader/backtest/breakout_portfolio_backtest.py +++ b/kis_trader/backtest/breakout_portfolio_backtest.py @@ -430,10 +430,24 @@ def run_breakout_backtest_portfolio( if entry_time[:8] != day: continue + from kis_trader.engine.mid_enroll_entry_gate import bt_should_defer_mid_enroll + _ebk = str(signal.get("entry_bar_key") or entry_time or "")[:12] + if bt_should_defer_mid_enroll( + _ebk, + code, + t, + tf_min=1, + universe_timeline=universe_timeline, + universe_by_slot=universe_by_slot, + params=buy_params, + ): + continue + pri = _buy_priority_key(code, uni_codes) pe = { "entry_time": entry_time, "entry_price": entry_price, + "entry_bar_key": _ebk, "entry_atr": _entry_atr_at(ctx, idx), # 신호 봉 변동성(ATR 동적 손절용) } diff --git a/kis_trader/backtest/breakout_tick_loader.py b/kis_trader/backtest/breakout_tick_loader.py index 2c9d9dd..2eb81a6 100644 --- a/kis_trader/backtest/breakout_tick_loader.py +++ b/kis_trader/backtest/breakout_tick_loader.py @@ -4,9 +4,10 @@ kis_trader/backtest/breakout_tick_loader.py — ws_ticks 로드·분봉 인덱 from __future__ import annotations from collections import defaultdict -from typing import Any, Dict, List, Optional, Set, Tuple +from datetime import datetime, timedelta +from typing import Any, Dict, Iterator, List, Optional, Set, Tuple -from ..utils.env import get_env_bool, get_env_from_db +from ..utils.env import get_env_bool, get_env_from_db, get_env_int from ..utils.logger import get_logger logger = get_logger("kis_trader.breakout_tick_loader") @@ -36,32 +37,77 @@ def _prefer_kiwoom_minute_ticks( return kw if kw else ticks -def load_breakout_ticks_by_code( - db, - start_key: str, - end_key: str, - codes: Optional[Set[str]] = None, - *, - market: Optional[str] = None, -) -> Tuple[Dict[str, Dict[str, List[Dict[str, Any]]]], int]: - """ - 기간 내 ``ws_ticks`` 를 종목·분봉(YYYYMMDDHHMM) 단위로 로드. - - Returns: - (``{code: {minute_key: [tick, ...]}}``, total_tick_rows) - """ - mkt = (market or get_env_from_db("WS_TICK_DEFAULT_MARKET", "KR") or "KR").strip().upper() - tt_start, tt_end = _candle_keys_to_tick_range(start_key, end_key) - prefer_kw = get_env_bool("WS_TICK_PREFER_KIWOOM", True) - +def _ws_ticks_table(market: str) -> str: + """국내 ws_ticks / 해외 ws_ticks_us.""" + m = str(market or "KR").strip().upper() try: - if hasattr(db, "ensure_ws_ticks_table"): - db.ensure_ws_ticks_table() + from database import TradeDB + return TradeDB.ws_ticks_table_for_market(m) except Exception: - pass + return "ws_ticks_us" if m == "US" else "ws_ticks" + + +def _iter_tick_day_chunks(tt_start: str, tt_end: str) -> Iterator[Tuple[str, str]]: + """ + 틱 구간을 달력일 단위로 자른다. + 4일치·수백만 행을 한 방 SELECT 하면 TradeDB 기본 read_timeout(30s)에 걸린다. + """ + s = str(tt_start or "").strip().ljust(14, "0")[:14] + e = str(tt_end or "").strip().ljust(14, "0")[:14] + if len(s) < 8 or len(e) < 8 or s > e: + return + d0 = datetime.strptime(s[:8], "%Y%m%d") + d1 = datetime.strptime(e[:8], "%Y%m%d") + cur = d0 + while cur <= d1: + day = cur.strftime("%Y%m%d") + chunk_s = max(s, day + "000000") + chunk_e = min(e, day + "235959") + if chunk_s <= chunk_e: + yield chunk_s, chunk_e + cur += timedelta(days=1) + + +def _open_tick_load_conn(read_timeout: int): + """벌크 틱 조회 전용 연결 (기본 TradeDB 30s read_timeout 우회).""" + import pymysql + import pymysql.cursors + from database import _DB_HOST, _DB_NAME, _DB_PASS, _DB_PORT, _DB_USER + + # 읽기 타임아웃(초) — 하루치 ~100만행 SELECT 대비. DB/env: WS_TICK_LOAD_READ_TIMEOUT + to = max(30, int(read_timeout)) + return pymysql.connect( + host=_DB_HOST, + port=int(_DB_PORT), + user=_DB_USER, + password=_DB_PASS, + database=_DB_NAME, + charset="utf8mb4", + autocommit=True, + cursorclass=pymysql.cursors.DictCursor, + connect_timeout=10, + read_timeout=to, + write_timeout=30, + ) + + +def _fetch_ws_ticks_day_rows( + table: str, + mkt: str, + chunk_s: str, + chunk_e: str, + codes: Optional[Set[str]], +) -> List[Dict[str, Any]]: + """ + 하루(또는 부분일) 틱 SELECT. + ORDER BY 는 MySQL 정렬 비용이 커서 빼고, 호출 측에서 분봉 버킷 정렬. + """ + # 읽기 타임아웃(초) / 재시도 횟수 — 하드코딩 금지, DB·env + read_timeout = get_env_int("WS_TICK_LOAD_READ_TIMEOUT", 180) + max_retries = max(1, get_env_int("WS_TICK_LOAD_MAX_RETRIES", 2)) code_filter = "" - params: List[Any] = [mkt, tt_start, tt_end] + params: List[Any] = [mkt, chunk_s, chunk_e] if codes: placeholders = ",".join(["%s"] * len(codes)) code_filter = f" AND code IN ({placeholders})" @@ -69,21 +115,44 @@ def load_breakout_ticks_by_code( sql = f""" SELECT code, tick_time, price, volume, source - FROM ws_ticks + FROM {table} WHERE market = %s AND tick_time >= %s AND tick_time <= %s {code_filter} - ORDER BY code, tick_time """ - try: - rows = db.conn.execute(sql, tuple(params)).fetchall() - except Exception as e: - logger.warning("ws_ticks 조회 실패 — OHLC 폴백만 사용: %s", e) - return {}, 0 + last_err: Optional[BaseException] = None + for attempt in range(1, max_retries + 1): + conn = None + try: + conn = _open_tick_load_conn(read_timeout) + with conn.cursor() as cur: + cur.execute(sql, tuple(params)) + rows = cur.fetchall() or [] + return list(rows) + except Exception as e: + last_err = e + logger.warning( + "%s 일별 조회 실패 (day=%s~%s attempt=%s/%s): %s", + table, chunk_s[:8], chunk_e[:8], attempt, max_retries, e, + ) + finally: + if conn is not None: + try: + conn.close() + except Exception: + pass + if last_err is not None: + raise last_err + return [] - out: Dict[str, Dict[str, List[Dict[str, Any]]]] = defaultdict(dict) - total = 0 + +def _ingest_tick_rows( + rows: List[Dict[str, Any]], + out: Dict[str, Dict[str, List[Dict[str, Any]]]], +) -> int: + """SELECT 행 → 종목·분봉 버킷. 반환=적재 건수.""" + n = 0 for r in rows: code = str(r["code"]).strip() tt = str(r["tick_time"])[:14] @@ -99,7 +168,91 @@ def load_breakout_ticks_by_code( } bucket = out[code].setdefault(minute_key, []) bucket.append(tick) - total += 1 + n += 1 + return n + + +def load_breakout_ticks_by_code( + db, + start_key: str, + end_key: str, + codes: Optional[Set[str]] = None, + *, + market: Optional[str] = None, +) -> Tuple[Dict[str, Dict[str, List[Dict[str, Any]]]], int]: + """ + 기간 내 체결 틱을 종목·분봉(YYYYMMDDHHMM) 단위로 로드. + - KR → ``ws_ticks`` + - US → ``ws_ticks_us`` (해외 전용 InnoDB) + - 다일은 **일별 청크** + 긴 read_timeout (4일 한 방 조회 타임아웃 방지) + + Returns: + (``{code: {minute_key: [tick, ...]}}``, total_tick_rows) + """ + mkt = (market or get_env_from_db("WS_TICK_DEFAULT_MARKET", "KR") or "KR").strip().upper() + tt_start, tt_end = _candle_keys_to_tick_range(start_key, end_key) + # 해외는 키움 체결 없음(kis_us) — 키움 우선 필터 끄기 + prefer_kw = bool(get_env_bool("WS_TICK_PREFER_KIWOOM", True)) and mkt != "US" + table = _ws_ticks_table(mkt) + + try: + if mkt == "US" and hasattr(db, "ensure_ws_ticks_us_table"): + db.ensure_ws_ticks_us_table() + elif hasattr(db, "ensure_ws_ticks_table"): + db.ensure_ws_ticks_table() + except Exception: + pass + + chunks = list(_iter_tick_day_chunks(tt_start, tt_end)) + if not chunks: + logger.warning("%s 조회 범위 없음: %s ~ %s", table, tt_start, tt_end) + return {}, 0 + + out: Dict[str, Dict[str, List[Dict[str, Any]]]] = defaultdict(dict) + total = 0 + failed_days = 0 + read_timeout = get_env_int("WS_TICK_LOAD_READ_TIMEOUT", 180) + logger.info( + "📥 %s 일별 로드 시작 | days=%s | read_timeout=%ss | codes=%s", + table, + len(chunks), + read_timeout, + len(codes) if codes else "ALL", + ) + + for chunk_s, chunk_e in chunks: + try: + rows = _fetch_ws_ticks_day_rows(table, mkt, chunk_s, chunk_e, codes) + n = _ingest_tick_rows(rows, out) + total += n + logger.info( + "✅ %s day=%s rows=%s (누적=%s)", + table, chunk_s[:8], n, total, + ) + except Exception as e: + failed_days += 1 + logger.warning( + "%s day=%s 조회 실패 — 해당일 스킵: %s", + table, chunk_s[:8], e, + ) + + if total <= 0: + logger.warning( + "%s 조회 실패 — OHLC 폴백만 사용: 0건 (failed_days=%s/%s)", + table, failed_days, len(chunks), + ) + return {}, 0 + + if failed_days > 0: + logger.warning( + "⚠️ %s 부분 로드: failed_days=%s/%s · loaded=%s", + table, failed_days, len(chunks), total, + ) + + # 일별 SELECT 에 ORDER BY 없음 → 분봉 버킷 시간순 정렬 (틱 재생 정합) + for _code, minutes in out.items(): + for _mk, ticks in minutes.items(): + ticks.sort(key=lambda t: str(t.get("tick_time") or "")) # 실매(키움 구독) 정합: 분봉 단위 키움 우선 (모멘텀/꼬리 로더가 이 함수 재사용) if prefer_kw and out: diff --git a/kis_trader/backtest/bt_web_jobs.py b/kis_trader/backtest/bt_web_jobs.py new file mode 100644 index 0000000..448838a --- /dev/null +++ b/kis_trader/backtest/bt_web_jobs.py @@ -0,0 +1,443 @@ +#!/usr/bin/env python3 +""" +전략 백테 CLI 웹 잡 (꼬리·스캘핑·돌파·모멘텀 공용). + +- subprocess + start_new_session + reaper(wait) → 좀비(Z) 방지 +- 전역 1잡만 running (전략 간 충돌·API 폭주 방지) +- progress.json + job meta 디스크 저장 → 탭 이동·새로고침에도 폴링 가능 +""" +from __future__ import annotations + +import json +import os +import signal +import subprocess +import threading +import time +from datetime import datetime +from pathlib import Path +from typing import Any, Dict, List, Optional + +ROOT = Path(__file__).resolve().parents[2] +JOBS_DIR = ROOT / "logs" / "bt_web_jobs" +RESULTS_DIR = ROOT / "kis_trader" / "backtest" / "results" +PY = ROOT / ".venv" / "bin" / "python" +CLI = ROOT / "scripts" / "run_strategy_backtest_cli.py" +TAIL_CLI = ROOT / "scripts" / "run_tail_backtest_cli.py" + +STRATEGIES = ("tail", "scalp", "breakout", "momentum") +LABELS = { + "tail": "꼬리 백테", + "scalp": "스캘핑 백테", + "breakout": "돌파 백테", + "momentum": "모멘텀 백테", +} + + +def _now_iso() -> str: + return datetime.now().strftime("%Y-%m-%dT%H:%M:%S") + + +def _ensure_dirs() -> None: + JOBS_DIR.mkdir(parents=True, exist_ok=True) + (ROOT / "logs").mkdir(parents=True, exist_ok=True) + RESULTS_DIR.mkdir(parents=True, exist_ok=True) + + +def _job_path(job_id: str) -> Path: + return JOBS_DIR / f"{job_id}.json" + + +def _progress_path(job_id: str) -> Path: + return JOBS_DIR / f"{job_id}.progress.json" + + +def save_job(meta: Dict[str, Any]) -> None: + _ensure_dirs() + jid = str(meta.get("job_id") or "") + if not jid: + return + p = _job_path(jid) + tmp = p.with_suffix(".tmp") + tmp.write_text(json.dumps(meta, ensure_ascii=False, indent=2, default=str), encoding="utf-8") + tmp.replace(p) + + +def _legacy_job_path(job_id: str) -> Path: + return ROOT / "logs" / "tail_bt_web_jobs" / f"{job_id}.json" + + +def load_job(job_id: str) -> Optional[Dict[str, Any]]: + for p in (_job_path(job_id), _legacy_job_path(job_id)): + if not p.is_file(): + continue + try: + return json.loads(p.read_text(encoding="utf-8")) + except Exception: + continue + return None + + +def _try_reap_child(pid: int) -> None: + try: + os.waitpid(int(pid), os.WNOHANG) + except (ChildProcessError, OSError, ValueError): + pass + + +def _pid_alive(pid: int) -> bool: + """살아 있으면 True. 좀비(Z)는 wait 후 False.""" + if pid <= 0: + return False + try: + os.kill(pid, 0) + except OSError: + return False + try: + raw = Path("/proc/%d/stat" % int(pid)).read_text(encoding="utf-8", errors="replace") + rp = raw.rfind(")") + if rp >= 0 and rp + 2 < len(raw): + state = raw[rp + 2 : rp + 3] + if state == "Z": + _try_reap_child(int(pid)) + return False + except Exception: + pass + return True + + +def read_progress(job_id: str) -> Dict[str, Any]: + for p in ( + _progress_path(job_id), + ROOT / "logs" / "tail_bt_web_jobs" / f"{job_id}.progress.json", + ): + if not p.is_file(): + continue + try: + return json.loads(p.read_text(encoding="utf-8")) + except Exception: + continue + return {"pct": 0, "phase": "init", "message": ""} + + +def refresh_job(job_id: str) -> Optional[Dict[str, Any]]: + m = load_job(job_id) + if not m: + return None + pid = int(m.get("pid") or 0) + prog = read_progress(job_id) + m["progress"] = prog + m["pid_alive"] = _pid_alive(pid) + st = str(m.get("status") or "") + if st == "running": + if not m["pid_alive"]: + rj = m.get("result_json") + if rj and Path(str(rj)).is_file(): + m["status"] = "done" + m["finished_at"] = m.get("finished_at") or _now_iso() + try: + data = json.loads(Path(str(rj)).read_text(encoding="utf-8")) + m["result_summary"] = data.get("summary") or {} + m["progress"] = { + "pct": 100, + "phase": "done", + "message": "완료", + "step": prog.get("step"), + "total": prog.get("total"), + } + except Exception: + m["progress"] = {"pct": 100, "phase": "done", "message": "완료"} + else: + err = "" + logp = m.get("log_path") + if logp and Path(str(logp)).is_file(): + try: + tail = Path(str(logp)).read_text(encoding="utf-8", errors="replace")[-2000:] + if "Traceback" in tail or "실패" in tail: + err = tail.strip().splitlines()[-1][:200] + except Exception: + pass + m["status"] = "error" + m["error"] = err or "프로세스 종료·결과 없음" + m["finished_at"] = _now_iso() + m["progress"] = { + "pct": int(prog.get("pct") or 0), + "phase": "error", + "message": m["error"], + } + save_job(m) + return m + + +def list_jobs(limit: int = 30) -> List[Dict[str, Any]]: + _ensure_dirs() + # 구버전 tail_bt_web_jobs 도 함께 보여 줌 + dirs = [JOBS_DIR, ROOT / "logs" / "tail_bt_web_jobs"] + seen = set() + rows: List[Dict[str, Any]] = [] + paths: List[Path] = [] + for d in dirs: + if d.is_dir(): + paths.extend(d.glob("*.json")) + for p in sorted(paths, key=lambda x: x.stat().st_mtime, reverse=True): + if p.name.endswith(".progress.json") or p.name.endswith(".tmp") or ".progress." in p.name: + continue + try: + m = json.loads(p.read_text(encoding="utf-8")) + except Exception: + continue + if not isinstance(m, dict) or not m.get("job_id"): + continue + jid = str(m["job_id"]) + if jid in seen: + continue + seen.add(jid) + # 새 디렉터리 우선 refresh + if (_job_path(jid)).is_file(): + rows.append(refresh_job(jid) or m) + else: + # legacy tail path — 최소 필드만 + m["progress"] = m.get("progress") or {} + m["pid_alive"] = _pid_alive(int(m.get("pid") or 0)) + rows.append(m) + if len(rows) >= limit: + break + return rows + + +def find_running() -> List[Dict[str, Any]]: + out = [] + for m in list_jobs(limit=80): + if m.get("status") == "running" and m.get("pid_alive"): + out.append(m) + return out + + +def _spawn_reaper(proc: subprocess.Popen, job_id: str, log_f: Any) -> None: + def _run() -> None: + rc: Optional[int] = None + try: + rc = int(proc.wait()) + except Exception: + try: + rc = int(proc.poll()) if proc.poll() is not None else None + except Exception: + rc = None + try: + if log_f is not None and hasattr(log_f, "closed") and not log_f.closed: + log_f.flush() + log_f.close() + except Exception: + pass + try: + meta = load_job(job_id) + if not meta: + return + meta["exit_code"] = rc + if rc not in (None, 0) and meta.get("status") == "running": + # result 있으면 done 우선 + rj = meta.get("result_json") + if not (rj and Path(str(rj)).is_file()): + meta["error"] = meta.get("error") or f"process exit_code={rc}" + save_job(meta) + refresh_job(job_id) + except Exception: + pass + + threading.Thread(target=_run, name=f"bt-reap-{job_id}", daemon=True).start() + + +def start_bt_job( + *, + strategy: str, + start: str, + end: str, + timeframe: Optional[int] = None, + universe: str = "history", + universe_history_source: Optional[str] = None, + tick_db: Optional[bool] = None, + tick_exit: Optional[bool] = None, + orderbook_filter: str = "off", + params_json: Optional[str] = None, + env_timeline: bool = False, +) -> Dict[str, Any]: + _ensure_dirs() + strat = str(strategy or "").strip().lower() + if strat not in STRATEGIES: + raise ValueError(f"strategy 는 {STRATEGIES} 중 하나") + + running = find_running() + if running: + r0 = running[0] + raise RuntimeError( + f"이미 실행 중: {r0.get('label') or r0.get('strategy')} job={r0.get('job_id')}. " + "끝난 뒤 다시 시작하거나 중지하세요." + ) + + if not PY.is_file(): + raise RuntimeError(f"python 없음: {PY}") + if not CLI.is_file() and not TAIL_CLI.is_file(): + raise RuntimeError(f"CLI 없음: {CLI}") + + from kis_trader.utils.kr_trading_day import clamp_to_prev_kr_trading_day + + start = clamp_to_prev_kr_trading_day(str(start or "").strip()) + end = clamp_to_prev_kr_trading_day(str(end or "").strip()) + if start > end: + start, end = end, start + if not start or not end: + raise ValueError("start/end 필요") + + univ = str(universe or "history").strip().lower() + if univ not in ("history", "all", "sim"): + univ = "history" + hist_src = str(universe_history_source or "").strip().lower() + if hist_src not in ("", "kiwoom", "ls"): + hist_src = "" + + ts = datetime.now().strftime("%Y%m%d_%H%M%S") + job_id = f"{strat}_bt_{start.replace('-', '')}_{end.replace('-', '')}_{ts}" + log_path = ROOT / "logs" / f"{job_id}.log" + result_json = RESULTS_DIR / f"{job_id}.json" + progress_file = _progress_path(job_id) + + # tail 은 세밀 progress 있는 전용 CLI 우선 + if strat == "tail" and TAIL_CLI.is_file(): + cmd = [ + str(PY), "-u", str(TAIL_CLI), + "--start", start, + "--end", end, + "--timeframe", str(int(timeframe or 3)), + "--universe", "history" if univ == "sim" else univ, + "--job-id", job_id, + "--out-dir", str(RESULTS_DIR), + "--progress-file", str(progress_file), + "--orderbook-filter", str(orderbook_filter or "off"), + ] + if tick_db is not None: + cmd.extend(["--tick-db", "1" if tick_db else "0"]) + if tick_exit is not None: + cmd.extend(["--tick-exit", "1" if tick_exit else "0"]) + if params_json: + cmd.extend(["--params-json", str(params_json)]) + if env_timeline: + cmd.append("--env-timeline") + if hist_src: + cmd.extend(["--universe-history-source", hist_src]) + else: + if not CLI.is_file(): + raise RuntimeError(f"CLI 없음: {CLI}") + cmd = [ + str(PY), "-u", str(CLI), + "--strategy", strat, + "--start", start, + "--end", end, + "--universe", univ, + "--job-id", job_id, + "--out-dir", str(RESULTS_DIR), + "--progress-file", str(progress_file), + "--orderbook-filter", str(orderbook_filter or "off"), + ] + if timeframe is not None: + cmd.extend(["--timeframe", str(int(timeframe))]) + if tick_db is not None: + cmd.extend(["--tick-db", "1" if tick_db else "0"]) + if params_json: + cmd.extend(["--params-json", str(params_json)]) + if env_timeline: + cmd.append("--env-timeline") + if hist_src: + cmd.extend(["--universe-history-source", hist_src]) + + progress_file.write_text( + json.dumps({"pct": 1, "phase": "starting", "message": "시작"}, ensure_ascii=False), + encoding="utf-8", + ) + + log_f = open(log_path, "w", encoding="utf-8") + proc = subprocess.Popen( + cmd, + cwd=str(ROOT), + stdout=log_f, + stderr=subprocess.STDOUT, + start_new_session=True, + ) + meta = { + "job_id": job_id, + "kind": "strategy_bt_cli", + "label": LABELS.get(strat, strat), + "strategy": strat, + "start": start, + "end": end, + "timeframe": int(timeframe) if timeframe is not None else None, + "universe": univ, + "universe_history_source": hist_src or "kiwoom", + "status": "running", + "pid": proc.pid, + "log_path": str(log_path), + "result_json": str(result_json), + "progress_file": str(progress_file), + "started_at": _now_iso(), + "started_ts": time.time(), + "cmd": " ".join(cmd), + "progress": {"pct": 1, "phase": "starting", "message": "시작"}, + } + save_job(meta) + _spawn_reaper(proc, job_id, log_f) + return meta + + +def stop_bt_job(job_id: str) -> Dict[str, Any]: + m = load_job(job_id) + if not m: + # legacy tail dir + legacy = ROOT / "logs" / "tail_bt_web_jobs" / f"{job_id}.json" + if legacy.is_file(): + try: + m = json.loads(legacy.read_text(encoding="utf-8")) + except Exception: + m = None + if not m: + raise RuntimeError("job 없음") + pid = int(m.get("pid") or 0) + if pid > 0 and _pid_alive(pid): + try: + os.killpg(pid, signal.SIGTERM) + except Exception: + try: + os.kill(pid, signal.SIGTERM) + except Exception: + pass + # 짧게 대기 후 강제 + time.sleep(0.4) + if _pid_alive(pid): + try: + os.killpg(pid, signal.SIGKILL) + except Exception: + try: + os.kill(pid, signal.SIGKILL) + except Exception: + pass + _try_reap_child(pid) + m["status"] = "error" + m["error"] = "사용자 중지" + m["finished_at"] = _now_iso() + m["progress"] = { + "pct": int((m.get("progress") or {}).get("pct") or 0), + "phase": "stopped", + "message": "중지", + } + # 새 경로에 저장 (legacy 잡도 새 폴더로 옮김) + save_job(m) + return m + + +# ── 하위호환 별칭 (tail_bt_web_jobs) ───────────────────────────────────────── +def start_tail_bt_job(**kwargs: Any) -> Dict[str, Any]: + kwargs = dict(kwargs) + kwargs["strategy"] = "tail" + return start_bt_job(**kwargs) + + +def stop_tail_bt_job(job_id: str) -> Dict[str, Any]: + return stop_bt_job(job_id) diff --git a/kis_trader/backtest/ls_history_loaders.py b/kis_trader/backtest/ls_history_loaders.py new file mode 100644 index 0000000..416277e --- /dev/null +++ b/kis_trader/backtest/ls_history_loaders.py @@ -0,0 +1,228 @@ +""" +kis_trader/backtest/ls_history_loaders.py — ls_ws_candles / ls_ws_ticks 백테 로드 +============================================================================== +``history_source=ls`` 일 때 키움 ``ws_*`` 대신 LS 테이블을 읽는다. +반환 스키마는 전략/엔진이 기대하는 candle_time(12)·tick_time(14) 으로 정규화. +""" +from __future__ import annotations + +from collections import defaultdict +from datetime import datetime, timedelta +from typing import Any, Dict, Iterator, List, Optional, Set, Tuple + +from kis_trader.utils.logger import get_logger + +logger = get_logger("kis_trader.ls_history_loaders") + + +def _ct_to_ls_dt(ct: str) -> str: + d = "".join(ch for ch in (ct or "") if ch.isdigit())[:12] + if len(d) < 12: + return "" + return f"{d[0:4]}-{d[4:6]}-{d[6:8]} {d[8:10]}:{d[10:12]}:00" + + +def _ls_dt_to_ct(dt_s: str) -> str: + s = (dt_s or "").strip() + if len(s) >= 16 and s[4] == "-" and s[10] == " ": + return s[0:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + digits = "".join(ch for ch in s if ch.isdigit()) + return digits[:12] + + +def _row_to_strategy_candle(r: dict) -> dict: + ct = _ls_dt_to_ct(str(r.get("datetime") or "")) + return { + "candle_time": ct, + "open": float(r.get("open") or 0), + "high": float(r.get("high") or 0), + "low": float(r.get("low") or 0), + "close": float(r.get("close") or 0), + "volume": float(r.get("volume") or 0), + "is_confirmed": 1, + "source": "ls", + } + + +def load_ls_candles_by_code( + db, + start_key: str, + end_key: str, + *, + min_bars: int = 5, + tf_min: int = 1, +) -> Tuple[Dict[str, List[Dict]], int]: + """ls_ws_candles → {code: [candle dict...]}, total_rows.""" + s_dt = _ct_to_ls_dt(start_key) + e_dt = _ct_to_ls_dt(end_key) + if not s_dt or not e_dt: + return {}, 0 + tf = max(1, int(tf_min or 1)) + mb = max(1, int(min_bars or 5)) + codes_raw = db.conn.execute( + "SELECT DISTINCT code FROM ls_ws_candles WHERE tf_min=%s " + "AND datetime >= %s AND datetime <= %s ORDER BY code", + [tf, s_dt, e_dt], + ).fetchall() + codes = [r["code"] for r in (codes_raw or [])] + candles_by_code: Dict[str, List[Dict]] = {} + total = 0 + for code in codes: + rows = db.conn.execute( + "SELECT datetime, open, high, low, close, volume " + "FROM ls_ws_candles WHERE tf_min=%s AND code=%s " + "AND datetime >= %s AND datetime <= %s " + "ORDER BY datetime ASC", + [tf, code, s_dt, e_dt], + ).fetchall() + if len(rows or []) < mb: + continue + bars = [_row_to_strategy_candle(dict(r)) for r in rows] + bars = [b for b in bars if len(str(b.get("candle_time") or "")) >= 12] + if len(bars) < mb: + continue + candles_by_code[code] = bars + total += len(bars) + return candles_by_code, total + + +def prepend_ls_candle_warmup( + db, + candles_by_code: Dict[str, List[Dict]], + period_start_key: str, + warmup_bars: int, + *, + tf_min: int = 1, +) -> int: + """기간 시작 전 N봉 prepend (RSI 등).""" + wb = max(0, int(warmup_bars or 0)) + if wb <= 0 or not period_start_key or not candles_by_code: + return 0 + ps = str(period_start_key)[:12] + ps_dt = _ct_to_ls_dt(ps) + if not ps_dt: + return 0 + tf = max(1, int(tf_min or 1)) + total_prepended = 0 + for code, rows in list(candles_by_code.items()): + if not rows: + continue + first_period_idx = None + for i, r in enumerate(rows): + ct = str(r.get("candle_time") or "") + if ct >= ps: + first_period_idx = i + break + if first_period_idx is None or first_period_idx > 0: + continue + first_ct = str(rows[first_period_idx].get("candle_time") or "") + if not first_ct: + continue + first_dt = _ct_to_ls_dt(first_ct) + warm_rows = db.conn.execute( + "SELECT datetime, open, high, low, close, volume " + "FROM ls_ws_candles WHERE tf_min=%s AND code=%s " + "AND datetime < %s ORDER BY datetime DESC LIMIT %s", + [tf, code, first_dt, wb], + ).fetchall() + if not warm_rows: + continue + prefix = [_row_to_strategy_candle(dict(r)) for r in reversed(list(warm_rows))] + candles_by_code[code] = prefix + [dict(r) for r in rows] + total_prepended += len(prefix) + return total_prepended + + +def _iter_day_chunks_dt(s_dt: str, e_dt: str) -> Iterator[Tuple[str, str]]: + """datetime 문자열 범위를 달력일 단위로.""" + try: + d0 = datetime.strptime(s_dt[:10], "%Y-%m-%d") + d1 = datetime.strptime(e_dt[:10], "%Y-%m-%d") + except ValueError: + return + cur = d0 + while cur <= d1: + day = cur.strftime("%Y-%m-%d") + chunk_s = max(s_dt, f"{day} 00:00:00") + chunk_e = min(e_dt, f"{day} 23:59:59") + if chunk_s <= chunk_e: + yield chunk_s, chunk_e + cur += timedelta(days=1) + + +def _ts_to_tick_time(ts) -> str: + if isinstance(ts, datetime): + return ts.strftime("%Y%m%d%H%M%S") + s = str(ts or "").strip() + digits = "".join(ch for ch in s if ch.isdigit()) + if len(digits) >= 14: + return digits[:14] + # "YYYY-MM-DD HH:MM:SS" + if len(s) >= 19 and s[4] == "-": + return ( + s[0:4] + s[5:7] + s[8:10] + + s[11:13] + s[14:16] + s[17:19] + ) + return digits[:14].ljust(14, "0") + + +def load_ls_ticks_by_code( + db, + start_key: str, + end_key: str, + codes: Optional[Set[str]] = None, +) -> Tuple[Dict[str, Dict[str, List[Dict[str, Any]]]], int]: + """ + ls_ws_ticks → {code: {minute_key: [tick...]}}. + tick 스키마: tick_time/price/volume/source(=ls) + """ + s12 = (start_key or "")[:12] + e12 = (end_key or "")[:12] + s_dt = _ct_to_ls_dt(s12) + e_dt = _ct_to_ls_dt(e12) + if not s_dt or not e_dt: + return {}, 0 + # end 분 포함 → 초 59 + e_dt = e_dt[:17] + "59" if len(e_dt) >= 17 else e_dt + out: Dict[str, Dict[str, List[Dict[str, Any]]]] = defaultdict(dict) + total = 0 + code_list = sorted(codes) if codes else None + for chunk_s, chunk_e in _iter_day_chunks_dt(s_dt, e_dt): + try: + if code_list: + # 종목 수가 많으면 IN 절 — 청크당 한 번 + ph = ",".join(["%s"] * len(code_list)) + rows = db.conn.execute( + f"SELECT code, ts, price, volume FROM ls_ws_ticks " + f"WHERE ts >= %s AND ts <= %s AND code IN ({ph})", + [chunk_s, chunk_e, *code_list], + ).fetchall() + else: + rows = db.conn.execute( + "SELECT code, ts, price, volume FROM ls_ws_ticks " + "WHERE ts >= %s AND ts <= %s", + [chunk_s, chunk_e], + ).fetchall() + except Exception as e: + logger.warning("ls_ws_ticks day=%s 조회 실패: %s", chunk_s[:10], e) + continue + for r in rows or []: + code = str(r["code"]).strip() + tt = _ts_to_tick_time(r.get("ts")) + if len(tt) < 12: + continue + minute_key = tt[:12] + tick = { + "code": code, + "tick_time": tt.ljust(14, "0")[:14], + "price": float(r.get("price") or 0), + "volume": int(float(r.get("volume") or 0)), + "source": "ls", + } + bucket = out[code].setdefault(minute_key, []) + bucket.append(tick) + total += 1 + for _code, minutes in out.items(): + for _mk, ticks in minutes.items(): + ticks.sort(key=lambda t: str(t.get("tick_time") or "")) + return dict(out), total diff --git a/kis_trader/backtest/momentum_backtest_common.py b/kis_trader/backtest/momentum_backtest_common.py index 266e0f8..4541aeb 100644 --- a/kis_trader/backtest/momentum_backtest_common.py +++ b/kis_trader/backtest/momentum_backtest_common.py @@ -120,6 +120,8 @@ def prepend_momentum_candle_warmup( # 종목×기간일 단위 REST 웜업 캐시 (프로세스 메모리만 — DB 미기록) _REST_WARMUP_PREFIX_CACHE: Dict[Tuple[str, str], List[Dict[str, Any]]] = {} +# 1차+재시도 후에도 전일 장시작 시가 미확보 → trial마다 재조회·로그 금지 +_REST_WARMUP_PERM_FAIL: Set[Tuple[str, str]] = set() def _momentum_rows_have_prev_day(rows: List[Dict], period_day: str) -> bool: @@ -145,6 +147,44 @@ def _kiwoom_gap_credentials() -> Tuple[str, str, bool]: return key, secret, is_mock +def _rest_df_to_prefix( + df: Any, + rows: List[Dict], + period_start_key: str, +) -> List[Dict[str, Any]]: + """ka10080 DF → 기간 시작 이전 prefix 봉 리스트.""" + ps = str(period_start_key or "")[:12] + first_ct = "" + for r in rows: + ct = str(r.get("candle_time") or "") + if ct >= ps: + first_ct = ct[:12] + break + if not first_ct: + first_ct = ps + existing = {str(r.get("candle_time") or "")[:12] for r in rows} + prefix: List[Dict[str, Any]] = [] + for _, rec in df.iterrows(): + t = str(rec.get("time") or "")[:12] + if len(t) < 12 or t >= first_ct or t in existing: + continue + op = float(rec.get("open") or 0) + if op <= 0: + continue + prefix.append({ + "candle_time": t, + "open": op, + "high": float(rec.get("high") or op), + "low": float(rec.get("low") or op), + "close": float(rec.get("close") or op), + "volume": int(float(rec.get("volume") or 0)), + "is_confirmed": 1, + "_rest_warmup": 1, + }) + prefix.sort(key=lambda x: str(x.get("candle_time") or "")) + return prefix + + def inject_momentum_rest_warmup_memory( candles_by_code: Dict[str, List[Dict]], period_start_key: str, @@ -152,17 +192,20 @@ def inject_momentum_rest_warmup_memory( universe_by_slot: Optional[Dict[str, List[str]]] = None, ) -> Dict[str, int]: """ - DB 전일봉이 없을 때 키움 ka10080 REST를 종목당 1회 호출해 **메모리에만** prepend. + DB 전일봉이 없을 때 키움 ka10080 REST를 종목당 호출해 **메모리에만** prepend. - - 실매: 유니버스 편입 → 갭보정 RAM (DB 구데이터 미사용) - - 백테/Optuna: DB warmup 실패 시 동일 REST 1회로 E·지표 워밍업 - - DB INSERT 없음. 프로세스 캐시로 웹 재호출·Optuna trial 재조회 방지. + - 1차: MOMENTUM_BACKTEST_REST_WARMUP_BARS (기본 700) + - 전일 장시작 시가 미확보 시에만 2차: MOMENTUM_BACKTEST_REST_WARMUP_BARS_RETRY (기본 1500) + - DB INSERT 없음. 성공 prefix·영구실패는 프로세스 캐시 (Optuna trial 재조회·로그 스팸 방지). """ from kis_trader.utils.env import get_env_bool, get_env_float, get_env_int from kis_trader.utils.logger import get_logger log = get_logger("kis_trader.momentum_backtest") - stats = {"need": 0, "ok": 0, "fail": 0, "cache_hit": 0, "bars": 0, "skipped": 0} + stats = { + "need": 0, "ok": 0, "fail": 0, "cache_hit": 0, + "bars": 0, "skipped": 0, "retry": 0, + } if not get_env_bool("MOMENTUM_BACKTEST_REST_WARMUP", True): stats["skipped"] = 1 return stats @@ -184,7 +227,8 @@ def inject_momentum_rest_warmup_memory( need_codes = [ c for c in sorted(target) - if not _momentum_rows_have_prev_day(candles_by_code.get(c) or [], period_day) + if (c, period_day) not in _REST_WARMUP_PERM_FAIL + and not _momentum_rows_have_prev_day(candles_by_code.get(c) or [], period_day) ] stats["need"] = len(need_codes) if not need_codes: @@ -198,6 +242,11 @@ def inject_momentum_rest_warmup_memory( 50, int(get_env_int("MOMENTUM_BACKTEST_REST_WARMUP_BARS", 700)), ) + # 전일(직전 세션) 장시작이 1차에 안 잡힐 때만 — 평소엔 700만 + n_retry = max( + n_bars, + int(get_env_int("MOMENTUM_BACKTEST_REST_WARMUP_BARS_RETRY", 1500)), + ) sleep_sec = float(get_env_float("MOMENTUM_BACKTEST_REST_SLEEP_SEC", 0.25)) kw_key, kw_secret, is_mock = _kiwoom_gap_credentials() if not kw_key or not kw_secret: @@ -207,83 +256,90 @@ def inject_momentum_rest_warmup_memory( from kis_trader.ws.kis_ws import get_kiwoom_candles_df - log.info( - "📡 모멘텀 REST 웜업(메모리): 전일봉 부족 %d종목 · 종목당 1회 ka10080 n=%d (DB 미기록)", - len(need_codes), n_bars, + # 전부 캐시 hit면 Optuna trial 경로에서 INFO 스팸 금지 + will_fetch = any( + (c, period_day) not in _REST_WARMUP_PREFIX_CACHE for c in need_codes ) + if will_fetch: + log.info( + "📡 모멘텀 REST 웜업(메모리): 전일봉 부족 %d종목 · ka10080 n=%d" + " (실패 시 n=%d 1회 재시도, DB 미기록)", + len(need_codes), n_bars, n_retry, + ) + for i, code in enumerate(need_codes): rows = candles_by_code.get(code) or [] if not rows: + _REST_WARMUP_PERM_FAIL.add((code, period_day)) stats["fail"] += 1 continue cache_key = (code, period_day) cached = _REST_WARMUP_PREFIX_CACHE.get(cache_key) + did_network = False if cached is not None: stats["cache_hit"] += 1 prefix = [dict(r) for r in cached] else: + did_network = True try: df = get_kiwoom_candles_df( code, 1, kw_key, kw_secret, is_mock=is_mock, n=n_bars, ) except Exception as e: log.warning("⚠️ REST 웜업 실패 %s: %s", code, e) + _REST_WARMUP_PERM_FAIL.add(cache_key) stats["fail"] += 1 continue if df is None or getattr(df, "empty", True): + _REST_WARMUP_PERM_FAIL.add(cache_key) stats["fail"] += 1 continue - first_ct = "" - for r in rows: - ct = str(r.get("candle_time") or "") - if ct >= ps: - first_ct = ct[:12] - break - if not first_ct: - first_ct = ps - existing = {str(r.get("candle_time") or "")[:12] for r in rows} - prefix = [] try: - for _, rec in df.iterrows(): - t = str(rec.get("time") or "")[:12] - if len(t) < 12 or t >= first_ct or t in existing: - continue - op = float(rec.get("open") or 0) - if op <= 0: - continue - prefix.append({ - "candle_time": t, - "open": op, - "high": float(rec.get("high") or op), - "low": float(rec.get("low") or op), - "close": float(rec.get("close") or op), - "volume": int(float(rec.get("volume") or 0)), - "is_confirmed": 1, - "_rest_warmup": 1, - }) + prefix = _rest_df_to_prefix(df, rows, ps) except Exception as e: log.warning("⚠️ REST 웜업 파싱 실패 %s: %s", code, e) + _REST_WARMUP_PERM_FAIL.add(cache_key) stats["fail"] += 1 continue - prefix.sort(key=lambda x: str(x.get("candle_time") or "")) + + # 1차로 전일 장시작 미확보 → 봉 수 늘려 1회만 재시도 (중간 거래일 0봉 등) + if (not prefix or not _momentum_rows_have_prev_day(prefix, period_day)) and n_retry > n_bars: + stats["retry"] += 1 + log.info( + "📡 REST 웜업 재시도 %s: n=%d → n=%d (전일 장시작 미확보)", + code, n_bars, n_retry, + ) + try: + df2 = get_kiwoom_candles_df( + code, 1, kw_key, kw_secret, is_mock=is_mock, n=n_retry, + ) + except Exception as e: + log.warning("⚠️ REST 웜업 재시도 실패 %s: %s", code, e) + df2 = None + if df2 is not None and not getattr(df2, "empty", True): + try: + prefix = _rest_df_to_prefix(df2, rows, ps) + except Exception as e: + log.warning("⚠️ REST 웜업 재시도 파싱 실패 %s: %s", code, e) + prefix = [] + _REST_WARMUP_PREFIX_CACHE[cache_key] = [dict(r) for r in prefix] - if sleep_sec > 0 and i + 1 < len(need_codes): + if sleep_sec > 0 and did_network and i + 1 < len(need_codes): time.sleep(sleep_sec) - if not prefix: - stats["fail"] += 1 - continue - if not _momentum_rows_have_prev_day(prefix, period_day): + if not prefix or not _momentum_rows_have_prev_day(prefix, period_day): + _REST_WARMUP_PERM_FAIL.add(cache_key) stats["fail"] += 1 continue candles_by_code[code] = [dict(r) for r in prefix] + [dict(r) for r in rows] stats["ok"] += 1 stats["bars"] += len(prefix) - log.info( - "✅ 모멘텀 REST 웜업 완료: ok=%d fail=%d cache=%d bars=%d", - stats["ok"], stats["fail"], stats["cache_hit"], stats["bars"], - ) + if will_fetch: + log.info( + "✅ 모멘텀 REST 웜업 완료: ok=%d fail=%d cache=%d retry=%d bars=%d", + stats["ok"], stats["fail"], stats["cache_hit"], stats["retry"], stats["bars"], + ) return stats @@ -299,6 +355,7 @@ def resolve_momentum_universe( *, use_saved_history: bool, strategy_id: str = MOMENTUM_STRATEGY_ID, + history_source: str = "kiwoom", ) -> Tuple[Optional[Dict[str, List[str]]], str, int, int, str]: """ Returns: @@ -308,9 +365,14 @@ def resolve_momentum_universe( if use_saved_history and strategy_id: try: from kis_trader.database.db_manager import get_db as _get_ext_db + from kis_trader.backtest.universe_history_source import ( + history_source_label, + resolve_backtest_universe_history_source, + ) strict = momentum_backtest_universe_strict_enabled() lag_min = momentum_backtest_universe_strict_lag_min() debounce_sec = momentum_universe_exit_debounce_sec() + hs = resolve_backtest_universe_history_source(history_source) history = _get_ext_db().get_universe_by_candle_time( strategy_id=strategy_id, start_ymd=start_ymd, @@ -318,10 +380,11 @@ def resolve_momentum_universe( strict=strict, strict_lag_minutes=lag_min, exit_debounce_sec=debounce_sec, + history_source=hs, ) if history: timing = "strict" if strict else "minute" - label = "history_strict" if strict else "history" + label = history_source_label(hs, strict=strict) return history, label, len(history), 1, timing except Exception: pass @@ -334,25 +397,46 @@ def load_momentum_candles_by_code( end_key: str, *, warmup_bars: Optional[int] = None, + market: Optional[str] = None, ) -> Tuple[Dict[str, List[Dict]], int]: + """ + market: None/빈값 = 전체(기존 동작), 'US'|'KR' = ws_candles.market 필터. + """ period_start = str(start_key)[:12] - codes_raw = db.conn.execute( - "SELECT DISTINCT code FROM ws_candles WHERE timeframe=1 " - "AND candle_time >= %s AND candle_time <= %s ORDER BY code", - [start_key, end_key], - ).fetchall() + mk = (market or "").strip().upper() + if mk: + codes_raw = db.conn.execute( + "SELECT DISTINCT code FROM ws_candles WHERE timeframe=1 AND market=%s " + "AND candle_time >= %s AND candle_time <= %s ORDER BY code", + [mk, start_key, end_key], + ).fetchall() + else: + codes_raw = db.conn.execute( + "SELECT DISTINCT code FROM ws_candles WHERE timeframe=1 " + "AND candle_time >= %s AND candle_time <= %s ORDER BY code", + [start_key, end_key], + ).fetchall() codes = [r["code"] for r in codes_raw] ind_cols = ws_candles_select_indicator_cols(db) candles_by_code: Dict[str, List[Dict]] = {} total = 0 for code in codes: - rows = db.conn.execute( - f"SELECT candle_time, open, high, low, close, volume, is_confirmed{ind_cols} " - "FROM ws_candles WHERE timeframe=1 AND code=%s " - "AND candle_time >= %s AND candle_time <= %s " - "ORDER BY candle_time ASC", - [code, start_key, end_key], - ).fetchall() + if mk: + rows = db.conn.execute( + f"SELECT candle_time, open, high, low, close, volume, is_confirmed{ind_cols} " + "FROM ws_candles WHERE timeframe=1 AND code=%s AND market=%s " + "AND candle_time >= %s AND candle_time <= %s " + "ORDER BY candle_time ASC", + [code, mk, start_key, end_key], + ).fetchall() + else: + rows = db.conn.execute( + f"SELECT candle_time, open, high, low, close, volume, is_confirmed{ind_cols} " + "FROM ws_candles WHERE timeframe=1 AND code=%s " + "AND candle_time >= %s AND candle_time <= %s " + "ORDER BY candle_time ASC", + [code, start_key, end_key], + ).fetchall() if len(rows) < 6: continue candles_by_code[code] = [dict(r) for r in rows] @@ -414,14 +498,19 @@ def run_momentum_backtest_web_aligned( if not period_start_key: period_start_key = str(p.get("_backtest_period_start_key") or "")[:12] if len(period_start_key) >= 8: - rest_warmup_stats = inject_momentum_rest_warmup_memory( - candles_by_code, - period_start_key, - universe_by_slot=universe_by_slot, - ) + # 해외 US 티커는 키움 분봉 REST 불가 — 유량 낭비·실패 폭주 방지 + if str(p.get("market") or "").strip().upper() != "US": + rest_warmup_stats = inject_momentum_rest_warmup_memory( + candles_by_code, + period_start_key, + universe_by_slot=universe_by_slot, + ) p["slot_money"] = float(slot_money) p["fee_rate"] = float(fee_rate) p["sell_tax"] = float(sell_tax) + # 해외 환전: params 에 있으면 유지 (Optuna base_fixed / 웹 US params) + if "fx_fee_rate" not in p: + p["fx_fee_rate"] = 0.0 p["max_stocks"] = int(max_stocks) if total_budget_krw > 0: p["total_budget_krw"] = float(total_budget_krw) @@ -442,17 +531,26 @@ def run_momentum_backtest_web_aligned( start_key = str(meta_out.get("start_key") or "") end_key = str(meta_out.get("end_key") or "") db = meta_out.get("db") + if db is None and start_key and end_key: + from kis_trader.backtest.backtest_portfolio_common import ensure_meta_db + + db = ensure_meta_db(meta_out) if db and start_key and end_key: + _mkt = str(p.get("market") or "KR").strip().upper() or "KR" loaded_ticks, tick_rows = load_momentum_ticks_by_code( db, start_key, end_key, set(candles_by_code.keys()), + market=_mkt, ) tick_meta = tick_coverage_stats(candles_by_code, loaded_ticks) tick_meta["ws_tick_rows_loaded"] = tick_rows + tick_meta["ws_ticks_table"] = "ws_ticks_us" if _mkt == "US" else "ws_ticks" if tick_rows <= 0: from kis_trader.utils.logger import get_logger as _get_logger + _tick_tbl = tick_meta["ws_ticks_table"] _get_logger("kis_trader.momentum_backtest").warning( - "⚠️ ws_ticks 데이터 없음 — 1분봉 OHLC 청산 폴백 (틱 수집 후 재백테 권장)", + "⚠️ %s 데이터 없음 — 1분봉 OHLC 청산 폴백 (틱 수집 후 재백테 권장)", + _tick_tbl, ) elif loaded_ticks: tick_meta = tick_coverage_stats(candles_by_code, loaded_ticks) @@ -512,9 +610,13 @@ def run_momentum_backtest_web_aligned( program_by_code=pg_loaded, ) if not p.get("portfolio_mode"): + _fx = float(p.get("fx_fee_rate", 0.0) or 0.0) + _us = str(p.get("market") or "").strip().upper() == "US" attach_scalp_trade_pnl( trades, fee_rate=fee_rate, sell_tax=sell_tax, slip_pct=backtest_slip_pct(p), + fx_fee_rate=_fx, + pnl_decimals=4 if (_us or _fx > 0) else 0, ) if meta_out is not None: meta_out["skip_stats"] = p.get("_portfolio_skip_stats") or {} diff --git a/kis_trader/backtest/momentum_portfolio_backtest.py b/kis_trader/backtest/momentum_portfolio_backtest.py index b005c6e..43a36de 100644 --- a/kis_trader/backtest/momentum_portfolio_backtest.py +++ b/kis_trader/backtest/momentum_portfolio_backtest.py @@ -177,21 +177,34 @@ def _build_scan_time_keys( scan_sec: int, time_start_hm: int, time_end_hm: int, + *, + wrap_midnight: bool = False, ) -> List[str]: - """장중 분봉이 있는 구간만 N초 간격 스캔 시각(YYYYMMDDHHMMSS) 생성.""" + """장중 분봉이 있는 구간만 N초 간격 스캔 시각(YYYYMMDDHHMMSS) 생성. + + wrap_midnight=True: 해외 US 등 자정 넘김 세션 (예: 2230~0500). + """ if not minute_set or scan_sec < 1: return [] - start_min = _hm_to_minutes(time_start_hm) - end_min = _hm_to_minutes(time_end_hm) + from kis_trader.utils.session_hm import hm_in_trading_window + days = sorted({m[:8] for m in minute_set}) out: List[str] = [] for day in days: day_minutes = sorted(m for m in minute_set if m.startswith(day)) for minute_key in day_minutes: hm = int(minute_key[8:12]) - bar_min = _hm_to_minutes(hm) - if bar_min < start_min or bar_min >= end_min: - continue + if wrap_midnight: + if not hm_in_trading_window( + hm, time_start_hm, time_end_hm, wrap_midnight=True, + ): + continue + else: + start_min = _hm_to_minutes(time_start_hm) + end_min = _hm_to_minutes(time_end_hm) + bar_min = _hm_to_minutes(hm) + if bar_min < start_min or bar_min >= end_min: + continue base = datetime.strptime(minute_key, "%Y%m%d%H%M") sec = 0 while sec < 60: @@ -540,6 +553,17 @@ def _collect_buy_candidates( ) if reject or not sig: continue + from kis_trader.engine.mid_enroll_entry_gate import bt_should_defer_mid_enroll + if bt_should_defer_mid_enroll( + str(entry_bar_time or ""), + code, + bar_t, + tf_min=1, + universe_timeline=params.get("_universe_timeline"), + universe_by_slot=universe_by_slot, + params=params, + ): + continue entry_price, entry_time_key, entry_src = align_momentum_entry_from_ticks( ticks_by_code, code, entry_bar_time, entry_open, params, min_tick_time=min_tick_time, @@ -548,6 +572,7 @@ def _collect_buy_candidates( "entry_time": entry_time_key, "entry_price": entry_price, "entry_source": entry_src, + "entry_bar_key": str(entry_bar_time or "")[:12], "stop": entry_price * (1 - sl_pct), "target": entry_price * (1 + tp_pct), "rsi": sig.get("rsi"), @@ -581,6 +606,8 @@ def run_momentum_backtest_portfolio( invest_cap = _resolve_invest_cap_krw(params, slot_money) fee_rate = float(params.get("fee_rate", 0.00015)) sell_tax = float(params.get("sell_tax", 0.0018)) + fx_fee_rate = float(params.get("fx_fee_rate", 0.0) or 0.0) + is_us_mkt = str(params.get("market") or "").strip().upper() == "US" skipped_micro_buys = 0 tick_exit_count = 0 @@ -638,7 +665,11 @@ def run_momentum_backtest_portfolio( if live_scan_queue and live_align: time_start_hm, time_end_hm = _time_bounds_hm(params) - scan_keys = _build_scan_time_keys(all_times_set, scan_sec, time_start_hm, time_end_hm) + _wrap = bool(params.get("_session_wrap_midnight")) + scan_keys = _build_scan_time_keys( + all_times_set, scan_sec, time_start_hm, time_end_hm, + wrap_midnight=_wrap, + ) for scan_key in scan_keys: scan_events += 1 bar_t = scan_key[:12] @@ -892,6 +923,8 @@ def run_momentum_backtest_portfolio( attach_scalp_trade_pnl( all_trades, fee_rate=fee_rate, sell_tax=sell_tax, slip_pct=backtest_slip_pct(params), + fx_fee_rate=fx_fee_rate, + pnl_decimals=4 if (is_us_mkt or fx_fee_rate > 0) else 0, ) all_trades.sort(key=lambda x: x["sell_time"]) return all_trades diff --git a/kis_trader/backtest/momentum_tick_loader.py b/kis_trader/backtest/momentum_tick_loader.py index f7f4997..a162d68 100644 --- a/kis_trader/backtest/momentum_tick_loader.py +++ b/kis_trader/backtest/momentum_tick_loader.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""모멘텀 백테 ws_ticks 로더 — breakout_tick_loader 와 동일 테이블/형식.""" +"""모멘텀 백테 틱 로더 — breakout_tick_loader 와 동일 (KR=ws_ticks / US=ws_ticks_us).""" from __future__ import annotations from kis_trader.backtest.breakout_tick_loader import ( diff --git a/kis_trader/backtest/momentum_universe_timeline.py b/kis_trader/backtest/momentum_universe_timeline.py index 2003a40..cc8f0cd 100644 --- a/kis_trader/backtest/momentum_universe_timeline.py +++ b/kis_trader/backtest/momentum_universe_timeline.py @@ -60,6 +60,7 @@ def build_momentum_universe_timeline( debounce_sec: int = 30, strict: bool = False, strict_lag_minutes: int = 1, + history_source: str = "kiwoom", ) -> Optional[UniverseTimeline]: """모멘텀 유니버스 타임라인 — 전략 공통 ``build_universe_timeline`` 사용.""" return build_universe_timeline( @@ -69,6 +70,7 @@ def build_momentum_universe_timeline( debounce_sec=debounce_sec, strict=strict, strict_lag_minutes=strict_lag_minutes, + history_source=history_source, ) @@ -79,12 +81,26 @@ def attach_momentum_universe_timeline_to_params( end_ymd: str, strategy_id: str = MOMENTUM_STRATEGY_ID, use_saved_history: bool = True, + history_source: Optional[str] = None, ) -> Optional[UniverseTimeline]: """백테 params에 ``_momentum_universe_timeline`` 부착 (스캔 시각 유니버스).""" if not use_saved_history: return None if not momentum_backtest_universe_scan_at_enabled(params): return None + from kis_trader.backtest.universe_history_source import ( + resolve_backtest_universe_history_source, + ) + + hs = resolve_backtest_universe_history_source( + history_source + if history_source is not None and str(history_source).strip() != "" + else ( + params.get("_universe_history_source") + or params.get("universe_history_source") + ) + ) + params["_universe_history_source"] = hs debounce_sec = momentum_universe_exit_debounce_sec(params) # scan_at = 실매 get_universe_at(초) — 분봉 strict lag 는 minute 슬롯 전용 timeline = build_momentum_universe_timeline( @@ -94,6 +110,7 @@ def attach_momentum_universe_timeline_to_params( debounce_sec=debounce_sec, strict=False, strict_lag_minutes=0, + history_source=hs, ) if timeline is not None: params["_momentum_universe_timeline"] = timeline @@ -103,5 +120,6 @@ def attach_momentum_universe_timeline_to_params( "strict_lag_minutes": 0, "snapshots": timeline.snapshot_count, "mode": "scan_at", + "history_source": hs, } return timeline diff --git a/kis_trader/backtest/optuna_breakout.py b/kis_trader/backtest/optuna_breakout.py index 11aa1e2..e552f73 100644 --- a/kis_trader/backtest/optuna_breakout.py +++ b/kis_trader/backtest/optuna_breakout.py @@ -16,8 +16,19 @@ from optuna.samplers import RandomSampler, TPESampler from database import TradeDB from kis_trader.backtest import breakout_backtest_common as bbc from kis_trader.backtest.optuna_search_space import breakout_grid_axis_keys, suggest_breakout_params +from kis_trader.backtest.optuna_breakout_tpe_space import ( + breakout_tpe_axis_keys, + suggest_breakout_params_tpe, +) from kis_trader.backtest.optuna_mode_combo import enrich_out_data_with_mode_combo -from kis_trader.backtest.optuna_common import announce_optuna_json_path, release_shared_tick_store +from kis_trader.backtest.optuna_common import ( + announce_optuna_json_path, + build_optuna_result_tiers, + pick_gated_apply_trial, + release_shared_tick_store, + set_optuna_trial_stability_attrs, + stability_fields_from_trial_attrs, +) from kis_trader.backtest.param_search_breakout import ( _bo_fixed_defaults, _load_candles_for_search, @@ -81,13 +92,24 @@ def prepare_breakout_search_context( max_stocks: Optional[int] = None, total_budget_krw: Optional[float] = None, orderbook_filter: str = "off", + history_source: Optional[str] = None, ) -> Optional[BreakoutSearchContext]: grids = _breakout_grids() - if mode not in grids: - logger.error("❌ 돌파 mode: %s (fast/coarse/fine/full)", mode) + # tpe = 연속 Optuna 전용 (Grid 메뉴 미사용) + if mode == "tpe": + grid: Dict[str, Any] = {} + logger.info( + "📌 mode=tpe — 연속(float/int) 탐색 (Grid categorical 미사용, TPE 가 구간 축소)" + ) + elif mode not in grids: + logger.error("❌ 돌파 mode: %s (fast/coarse/fine/wide/full/tpe)", mode) return None + else: + grid = grids[mode] base_fixed = _bo_fixed_defaults() + if mode == "tpe": + base_fixed["skip_hts_scan_dupes"] = False apply_session_to_fixed(base_fixed, time_start_hm=time_start_hm, time_end_hm=time_end_hm) _ob_mode = (orderbook_filter or "off").strip().lower() @@ -129,13 +151,21 @@ def prepare_breakout_search_context( ) logger.info("📌 진입 모드: %s", breakout_entry_mode()) + from kis_trader.backtest.universe_history_source import ( + resolve_backtest_universe_history_source, + ) + + _hs = resolve_backtest_universe_history_source(history_source) + base_fixed["_universe_history_source"] = _hs + codes_candles = _load_candles_for_search( start, end, base_fixed.get("lookback_min", 1), base_fixed, + history_source=_hs, ) if not codes_candles: logger.error("❌ 캔들 데이터 없음") return None - logger.info("✅ 데이터 로드: %s종목", len(codes_candles)) + logger.info("✅ 데이터 로드: %s종목 (history=%s)", len(codes_candles), _hs) share_denom_by_code: Dict[str, float] = {} _share_db = TradeDB() @@ -156,10 +186,18 @@ def prepare_breakout_search_context( if breakout_backtest_wants_tick_replay(engine_probe): _tick_db = TradeDB() try: - ticks_by_code, tick_rows = load_breakout_ticks_by_code( - _tick_db, start_key, end_key, set(codes_candles.keys()), - ) - logger.info("✅ ws_ticks %s건", f"{tick_rows:,}") + if _hs in ("ls", "ls_condition", "ls_ws"): + from kis_trader.backtest.ls_history_loaders import load_ls_ticks_by_code + + ticks_by_code, tick_rows = load_ls_ticks_by_code( + _tick_db, start_key, end_key, set(codes_candles.keys()), + ) + logger.info("✅ ls_ws_ticks %s건", f"{tick_rows:,}") + else: + ticks_by_code, tick_rows = load_breakout_ticks_by_code( + _tick_db, start_key, end_key, set(codes_candles.keys()), + ) + logger.info("✅ ws_ticks %s건", f"{tick_rows:,}") finally: _tick_db.close() @@ -182,7 +220,7 @@ def prepare_breakout_search_context( except Exception: pass - grid = grids[mode] + # grid 는 상단에서 mode별 설정 (tpe=빈 dict). grids[mode] 재조회 금지. _ob_axes = ("max_spread_pct", "min_bid_ask_ratio", "ask_wall_max_qty") _ob_sweeping = any(len(set(grid.get(k) or [])) > 1 for k in _ob_axes) if ob_filter_on and _ob_sweeping: @@ -208,13 +246,18 @@ def prepare_breakout_search_context( if not use_fallback_universe and start_ymd and end_ymd: try: from kis_trader.backtest.breakout_backtest_common import resolve_breakout_universe + history, src, n_bins, _scan_iv = resolve_breakout_universe( start_ymd, end_ymd, use_saved_history=True, + history_source=_hs, ) if history: universe_by_slot = history avg = sum(len(v) for v in history.values()) / max(1, n_bins) - logger.info("✅ 유니버스: BREAKOUT 이력 | %s분봉 · 평균 %.1f종목", n_bins, avg) + logger.info( + "✅ 유니버스: BREAKOUT 이력 src=%s | %s분봉 · 평균 %.1f종목", + src, n_bins, avg, + ) except Exception as exc: logger.debug("유니버스 이력 스킵: %s", exc) @@ -255,7 +298,7 @@ def prepare_breakout_search_context( total_budget_krw=total_budget_f, period_days=period_days, portfolio=portfolio, - grid_keys=breakout_grid_axis_keys(mode), + grid_keys=breakout_tpe_axis_keys() if mode == "tpe" else breakout_grid_axis_keys(mode), start_key=start_key, end_key=end_key, cache_holder=cache_holder, @@ -267,7 +310,8 @@ def _make_sampler(name: str, seed: Optional[int]): n = (name or "tpe").strip().lower() if n == "random": return RandomSampler(seed=seed) - return TPESampler(seed=seed, multivariate=True) + # multivariate TPE + 조건부 suggest 시 independent sampling 경고가 trial마다 폭주 → 억제 + return TPESampler(seed=seed, multivariate=True, warn_independent_sampling=False) def run_breakout_optuna( @@ -294,7 +338,10 @@ def run_breakout_optuna( ) def objective(trial: optuna.Trial) -> float: - combo = suggest_breakout_params(trial, ctx.mode) + if ctx.mode == "tpe": + combo = suggest_breakout_params_tpe(trial) + else: + combo = suggest_breakout_params(trial, ctx.mode) result = evaluate_breakout_param_combo( combo, base_fixed=ctx.base_fixed, @@ -327,6 +374,7 @@ def run_breakout_optuna( trial.set_user_attr("pf", float(result.get("pf") or 0)) trial.set_user_attr("total_trades", int(result["total_trades"])) trial.set_user_attr("merged_json", json.dumps(result.get("merged_params") or {}, ensure_ascii=False)) + set_optuna_trial_stability_attrs(trial, result) return obj logger.info("🔬 Optuna BREAKOUT | study=%s | trials=%d", study_name, n_trials) @@ -346,7 +394,7 @@ def run_breakout_optuna( merged = json.loads(merged_raw) except json.JSONDecodeError: merged = dict(trial.params) - passing.append({ + row = { "params": dict(trial.params), "merged_params": merged, "total_trades": int(trial.user_attrs.get("total_trades") or 0), @@ -354,15 +402,15 @@ def run_breakout_optuna( "total_pnl": float(trial.user_attrs.get("total_pnl") or 0), "pf": float(trial.user_attrs.get("pf") or 0), "optuna_trial_number": trial.number, - }) + } + row.update(stability_fields_from_trial_attrs(trial)) + passing.append(row) if sort_by == "win_rate": passing.sort(key=lambda r: (-r["win_rate"], -r["total_pnl"])) else: passing.sort(key=lambda r: (-r["total_pnl"], -r["win_rate"])) - profitable = [r for r in passing if r["total_pnl"] > 0] - if profitable: - passing = profitable + tiers = build_optuna_result_tiers(passing, sort_by=sort_by) hints: Dict[str, str] = {} out_data = { @@ -388,7 +436,7 @@ def run_breakout_optuna( "optuna_best_value": study.best_value if study.best_trial else None, "optuna_best_trial_number": study.best_trial.number if study.best_trial else None, "elapsed_sec": round(elapsed, 1), - "results": passing[:5000], + **tiers, } ts = datetime.now().strftime("%Y%m%d_%H%M%S") @@ -449,14 +497,28 @@ def run_breakout_optuna( def apply_best_breakout_trial(study: optuna.Study) -> bool: - if not study.best_trial or study.best_value <= _FAIL_OBJECTIVE + 1: - logger.warning("⚠️ 적용할 best trial 없음") + trial = pick_gated_apply_trial(study, sort_by="pnl", fail_objective=_FAIL_OBJECTIVE) + if trial is None: + logger.warning( + "⚠️ 사후게이트(results_gated) 통과 trial 없음 — DB 미적용" + ) return False - pnl = float(study.best_trial.user_attrs.get("total_pnl") or 0) + pnl = float(trial.user_attrs.get("total_pnl") or 0) if pnl <= 0: - logger.warning("⚠️ Best trial 총손익 ≤ 0 — DB 미적용") + logger.warning("⚠️ gated trial 총손익 ≤ 0 — DB 미적용") return False - merged = json.loads(study.best_trial.user_attrs.get("merged_json") or "{}") + merged = json.loads(trial.user_attrs.get("merged_json") or "{}") apply_params_to_db(merged) - logger.info("🚀 [Optuna apply-best] breakout trial #%d → env_config", study.best_trial.number) + logger.info("🚀 [Optuna apply-best] breakout gated trial #%d → env_config", trial.number) + try: + from kis_trader.backtest.optuna_daily_trail_recommend import ( + apply_daily_trail_recommend_from_optuna_json, + ) + apply_daily_trail_recommend_from_optuna_json( + getattr(study, "_kis_export_path", None), + strategy="breakout", + log=logger, + ) + except Exception as exc: + logger.warning("⚠️ 다단트레일 추천 반영 스킵: %s", exc) return True diff --git a/kis_trader/backtest/optuna_breakout_tpe_space.py b/kis_trader/backtest/optuna_breakout_tpe_space.py new file mode 100644 index 0000000..90d3802 --- /dev/null +++ b/kis_trader/backtest/optuna_breakout_tpe_space.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 +""" +optuna_breakout_tpe_space.py — 돌파 Optuna 연속(TPE) 탐색 공간 +기존 ``_breakout_grids()`` categorical 경로는 유지. ``skip_hts`` 항상 False. +""" +from __future__ import annotations + +from typing import Any, Dict, List + +import optuna + +from kis_trader.backtest.optuna_tpe_common import ( + RATCHET_TPE_AXIS_KEYS, + r1, + r2, + suggest_ratchet_tiers_pct, +) + +# 매수 시간창(time_end_hm) 은 TPE 제외 — 운영 DB/골든타임 고정. 다단래칫·청산축만 탐색. +_BREAKOUT_BASE_KEYS: List[str] = [ + "max_daily_chg", + "vol_mult", + "vol_window", + "min_turnover_1m_pct", + "prev_chg_min", + "prev_chg_max", + "min_price", + "tp_pct", + "sl_pct", + "sl_mode", + "atr_sl_mult", + "trail_pct", + "trail_arm_pct", + "shoulder_min_high_pct", + "shoulder_cut_pct", + "lookback_min", + "confirm_margin_pct", + "body_min_pct", + "max_hold_bars", +] +BREAKOUT_TPE_AXIS_KEYS: List[str] = list(_BREAKOUT_BASE_KEYS) + list(RATCHET_TPE_AXIS_KEYS) + +_SL_MODE_CHOICES = ["fixed", "atr"] + + +def breakout_tpe_axis_keys() -> List[str]: + return list(BREAKOUT_TPE_AXIS_KEYS) + + +def suggest_breakout_params_tpe(trial: optuna.Trial) -> Dict[str, Any]: + combo: Dict[str, Any] = {} + combo["max_daily_chg"] = r1(trial.suggest_float("max_daily_chg", 20.0, 55.0, step=1.0)) + combo["vol_mult"] = r2(trial.suggest_float("vol_mult", 1.5, 4.0, step=0.1)) + combo["vol_window"] = trial.suggest_int("vol_window", 1, 15) + combo["min_turnover_1m_pct"] = r2( + trial.suggest_float("min_turnover_1m_pct", 0.05, 0.5, step=0.05), + ) + combo["prev_chg_min"] = r2(trial.suggest_float("prev_chg_min", 0.2, 1.0, step=0.1)) + combo["prev_chg_max"] = r1(trial.suggest_float("prev_chg_max", 5.0, 30.0, step=0.5)) + if combo["prev_chg_min"] >= combo["prev_chg_max"]: + raise optuna.TrialPruned("prev_chg invalid") + + combo["min_price"] = trial.suggest_int("min_price", 1000, 5000, step=500) + combo["tp_pct"] = r2(trial.suggest_float("tp_pct", 2.0, 18.0, step=0.5)) + combo["sl_pct"] = r2(trial.suggest_float("sl_pct", 2.0, 6.0, step=0.1)) + combo["sl_mode"] = trial.suggest_categorical("sl_mode", _SL_MODE_CHOICES) + combo["atr_sl_mult"] = r2(trial.suggest_float("atr_sl_mult", 1.5, 3.5, step=0.1)) + combo["trail_pct"] = r2(trial.suggest_float("trail_pct", 1.0, 4.0, step=0.1)) + combo["trail_arm_pct"] = r2(trial.suggest_float("trail_arm_pct", 1.0, 4.0, step=0.1)) + combo["shoulder_min_high_pct"] = r2( + trial.suggest_float("shoulder_min_high_pct", 1.0, 6.0, step=0.1), + ) + combo["shoulder_cut_pct"] = r2( + trial.suggest_float("shoulder_cut_pct", 0.3, 1.5, step=0.1), + ) + combo.update( + suggest_ratchet_tiers_pct( + trial, + off_token="", + n_max=3, + gain_low=2.0, + gain_high=15.0, + gain_step=0.5, + cut_low=0.5, + cut_high=3.0, + cut_step=0.1, + ), + ) + combo["lookback_min"] = trial.suggest_int("lookback_min", 1, 10) + combo["confirm_margin_pct"] = r2( + trial.suggest_float("confirm_margin_pct", 0.0, 1.0, step=0.1), + ) + combo["body_min_pct"] = r2(trial.suggest_float("body_min_pct", 0.0, 0.5, step=0.1)) + combo["max_hold_bars"] = trial.suggest_int("max_hold_bars", 0, 180, step=10) + combo["skip_hts_scan_dupes"] = False + return combo diff --git a/kis_trader/backtest/optuna_briefing.py b/kis_trader/backtest/optuna_briefing.py new file mode 100644 index 0000000..6c10a9b --- /dev/null +++ b/kis_trader/backtest/optuna_briefing.py @@ -0,0 +1,432 @@ +#!/usr/bin/env python3 +""" +optuna_briefing.py — Optuna 결과 AI/규칙 브리핑 (이전 장 · 앞으로 장) +===================================================================== +TPE 탐색 JSON을 읽어 한국어 코멘트를 남긴다. +- 기본: 규칙 기반 분석 (키·외부 API 없어도 동작) +- PARAM_SEARCH_OPTUNA_BRIEFING_AI=1 이면 AI 보강 시도 순서: + 1) GEMINI_API_KEY (구글) → GEMINI_MODEL_ID (기본 gemini-2.5-flash) + 2) ANTHROPIC_API_KEY → CLAUDE_MODEL_ID + +구글 키 넣는 방법 (택1): + A) DB overflow (권장) + .venv/bin/python - <<'PY' + from database import TradeDB + from datetime import datetime + db = TradeDB() + now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + db._persist_env_config_overflow({ + "GEMINI_API_KEY": "여기에_구글_AI_Studio_키", + "GEMINI_MODEL_ID": "gemini-2.5-flash", + "PARAM_SEARCH_OPTUNA_BRIEFING_AI": "1", + }, now) + from kis_trader.utils.env import invalidate_merged_env_cache + invalidate_merged_env_cache() + print("OK") + PY + B) 환경변수: export GEMINI_API_KEY=... + 키 발급: https://aistudio.google.com/apikey + +사용: + .venv/bin/python -m kis_trader.backtest.optuna_briefing path/to/optuna_*.json +""" +from __future__ import annotations + +import argparse +import json +import logging +import os +from datetime import datetime +from typing import Any, Dict, List, Optional, Tuple + +from kis_trader.utils.env import get_env_bool, get_env_from_db, get_env_int + +logger = logging.getLogger("optuna_briefing") + +_STRAT_KO = { + "tail": "꼬리", + "momentum": "모멘텀", + "breakout": "돌파", + "scalp": "스캘핑", + "short": "꼬리", +} + + +def _f(x: Any, default: float = 0.0) -> float: + try: + return float(x) + except (TypeError, ValueError): + return default + + +def _i(x: Any, default: int = 0) -> int: + try: + return int(x) + except (TypeError, ValueError): + return default + + +def _top_row(data: Dict[str, Any]) -> Optional[Dict[str, Any]]: + for key in ("results_gated", "results", "results_all"): + rows = data.get(key) or [] + if isinstance(rows, list) and rows: + return rows[0] + return None + + +def _live_pnl_snapshot(strategy: str, start: str, end: str) -> str: + """실매 trade_history 요약 (스키마 확인 후). 실패 시 빈 문자열.""" + try: + from database import TradeDB + except ImportError: + return "" + db = TradeDB() + try: + cols = [r["Field"] for r in db.conn.execute("SHOW COLUMNS FROM trade_history").fetchall()] + colset = set(cols) + strat_col = "strategy" if "strategy" in colset else None + pnl_col = "realized_pnl" if "realized_pnl" in colset else ( + "pnl" if "pnl" in colset else None + ) + time_col = "sell_date" if "sell_date" in colset else ( + "exit_time" if "exit_time" in colset else ( + "buy_date" if "buy_date" in colset else None + ) + ) + if not strat_col or not pnl_col or not time_col: + return f"(실매 조회 스킵: trade_history 컬럼 부족)" + aliases = { + "tail": ("%tail%", "%short%", "%TAIL%", "%SHORT%"), + "momentum": ("%momentum%", "%MOMENTUM%"), + "breakout": ("%breakout%", "%BREAKOUT%"), + "scalp": ("%scalp%", "%SCALP%", "%reversal%"), + } + likes = aliases.get(strategy, (f"%{strategy}%",)) + or_sql = " OR ".join([f"`{strat_col}` LIKE %s"] * len(likes)) + params = list(likes) + [start, end] + rows = db.conn.execute( + f"SELECT `{pnl_col}` AS pnl, `{time_col}` AS t " + f"FROM trade_history " + f"WHERE ({or_sql}) " + f"AND `{time_col}` >= %s AND `{time_col}` < DATE_ADD(%s, INTERVAL 1 DAY) " + f"ORDER BY `{time_col}`", + tuple(params), + ).fetchall() + if not rows: + return f"실매({start}~{end}) 해당 전략 청산 기록 없음(또는 전략명 불일치)." + pnls = [] + for r in rows: + if isinstance(r, dict): + pnls.append(_f(r.get("pnl"))) + else: + pnls.append(_f(r[0])) + wins = sum(1 for p in pnls if p > 0) + total = sum(pnls) + wr = (wins / len(pnls) * 100.0) if pnls else 0.0 + return ( + f"실매 동기간 청산 {len(pnls)}건 · 승률 {wr:.0f}% · 합산 PnL {total:,.0f}원 " + f"(백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이)." + ) + except Exception as exc: + return f"(실매 요약 실패: {exc})" + finally: + try: + db.conn.close() + except Exception: + pass + + +def build_rule_briefing(data: Dict[str, Any]) -> str: + """규칙 기반 — 이전 장 / 앞으로 장 코멘트.""" + strategy = str(data.get("strategy") or "tail").strip().lower() + if strategy in ("", "none"): + strategy = "tail" + name = _STRAT_KO.get(strategy, strategy) + start = str(data.get("start") or "?") + end = str(data.get("end") or "?") + days = _i(data.get("backtest_days"), 0) + mode = str(data.get("mode") or "") + n_req = _i(data.get("optuna_n_trials_requested"), 0) + n_done = _i(data.get("optuna_trials_completed"), 0) + n_all = _i(data.get("n_results_all"), len(data.get("results_all") or [])) + n_gated = _i(data.get("n_results_gated"), len(data.get("results_gated") or [])) + search_wr = _f(data.get("min_win_rate")) + search_pf = _f(data.get("min_pf")) + search_mt = _i(data.get("min_trades"), 1) + rg = data.get("report_gates") or {} + rep_wr = _f(rg.get("min_win_rate"), 40.0) + rep_pf = _f(rg.get("min_pf"), 1.0) + rep_mt = _i(rg.get("min_trades"), search_mt) + + best_learn = (data.get("results") or data.get("results_all") or [None])[0] + best_gate = (data.get("results_gated") or [None])[0] + best = best_gate or best_learn + + lines: List[str] = [] + lines.append(f"# Optuna 브리핑 — {name} ({mode})") + lines.append(f"기간: {start} ~ {end} (거래일≈{days or '?'}일) · trials {n_done}/{n_req}") + lines.append( + f"탐색 게이트: WR≥{search_wr:g}% PF≥{search_pf:g} · min_trades≥{search_mt} " + f"| 후보 게이트: WR≥{rep_wr:g}% PF≥{rep_pf:g} · min_trades≥{rep_mt}" + ) + lines.append( + f"- min_trades={search_mt}: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). " + f"이보다 적은 조합은 학습/후보 집계에서 제외됩니다." + ) + lines.append(f"학습용 통과 {n_all}건 · 사후합격(results_gated) {n_gated}건") + lines.append("") + + lines.append("## 이전 장에서는") + live = _live_pnl_snapshot(strategy, start, end) + if live: + lines.append(f"- {live}") + if not best: + lines.append( + "- 이 기간 백테에서는 **유의미한 통과 조합이 거의 없었습니다.** " + "유니버스·틱·손절·시간창을 먼저 점검하세요 (돌파 0건이면 특히)." + ) + else: + pnl = _f(best.get("total_pnl")) + wr = _f(best.get("win_rate")) + pf = _f(best.get("pf")) + nt = _i(best.get("total_trades")) + tn = best.get("optuna_trial_number") + tag = "사후합격 1위" if best_gate else "학습 1위(사후게이트 미달 가능)" + lines.append( + f"- {tag}: trial #{tn} · 거래 {nt}건 · 승률 {wr:.1f}% · PF {pf:.2f} · PnL {pnl:,.0f}원" + ) + if wr >= 95.0 and nt < 15: + lines.append( + "- 승률이 비정상적으로 높고 표본이 작습니다 → **해당 장에만 맞는 과적합** 신호." + ) + if days and days <= 2: + lines.append( + f"- 표본 장이 {days}일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.**" + ) + if n_gated == 0 and n_all > 0: + lines.append( + "- 플러스/학습 후보는 있으나 승률·PF 사후 기준은 못 넘김 → **당장 DB 적용은 비권장.**" + ) + if strategy == "breakout" and n_all == 0: + lines.append( + "- 돌파는 실매 고스트퍼지·숄더 청산과 백테 풀경로가 어긋나기 쉽습니다. " + "‘손실이 지워진 실매’와 ‘손절까지 포함한 백테’를 같은 숫자로 보지 마세요." + ) + + lines.append("") + lines.append("## 앞으로 장에서는") + lines.append( + "- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토." + ) + lines.append( + "- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다." + ) + lines.append( + "- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. " + "승률 자랑보다 **손절이 살아 있는지**를 보세요." + ) + if best_gate is None: + lines.append( + "- 현재 사후합격 0건 → 파라미터 유지(현행 DB) + 유니버스/데이터 점검이 우선입니다." + ) + else: + lines.append( + "- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. " + "페이퍼/소액·모의로 1~2일 관찰 후 확대하세요." + ) + lines.append("") + lines.append(f"_생성: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} (rule)_") + return "\n".join(lines) + + +def _briefing_prompt(rule_text: str, data: Dict[str, Any]) -> str: + compact = { + "strategy": data.get("strategy"), + "mode": data.get("mode"), + "start": data.get("start"), + "end": data.get("end"), + "backtest_days": data.get("backtest_days"), + "min_win_rate": data.get("min_win_rate"), + "min_pf": data.get("min_pf"), + "report_gates": data.get("report_gates"), + "n_results_all": data.get("n_results_all"), + "n_results_gated": data.get("n_results_gated"), + "optuna_best_trial_number": data.get("optuna_best_trial_number"), + "optuna_best_value": data.get("optuna_best_value"), + "top_gated": (data.get("results_gated") or [None])[0], + "top_learning": (data.get("results") or [None])[0], + "mode_combo_vs_best": (data.get("mode_combo") or {}).get("vs_best"), + } + return ( + "당신은 한국 주식 퀀트 헤지펀드 리스크 매니저입니다. " + "아래 Optuna TPE 결과와 규칙 브리핑을 읽고, 초보자도 이해하게 " + "「이전 장에서는」/「앞으로 장에서는」 두 절로만 한국어 코멘트를 쓰세요. " + "과적합·표본부족·실매↔백테 괴리(고스트퍼지 등)를 분명히 경고하세요. " + "특정 종목 매수 추천·확정 수익 약속 금지. 200~400자.\n\n" + f"[규칙 브리핑]\n{rule_text}\n\n" + f"[요약 JSON]\n{json.dumps(compact, ensure_ascii=False, default=str)[:6000]}" + ) + + +def _call_gemini_briefing(rule_text: str, data: Dict[str, Any]) -> Optional[str]: + """GEMINI_API_KEY(구글) 있으면 코멘트. 실패 시 None.""" + api_key = ( + str(get_env_from_db("GEMINI_API_KEY", "") or "").strip() + or str(os.environ.get("GEMINI_API_KEY", "") or "").strip() + or str(os.environ.get("GOOGLE_API_KEY", "") or "").strip() + ) + if not api_key: + return None + try: + import google.genai as genai + except ImportError: + logger.warning("google-genai 미설치 — pip install google-genai") + return None + prompt = _briefing_prompt(rule_text, data) + try: + model = ( + str(get_env_from_db("GEMINI_MODEL_ID", "gemini-2.5-flash") or "").strip() + or "gemini-2.5-flash" + ) + client = genai.Client(api_key=api_key) + response = client.models.generate_content(model=model, contents=prompt) + text = getattr(response, "text", None) or "" + if not text and getattr(response, "candidates", None): + try: + text = response.candidates[0].content.parts[0].text + except Exception: + text = "" + return (text or "").strip() or None + except Exception as exc: + logger.warning("Gemini 브리핑 실패: %s", exc) + return None + + +def _call_claude_briefing(rule_text: str, data: Dict[str, Any]) -> Optional[str]: + """ANTHROPIC_API_KEY 있으면 코멘트. 실패 시 None.""" + api_key = ( + str(get_env_from_db("ANTHROPIC_API_KEY", "") or "").strip() + or str(os.environ.get("ANTHROPIC_API_KEY", "") or "").strip() + ) + if not api_key: + return None + try: + import anthropic + except ImportError: + logger.warning("anthropic 미설치 — Claude 스킵") + return None + prompt = _briefing_prompt(rule_text, data) + try: + model = str(get_env_from_db("CLAUDE_MODEL_ID", "claude-sonnet-4-5") or "").strip() or "claude-sonnet-4-5" + max_tok = int(get_env_int("CLAUDE_MAX_TOKENS", 1024)) + client = anthropic.Anthropic(api_key=api_key) + resp = client.messages.create( + model=model, + max_tokens=min(2048, max(256, max_tok)), + messages=[{"role": "user", "content": prompt}], + ) + text = resp.content[0].text if resp.content else "" + return (text or "").strip() or None + except Exception as exc: + logger.warning("Claude 브리핑 실패: %s", exc) + return None + + +def _call_ai_briefing(rule_text: str, data: Dict[str, Any]) -> Tuple[Optional[str], str]: + """AI 보강. 반환: (텍스트, provider명). Gemini → Claude.""" + if not get_env_bool("PARAM_SEARCH_OPTUNA_BRIEFING_AI", True): + return None, "BRIEFING_AI=off" + gem = _call_gemini_briefing(rule_text, data) + if gem: + return gem, "gemini" + claude = _call_claude_briefing(rule_text, data) + if claude: + return claude, "claude" + has_g = bool( + str(get_env_from_db("GEMINI_API_KEY", "") or "").strip() + or str(os.environ.get("GEMINI_API_KEY", "") or "").strip() + ) + has_c = bool( + str(get_env_from_db("ANTHROPIC_API_KEY", "") or "").strip() + or str(os.environ.get("ANTHROPIC_API_KEY", "") or "").strip() + ) + if not has_g and not has_c: + return None, "no_api_key(GEMINI_API_KEY 또는 ANTHROPIC_API_KEY)" + return None, "api_call_failed" + + +def write_briefing_for_json( + json_path: str, + *, + log: Optional[logging.Logger] = None, +) -> Optional[str]: + """JSON 옆 .briefing.md 저장 + 로그/프린트. 경로 반환.""" + lg = log or logger + abs_path = os.path.abspath(json_path) + if not os.path.isfile(abs_path): + lg.warning("⚠️ 브리핑 스킵 — JSON 없음: %s", abs_path) + return None + try: + with open(abs_path, "r", encoding="utf-8") as f: + data = json.load(f) + except (OSError, json.JSONDecodeError) as exc: + lg.warning("⚠️ 브리핑 JSON 읽기 실패: %s", exc) + return None + + rule = build_rule_briefing(data) + ai, provider = _call_ai_briefing(rule, data) + if ai: + body = ( + rule + + f"\n\n## AI 코멘트 (이전 장 / 앞으로 장) [{provider}]\n\n" + + ai + + "\n" + ) + else: + body = ( + rule + + f"\n\n## AI 코멘트\n\n_(미생성: {provider}. " + "구글 키는 GEMINI_API_KEY 를 DB/환경에 넣으세요 — " + "kis_trader/backtest/optuna_briefing.py 모듈 docstring 참고)_\n" + ) + lg.info("ℹ️ AI 브리핑 없음: %s", provider) + + out_md = abs_path.rsplit(".", 1)[0] + ".briefing.md" + try: + with open(out_md, "w", encoding="utf-8") as f: + f.write(body) + except OSError as exc: + lg.warning("⚠️ 브리핑 저장 실패: %s", exc) + return None + + try: + data["briefing_md_path"] = out_md + data["briefing_text"] = body + data["briefing_ai_provider"] = provider if ai else None + with open(abs_path, "w", encoding="utf-8") as f: + json.dump(data, f, indent=2, ensure_ascii=False) + except OSError: + pass + + lg.info("🗣️ Optuna 브리핑: %s", out_md) + print(f"OPTUNA_BRIEFING_MD={out_md}", flush=True) + preview = (ai or rule).strip().splitlines() + for line in preview[:12]: + print(line, flush=True) + if len(preview) > 12: + print("… (전체는 briefing.md)", flush=True) + return out_md + + +def main() -> None: + logging.basicConfig(level=logging.INFO, format="%(message)s") + p = argparse.ArgumentParser(description="Optuna 결과 브리핑") + p.add_argument("json_path", help="optuna_*.json 경로") + args = p.parse_args() + path = write_briefing_for_json(args.json_path) + if not path: + raise SystemExit(1) + + +if __name__ == "__main__": + main() diff --git a/kis_trader/backtest/optuna_common.py b/kis_trader/backtest/optuna_common.py index f0512e8..a7f911d 100644 --- a/kis_trader/backtest/optuna_common.py +++ b/kis_trader/backtest/optuna_common.py @@ -9,16 +9,467 @@ from __future__ import annotations import logging import os -from typing import Any, Optional +from typing import Any, Dict, List, Optional, Tuple from urllib.parse import quote_plus -from kis_trader.utils.env import get_env_from_db +from kis_trader.utils.env import get_env_float, get_env_from_db, get_env_int logger = logging.getLogger("optuna_common") # Optuna 전용 MariaDB (매매 DB kis_quant_db 와 분리) DEFAULT_OPTUNA_DB_NAME = "kis_optuna" -OPTUNA_STRATEGIES = ("tail", "momentum", "breakout", "scalp", "dart") +OPTUNA_STRATEGIES = ("tail", "momentum", "us_momentum", "breakout", "scalp", "dart") + +# 탐색(TPE 학습): 게이트 OFF(0) — PnL 차이를 샘플러가 보도록. +# 리포트/apply 후보: 아래 REPORT_* 로 사후 필터. +OPTUNA_SEARCH_MIN_WIN_RATE_DEFAULT = 0.0 +OPTUNA_SEARCH_MIN_PF_DEFAULT = 0.0 +OPTUNA_SEARCH_MIN_TRADES_DEFAULT = 1 +OPTUNA_REPORT_MIN_WIN_RATE_DEFAULT = 40.0 +OPTUNA_REPORT_MIN_PF_DEFAULT = 1.0 + +# 일별 손익 안정성 티어 (results_stable) — 학습1위/gated 와 별도 후보 +# 손실일·최악일·일PnL 분산으로 “합산만 큰” 후보를 걸러낸다. +OPTUNA_STABLE_MAX_LOSING_DAYS_DEFAULT = 1 +OPTUNA_STABLE_MIN_WORST_DAY_PNL_DEFAULT = -30000.0 +OPTUNA_STABLE_LAMBDA_DEFAULT = 1.0 +OPTUNA_STABLE_MIN_ACTIVE_DAYS_DEFAULT = 2 + + +def optuna_search_gate_defaults() -> Tuple[float, float, int]: + """탐색 중 objective 게이트 (기본 0/0/1). CLI 미지정 시 사용.""" + return ( + float(get_env_float("PARAM_SEARCH_OPTUNA_MIN_WIN_RATE", OPTUNA_SEARCH_MIN_WIN_RATE_DEFAULT)), + float(get_env_float("PARAM_SEARCH_OPTUNA_MIN_PF", OPTUNA_SEARCH_MIN_PF_DEFAULT)), + int(get_env_int("PARAM_SEARCH_OPTUNA_MIN_TRADES", OPTUNA_SEARCH_MIN_TRADES_DEFAULT)), + ) + + +def optuna_report_gate_defaults() -> Tuple[float, float, int]: + """결과 후보·apply 사후 필터 (기본 승률40·PF1.0·min_trades=탐색과 동일).""" + _sw, _sp, min_tr = optuna_search_gate_defaults() + return ( + float(get_env_float( + "PARAM_SEARCH_OPTUNA_REPORT_MIN_WIN_RATE", OPTUNA_REPORT_MIN_WIN_RATE_DEFAULT, + )), + float(get_env_float( + "PARAM_SEARCH_OPTUNA_REPORT_MIN_PF", OPTUNA_REPORT_MIN_PF_DEFAULT, + )), + int(get_env_int("PARAM_SEARCH_OPTUNA_REPORT_MIN_TRADES", max(1, min_tr))), + ) + + +def _sort_optuna_rows(rows: List[Dict[str, Any]], sort_by: str) -> List[Dict[str, Any]]: + sb = (sort_by or "pnl").strip().lower() + out = list(rows) + + def _f(r: Dict[str, Any], k: str) -> float: + try: + return float(r.get(k) or 0) + except (TypeError, ValueError): + return 0.0 + + if sb == "score": + out.sort(key=lambda r: (-_f(r, "score"), -_f(r, "total_pnl"), -_f(r, "win_rate"))) + elif sb == "win_rate": + out.sort(key=lambda r: (-_f(r, "win_rate"), -_f(r, "total_pnl"))) + elif sb in ("stability", "stable"): + # 일평균 − λ·표준편차(stability_score) 우선 · 최악일 · 합산 PnL + out.sort( + key=lambda r: ( + -_f(r, "stability_score"), + -_f(r, "worst_day_pnl"), + -_f(r, "total_pnl"), + -_f(r, "win_rate"), + ), + ) + else: + out.sort(key=lambda r: (-_f(r, "total_pnl"), -_f(r, "win_rate"))) + return out + + +def trade_exit_day_key(trade: Dict[str, Any]) -> str: + """청산 시각 → YYYY-MM-DD (없으면 빈 문자열). + + 꼬리 백테는 exit_time, 스캘핑·모멘텀·돌파 포트폴리오 백테는 sell_time 을 씀. + sell_time 누락 시 daily_pnl/results_stable 이 전부 비게 됨. + """ + raw = ( + trade.get("exit_time") + or trade.get("sell_date") + or trade.get("sell_time") # scalp/momentum/breakout 포트폴리오 + or trade.get("exit_ts") + or trade.get("exit_at") + or "" + ) + s = str(raw).strip() + if not s: + return "" + digits = "".join(ch for ch in s if ch.isdigit()) + if len(digits) >= 8: + return f"{digits[0:4]}-{digits[4:6]}-{digits[6:8]}" + if len(s) >= 10 and s[4] == "-" and s[7] == "-": + return s[:10] + return "" + + +def compute_daily_stability_metrics( + trades: List[Dict[str, Any]], + *, + stability_lambda: Optional[float] = None, +) -> Dict[str, Any]: + """ + 거래 리스트 → 일별 PnL·안정성 점수. + + stability_score = mean(일PnL) − λ × std(일PnL) + (λ 기본 OPTUNA_STABLE_LAMBDA / get_env) + """ + from statistics import mean, pstdev + + if stability_lambda is None: + _, _, lam, _ = optuna_stable_gate_defaults() + stability_lambda = lam + try: + lam = float(stability_lambda) + except (TypeError, ValueError): + lam = float(OPTUNA_STABLE_LAMBDA_DEFAULT) + + by_day: Dict[str, float] = {} + for t in trades or []: + day = trade_exit_day_key(t if isinstance(t, dict) else {}) + if not day: + continue + try: + pnl = float((t or {}).get("pnl") or (t or {}).get("realized_pnl") or 0) + except (TypeError, ValueError): + pnl = 0.0 + by_day[day] = by_day.get(day, 0.0) + pnl + + days_sorted = sorted(by_day.keys()) + vals = [float(by_day[d]) for d in days_sorted] + n_days = len(vals) + if n_days <= 0: + return { + "daily_pnl": {}, + "n_active_days": 0, + "n_losing_days": 0, + "worst_day_pnl": 0.0, + "best_day_pnl": 0.0, + "daily_pnl_mean": 0.0, + "daily_pnl_std": 0.0, + "stability_score": 0.0, + "stability_lambda": lam, + } + + n_lose = sum(1 for v in vals if v < 0) + worst = min(vals) + best = max(vals) + avg = float(mean(vals)) + std = float(pstdev(vals)) if n_days >= 2 else 0.0 + score = avg - lam * std + return { + "daily_pnl": {d: round(by_day[d], 2) for d in days_sorted}, + "n_active_days": n_days, + "n_losing_days": int(n_lose), + "worst_day_pnl": round(worst, 2), + "best_day_pnl": round(best, 2), + "daily_pnl_mean": round(avg, 2), + "daily_pnl_std": round(std, 2), + "stability_score": round(score, 4), + "stability_lambda": lam, + } + + +def attach_daily_stability( + result: Dict[str, Any], + trades: List[Dict[str, Any]], +) -> Dict[str, Any]: + """evaluate_* 반환 dict 에 일별 안정성 필드를 붙인다.""" + if not isinstance(result, dict): + return result + result.update(compute_daily_stability_metrics(trades or [])) + return result + + +def optuna_stable_gate_defaults() -> Tuple[int, float, float, int]: + """(max_losing_days, min_worst_day_pnl, lambda, min_active_days).""" + return ( + int(get_env_int( + "PARAM_SEARCH_OPTUNA_STABLE_MAX_LOSING_DAYS", + OPTUNA_STABLE_MAX_LOSING_DAYS_DEFAULT, + )), + float(get_env_float( + "PARAM_SEARCH_OPTUNA_STABLE_MIN_WORST_DAY_PNL", + OPTUNA_STABLE_MIN_WORST_DAY_PNL_DEFAULT, + )), + float(get_env_float( + "PARAM_SEARCH_OPTUNA_STABLE_LAMBDA", + OPTUNA_STABLE_LAMBDA_DEFAULT, + )), + int(get_env_int( + "PARAM_SEARCH_OPTUNA_STABLE_MIN_ACTIVE_DAYS", + OPTUNA_STABLE_MIN_ACTIVE_DAYS_DEFAULT, + )), + ) + + +def row_passes_report_gates( + row: Dict[str, Any], + *, + min_win_rate: float, + min_pf: float, + min_trades: int, +) -> bool: + try: + wr = float(row.get("win_rate") or 0) + pf = float(row.get("pf") or 0) + nt = int(row.get("total_trades") or 0) + except (TypeError, ValueError): + return False + if nt < int(min_trades): + return False + if wr < float(min_win_rate): + return False + if pf < float(min_pf): + return False + return True + + +def row_passes_stable_gates(row: Dict[str, Any]) -> bool: + """ + 일별 안정성 사후 게이트. + daily_pnl / n_active_days 가 없으면(구 JSON) 통과 불가 → results_stable 빈 목록. + """ + if row.get("daily_pnl") is None and row.get("n_active_days") is None: + return False + max_lose, min_worst, _lam, min_days = optuna_stable_gate_defaults() + try: + n_days = int(row.get("n_active_days") or 0) + n_lose = int(row.get("n_losing_days") or 0) + worst = float(row.get("worst_day_pnl") or 0) + except (TypeError, ValueError): + return False + if n_days < int(min_days): + return False + if n_lose > int(max_lose): + return False + if worst < float(min_worst): + return False + return True + + +def set_optuna_trial_stability_attrs(trial: Any, result: Dict[str, Any]) -> None: + """Optuna trial.user_attrs 에 일별 안정성 스냅샷 저장.""" + import json as _json + + if not result: + return + try: + trial.set_user_attr("n_active_days", int(result.get("n_active_days") or 0)) + trial.set_user_attr("n_losing_days", int(result.get("n_losing_days") or 0)) + trial.set_user_attr("worst_day_pnl", float(result.get("worst_day_pnl") or 0)) + trial.set_user_attr("best_day_pnl", float(result.get("best_day_pnl") or 0)) + trial.set_user_attr("daily_pnl_mean", float(result.get("daily_pnl_mean") or 0)) + trial.set_user_attr("daily_pnl_std", float(result.get("daily_pnl_std") or 0)) + trial.set_user_attr("stability_score", float(result.get("stability_score") or 0)) + trial.set_user_attr( + "daily_pnl_json", + _json.dumps(result.get("daily_pnl") or {}, ensure_ascii=False), + ) + except Exception: + pass + + +def stability_fields_from_trial_attrs(trial: Any) -> Dict[str, Any]: + """trial.user_attrs → 결과 row 안정성 필드.""" + import json as _json + + raw = trial.user_attrs.get("daily_pnl_json") or "{}" + try: + daily = _json.loads(raw) if isinstance(raw, str) else (raw or {}) + except Exception: + daily = {} + if trial.user_attrs.get("n_active_days") is None and not daily: + return {} + return { + "daily_pnl": daily if isinstance(daily, dict) else {}, + "n_active_days": int(trial.user_attrs.get("n_active_days") or 0), + "n_losing_days": int(trial.user_attrs.get("n_losing_days") or 0), + "worst_day_pnl": float(trial.user_attrs.get("worst_day_pnl") or 0), + "best_day_pnl": float(trial.user_attrs.get("best_day_pnl") or 0), + "daily_pnl_mean": float(trial.user_attrs.get("daily_pnl_mean") or 0), + "daily_pnl_std": float(trial.user_attrs.get("daily_pnl_std") or 0), + "stability_score": float(trial.user_attrs.get("stability_score") or 0), + } + + +def build_optuna_result_tiers( + rows: List[Dict[str, Any]], + *, + sort_by: str, + top_n: int = 5000, +) -> Dict[str, Any]: + """ + 탐색 전체 vs 리포트/apply 후보 분리. + + - results_all: 완료·게이트통과(탐색게이트) trial 전부 정렬 + - results: 하위호환 — 플러스 PnL 우선(없으면 all) + - results_gated: 승률·PF 사후 필터 (apply 후보) + - results_stable: gated ∩ 일별 안정성 게이트 (들쭉날쭉 완화 후보) + """ + rep_wr, rep_pf, rep_tr = optuna_report_gate_defaults() + max_lose, min_worst, lam, min_days = optuna_stable_gate_defaults() + all_sorted = _sort_optuna_rows(rows, sort_by) + profitable = [r for r in all_sorted if float(r.get("total_pnl") or 0) > 0] + learning = profitable if profitable else all_sorted + gated = [ + r for r in all_sorted + if row_passes_report_gates( + r, min_win_rate=rep_wr, min_pf=rep_pf, min_trades=rep_tr, + ) + and float(r.get("total_pnl") or 0) > 0 + ] + stable_pool = [r for r in gated if row_passes_stable_gates(r)] + stable = _sort_optuna_rows(stable_pool, "stability") + return { + "results_all": all_sorted[:top_n], + "results": learning[:top_n], + "results_gated": gated[:top_n], + "results_stable": stable[:top_n], + "report_gates": { + "min_win_rate": rep_wr, + "min_pf": rep_pf, + "min_trades": rep_tr, + }, + "stable_gates": { + "max_losing_days": max_lose, + "min_worst_day_pnl": min_worst, + "stability_lambda": lam, + "min_active_days": min_days, + "score_note": "stability_score = mean(일PnL) − λ × std(일PnL)", + }, + "search_gates_note": ( + "탐색 min_win_rate/min_pf 기본 0 — TPE가 PnL 차이를 학습. " + "적용·운영 후보는 results_gated(report_gates). " + "들쭉날쭉 완화 후보는 results_stable(stable_gates)." + ), + "n_results_all": len(all_sorted), + "n_results_learning": len(learning), + "n_results_gated": len(gated), + "n_results_stable": len(stable), + } + + +def pick_gated_apply_trial( + study: Any, + *, + sort_by: str = "pnl", + fail_objective: float = -1e18, +) -> Optional[Any]: + """ + --apply-best 용: study.best(탐색 objective)가 아니라 + report_gates 통과 trial 중 정렬 1위. + """ + import optuna # noqa: WPS433 — 호출 시에만 + + rep_wr, rep_pf, rep_tr = optuna_report_gate_defaults() + cand: List[Tuple[Dict[str, Any], Any]] = [] + for trial in study.trials: + if trial.state != optuna.trial.TrialState.COMPLETE: + continue + if not trial.user_attrs.get("gates_ok"): + continue + try: + val = float(trial.value) if trial.value is not None else fail_objective + except (TypeError, ValueError): + val = fail_objective + if val <= fail_objective + 1: + continue + row = { + "win_rate": float(trial.user_attrs.get("win_rate") or 0), + "pf": float(trial.user_attrs.get("pf") or 0), + "total_trades": int(trial.user_attrs.get("total_trades") or 0), + "total_pnl": float(trial.user_attrs.get("total_pnl") or 0), + "score": float(trial.user_attrs.get("score") or 0), + "_trial_number": int(trial.number), + } + if not row_passes_report_gates( + row, min_win_rate=rep_wr, min_pf=rep_pf, min_trades=rep_tr, + ): + continue + if float(row["total_pnl"]) <= 0: + continue + cand.append((row, trial)) + if not cand: + return None + ranked = _sort_optuna_rows([r for r, _ in cand], sort_by) + top_n = int(ranked[0].get("_trial_number") or -1) + for r, t in cand: + if int(r.get("_trial_number") or -2) == top_n: + return t + return cand[0][1] + + +def ensure_optuna_gate_env_defaults(db: Any = None) -> None: + """신규 Optuna 게이트 키가 DB에 없으면 env_config_ext 에만 UPSERT (전체 스냅샷 X).""" + defaults = { + "PARAM_SEARCH_OPTUNA_MIN_WIN_RATE": str(OPTUNA_SEARCH_MIN_WIN_RATE_DEFAULT), + "PARAM_SEARCH_OPTUNA_MIN_PF": str(OPTUNA_SEARCH_MIN_PF_DEFAULT), + "PARAM_SEARCH_OPTUNA_MIN_TRADES": str(OPTUNA_SEARCH_MIN_TRADES_DEFAULT), + "PARAM_SEARCH_OPTUNA_REPORT_MIN_WIN_RATE": str(OPTUNA_REPORT_MIN_WIN_RATE_DEFAULT), + "PARAM_SEARCH_OPTUNA_REPORT_MIN_PF": str(OPTUNA_REPORT_MIN_PF_DEFAULT), + "PARAM_SEARCH_OPTUNA_BRIEFING_AI": "1", + # 일별 안정성 티어 (results_stable) + "PARAM_SEARCH_OPTUNA_STABLE_MAX_LOSING_DAYS": str(OPTUNA_STABLE_MAX_LOSING_DAYS_DEFAULT), + "PARAM_SEARCH_OPTUNA_STABLE_MIN_WORST_DAY_PNL": str(OPTUNA_STABLE_MIN_WORST_DAY_PNL_DEFAULT), + "PARAM_SEARCH_OPTUNA_STABLE_LAMBDA": str(OPTUNA_STABLE_LAMBDA_DEFAULT), + "PARAM_SEARCH_OPTUNA_STABLE_MIN_ACTIVE_DAYS": str(OPTUNA_STABLE_MIN_ACTIVE_DAYS_DEFAULT), + # Optuna apply 시 다단트레일 추천 → 전략별 *_DAILY_PROFIT_* (탐색 축 아님) + "OPTUNA_DAILY_TRAIL_APPLY_ON_BEST": "true", + "OPTUNA_DAILY_TRAIL_ARM_FRAC": "0.60", + "OPTUNA_DAILY_TRAIL_BEST_FRAC": "0.70", + "OPTUNA_DAILY_TRAIL_ARM_STEP": "5000", + "OPTUNA_DAILY_TRAIL_MIN_ARM": "10000", + "OPTUNA_DAILY_TRAIL_TIER_DROPS": "40,30,20", + } + try: + from datetime import datetime + + from database import TradeDB + except ImportError: + return + owned = False + if db is None: + db = TradeDB() + owned = True + try: + snap = db.get_merged_env_snapshot() or {} + patch = {} + for k, v in defaults.items(): + cur = snap.get(k) + if cur is None or str(cur).strip() == "": + patch[k] = v + if not patch: + return + now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + n = db._persist_env_config_overflow(patch, now) + try: + from kis_trader.utils.env import invalidate_merged_env_cache + invalidate_merged_env_cache() + except Exception: + pass + logger.info( + "📌 Optuna 게이트 기본값 DB(ext) 반영 %d키: %s", + n, sorted(patch.keys()), + ) + except Exception as exc: + logger.warning("⚠️ Optuna 게이트 기본값 DB 반영 실패: %s", exc) + finally: + if owned: + try: + db.conn.close() + except Exception: + pass def mariadb_creds() -> dict: @@ -182,6 +633,7 @@ def announce_optuna_json_path( """ 결과 JSON 절대경로를 터미널·로그에 눈에 띄게 고지. 또한 logs/optuna___latest.jsonpath 에 기록 (없으면 strategy만). + note 에 '최종' 이 포함되면 이전장/앞장 브리핑(.briefing.md) 생성. """ abs_path = os.path.abspath(str(out_path or "").strip()) lg = log or logger @@ -207,5 +659,14 @@ def announce_optuna_json_path( f.write(abs_path + "\n") except OSError as exc: lg.warning("⚠️ jsonpath 사이드카 기록 실패: %s", exc) + + # 최종 JSON 저장 후 브리핑 (이전 장 / 앞으로 장) + note_l = (note or "").strip() + if "최종" in note_l and abs_path and os.path.isfile(abs_path): + try: + from kis_trader.backtest.optuna_briefing import write_briefing_for_json + write_briefing_for_json(abs_path, log=lg) + except Exception as exc: + lg.warning("⚠️ Optuna 브리핑 실패: %s", exc) return abs_path diff --git a/kis_trader/backtest/optuna_daily_trail_recommend.py b/kis_trader/backtest/optuna_daily_trail_recommend.py new file mode 100644 index 0000000..30e7422 --- /dev/null +++ b/kis_trader/backtest/optuna_daily_trail_recommend.py @@ -0,0 +1,315 @@ +#!/usr/bin/env python3 +""" +Optuna 결과(mode_combo top_pnls / mode·best PnL) → 당일손익 다단트레일 추천. + +- 탐색 축에는 넣지 않음 (그리드/TPE 제외). +- JSON·Optuna 탭 미리보기용 추천만 생성. +- DB 반영은 apply-best / 웹「DB 적용」시에만 ({SID}_DAILY_PROFIT_* , 마스터 키 미사용). +""" +from __future__ import annotations + +import logging +import statistics +from typing import Any, Dict, List, Optional, Sequence + +logger = logging.getLogger("optuna_daily_trail_recommend") + +# Optuna strategy 슬러그 → DB 접두 +_STRATEGY_PREFIX: Dict[str, str] = { + "tail": "SHORT", + "short": "SHORT", + "scalp": "SCALP", + "scalping": "SCALP", + "momentum": "MOMENTUM", + "us_momentum": "US_MOMENTUM", + "breakout": "BREAKOUT", +} + + +def strategy_daily_profit_prefix(strategy: str) -> str: + s = str(strategy or "").strip().lower() + return _STRATEGY_PREFIX.get(s, s.upper() if s else "SHORT") + + +def _env_float(key: str, default: float) -> float: + try: + from kis_trader.utils.env import get_env_float + return float(get_env_float(key, float(default))) + except Exception: + return float(default) + + +def _env_int(key: str, default: int) -> int: + try: + from kis_trader.utils.env import get_env_int + return int(get_env_int(key, int(default))) + except Exception: + return int(default) + + +def _env_str(key: str, default: str) -> str: + try: + from kis_trader.utils.env import get_env_from_db + raw = get_env_from_db(key, default) + if raw is None or str(raw).strip() in ("", "None"): + return str(default) + return str(raw).strip() + except Exception: + return str(default) + + +def _env_bool(key: str, default: bool = True) -> bool: + try: + from kis_trader.utils.env import get_env_bool + return bool(get_env_bool(key, bool(default))) + except Exception: + return bool(default) + + +def _round_arm_krw(value: float, step: int) -> int: + step = max(1000, int(step or 5000)) + if value <= 0: + return 0 + return int(max(step, round(float(value) / step) * step)) + + +def _parse_drops(raw: str) -> List[float]: + parts = [p.strip() for p in str(raw or "").split(",") if p.strip()] + out: List[float] = [] + for p in parts[:3]: + try: + out.append(max(5.0, min(80.0, float(p)))) + except (TypeError, ValueError): + continue + while len(out) < 3: + out.append([40.0, 30.0, 20.0][len(out)]) + return out[:3] + + +def _positive_pnls(vals: Sequence[Any]) -> List[float]: + out: List[float] = [] + for v in vals or []: + try: + x = float(v) + except (TypeError, ValueError): + continue + if x > 0 and abs(x) < 1e15: + out.append(x) + return out + + +def recommend_daily_trail_tiers( + *, + top_pnls: Optional[Sequence[Any]] = None, + mode_pnl: Optional[float] = None, + best_pnl: Optional[float] = None, + strategy: str = "", +) -> Dict[str, Any]: + """ + 추천 공식: + anchor = max(mode_pnl, median(top_pnls), best_pnl * BEST_FRAC) + arm = round(anchor * ARM_FRAC) (step·min_arm 적용) + tiers = arm:d1, (arm*2):d2, (arm*4):d3 + PnL 전부 ≤0 이면 ok=False (적용 스킵 대상). + """ + tops = _positive_pnls(list(top_pnls or [])) + med = float(statistics.median(tops)) if tops else 0.0 + mode_v = float(mode_pnl or 0.0) + best_v = float(best_pnl or 0.0) + best_frac = _env_float("OPTUNA_DAILY_TRAIL_BEST_FRAC", 0.70) + arm_frac = _env_float("OPTUNA_DAILY_TRAIL_ARM_FRAC", 0.60) + step = _env_int("OPTUNA_DAILY_TRAIL_ARM_STEP", 5000) + min_arm = _env_int("OPTUNA_DAILY_TRAIL_MIN_ARM", 10000) + drops = _parse_drops(_env_str("OPTUNA_DAILY_TRAIL_TIER_DROPS", "40,30,20")) + + candidates = [x for x in (mode_v, med, best_v * best_frac) if x > 0] + anchor = max(candidates) if candidates else 0.0 + arm_raw = anchor * arm_frac if anchor > 0 else 0.0 + arm = _round_arm_krw(arm_raw, step) + if arm > 0: + arm = max(arm, min_arm) + arm = _round_arm_krw(float(arm), step) + + prefix = strategy_daily_profit_prefix(strategy) + if arm <= 0: + return { + "ok": False, + "strategy": str(strategy or "").strip().lower(), + "prefix": prefix, + "reason": "양수 PnL 앵커 없음 — 다단트레일 추천 생략", + "anchor_krw": 0, + "arm_krw": 0, + "tiers": "", + "mode": "trailing", + "enabled": False, + "inputs": { + "mode_pnl": mode_v, + "best_pnl": best_v, + "top_median": med, + "top_pnls_head": tops[:10], + }, + "formula": { + "arm_frac": arm_frac, + "best_frac": best_frac, + "step": step, + "min_arm": min_arm, + "drops": drops, + }, + "note": "apply 시에도 TRAIL 미기록 (수익 앵커 없음)", + } + + t1, t2, t3 = int(arm), int(arm * 2), int(arm * 4) + d1, d2, d3 = drops + tiers = f"{t1}:{d1:.0f},{t2}:{d2:.0f},{t3}:{d3:.0f}" + return { + "ok": True, + "strategy": str(strategy or "").strip().lower(), + "prefix": prefix, + "reason": "", + "anchor_krw": int(round(anchor)), + "arm_krw": int(arm), + "tiers": tiers, + "mode": "trailing", + "enabled": True, + "inputs": { + "mode_pnl": mode_v, + "best_pnl": best_v, + "top_median": med, + "top_pnls_head": tops[:10], + }, + "formula": { + "arm_frac": arm_frac, + "best_frac": best_frac, + "step": step, + "min_arm": min_arm, + "drops": drops, + }, + "note": ( + f"apply 시 {prefix}_DAILY_PROFIT_TRAIL_TIERS={tiers} " + f"(ENABLED=true, MODE=trailing). 운영 UI에서 끄거나 수정 가능." + ), + } + + +def recommend_from_optuna_out_data(out_data: Dict[str, Any]) -> Dict[str, Any]: + """Optuna 결과 dict(mode_combo·results)에서 추천 생성.""" + data = out_data or {} + strat = str(data.get("strategy") or "").strip().lower() + mc = data.get("mode_combo") or {} + top_pnls = list(mc.get("top_pnls") or []) + bt = mc.get("backtest") or {} + mode_pnl = bt.get("total_pnl") + vs = mc.get("vs_best") or {} + best_pnl = vs.get("best_pnl") + if best_pnl is None: + res0 = (data.get("results") or [None])[0] + if res0: + best_pnl = res0.get("total_pnl") + if not top_pnls: + # gated/학습 Top 에서도 보조 + for row in (data.get("results_gated") or data.get("results") or [])[:20]: + try: + top_pnls.append(float(row.get("total_pnl") or 0)) + except (TypeError, ValueError): + pass + return recommend_daily_trail_tiers( + top_pnls=top_pnls, + mode_pnl=float(mode_pnl) if mode_pnl is not None else None, + best_pnl=float(best_pnl) if best_pnl is not None else None, + strategy=strat, + ) + + +def attach_daily_trail_recommend( + out_data: Dict[str, Any], + *, + log: Optional[logging.Logger] = None, +) -> Dict[str, Any]: + """out_data 에 daily_trail_recommend 기록 (+ mode_combo 안에도 복사).""" + lg = log or logger + rec = recommend_from_optuna_out_data(out_data) + out_data["daily_trail_recommend"] = rec + mc = out_data.get("mode_combo") + if isinstance(mc, dict): + mc["daily_trail_recommend"] = rec + if rec.get("ok"): + lg.info( + "📅 [다단트레일 추천] %s arm=%s tiers=%s (anchor=%s)", + rec.get("prefix"), + rec.get("arm_krw"), + rec.get("tiers"), + rec.get("anchor_krw"), + ) + else: + lg.info("📅 [다단트레일 추천] 생략 — %s", rec.get("reason") or "n/a") + return out_data + + +def build_daily_trail_env_patch(rec: Dict[str, Any]) -> Dict[str, str]: + """전략별 DAILY_PROFIT 패치 (마스터 키 없음).""" + if not rec or not rec.get("ok"): + return {} + prefix = str(rec.get("prefix") or "").strip().upper() + tiers = str(rec.get("tiers") or "").strip() + if not prefix or not tiers: + return {} + mode = str(rec.get("mode") or "trailing").strip().lower() or "trailing" + return { + f"{prefix}_DAILY_PROFIT_TARGET_ENABLED": "true", + f"{prefix}_DAILY_PROFIT_MODE": mode, + f"{prefix}_DAILY_PROFIT_TRAIL_TIERS": tiers, + f"{prefix}_DAILY_PROFIT_TRAIL_ARM_KRW": str(int(rec.get("arm_krw") or 0)), + } + + +def apply_daily_trail_recommend_patch( + rec: Dict[str, Any], + *, + log: Optional[logging.Logger] = None, +) -> Dict[str, Any]: + """ + 추천 → DB apply_env_patch. + OPTUNA_DAILY_TRAIL_APPLY_ON_BEST=false 이면 스킵. + """ + lg = log or logger + if not _env_bool("OPTUNA_DAILY_TRAIL_APPLY_ON_BEST", True): + return {"applied": False, "reason": "OPTUNA_DAILY_TRAIL_APPLY_ON_BEST=false"} + patch = build_daily_trail_env_patch(rec) + if not patch: + return {"applied": False, "reason": rec.get("reason") or "추천 없음", "recommend": rec} + try: + from kis_trader.backtest.param_search_apply_snapshot import apply_env_patch + env_id = apply_env_patch(patch) + except Exception as exc: + lg.warning("⚠️ 다단트레일 추천 DB 반영 실패: %s", exc) + return {"applied": False, "error": str(exc), "patch": patch, "recommend": rec} + lg.info( + "🚀 [Optuna apply] 다단트레일 추천 반영 %s → %s", + rec.get("prefix"), patch, + ) + return {"applied": True, "env_id": env_id, "patch": patch, "recommend": rec} + + +def apply_daily_trail_recommend_from_optuna_json( + result_json: Optional[str], + *, + strategy: str = "", + log: Optional[logging.Logger] = None, +) -> Dict[str, Any]: + """결과 JSON 경로에서 추천 읽어(또는 재계산) DB 반영.""" + import json + from pathlib import Path + + lg = log or logger + if not result_json or not Path(result_json).is_file(): + return {"applied": False, "reason": "result_json 없음"} + try: + data = json.loads(Path(result_json).read_text(encoding="utf-8")) + except Exception as exc: + return {"applied": False, "error": str(exc)} + if strategy and not data.get("strategy"): + data["strategy"] = strategy + rec = data.get("daily_trail_recommend") + if not isinstance(rec, dict) or not rec.get("ok"): + rec = recommend_from_optuna_out_data(data) + return apply_daily_trail_recommend_patch(rec, log=lg) diff --git a/kis_trader/backtest/optuna_mode_combo.py b/kis_trader/backtest/optuna_mode_combo.py index d51a0f4..fb4f1fe 100644 --- a/kis_trader/backtest/optuna_mode_combo.py +++ b/kis_trader/backtest/optuna_mode_combo.py @@ -19,6 +19,7 @@ from collections import Counter from typing import Any, Callable, Dict, List, Optional from kis_trader.utils.env import get_env_int +from kis_trader.backtest.optuna_tpe_common import finalize_ratchet_combo logger = logging.getLogger("optuna_mode_combo") @@ -155,11 +156,18 @@ def enrich_out_data_with_mode_combo( grid_keys=keys or None, params_key=params_key, ) + # 래칫 숫자축 최빈 → 엔진용 ratchet_tiers 재조립 (불일치 방지) + strat = str(out_data.get("strategy") or "").strip().lower() + off_tok = "off" if strat == "tail" else "" + mode_params = finalize_ratchet_combo( + dict(mode_meta.get("params") or {}), + off_token=off_tok, + ) report: Dict[str, Any] = { "method": "top_n_per_axis_mode", "top_n": mode_meta["top_n"], "pool_size": mode_meta["pool_size"], - "params": mode_meta["params"], + "params": mode_params, "freq": mode_meta["freq"], "top_pnls": mode_meta["top_pnls"], "backtest": None, @@ -180,12 +188,14 @@ def enrich_out_data_with_mode_combo( mode_meta["pool_size"], mode_meta["top_pnls"][:5], ) - if mode_meta["params"]: + if mode_params: # 축별 빈도 요약 (짧게) bits = [] for k, meta in list(mode_meta["freq"].items())[:12]: bits.append(f"{k}={meta['value']}({meta['count']}/{meta['of']})") lg.info("📊 [mode] params(일부): %s", " | ".join(bits)) + if "ratchet_tiers" in mode_params: + lg.info("📊 [mode] ratchet_tiers 재조립=%r", mode_params.get("ratchet_tiers")) # 실측 전에 먼저 JSON에 박아 둠 (실측 중 죽어도 mode_combo.params 는 남음) out_data["mode_combo"] = report @@ -195,9 +205,9 @@ def enrich_out_data_with_mode_combo( except Exception as exc: lg.warning("⚠️ mode_combo 부분저장 실패: %s", exc) - if evaluate_fn is not None and mode_meta["params"]: + if evaluate_fn is not None and mode_params: try: - bt = evaluate_fn(dict(mode_meta["params"])) + bt = evaluate_fn(dict(mode_params)) report["backtest"] = _bt_summary(bt) if report["backtest"].get("ok"): lg.info( @@ -215,21 +225,54 @@ def enrich_out_data_with_mode_combo( if best_pnl is not None and report.get("backtest") and report["backtest"].get("ok"): mode_pnl = float(report["backtest"]["total_pnl"] or 0) + best_wr = float(res0.get("win_rate") or 0) if res0 else None + best_pf = float(res0.get("pf") or 0) if res0 and res0.get("pf") is not None else None + mode_wr = report["backtest"].get("win_rate") + mode_pf = report["backtest"].get("pf") report["vs_best"] = { "best_pnl": best_pnl, "best_trades": best_tr, + "best_wr": best_wr, + "best_pf": best_pf, "mode_pnl": mode_pnl, "mode_trades": report["backtest"].get("total_trades"), + "mode_wr": float(mode_wr) if mode_wr is not None else None, + "mode_pf": float(mode_pf) if mode_pf is not None else None, "delta_pnl": round(mode_pnl - best_pnl, 2), + "delta_wr": ( + round(float(mode_wr) - float(best_wr), 2) + if mode_wr is not None and best_wr is not None + else None + ), + "delta_pf": ( + round(float(mode_pf) - float(best_pf), 2) + if mode_pf is not None and best_pf is not None + else None + ), } lg.info( - "📐 [mode vs #1] best_pnl=%s (%s건) | mode_pnl=%s (%s건) | Δ=%+.0f", + "📐 [mode vs #1] best_pnl=%s (%s건 wr=%.1f%% pf=%s) | " + "mode_pnl=%s (%s건 wr=%.1f%% pf=%s) | Δpnl=%+.0f Δwr=%+.1f", best_pnl, best_tr, + float(best_wr or 0), + best_pf, mode_pnl, report["backtest"].get("total_trades"), + float(mode_wr or 0), + mode_pf, mode_pnl - best_pnl, + (float(mode_wr) - float(best_wr)) if mode_wr is not None and best_wr is not None else 0.0, ) out_data["mode_combo"] = report + # 다단트레일 추천 (탐색 축 아님 — 미리보기/apply 전용) + try: + from kis_trader.backtest.optuna_daily_trail_recommend import ( + attach_daily_trail_recommend, + ) + + attach_daily_trail_recommend(out_data, log=lg) + except Exception as exc: + lg.warning("⚠️ daily_trail_recommend 첨부 실패: %s", exc) return out_data diff --git a/kis_trader/backtest/optuna_momentum.py b/kis_trader/backtest/optuna_momentum.py index 2c84c9b..ec10ece 100644 --- a/kis_trader/backtest/optuna_momentum.py +++ b/kis_trader/backtest/optuna_momentum.py @@ -17,8 +17,19 @@ from database import TradeDB from kis_trader.backtest import momentum_backtest_common as mbc from kis_trader.backtest import scalping_backtest_common as sbc from kis_trader.backtest.optuna_search_space import momentum_grid_axis_keys, suggest_momentum_params +from kis_trader.backtest.optuna_momentum_tpe_space import ( + momentum_tpe_axis_keys, + suggest_momentum_params_tpe, +) from kis_trader.backtest.optuna_mode_combo import enrich_out_data_with_mode_combo -from kis_trader.backtest.optuna_common import announce_optuna_json_path, release_shared_tick_store +from kis_trader.backtest.optuna_common import ( + announce_optuna_json_path, + build_optuna_result_tiers, + pick_gated_apply_trial, + release_shared_tick_store, + set_optuna_trial_stability_attrs, + stability_fields_from_trial_attrs, +) from kis_trader.backtest.param_search_cli_common import ( apply_session_to_fixed, combo_passes_search_filters, @@ -66,6 +77,9 @@ class MomentumSearchContext: end_key: str cache_holder: Dict[str, Any] = field(default_factory=dict) shared_tick_store: Any = None # ws_ticks 공유메모리 핸들 (종료 시 unlink) + market: str = "KR" + # 종목 cfg Optuna: 1종목 유니버스 (없으면 전역) + symbol: str = "" def prepare_momentum_search_context( @@ -80,13 +94,39 @@ def prepare_momentum_search_context( max_stocks: Optional[int] = None, total_budget_krw: Optional[float] = None, orderbook_filter: str = "off", + market: str = "KR", + codes_filter: Optional[List[str]] = None, + symbol: Optional[str] = None, + history_source: Optional[str] = None, ) -> Optional[MomentumSearchContext]: - grids = _momentum_grids() - if mode not in grids: - logger.error("❌ 모멘텀 mode: %s (fast/exit/rr/coarse/fine/wide/full)", mode) + mk = (market or "KR").strip().upper() or "KR" + sym = str(symbol or "").strip().upper() + filt: Optional[List[str]] = None + if codes_filter: + filt = [str(c).strip().upper() for c in codes_filter if str(c).strip()] + elif sym: + filt = [sym] + grids = _momentum_grids(market=mk if mk in ("US", "KR") else "KR") + # tpe = 연속 Optuna 전용 (Grid 메뉴 미사용). 기존 fast/fine/… 는 그대로. + if mode == "tpe": + grid: Dict[str, Any] = {} + elif mode not in grids: + logger.error( + "❌ 모멘텀 mode: %s (fast/exit/rr/coarse/fine/wide/full/tpe)", + mode, + ) return None + else: + grid = grids[mode] - base_fixed = _mom_fixed_defaults() + base_fixed = _mom_fixed_defaults(market=mk if mk in ("US", "KR") else "KR") + if mode == "tpe": + # 연속 탐색도 HTS skip 스윕 금지 (KR=false 고정 / US=True 고정 — HTS 없음) + if mk != "US": + base_fixed["skip_hts_scan_dupes"] = False + logger.info( + "📌 mode=tpe — 연속(float/int) 탐색 (Grid categorical 미사용, TPE 가 구간 축소)" + ) apply_session_to_fixed(base_fixed, time_start_hm=time_start_hm, time_end_hm=time_end_hm) from kis_trader.engine.momentum_tick_replay import ( @@ -95,17 +135,34 @@ def prepare_momentum_search_context( ) base_fixed["backtest_use_tick_entry"] = _te(None) base_fixed["backtest_use_tick_exit"] = _tx(None) + # 절대규칙: Optuna OHLC 폴백으로 숫자 변조 금지 + base_fixed["backtest_tick_fallback_ohlc"] = False _ob_mode = (orderbook_filter or "off").strip().lower() + if mk == "US": + # 해외: 호가 없음 · HTS 없음 · 자정 넘김 · 매매세 0 기본 + _ob_mode = "off" + use_fallback_universe = True + base_fixed["_session_wrap_midnight"] = True + # skip_hts 는 _overlay_us 에서 True (HTS 유니버스 없음) + base_fixed["market"] = "US" + # fee/tax 는 _overlay_us 가 UI% 로 이미 세팅. 여기서 비율로 덮어쓰지 않음. + # 환전 편도 비율은 엔진 파라미터로 유지 (_ui_to_engine 이 나누지 않음). + try: + from kis_trader.engine.us_momentum_env_keys import us_momentum_trading_cost_rates + base_fixed["fx_fee_rate"] = float(us_momentum_trading_cost_rates()["fx_fee_rate"]) + except Exception: + base_fixed["fx_fee_rate"] = float(get_env_float("US_MOMENTUM_FX_FEE_RATE", 0.0005)) if _ob_mode == "off": base_fixed["_orderbook_filter_enabled"] = False elif _ob_mode == "on": base_fixed["_orderbook_filter_enabled"] = True ob_filter_on = bool(base_fixed.get("_orderbook_filter_enabled")) or _ob_mode == "auto" logger.info( - "📌 호가필터: %s (%s)", + "📌 호가필터: %s (%s) market=%s", _ob_mode.upper(), "적용" if ob_filter_on else "스킵 — 코어 파라미터 순수 탐색", + mk, ) db = TradeDB() @@ -115,11 +172,25 @@ def prepare_momentum_search_context( finally: db.close() - fee_rate, sell_tax, slot_from_env = sbc.fee_and_slot_from_env(env_row, strategy="MOMENTUM") + fee_rate, sell_tax, slot_from_env = sbc.fee_and_slot_from_env( + env_row, strategy="US_MOMENTUM" if mk == "US" else "MOMENTUM", + ) + if mk == "US": + # overlay UI% → 비율 (attach_scalp_trade_pnl / portfolio) + fee_rate = float(base_fixed.get("fee_rate", 0.25)) / 100.0 + sell_tax = float(base_fixed.get("sell_tax", 0.00206)) / 100.0 + if fee_rate > 1.0: + fee_rate = fee_rate / 100.0 + if sell_tax > 1.0: + sell_tax = sell_tax / 100.0 + # 종목 cfg Optuna: 유니버스 1종 → 동시보유 1 고정 (전역 포트와 혼동 방지) + _ms_arg = max_stocks + if filt and len(filt) == 1 and _ms_arg is None: + _ms_arg = 1 portfolio = sbc.resolve_scalp_portfolio_params( - env_row, None, strategy="MOMENTUM", + env_row, None, strategy="US_MOMENTUM" if mk == "US" else "MOMENTUM", slot_money=slot_money if slot_money is not None else slot_from_env, - max_stocks=max_stocks, + max_stocks=_ms_arg, total_budget_krw=total_budget_krw, ) slot_money_f = float(portfolio["slot_money"]) @@ -131,14 +202,24 @@ def prepare_momentum_search_context( ) logger.info( f"💼 포트폴리오: 1회 {slot_money_f:,.0f}원 | 동시 {max_stocks_i}종 | " - f"총한도 {total_budget_f:,.0f}원 | 매매 {format_session_hm(base_fixed)}" + f"총한도 {total_budget_f:,.0f}원 | 매매 {format_session_hm(base_fixed)} | market={mk}" ) - codes_candles = _load_candles_for_search(start, end, base_fixed.get("rsi_period", 3)) + codes_candles = _load_candles_for_search( + start, end, base_fixed.get("rsi_period", 3), + market=mk if mk in ("US", "KR") else None, + codes_filter=filt, + ) if not codes_candles: - logger.error("❌ 캔들 데이터 없음") + logger.error("❌ 캔들 데이터 없음 (market=%s filt=%s)", mk, filt) return None - logger.info("✅ 데이터 로드: %s종목", len(codes_candles)) + if filt and len(codes_candles) == 1: + logger.info( + "✅ 종목 Optuna 유니버스: %s (1종 · market=%s)", + next(iter(codes_candles.keys())), mk, + ) + else: + logger.info("✅ 데이터 로드: %s종목 (market=%s)", len(codes_candles), mk) start_key = (start.replace("-", "") + "0000") if start else "202601010000" end_key = (end.replace("-", "") + "2359") if end else "999912312359" @@ -147,22 +228,37 @@ def prepare_momentum_search_context( universe_by_slot = None fallback_sim_interval = 5 - if not use_fallback_universe and start_ymd and end_ymd: + if mk == "US": + # 영구구독 US — HTS history 없음 · 시뮬 유니버스 스킵(봉에 있는 US 종목 전부) + use_fallback_universe = True + universe_by_slot = None + base_fixed["scan_interval_min"] = 1 + logger.info("📌 US 모멘텀 Optuna — 영구구독/봉 유니버스 (HTS·시뮬 미사용)") + elif not use_fallback_universe and start_ymd and end_ymd: try: from kis_trader.backtest.momentum_backtest_common import resolve_momentum_universe + from kis_trader.backtest.universe_history_source import ( + resolve_backtest_universe_history_source, + ) + + # scan_at 타임라인과 슬롯 dict 가 같은 이력소스(키움/LS)를 쓰도록 스태시 + _hs = resolve_backtest_universe_history_source(history_source) + base_fixed["_universe_history_source"] = _hs history, src, n_bins, _scan_iv, timing = resolve_momentum_universe( start_ymd, end_ymd, use_saved_history=True, strategy_id="MOMENTUM", + history_source=_hs, ) if history: universe_by_slot = history avg = sum(len(v) for v in history.values()) / max(1, n_bins) logger.info( - "✅ 유니버스: MOMENTUM 이력 | %s분봉 · 평균 %.1f종목", n_bins, avg, + "✅ 유니버스: MOMENTUM 이력 src=%s | %s분봉 · 평균 %.1f종목", + src, n_bins, avg, ) except Exception as exc: logger.debug("유니버스 이력 스킵: %s", exc) - if universe_by_slot is None: + if universe_by_slot is None and mk != "US": universe_top_n = int(os.environ.get("UPDATE_UNIVERSE_TOP_N", "20")) universe_min_score = float(os.environ.get("UPDATE_UNIVERSE_MIN_SCORE", "4.0")) universe_by_slot = me.build_universe_simulation_momentum( @@ -173,28 +269,30 @@ def prepare_momentum_search_context( ) base_fixed["scan_interval_min"] = fallback_sim_interval logger.info("📌 유니버스: 모멘텀 시뮬 fallback (%d분)", fallback_sim_interval) - else: + elif universe_by_slot is not None: base_fixed["scan_interval_min"] = 1 # DB 전일봉 없으면 키움 REST 1회/종목 → 메모리 prepend (실매 갭보정 정합, DB 미기록) - try: - from kis_trader.backtest.momentum_backtest_common import ( - inject_momentum_rest_warmup_memory, - ) - _rw = inject_momentum_rest_warmup_memory( - codes_candles, - start_key, - universe_by_slot=universe_by_slot, - ) - if int(_rw.get("ok") or 0) > 0 or int(_rw.get("need") or 0) > 0: - logger.info( - "📡 REST 웜업: need=%s ok=%s fail=%s bars=%s", - _rw.get("need"), _rw.get("ok"), _rw.get("fail"), _rw.get("bars"), + # 해외 US: 키움 분봉 불가 → REST 웜업 스킵 + if mk != "US": + try: + from kis_trader.backtest.momentum_backtest_common import ( + inject_momentum_rest_warmup_memory, ) - except Exception as exc: - logger.warning("⚠️ REST 웜업 스킵: %s", exc) + _rw = inject_momentum_rest_warmup_memory( + codes_candles, + start_key, + universe_by_slot=universe_by_slot, + ) + if int(_rw.get("ok") or 0) > 0 or int(_rw.get("need") or 0) > 0: + logger.info( + "📡 REST 웜업: need=%s ok=%s fail=%s bars=%s", + _rw.get("need"), _rw.get("ok"), _rw.get("fail"), _rw.get("bars"), + ) + except Exception as exc: + logger.warning("⚠️ REST 웜업 스킵: %s", exc) - grid = grids[mode] + # grid 는 상단에서 mode별 설정 (tpe=빈 dict). 여기서 grids[mode] 재조회하면 tpe KeyError. _ob_axes = ("max_spread_pct", "min_bid_ask_ratio", "ask_max_mult") _ob_sweeping = any(len(set(grid.get(k) or [])) > 1 for k in _ob_axes) if ob_filter_on and _ob_sweeping: @@ -225,8 +323,10 @@ def prepare_momentum_search_context( from kis_trader.backtest.momentum_tick_loader import load_momentum_ticks_by_code ticks_by_code, tick_rows = load_momentum_ticks_by_code( _snap_db, start_key, end_key, set(codes_candles.keys()), + market=mk, ) - logger.info("✅ ws_ticks %s건", f"{tick_rows:,}") + _tick_tbl = "ws_ticks_us" if mk == "US" else "ws_ticks" + logger.info("✅ %s %s건 (market=%s)", _tick_tbl, f"{tick_rows:,}", mk) finally: _snap_db.close() @@ -270,11 +370,15 @@ def prepare_momentum_search_context( total_budget_krw=total_budget_f, period_days=period_days, portfolio=portfolio, - grid_keys=momentum_grid_axis_keys(mode), + grid_keys=( + momentum_tpe_axis_keys() if mode == "tpe" else momentum_grid_axis_keys(mode, market=mk) + ), start_key=start_key, end_key=end_key, cache_holder=cache_holder, shared_tick_store=shared_tick_store, + market=mk, + symbol=(sym or (filt[0] if filt and len(filt) == 1 else "")), ) @@ -282,7 +386,8 @@ def _make_sampler(name: str, seed: Optional[int]): n = (name or "tpe").strip().lower() if n == "random": return RandomSampler(seed=seed) - return TPESampler(seed=seed, multivariate=True) + # multivariate TPE + 조건부 suggest 시 independent sampling 경고가 trial마다 폭주 → 억제 + return TPESampler(seed=seed, multivariate=True, warn_independent_sampling=False) def _momentum_objective_value(result: Dict[str, Any], sort_by: str) -> float: @@ -320,7 +425,12 @@ def run_momentum_optuna( ) def objective(trial: optuna.Trial) -> float: - combo = suggest_momentum_params(trial, ctx.mode) + if ctx.mode == "tpe": + combo = suggest_momentum_params_tpe( + trial, market=getattr(ctx, "market", "KR") or "KR", + ) + else: + combo = suggest_momentum_params(trial, ctx.mode, market=getattr(ctx, "market", "KR") or "KR") result = evaluate_momentum_param_combo( combo, base_fixed=ctx.base_fixed, @@ -356,6 +466,7 @@ def run_momentum_optuna( trial.set_user_attr("score", float(obj if sort_by == "score" else _momentum_objective_value(result, "score"))) trial.set_user_attr("total_trades", int(result["total_trades"])) trial.set_user_attr("merged_json", json.dumps(result.get("merged_params") or {}, ensure_ascii=False)) + set_optuna_trial_stability_attrs(trial, result) return float(obj) logger.info( @@ -389,19 +500,10 @@ def run_momentum_optuna( "score": float(trial.user_attrs.get("score") or 0), "optuna_trial_number": trial.number, } + row.update(stability_fields_from_trial_attrs(trial)) passing.append(row) - if sort_by == "score": - passing.sort(key=lambda r: (-r["score"], -r["total_pnl"], -r["win_rate"])) - elif sort_by == "win_rate": - passing.sort(key=lambda r: (-r["win_rate"], -r["total_pnl"])) - else: - passing.sort(key=lambda r: (-r["total_pnl"], -r["win_rate"])) - - profitable = [r for r in passing if r["total_pnl"] > 0] - if profitable: - passing = profitable - + tiers = build_optuna_result_tiers(passing, sort_by=sort_by) out_data = { "engine": "optuna", "strategy": "momentum", @@ -425,16 +527,33 @@ def run_momentum_optuna( "optuna_best_value": study.best_value if study.best_trial else None, "optuna_best_trial_number": study.best_trial.number if study.best_trial else None, "elapsed_sec": round(elapsed, 1), - "results": passing[:5000], + **tiers, } ts = datetime.now().strftime("%Y%m%d_%H%M%S") - out_path = os.path.join(_results_dir_for_write(), f"optuna_momentum_{ctx.mode}_{ts}.json") + _mk = str(getattr(ctx, "market", "") or "").strip().upper() + _sym = str(getattr(ctx, "symbol", "") or "").strip().upper() + if _mk == "US" and _sym: + _fname = f"optuna_us_momentum_{_sym}_{ctx.mode}_{ts}.json" + elif _mk == "US": + _fname = f"optuna_us_momentum_{ctx.mode}_{ts}.json" + else: + _fname = f"optuna_momentum_{ctx.mode}_{ts}.json" + out_path = os.path.join(_results_dir_for_write(), _fname) + out_data["strategy"] = "us_momentum" if _mk == "US" else "momentum" + out_data["market"] = _mk or "KR" + if _sym: + out_data["symbol"] = _sym + out_data["_apply_symbol"] = _sym # 최빈 실측 전에 먼저 저장·경로 고지 (실측이 길어도 바로 파일 열 수 있게) with open(out_path, "w", encoding="utf-8") as f: json.dump(out_data, f, indent=2, ensure_ascii=False) announce_optuna_json_path( - out_path, strategy="momentum", mode=ctx.mode, note="중간저장(mode 전)", log=logger, + out_path, + strategy=("us_momentum" if _mk == "US" else "momentum"), + mode=ctx.mode, + note="중간저장(mode 전)", + log=logger, ) def _eval_mode(combo: Dict[str, Any]) -> Optional[Dict[str, Any]]: @@ -464,11 +583,17 @@ def run_momentum_optuna( end_key=ctx.end_key, ) + _ann_strat = "us_momentum" if _mk == "US" else "momentum" + def _save_partial(_data: Dict[str, Any]) -> None: with open(out_path, "w", encoding="utf-8") as f: json.dump(_data, f, indent=2, ensure_ascii=False) announce_optuna_json_path( - out_path, strategy="momentum", mode=ctx.mode, note="mode_combo params 저장(실측 전)", log=logger, + out_path, + strategy=_ann_strat, + mode=ctx.mode, + note="mode_combo params 저장(실측 전)", + log=logger, ) enrich_out_data_with_mode_combo( @@ -481,7 +606,7 @@ def run_momentum_optuna( with open(out_path, "w", encoding="utf-8") as f: json.dump(out_data, f, indent=2, ensure_ascii=False) announce_optuna_json_path( - out_path, strategy="momentum", mode=ctx.mode, note="최종 JSON", log=logger, + out_path, strategy=_ann_strat, mode=ctx.mode, note="최종 JSON", log=logger, ) study._kis_export_path = out_path # type: ignore[attr-defined] return study @@ -491,15 +616,74 @@ def run_momentum_optuna( def apply_best_momentum_trial(study: optuna.Study) -> bool: - if not study.best_trial or study.best_value <= _FAIL_OBJECTIVE + 1: - logger.warning("⚠️ 적용할 best trial 없음") + # 탐색 best(objective)가 아니라 report_gates 통과 후보만 적용 + trial = pick_gated_apply_trial(study, sort_by="score", fail_objective=_FAIL_OBJECTIVE) + if trial is None: + logger.warning( + "⚠️ 사후게이트(results_gated) 통과 trial 없음 — DB 미적용 " + "(탐색 min_wr/pf=0 이어도 apply 는 승률·PF 하한 필요)" + ) return False - pnl = float(study.best_trial.user_attrs.get("total_pnl") or 0) + pnl = float(trial.user_attrs.get("total_pnl") or 0) if pnl <= 0: - logger.warning("⚠️ Best trial 총손익 ≤ 0 — DB 미적용") + logger.warning("⚠️ gated trial 총손익 ≤ 0 — DB 미적용") return False - merged_raw = study.best_trial.user_attrs.get("merged_json") or "{}" + merged_raw = trial.user_attrs.get("merged_json") or "{}" merged = json.loads(merged_raw) apply_params_to_db(merged) - logger.info("🚀 [Optuna apply-best] momentum trial #%d → env_config", study.best_trial.number) + logger.info("🚀 [Optuna apply-best] momentum gated trial #%d → env_config", trial.number) + try: + from kis_trader.backtest.optuna_daily_trail_recommend import ( + apply_daily_trail_recommend_from_optuna_json, + ) + apply_daily_trail_recommend_from_optuna_json( + getattr(study, "_kis_export_path", None), + strategy="momentum", + log=logger, + ) + except Exception as exc: + logger.warning("⚠️ 다단트레일 추천 반영 스킵: %s", exc) + return True + + +def apply_best_us_momentum_trial(study: optuna.Study, *, symbol: str = "") -> bool: + """해외 모멘텀 — 전역 config_us_momentum 또는 종목 stock_config. + + symbol 있으면 ``us_momentum_stock_config`` 행만 갱신(전역·다단트레일 미오염). + """ + from kis_trader.backtest.param_search_momentum import apply_params_to_db_us + + sym = str(symbol or "").strip().upper() + trial = pick_gated_apply_trial(study, sort_by="score", fail_objective=_FAIL_OBJECTIVE) + if trial is None: + logger.warning("⚠️ us_momentum gated trial 없음 — DB 미적용") + return False + pnl = float(trial.user_attrs.get("total_pnl") or 0) + if pnl <= 0: + logger.warning("⚠️ us_momentum gated trial 총손익 ≤ 0 — DB 미적용") + return False + merged_raw = trial.user_attrs.get("merged_json") or "{}" + merged = json.loads(merged_raw) + apply_params_to_db_us(merged, symbol=sym) + if sym: + logger.info( + "🚀 [Optuna apply-best] us_momentum gated #%d → stock_config %s", + trial.number, sym, + ) + return True + try: + from kis_trader.backtest.optuna_daily_trail_recommend import ( + apply_daily_trail_recommend_from_optuna_json, + ) + apply_daily_trail_recommend_from_optuna_json( + getattr(study, "_kis_export_path", None), + strategy="us_momentum", + log=logger, + ) + except Exception as exc: + logger.warning("⚠️ us_momentum 다단트레일 추천 반영 스킵: %s", exc) + logger.info( + "🚀 [Optuna apply-best] us_momentum gated trial #%d → config_us_momentum", + trial.number, + ) return True diff --git a/kis_trader/backtest/optuna_momentum_tpe_space.py b/kis_trader/backtest/optuna_momentum_tpe_space.py new file mode 100644 index 0000000..f599eb4 --- /dev/null +++ b/kis_trader/backtest/optuna_momentum_tpe_space.py @@ -0,0 +1,154 @@ +#!/usr/bin/env python3 +""" +optuna_momentum_tpe_space.py — 모멘텀 Optuna **연속(TPE) 탐색 공간** +============================================================================== +기존 ``_momentum_grids()`` / ``suggest_categorical`` 경로는 **건드리지 않음**. + +사용: + python3 kis_trader/backtest/param_search_optuna.py \\ + --strategy momentum --mode tpe --trials 200 ... + +TPE 가 trial 을 쌓으며 좋은 구간을 좁힘 (메뉴판 이산 스윕이 아님). +``skip_hts_scan_dupes`` 는 KR=False / US=True 고정. +금액(슬롯·손절액·min_price) 축은 TPE 에 없음 — 특히 US 고정 유니버스는 DB 슬롯만. +""" +from __future__ import annotations + +from typing import Any, Dict, List + +import optuna + +from kis_trader.backtest.optuna_tpe_common import ( + RATCHET_TPE_AXIS_KEYS, + r1, + r2, + suggest_ratchet_tiers_pct, +) +from kis_trader.backtest.param_search_momentum import _momentum_combo_grid_valid + +# 연속 축 키 목록 (JSON/힌트용) +# 매수 시간창(time_*) 은 TPE 제외 — 운영 DB 고정(다단래칫·청산축만 탐색). +# 래칫: 숫자축(on/n/gain/cut) + 조립 문자열 ratchet_tiers +_MOMENTUM_BASE_KEYS: List[str] = [ + "mom_rsi_min", + "mom_rsi_max", + "mom_vol_mult", + "mom_vol_win", + "tp_pct", + "tp_max_pct", + "sl_pct", + "shoulder_min_high", + "shoulder_cut_pct", + "trail_pct", + "trail_arm_pct", + "max_hold_bars", + "cooldown_min", + "max_daily", + "max_daily_chg", + "mom_max_from_open_pct", + "min_margin", + "chase_lookback_min", + "pullback_lookback_min", + "pullback_min_pct", + "pullback_max_pct", + "setup_vol_max_mult", + "setup_bear_bars_min", +] +MOMENTUM_TPE_AXIS_KEYS: List[str] = list(_MOMENTUM_BASE_KEYS) + list(RATCHET_TPE_AXIS_KEYS) + + +def momentum_tpe_axis_keys() -> List[str]: + return list(MOMENTUM_TPE_AXIS_KEYS) + + +def suggest_momentum_params_tpe( + trial: optuna.Trial, + *, + market: str = "KR", +) -> Dict[str, Any]: + """ + 연속 구간 suggest — TPE 가 좁혀 감. + UI% 단위 (evaluate / apply 경로와 동일). + + market=US: 금액(슬롯·손절액·min_price) 축 없음 — 고정 유니버스·DB 슬롯만. + """ + mk = (market or "KR").strip().upper() or "KR" + combo: Dict[str, Any] = {} + + combo["mom_rsi_min"] = trial.suggest_int("mom_rsi_min", 45, 65) + combo["mom_rsi_max"] = trial.suggest_int("mom_rsi_max", 70, 100) + if combo["mom_rsi_min"] >= combo["mom_rsi_max"]: + raise optuna.TrialPruned("rsi_min >= rsi_max") + + combo["mom_vol_mult"] = r2(trial.suggest_float("mom_vol_mult", 1.0, 10.0, step=0.1)) + combo["mom_vol_win"] = trial.suggest_int("mom_vol_win", 3, 10) + + combo["tp_pct"] = r2(trial.suggest_float("tp_pct", 1.5, 15.0, step=0.1)) + combo["tp_max_pct"] = r2(trial.suggest_float("tp_max_pct", 2.0, 20.0, step=0.5)) + if combo["tp_max_pct"] + 1e-9 < combo["tp_pct"]: + raise optuna.TrialPruned("tp_max < tp") + + combo["sl_pct"] = r2(trial.suggest_float("sl_pct", 1.0, 6.0, step=0.1)) + + combo["shoulder_min_high"] = r2( + trial.suggest_float("shoulder_min_high", 0.3, 5.0, step=0.1), + ) + combo["shoulder_cut_pct"] = r2( + trial.suggest_float("shoulder_cut_pct", 0.05, 0.8, step=0.05), + ) + combo["trail_pct"] = r2(trial.suggest_float("trail_pct", 0.0, 4.0, step=0.1)) + combo["trail_arm_pct"] = r2( + trial.suggest_float("trail_arm_pct", 0.0, 5.0, step=0.1), + ) + + combo["max_hold_bars"] = trial.suggest_int("max_hold_bars", 0, 180, step=5) + combo["cooldown_min"] = r1(trial.suggest_float("cooldown_min", 0.0, 30.0, step=1.0)) + combo["max_daily"] = trial.suggest_int("max_daily", 5, 100, step=5) + combo["max_daily_chg"] = r1( + trial.suggest_float("max_daily_chg", 15.0, 60.0, step=1.0), + ) + combo["mom_max_from_open_pct"] = r1( + trial.suggest_float("mom_max_from_open_pct", 15.0, 60.0, step=1.0), + ) + combo["min_margin"] = r2(trial.suggest_float("min_margin", 0.1, 2.0, step=0.1)) + + combo["chase_lookback_min"] = trial.suggest_int("chase_lookback_min", 5, 20) + combo["pullback_lookback_min"] = trial.suggest_int("pullback_lookback_min", 8, 30) + combo["pullback_min_pct"] = r2( + trial.suggest_float("pullback_min_pct", 0.1, 1.0, step=0.1), + ) + combo["pullback_max_pct"] = r2( + trial.suggest_float("pullback_max_pct", 1.0, 6.0, step=0.1), + ) + if combo["pullback_min_pct"] >= combo["pullback_max_pct"]: + raise optuna.TrialPruned("pullback min >= max") + + combo["setup_vol_max_mult"] = r2( + trial.suggest_float("setup_vol_max_mult", 0.3, 1.5, step=0.1), + ) + combo["setup_bear_bars_min"] = trial.suggest_int("setup_bear_bars_min", 0, 3) + + # 래칫: 숫자축 → \"5:2,10:1\" 조립 (빈칸=OFF) + combo.update( + suggest_ratchet_tiers_pct( + trial, + off_token="", + n_max=3, + gain_low=2.0, + gain_high=15.0, + gain_step=0.5, + cut_low=0.5, + cut_high=3.0, + cut_step=0.1, + ), + ) + + # 운영 고정 — 그리드 스윕 금지 (금액·슬롯·min_price 축 없음) + if mk == "US": + combo["skip_hts_scan_dupes"] = True # HTS 없음 + else: + combo["skip_hts_scan_dupes"] = False + + if not _momentum_combo_grid_valid(combo): + raise optuna.TrialPruned("momentum invalid combo") + return combo diff --git a/kis_trader/backtest/optuna_scalping.py b/kis_trader/backtest/optuna_scalping.py index cd07f3a..f57b68a 100644 --- a/kis_trader/backtest/optuna_scalping.py +++ b/kis_trader/backtest/optuna_scalping.py @@ -20,8 +20,19 @@ from kis_trader.backtest.breakout_tick_loader import ( tick_coverage_stats, ) from kis_trader.backtest.optuna_search_space import scalp_grid_axis_keys, suggest_scalp_params +from kis_trader.backtest.optuna_scalping_tpe_space import ( + scalp_tpe_axis_keys, + suggest_scalp_params_tpe, +) from kis_trader.backtest.optuna_mode_combo import enrich_out_data_with_mode_combo -from kis_trader.backtest.optuna_common import announce_optuna_json_path, release_shared_tick_store +from kis_trader.backtest.optuna_common import ( + announce_optuna_json_path, + build_optuna_result_tiers, + pick_gated_apply_trial, + release_shared_tick_store, + set_optuna_trial_stability_attrs, + stability_fields_from_trial_attrs, +) from kis_trader.backtest.param_search_cli_common import ( apply_session_to_fixed, combo_passes_search_filters, @@ -87,13 +98,25 @@ def prepare_scalp_search_context( max_stocks: Optional[int] = None, total_budget_krw: Optional[float] = None, orderbook_filter: str = "off", + history_source: Optional[str] = None, ) -> Optional[ScalpSearchContext]: grids = _scalp_grids() - if mode not in grids: - logger.error("❌ 스캘핑 mode: %s (fast/trigger/exit/coarse/fine/full/wide)", mode) + if mode == "tpe": + grid_axes: Dict[str, Any] = {} + logger.info( + "📌 mode=tpe — 연속(float/int) 탐색 (Grid categorical 미사용, TPE 가 구간 축소)" + ) + elif mode not in grids: + logger.error( + "❌ 스캘핑 mode: %s (fast/trigger/exit/coarse/fine/full/wide/tpe)", mode, + ) return None + else: + grid_axes = grids[mode] base_fixed = _fixed_defaults() + if mode == "tpe": + base_fixed["skip_hts_scan_dupes"] = False apply_session_to_fixed(base_fixed, time_start_hm=time_start_hm, time_end_hm=time_end_hm) _ob_mode = (orderbook_filter or "off").strip().lower() @@ -135,36 +158,62 @@ def prepare_scalp_search_context( format_session_hm(base_fixed), ) - grid_axes = grids[mode] - rsi_cands = grid_axes.get("rsi_period") or [base_fixed.get("rsi_period") or 3] + # grid_axes 는 상단에서 mode별 설정 (tpe=빈 dict). grids[mode] 재조회 금지. + rsi_cands = grid_axes.get("rsi_period") or [base_fixed.get("rsi_period") or 7] try: rsi_period = max(int(float(x)) for x in rsi_cands) except (TypeError, ValueError): - rsi_period = int(base_fixed.get("rsi_period") or 3) - codes_candles = _load_candles_for_search(start, end, rsi_period) + rsi_period = int(base_fixed.get("rsi_period") or 7) + if mode == "tpe": + # TPE 상한까지 RSI 로드 (3~14) + rsi_period = max(rsi_period, 14) + + from kis_trader.backtest.universe_history_source import ( + resolve_backtest_universe_history_source, + ) + + _hs = resolve_backtest_universe_history_source(history_source) + base_fixed["_universe_history_source"] = _hs + + codes_candles = _load_candles_for_search( + start, end, rsi_period, history_source=_hs, + ) if not codes_candles: logger.error("❌ 캔들 데이터 없음") return None - logger.info("✅ 데이터 로드: %s종목", len(codes_candles)) + logger.info("✅ 데이터 로드: %s종목 (history=%s)", len(codes_candles), _hs) - # ── 틱재생(ws_ticks) — 웹·실매 정합 (돌파/모멘텀 Optuna 와 동일) ── + # ── 틱재생 — history_source=ls 이면 ls_ws_ticks ── start_key = (start.replace("-", "") + "0000") if start else "202601010000" end_key = (end.replace("-", "") + "2359") if end else "999912312359" ticks_by_code: Dict[str, Any] = {} tick_rows = 0 tick_backtest_meta: Dict[str, Any] = {} engine_probe = _ui_to_engine_params(base_fixed) + engine_probe["backtest_tick_fallback_ohlc"] = False + base_fixed["backtest_tick_fallback_ohlc"] = False if sbc._scalp_backtest_wants_ticks(engine_probe): _tick_db = TradeDB() try: - ticks_by_code, tick_rows = load_breakout_ticks_by_code( - _tick_db, start_key, end_key, set(codes_candles.keys()), - ) + if _hs in ("ls", "ls_condition", "ls_ws"): + from kis_trader.backtest.ls_history_loaders import load_ls_ticks_by_code + + ticks_by_code, tick_rows = load_ls_ticks_by_code( + _tick_db, start_key, end_key, set(codes_candles.keys()), + ) + _tick_lbl = "ls_ws_ticks" + else: + ticks_by_code, tick_rows = load_breakout_ticks_by_code( + _tick_db, start_key, end_key, set(codes_candles.keys()), + ) + _tick_lbl = "ws_ticks" tick_backtest_meta = tick_coverage_stats(codes_candles, ticks_by_code) tick_backtest_meta["ws_tick_rows_loaded"] = tick_rows + tick_backtest_meta["tick_table"] = _tick_lbl cov = tick_backtest_meta.get("tick_bar_coverage_pct", 0) logger.info( - "✅ ws_ticks %s건 | 분봉 커버리지 %s%% (%s/%s종목)", + "✅ %s %s건 | 분봉 커버리지 %s%% (%s/%s종목)", + _tick_lbl, f"{tick_rows:,}", cov, tick_backtest_meta.get("tick_codes_with_data", 0), @@ -210,13 +259,17 @@ def prepare_scalp_search_context( if not use_fallback_universe and start_ymd and end_ymd: history, src, n_slots, scan_iv = sbc.resolve_scalp_universe( start_ymd, end_ymd, use_saved_history=True, strategy_id="SCALP", + history_source=_hs, ) if history: universe_by_slot = history universe_source = src base_fixed["scan_interval_min"] = scan_iv avg = sum(len(v) for v in history.values()) / max(1, n_slots) - logger.info("✅ 유니버스: SCALP 이력 | %d슬롯 · 평균 %.1f종목", n_slots, avg) + logger.info( + "✅ 유니버스: SCALP 이력 src=%s | %d슬롯 · 평균 %.1f종목", + src, n_slots, avg, + ) if universe_by_slot is None: universe_top_n = int(os.environ.get("UPDATE_UNIVERSE_TOP_N", "20")) @@ -280,7 +333,7 @@ def prepare_scalp_search_context( total_budget_krw=total_budget_f, period_days=period_days, portfolio=portfolio, - grid_keys=scalp_grid_axis_keys(mode), + grid_keys=scalp_tpe_axis_keys() if mode == "tpe" else scalp_grid_axis_keys(mode), start_key=start_key, end_key=end_key, ticks_by_code=ticks_by_code, @@ -298,7 +351,8 @@ def _make_sampler(name: str, seed: Optional[int]): n = (name or "tpe").strip().lower() if n == "random": return RandomSampler(seed=seed) - return TPESampler(seed=seed, multivariate=True) + # multivariate TPE + 조건부 suggest 시 independent sampling 경고가 trial마다 폭주 → 억제 + return TPESampler(seed=seed, multivariate=True, warn_independent_sampling=False) def _scalp_objective_value(result: Dict[str, Any], sort_by: str) -> float: @@ -336,7 +390,10 @@ def run_scalp_optuna( ) def objective(trial: optuna.Trial) -> float: - combo = suggest_scalp_params(trial, ctx.mode) + if ctx.mode == "tpe": + combo = suggest_scalp_params_tpe(trial) + else: + combo = suggest_scalp_params(trial, ctx.mode) result = evaluate_scalp_param_combo( combo, base_fixed=ctx.base_fixed, @@ -377,6 +434,7 @@ def run_scalp_optuna( "merged_json", json.dumps(result.get("merged_params") or {}, ensure_ascii=False), ) + set_optuna_trial_stability_attrs(trial, result) return float(obj) logger.info( @@ -411,6 +469,7 @@ def run_scalp_optuna( "score": float(trial.user_attrs.get("score") or 0), "optuna_trial_number": trial.number, } + row.update(stability_fields_from_trial_attrs(trial)) passing.append(row) if sort_by == "score": @@ -420,9 +479,7 @@ def run_scalp_optuna( else: passing.sort(key=lambda r: (-r["total_pnl"], -r["win_rate"])) - profitable = [r for r in passing if r["total_pnl"] > 0] - if profitable: - passing = profitable + tiers = build_optuna_result_tiers(passing, sort_by=sort_by) out_data = { "engine": "optuna", @@ -453,7 +510,7 @@ def run_scalp_optuna( "elapsed_sec": round(elapsed, 1), "ws_tick_rows_loaded": int(ctx.tick_rows), "tick_backtest": ctx.tick_backtest_meta, - "results": passing[:5000], + **tiers, } ts = datetime.now().strftime("%Y%m%d_%H%M%S") @@ -514,15 +571,29 @@ def run_scalp_optuna( def apply_best_scalp_trial(study: optuna.Study) -> bool: - if not study.best_trial or study.best_value <= _FAIL_OBJECTIVE + 1: - logger.warning("⚠️ 적용할 best trial 없음") + trial = pick_gated_apply_trial(study, sort_by="score", fail_objective=_FAIL_OBJECTIVE) + if trial is None: + logger.warning( + "⚠️ 사후게이트(results_gated) 통과 trial 없음 — DB 미적용" + ) return False - pnl = float(study.best_trial.user_attrs.get("total_pnl") or 0) + pnl = float(trial.user_attrs.get("total_pnl") or 0) if pnl <= 0: - logger.warning("⚠️ Best trial 총손익 ≤ 0 — DB 미적용") + logger.warning("⚠️ gated trial 총손익 ≤ 0 — DB 미적용") return False - merged_raw = study.best_trial.user_attrs.get("merged_json") or "{}" + merged_raw = trial.user_attrs.get("merged_json") or "{}" merged = json.loads(merged_raw) apply_params_to_db(merged) - logger.info("🚀 [Optuna apply-best] scalp trial #%d → env_config", study.best_trial.number) + logger.info("🚀 [Optuna apply-best] scalp gated trial #%d → env_config", trial.number) + try: + from kis_trader.backtest.optuna_daily_trail_recommend import ( + apply_daily_trail_recommend_from_optuna_json, + ) + apply_daily_trail_recommend_from_optuna_json( + getattr(study, "_kis_export_path", None), + strategy="scalp", + log=logger, + ) + except Exception as exc: + logger.warning("⚠️ 다단트레일 추천 반영 스킵: %s", exc) return True diff --git a/kis_trader/backtest/optuna_scalping_tpe_space.py b/kis_trader/backtest/optuna_scalping_tpe_space.py new file mode 100644 index 0000000..83d8ca0 --- /dev/null +++ b/kis_trader/backtest/optuna_scalping_tpe_space.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +""" +optuna_scalping_tpe_space.py — 스캘핑 Optuna 연속(TPE) 탐색 공간 +기존 ``_scalp_grids()`` categorical 유지. ``use_macd_cross=False``, ``skip_hts=False``. +""" +from __future__ import annotations + +from typing import Any, Dict, List + +import optuna + +from kis_trader.backtest.optuna_tpe_common import r1, r2, r3 + +# 매수 시간창(time_*) 은 TPE 제외 — 운영 DB 고정값 사용(과적합·apply 후 진입 잠금 방지). +SCALP_TPE_AXIS_KEYS: List[str] = [ + "rsi_period", + "rsi_oversold", + "rsi_overbought", + "sl_pct", + "tp_pct", + "tp_max_pct", + "drop_rate", + "shoulder_min_high", + "shoulder_cut_pct", + "cooldown_min", + "high_chase_thr", + "max_daily_chg", + "min_price", + "vol_mult", + "use_defense_filters", + "require_reversal_candle", + "max_loss_krw", + "min_drop_pct_for_loss_cut", + "min_margin", + "min_hold_sec", + "max_daily", +] + + +def scalp_tpe_axis_keys() -> List[str]: + return list(SCALP_TPE_AXIS_KEYS) + + +def suggest_scalp_params_tpe(trial: optuna.Trial) -> Dict[str, Any]: + combo: Dict[str, Any] = {} + combo["rsi_period"] = trial.suggest_int("rsi_period", 3, 14) + combo["rsi_oversold"] = r1(trial.suggest_float("rsi_oversold", 15.0, 30.0, step=0.5)) + combo["rsi_overbought"] = r1(trial.suggest_float("rsi_overbought", 65.0, 85.0, step=0.5)) + if combo["rsi_oversold"] >= combo["rsi_overbought"]: + raise optuna.TrialPruned("rsi oversold >= overbought") + + combo["sl_pct"] = r2(trial.suggest_float("sl_pct", 1.5, 4.5, step=0.1)) + combo["tp_pct"] = r2(trial.suggest_float("tp_pct", 1.5, 4.0, step=0.1)) + combo["tp_max_pct"] = r2(trial.suggest_float("tp_max_pct", 2.0, 8.0, step=0.5)) + if combo["tp_max_pct"] + 1e-9 < combo["tp_pct"]: + raise optuna.TrialPruned("tp_max < tp") + + combo["drop_rate"] = r2(trial.suggest_float("drop_rate", 1.0, 6.0, step=0.1)) + combo["shoulder_min_high"] = r2( + trial.suggest_float("shoulder_min_high", 0.3, 4.0, step=0.1), + ) + combo["shoulder_cut_pct"] = r2( + trial.suggest_float("shoulder_cut_pct", 0.05, 0.6, step=0.05), + ) + combo["cooldown_min"] = trial.suggest_int("cooldown_min", 0, 15) + combo["high_chase_thr"] = r3( + trial.suggest_float("high_chase_thr", 0.95, 1.0, step=0.005), + ) + combo["max_daily_chg"] = r1(trial.suggest_float("max_daily_chg", 10.0, 50.0, step=1.0)) + combo["min_price"] = trial.suggest_int("min_price", 1000, 8000, step=500) + combo["vol_mult"] = r2(trial.suggest_float("vol_mult", 0.0, 2.0, step=0.1)) + combo["use_defense_filters"] = trial.suggest_categorical( + "use_defense_filters", [False, True], + ) + combo["require_reversal_candle"] = trial.suggest_categorical( + "require_reversal_candle", [False, True], + ) + combo["max_loss_krw"] = trial.suggest_int("max_loss_krw", 50000, 300000, step=25000) + combo["min_drop_pct_for_loss_cut"] = r3( + trial.suggest_float("min_drop_pct_for_loss_cut", 0.005, 0.03, step=0.001), + ) + combo["min_margin"] = r2(trial.suggest_float("min_margin", 0.05, 0.5, step=0.05)) + combo["min_hold_sec"] = trial.suggest_int("min_hold_sec", 0, 120, step=10) + combo["max_daily"] = trial.suggest_int("max_daily", 10, 100, step=5) + + combo["use_macd_cross"] = False + combo["skip_hts_scan_dupes"] = False + return combo diff --git a/kis_trader/backtest/optuna_search_space.py b/kis_trader/backtest/optuna_search_space.py index 76b959c..2f963d5 100644 --- a/kis_trader/backtest/optuna_search_space.py +++ b/kis_trader/backtest/optuna_search_space.py @@ -51,8 +51,14 @@ def suggest_tail_params(trial: optuna.Trial, mode: str) -> Dict[str, Any]: return _suggest_from_grid(trial, _tail_grids(mode)) -def suggest_momentum_params(trial: optuna.Trial, mode: str) -> Dict[str, Any]: - combo = _suggest_from_grid(trial, _momentum_grids()[mode]) +def suggest_momentum_params( + trial: optuna.Trial, + mode: str, + *, + market: str = "KR", +) -> Dict[str, Any]: + mk = (market or "KR").strip().upper() or "KR" + combo = _suggest_from_grid(trial, _momentum_grids(market=mk)[mode]) if not _momentum_combo_grid_valid(combo): raise optuna.TrialPruned("momentum invalid combo") return combo @@ -74,8 +80,9 @@ def tail_grid_axis_keys(mode: str) -> List[str]: return list(_tail_grids(mode).keys()) -def momentum_grid_axis_keys(mode: str) -> List[str]: - return list(_momentum_grids()[mode].keys()) +def momentum_grid_axis_keys(mode: str, *, market: str = "KR") -> List[str]: + mk = (market or "KR").strip().upper() or "KR" + return list(_momentum_grids(market=mk)[mode].keys()) def breakout_grid_axis_keys(mode: str) -> List[str]: diff --git a/kis_trader/backtest/optuna_tail_tpe_space.py b/kis_trader/backtest/optuna_tail_tpe_space.py new file mode 100644 index 0000000..3979bbe --- /dev/null +++ b/kis_trader/backtest/optuna_tail_tpe_space.py @@ -0,0 +1,188 @@ +#!/usr/bin/env python3 +""" +optuna_tail_tpe_space.py — 꼬리 Optuna 연속(TPE) 탐색 공간 +기존 ``_tail_grids()`` categorical 유지. ``skip_hts_scan_dupes=False`` 고정. +비율 축은 엔진과 동일(소수, UI% 아님) — evaluate/apply 경로와 맞춤. + +multivariate TPE: 모든 축을 **먼저** suggest 한 뒤, 제약(ATR min/max·래칫 오름차순 등)만 +맨 끝에서 TrialPruned. 중간 prune 시 뒤쪽 키가 trial마다 빠져 independent sampling 경고가 난다. +""" +from __future__ import annotations + +from typing import Any, Dict, List + +import optuna + +from kis_trader.backtest.optuna_tpe_common import ( + RATCHET_TPE_AXIS_KEYS, + r1, + r2, + r3, + r4, + suggest_ratchet_tiers_pct, +) + +# 래칫: 꼬리는 소폭 % (기존 메뉴 0.3~2.0 대역) — 숫자축 + 조립 문자열 +# 휩쏘: 실매 DB 기본(enabled=false, subbar=30, lookback=90, dip=0.003, recovery=0.001) 그리드 포함 +_TAIL_BASE_KEYS: List[str] = [ + "entry_mode", + "cand_limit", + "max_daily_change", + "min_drop_rate", + "min_recovery_ratio", + "tail_ratio_min", + "tail_pct_min", + "max_rec_3m", + "shoulder_min_high", + "shoulder_cut_pct", + "stop_atr_mult", + "target_atr_mult", + "atr_sl_min_pct", + "atr_sl_max_pct", + "atr_tp_min_pct", + "atr_tp_max_pct", + "tail_vol_mult", + "tail_vol_win", + "limit_atr_mult", + "symbol_daily_loss_limit_pct", + "symbol_daily_loss_limit_krw", + "reentry_min_edge_krw", + "reentry_require_nonneg", + "max_daily", + "cooldown_min", + "bar_chg_min_pct", + "bar_chg_max_pct", + "rsi_threshold", + "pattern_pin", + "pattern_engulfing", + "pattern_piercing", + "pattern_harami", + "pattern_doji", + "pattern_morning_star", + # 당일손익 다단트레일(trail_tiers/drop/arm) — 운영 리스크 손잡이. TPE·apply 탐색 제외(DB/UI 고정). + "max_loss_krw", + "whipsaw_enabled", + "whipsaw_subbar_sec", + "whipsaw_lookback_sec", + "whipsaw_dip_pct", + "whipsaw_recovery_tol_pct", +] +TAIL_TPE_AXIS_KEYS: List[str] = list(_TAIL_BASE_KEYS) + list(RATCHET_TPE_AXIS_KEYS) + + +def tail_tpe_axis_keys() -> List[str]: + return list(TAIL_TPE_AXIS_KEYS) + + +def suggest_tail_params_tpe(trial: optuna.Trial) -> Dict[str, Any]: + combo: Dict[str, Any] = {} + combo["entry_mode"] = "align" + combo["cand_limit"] = trial.suggest_categorical("cand_limit", [0, 20]) + combo["max_daily_change"] = r1( + trial.suggest_float("max_daily_change", 20.0, 45.0, step=1.0), + ) + combo["min_drop_rate"] = r3( + trial.suggest_float("min_drop_rate", 0.01, 0.08, step=0.005), + ) + combo["min_recovery_ratio"] = r2( + trial.suggest_float("min_recovery_ratio", 0.08, 0.35, step=0.01), + ) + combo["tail_ratio_min"] = r2(trial.suggest_float("tail_ratio_min", 0.4, 1.5, step=0.1)) + combo["tail_pct_min"] = r4( + trial.suggest_float("tail_pct_min", 0.0005, 0.01, step=0.0005), + ) + combo["max_rec_3m"] = r2(trial.suggest_float("max_rec_3m", 0.7, 0.98, step=0.01)) + combo["shoulder_min_high"] = r4( + trial.suggest_float("shoulder_min_high", 0.002, 0.015, step=0.001), + ) + combo["shoulder_cut_pct"] = r4( + trial.suggest_float("shoulder_cut_pct", 0.0005, 0.005, step=0.0005), + ) + combo["stop_atr_mult"] = r2(trial.suggest_float("stop_atr_mult", 0.8, 3.0, step=0.1)) + combo["target_atr_mult"] = r2( + trial.suggest_float("target_atr_mult", 0.8, 3.5, step=0.1), + ) + combo["atr_sl_min_pct"] = r2(trial.suggest_float("atr_sl_min_pct", 0.3, 1.0, step=0.1)) + combo["atr_sl_max_pct"] = r1(trial.suggest_float("atr_sl_max_pct", 1.0, 8.0, step=0.5)) + combo["atr_tp_min_pct"] = r2(trial.suggest_float("atr_tp_min_pct", 0.2, 1.0, step=0.1)) + combo["atr_tp_max_pct"] = r1(trial.suggest_float("atr_tp_max_pct", 1.5, 6.0, step=0.5)) + + combo["tail_vol_mult"] = r2(trial.suggest_float("tail_vol_mult", 0.0, 4.0, step=0.1)) + combo["tail_vol_win"] = trial.suggest_int("tail_vol_win", 2, 8) + combo["limit_atr_mult"] = r2(trial.suggest_float("limit_atr_mult", 0.8, 2.5, step=0.1)) + # 꼬리 래칫: OFF=\"off\" / gain·cut 소폭% (엔진 문자열과 동일) + combo.update( + suggest_ratchet_tiers_pct( + trial, + off_token="off", + n_max=3, + gain_low=0.3, + gain_high=3.0, + gain_step=0.1, + cut_low=0.15, + cut_high=0.5, + cut_step=0.05, + ), + ) + combo["symbol_daily_loss_limit_pct"] = r2( + trial.suggest_float("symbol_daily_loss_limit_pct", 0.0, 3.0, step=0.5), + ) + combo["symbol_daily_loss_limit_krw"] = trial.suggest_int( + "symbol_daily_loss_limit_krw", 0, 80000, step=10000, + ) + combo["reentry_min_edge_krw"] = trial.suggest_int( + "reentry_min_edge_krw", 0, 1000, step=100, + ) + combo["reentry_require_nonneg"] = False + combo["max_daily"] = trial.suggest_int("max_daily", 5, 60, step=5) + combo["cooldown_min"] = r1(trial.suggest_float("cooldown_min", 0.0, 15.0, step=1.0)) + combo["bar_chg_min_pct"] = r1( + trial.suggest_float("bar_chg_min_pct", -15.0, -3.0, step=0.5), + ) + combo["bar_chg_max_pct"] = r2( + trial.suggest_float("bar_chg_max_pct", -2.0, -0.2, step=0.1), + ) + + combo["rsi_threshold"] = r1(trial.suggest_float("rsi_threshold", 70.0, 95.0, step=1.0)) + for pk in ( + "pattern_pin", + "pattern_engulfing", + "pattern_piercing", + "pattern_harami", + "pattern_doji", + "pattern_morning_star", + ): + combo[pk] = trial.suggest_categorical(pk, [False, True]) + + combo["max_loss_krw"] = trial.suggest_int("max_loss_krw", 50000, 300000, step=25000) + + # 휩쏘 TRIGGER — 실매값(False/30/90/0.003/0.001) 포함. ON·OFF·초·% 축 분리. + combo["whipsaw_enabled"] = trial.suggest_categorical( + "whipsaw_enabled", [False, True], + ) + combo["whipsaw_subbar_sec"] = trial.suggest_categorical( + "whipsaw_subbar_sec", [15, 30, 45, 60], + ) + combo["whipsaw_lookback_sec"] = trial.suggest_categorical( + "whipsaw_lookback_sec", [60, 90, 120, 180], + ) + combo["whipsaw_dip_pct"] = r4( + trial.suggest_float("whipsaw_dip_pct", 0.001, 0.01, step=0.001), + ) + combo["whipsaw_recovery_tol_pct"] = r4( + trial.suggest_float("whipsaw_recovery_tol_pct", 0.0005, 0.003, step=0.0005), + ) + + combo["skip_hts_scan_dupes"] = False + + # --- 제약 prune: 모든 suggest 이후에만 (키 공간 고정) --- + if combo["atr_sl_min_pct"] >= combo["atr_sl_max_pct"]: + raise optuna.TrialPruned("atr_sl min>=max") + if combo["atr_tp_min_pct"] >= combo["atr_tp_max_pct"]: + raise optuna.TrialPruned("atr_tp min>=max") + if combo["bar_chg_min_pct"] >= combo["bar_chg_max_pct"]: + raise optuna.TrialPruned("bar_chg invalid") + if combo.pop("_ratchet_ascending_ok", True) is False: + raise optuna.TrialPruned("ratchet gain not ascending") + + return combo diff --git a/kis_trader/backtest/optuna_tpe_common.py b/kis_trader/backtest/optuna_tpe_common.py new file mode 100644 index 0000000..056da2d --- /dev/null +++ b/kis_trader/backtest/optuna_tpe_common.py @@ -0,0 +1,218 @@ +#!/usr/bin/env python3 +"""optuna_tpe_common.py — 전략 공통 TPE 헬퍼 (유효 HHMM · 소수 반올림 · 래칫 숫자축).""" +from __future__ import annotations + +from typing import Any, Dict, List + +import optuna + + +def hm_to_minutes(hm: int) -> int: + h = int(hm) // 100 + m = int(hm) % 100 + return h * 60 + m + + +def minutes_to_hm(mins: int) -> int: + h = int(mins) // 60 + m = int(mins) % 60 + return h * 100 + m + + +def hm_choices(lo_hm: int, hi_hm: int, step_min: int = 10) -> List[int]: + """ + 유효 HHMM 목록 (1460 같은 가짜 시각 방지). + 예: hm_choices(1400, 1530, 10) → 1400,1410,…,1530 + """ + step = max(1, int(step_min)) + a = hm_to_minutes(lo_hm) + b = hm_to_minutes(hi_hm) + if b < a: + a, b = b, a + out: List[int] = [] + for m in range(a, b + 1, step): + out.append(minutes_to_hm(m)) + if out and out[-1] != minutes_to_hm(b): + out.append(minutes_to_hm(b)) + # 중복 제거·정렬 + return sorted(set(out)) + + +def r1(x: float) -> float: + return round(float(x), 1) + + +def r2(x: float) -> float: + return round(float(x), 2) + + +def r3(x: float) -> float: + return round(float(x), 3) + + +def r4(x: float) -> float: + return round(float(x), 4) + + +# 래칫 숫자축 키 (JSON axis / mode_combo 빈도용) — 엔진에는 ratchet_tiers 문자열만 전달 +RATCHET_TPE_AXIS_KEYS: List[str] = [ + "ratchet_on", + "ratchet_n", + "ratchet_gain_1", + "ratchet_cut_1", + "ratchet_gain_2", + "ratchet_cut_2", + "ratchet_gain_3", + "ratchet_cut_3", + "ratchet_tiers", # 조립 결과(엔진·apply용) +] + + +def format_ratchet_tiers_string(pairs: List[tuple]) -> str: + """[(gain%, cut%), ...] → \"5:2,10:1\" (엔진 % 문자열).""" + parts: List[str] = [] + for g, c in pairs: + # 불필요 소수 꼬리 제거 + gs = f"{float(g):g}" + cs = f"{float(c):g}" + parts.append(f"{gs}:{cs}") + return ",".join(parts) + + +def assemble_ratchet_tiers_from_combo( + combo: Dict[str, Any], + *, + prefix: str = "ratchet", + off_token: str = "", +) -> str: + """ + mode_combo 최빈값 등에서 엔진용 ratchet_tiers 재조립. + ratchet_on=False / n<=0 → off_token (모멘텀·돌파 \"\" / 꼬리 \"off\"). + """ + on = combo.get(f"{prefix}_on") + if on is False or on in (0, "0", "False", "false", "off", "OFF"): + return str(off_token) + try: + n = int(combo.get(f"{prefix}_n") or 0) + except (TypeError, ValueError): + n = 0 + if n <= 0: + # 숫자축 없으면 기존 문자열 유지 + existing = combo.get("ratchet_tiers") + if existing is not None and str(existing).strip() != "": + return str(existing).strip() + return str(off_token) + pairs: List[tuple] = [] + prev = 0.0 + for i in range(1, n + 1): + g = combo.get(f"{prefix}_gain_{i}") + c = combo.get(f"{prefix}_cut_{i}") + if g is None or c is None: + continue + try: + gf = float(g) + cf = float(c) + except (TypeError, ValueError): + continue + if gf <= prev + 1e-9: + continue + pairs.append((gf, cf)) + prev = gf + if not pairs: + return str(off_token) + return format_ratchet_tiers_string(pairs) + + +def finalize_ratchet_combo( + combo: Dict[str, Any], + *, + prefix: str = "ratchet", + off_token: str = "", +) -> Dict[str, Any]: + """combo 에 ratchet_tiers 를 숫자축 기준으로 덮어쓴다 (evaluate/apply 직전).""" + if not isinstance(combo, dict): + return combo + if f"{prefix}_on" not in combo and f"{prefix}_n" not in combo: + return combo + out = dict(combo) + out["ratchet_tiers"] = assemble_ratchet_tiers_from_combo( + out, prefix=prefix, off_token=off_token, + ) + return out + + +def suggest_ratchet_tiers_pct( + trial: optuna.Trial, + *, + prefix: str = "ratchet", + off_allowed: bool = True, + off_token: str = "", + n_max: int = 3, + gain_low: float = 2.0, + gain_high: float = 15.0, + gain_step: float = 0.5, + cut_low: float = 0.5, + cut_high: float = 3.0, + cut_step: float = 0.1, +) -> Dict[str, Any]: + """ + 다단 래칫을 숫자 축으로 suggest → 엔진용 문자열 조립. + + 반환 dict: + ratchet_on, ratchet_n, ratchet_gain_i, ratchet_cut_i, ratchet_tiers + ratchet_tiers 예: \"5:2,10:1\" / OFF 시 off_token (기본 \"\"). + + multivariate TPE: ON/OFF·단수와 무관하게 **항상 동일 키·동일 분포**로 + suggest 한다 (조건부 분포 → independent sampling 경고·성능저하 방지). + 실제 사용은 on=True 일 때 앞쪽 ratchet_n단만. gain 비오름차순이면 TrialPruned. + """ + n_max = max(1, min(3, int(n_max))) + out: Dict[str, Any] = {} + + if off_allowed: + on = bool(trial.suggest_categorical(f"{prefix}_on", [False, True])) + else: + on = True + out[f"{prefix}_on"] = on + + # OFF여도 n·gain·cut 전부 suggest (키 공간·분포 고정) + n = int(trial.suggest_int(f"{prefix}_n", 1, n_max)) + gains: List[float] = [] + cuts: List[float] = [] + for i in range(1, n_max + 1): + g = r1(trial.suggest_float( + f"{prefix}_gain_{i}", gain_low, gain_high, step=gain_step, + )) + c = r2(trial.suggest_float( + f"{prefix}_cut_{i}", cut_low, cut_high, step=cut_step, + )) + gains.append(g) + cuts.append(c) + out[f"{prefix}_gain_{i}"] = g + out[f"{prefix}_cut_{i}"] = c + + if not on: + out[f"{prefix}_n"] = 0 + out["ratchet_tiers"] = str(off_token) + out["_ratchet_ascending_ok"] = True + return out + + out[f"{prefix}_n"] = n + pairs: List[tuple] = [] + prev_gain = 0.0 + ascending_ok = True + for i in range(n): + g = float(gains[i]) + c = float(cuts[i]) + if g <= prev_gain + 1e-12: + ascending_ok = False + break + pairs.append((g, c)) + prev_gain = g + + # TrialPruned 는 호출부에서 모든 suggest 끝난 뒤 (multivariate TPE 키 고정) + out["_ratchet_ascending_ok"] = ascending_ok + out["ratchet_tiers"] = ( + format_ratchet_tiers_string(pairs) if ascending_ok else str(off_token) + ) + return out diff --git a/kis_trader/backtest/optuna_web_jobs.py b/kis_trader/backtest/optuna_web_jobs.py new file mode 100644 index 0000000..9f832ba --- /dev/null +++ b/kis_trader/backtest/optuna_web_jobs.py @@ -0,0 +1,1111 @@ +#!/usr/bin/env python3 +""" +optuna_web_jobs.py — 백테 웹용 Optuna 잡 (subprocess + 디스크 상태) + +HTTP 타임아웃과 분리: start 는 즉시 job_id 반환, status 폴링으로 진행률/결과. +apply-best 는 절대 자동 적용하지 않음. + +※ 자식 프로세스: Popen 후 반드시 wait(reaper) — 안 하면 종료 후 좀비(Z)로 남아 + 웹이 "이미 실행 중" 으로 막힘. +""" +from __future__ import annotations + +import json +import os +import re +import signal +import subprocess +import threading +import time +from datetime import datetime +from pathlib import Path +from typing import Any, Dict, List, Optional + +ROOT = Path(__file__).resolve().parents[2] +JOBS_DIR = ROOT / "logs" / "optuna_web_jobs" +RESULTS_DIR = ROOT / "kis_trader" / "backtest" / "results" +PY = ROOT / ".venv" / "bin" / "python" + +_STRATS = ("momentum", "us_momentum", "tail", "breakout", "scalp") + + +def _now_iso() -> str: + return datetime.now().strftime("%Y-%m-%dT%H:%M:%S") + + +def _ensure_dirs() -> None: + JOBS_DIR.mkdir(parents=True, exist_ok=True) + (ROOT / "logs").mkdir(parents=True, exist_ok=True) + RESULTS_DIR.mkdir(parents=True, exist_ok=True) + + +def _job_path(job_id: str) -> Path: + return JOBS_DIR / f"{job_id}.json" + + +def save_job(meta: Dict[str, Any]) -> None: + _ensure_dirs() + jid = str(meta.get("job_id") or "") + if not jid: + raise ValueError("job_id required") + path = _job_path(jid) + tmp = path.with_suffix(".tmp") + tmp.write_text(json.dumps(meta, ensure_ascii=False, indent=2), encoding="utf-8") + tmp.replace(path) + + +def load_job(job_id: str) -> Optional[Dict[str, Any]]: + path = _job_path(job_id) + if not path.is_file(): + return None + try: + return json.loads(path.read_text(encoding="utf-8")) + except Exception: + return None + + +def _job_sort_ts(meta: Dict[str, Any], sort: str = "started") -> float: + """ + 최근 잡 정렬 키. ※ 파일 mtime 금지 — refresh_job_status 가 폴링마다 save 해서 + mtime 순이면 순서가 계속 뒤바뀜. + sort=started → started_ts (없으면 started_at) + sort=finished → finished_at (미종료는 맨 위, started_ts 보조) + """ + st = float(meta.get("started_ts") or 0) + if not st: + sa = str(meta.get("started_at") or "")[:19] + if sa: + try: + st = datetime.strptime(sa, "%Y-%m-%dT%H:%M:%S").timestamp() + except Exception: + st = 0.0 + sort = str(sort or "started").strip().lower() + if sort != "finished": + return st + ft = float(meta.get("finished_ts") or 0) + if ft: + return ft + fa = str(meta.get("finished_at") or "")[:19] + if not fa: + # 실행 중/미종료 → 종료순에서도 최상단 + return st + 1e15 + try: + return datetime.strptime(fa, "%Y-%m-%dT%H:%M:%S").timestamp() + except Exception: + return st + + +def list_jobs(limit: int = 30, sort: str = "started") -> List[Dict[str, Any]]: + _ensure_dirs() + out: List[Dict[str, Any]] = [] + for p in JOBS_DIR.glob("*.json"): + try: + out.append(json.loads(p.read_text(encoding="utf-8"))) + except Exception: + continue + out.sort(key=lambda m: _job_sort_ts(m, sort), reverse=True) + return out[: max(1, int(limit))] + + +def _try_reap_child(pid: int) -> None: + """웹이 부모인 좀비면 waitpid 로 회수. 아니면 ChildProcessError → 무시.""" + try: + os.waitpid(int(pid), os.WNOHANG) + except (ChildProcessError, OSError, ValueError): + pass + + +def _pid_alive(pid: Optional[int]) -> bool: + """프로세스가 실제로 살아 있으면 True. 좀비(Z)는 회수 후 False.""" + if not pid or int(pid) <= 0: + return False + try: + os.kill(int(pid), 0) + except OSError: + return False + # Linux: /proc//stat 상태 Z = 좀비 (부모 wait 안 함 → kill 0 은 성공) + try: + raw = Path("/proc/%d/stat" % int(pid)).read_text(encoding="utf-8", errors="replace") + rp = raw.rfind(")") + if rp >= 0 and rp + 2 < len(raw): + state = raw[rp + 2 : rp + 3] + if state == "Z": + _try_reap_child(int(pid)) + return False + except Exception: + pass + return True + + +def _spawn_job_reaper( + proc: subprocess.Popen, + job_id: str, + log_f: Any, +) -> None: + """ + 근본: Popen 자식을 wait 해서 좀비 방지 + 종료 시 job JSON 즉시 done/error 확정. + 웹 프로세스가 부모로 남는 한 이 스레드가 필수. + """ + + def _run() -> None: + rc: Optional[int] = None + try: + rc = int(proc.wait()) + except Exception: + try: + rc = int(proc.poll()) if proc.poll() is not None else None + except Exception: + rc = None + try: + if log_f is not None and hasattr(log_f, "closed") and not log_f.closed: + log_f.flush() + log_f.close() + except Exception: + pass + try: + meta = load_job(job_id) + if not meta: + return + meta["exit_code"] = rc + if rc not in (None, 0) and not meta.get("error"): + meta["error"] = "process exit_code=%s" % rc + save_job(meta) + refresh_job_status(meta) + except Exception: + pass + + threading.Thread( + target=_run, + name="optuna-reap-%s" % job_id, + daemon=True, + ).start() + + +def _tail_text(path: Optional[str], n: int = 40) -> str: + if not path: + return "" + p = Path(path) + if not p.is_file(): + return "" + try: + # 큰 로그: 끝부분만 + data = p.read_bytes() + if len(data) > 200_000: + data = data[-200_000:] + text = data.decode("utf-8", errors="replace") + lines = text.splitlines() + return "\n".join(lines[-n:]) + except Exception: + return "" + + +def _parse_result_paths_from_log(log_path: str) -> Dict[str, Optional[str]]: + tail = _tail_text(log_path, 80) + rj = None + bm = None + m = re.search(r"OPTUNA_RESULT_JSON=(.+)", tail) + if m: + rj = m.group(1).strip() + m2 = re.search(r"OPTUNA_BRIEFING_MD=(.+)", tail) + if m2: + bm = m2.group(1).strip() + return {"result_json": rj, "briefing_md": bm} + + +def _study_progress(study_name: str, trials_total: int) -> Dict[str, Any]: + """Optuna MariaDB study 기준 진행률 + best trial 실측 지표. + + best_value(score)만 보여주면 의미가 안 보이므로, + best trial user_attrs 의 WR/PnL/PF/MDD/trades 도 함께 반환. + """ + out = { + "trials_done": 0, + "trials_total": int(trials_total or 0), + "pct": 0.0, + "best_value": None, + "best_trial": None, + "best_win_rate": None, + "best_pnl": None, + "best_pf": None, + "best_mdd": None, + "best_trades": None, + "study_ok": False, + } + if not study_name: + return out + try: + import optuna + from kis_trader.backtest.optuna_common import resolve_optuna_storage_url + + storage = resolve_optuna_storage_url() + study = optuna.load_study(study_name=study_name, storage=storage) + n = len(study.trials) + out["trials_done"] = int(n) + tot = max(1, int(trials_total or n or 1)) + out["trials_total"] = tot + out["pct"] = round(min(100.0, 100.0 * n / tot), 1) + try: + bt = study.best_trial + if bt is not None: + out["best_value"] = float(study.best_value) + out["best_trial"] = int(bt.number) + ua = bt.user_attrs or {} + if ua.get("win_rate") is not None: + out["best_win_rate"] = float(ua.get("win_rate") or 0) + if ua.get("total_pnl") is not None: + out["best_pnl"] = float(ua.get("total_pnl") or 0) + if ua.get("pf") is not None: + out["best_pf"] = float(ua.get("pf") or 0) + if ua.get("mdd") is not None: + out["best_mdd"] = float(ua.get("mdd") or 0) + if ua.get("total_trades") is not None: + out["best_trades"] = int(ua.get("total_trades") or 0) + except Exception: + out["best_value"] = None + out["study_ok"] = True + except Exception as exc: + out["error"] = str(exc)[:200] + return out + + +def _row_metrics(row: Optional[Dict[str, Any]], *, label: str, source: str) -> Optional[Dict[str, Any]]: + if not row: + return None + out = { + "label": label, + "source": source, + "optuna_trial_number": row.get("optuna_trial_number"), + "total_pnl": row.get("total_pnl"), + "total_trades": row.get("total_trades"), + "win_rate": row.get("win_rate"), + "pf": row.get("pf"), + "score": row.get("score"), + } + # 일별 안정성 (신규 Optuna JSON) + for k in ( + "stability_score", "n_losing_days", "n_active_days", + "worst_day_pnl", "best_day_pnl", "daily_pnl_mean", "daily_pnl_std", + "daily_pnl", + ): + if row.get(k) is not None: + out[k] = row.get(k) + return out + + +def _summarize_result_json(path: Optional[str]) -> Optional[Dict[str, Any]]: + """완료 JSON → Top5 gated/stable · 비교표(학습1위/gated1위/stable1위/mode) · vs_best.""" + if not path or not Path(path).is_file(): + return None + try: + data = json.loads(Path(path).read_text(encoding="utf-8")) + except Exception: + return None + gated = list(data.get("results_gated") or []) + stable = list(data.get("results_stable") or []) + allr = list(data.get("results") or data.get("results_all") or []) + learn = allr[0] if allr else None + gate0 = gated[0] if gated else None + stab0 = stable[0] if stable else None + top = gate0 or learn + + mc = data.get("mode_combo") or {} + mc_bt = mc.get("backtest") or {} + vs = mc.get("vs_best") or {} + + compare_rows: List[Dict[str, Any]] = [] + r_learn = _row_metrics(learn, label="학습1위(results)", source="learn") + if r_learn: + compare_rows.append(r_learn) + r_gate = _row_metrics(gate0, label="사후합격1위(gated)", source="gated") + if r_gate: + compare_rows.append(r_gate) + r_stab = _row_metrics(stab0, label="안정1위(stable)", source="stable") + if r_stab: + compare_rows.append(r_stab) + if mc_bt.get("ok") or mc_bt.get("total_pnl") is not None: + compare_rows.append({ + "label": "mode_combo 실측", + "source": "mode", + "optuna_trial_number": None, + "total_pnl": mc_bt.get("total_pnl"), + "total_trades": mc_bt.get("total_trades"), + "win_rate": mc_bt.get("win_rate"), + "pf": mc_bt.get("pf"), + "score": None, + }) + + top5 = [] + for i, row in enumerate(gated[:5], start=1): + m = _row_metrics(row, label=f"gated #{i}", source="gated") + if m: + m["rank"] = i + top5.append(m) + + top5_learn: List[Dict[str, Any]] = [] + for i, row in enumerate(allr[:5], start=1): + m = _row_metrics(row, label=f"learn #{i}", source="learn") + if m: + m["rank"] = i + top5_learn.append(m) + + top5_stable: List[Dict[str, Any]] = [] + for i, row in enumerate(stable[:5], start=1): + m = _row_metrics(row, label=f"stable #{i}", source="stable") + if m: + m["rank"] = i + top5_stable.append(m) + + briefing = None + bp = str(path).replace(".json", ".briefing.md") + if Path(bp).is_file(): + briefing = bp + elif data.get("briefing_md_path"): + briefing = data.get("briefing_md_path") + + # 다단트레일 추천 (JSON에 없으면 재계산 — 구결과 미리보기용) + trail_rec = data.get("daily_trail_recommend") + if not isinstance(trail_rec, dict): + try: + from kis_trader.backtest.optuna_daily_trail_recommend import ( + recommend_from_optuna_out_data, + ) + trail_rec = recommend_from_optuna_out_data(data) + except Exception: + trail_rec = None + + return { + "strategy": data.get("strategy"), + "mode": data.get("mode"), + "start": data.get("start"), + "end": data.get("end"), + "n_gated": len(gated), + "n_stable": len(stable), + "n_all": len(allr), + "optuna_best_trial_number": data.get("optuna_best_trial_number"), + "stable_gates": data.get("stable_gates"), + "top": _row_metrics( + top, + label="적용후보(gated우선)", + source="gated" if gate0 else "learn", + ), + "compare_rows": compare_rows, + "vs_best": vs if vs else None, + "top5_gated": top5, + "top5_learn": top5_learn, + "top5_stable": top5_stable, + "mode_combo_note": mc.get("note"), + "daily_trail_recommend": trail_rec, + "apply_ready": bool(gate0) and float(gate0.get("total_pnl") or 0) > 0, + "apply_stable_ready": bool(stab0) and float(stab0.get("total_pnl") or 0) > 0, + "briefing_md": briefing, + } + + +def get_candidate_detail( + *, + job_id: Optional[str] = None, + result_json: Optional[str] = None, + source: str = "gated", + rank: int = 1, +) -> Dict[str, Any]: + """보기용: gated/learn/mode 후보 메트릭 + params 미리보기.""" + path = result_json + meta = None + if job_id: + meta = load_job(job_id) + if not meta: + raise FileNotFoundError(f"job not found: {job_id}") + path = path or meta.get("result_json") + if not path or not Path(path).is_file(): + raise FileNotFoundError("result_json 없음") + data = json.loads(Path(path).read_text(encoding="utf-8")) + src = str(source or "gated").strip().lower() + rank = max(1, int(rank or 1)) + params: Dict[str, Any] = {} + metrics: Dict[str, Any] = {} + + if src == "mode": + mc = data.get("mode_combo") or {} + params = dict(mc.get("params") or {}) + bt = mc.get("backtest") or {} + metrics = { + "label": "mode_combo", + "optuna_trial_number": None, + "total_pnl": bt.get("total_pnl"), + "total_trades": bt.get("total_trades"), + "win_rate": bt.get("win_rate"), + "pf": bt.get("pf"), + } + else: + if src == "stable": + pool = data.get("results_stable") + elif src == "gated": + pool = data.get("results_gated") + else: + pool = data.get("results") or [] + pool = list(pool or []) + if not pool: + raise RuntimeError(f"{src} 결과 없음") + if rank > len(pool): + raise RuntimeError(f"rank {rank} 범위 초과 (1~{len(pool)})") + item = pool[rank - 1] + try: + from kis_trader.backtest.backtest_portfolio_common import merge_param_search_apply_source + params = merge_param_search_apply_source(item, data) + except Exception: + params = dict(item.get("merged_params") or item.get("params") or {}) + metrics = { + "label": f"{src} #{rank}", + "optuna_trial_number": item.get("optuna_trial_number"), + "total_pnl": item.get("total_pnl"), + "total_trades": item.get("total_trades"), + "win_rate": item.get("win_rate"), + "pf": item.get("pf"), + "score": item.get("score"), + "stability_score": item.get("stability_score"), + "n_losing_days": item.get("n_losing_days"), + "worst_day_pnl": item.get("worst_day_pnl"), + "daily_pnl": item.get("daily_pnl"), + } + + # 보기: 전체 파라미터 (키 정렬). 예전 [:40] 잘림 → ratchet/rsi 등이 “없는 것처럼” 보임 + preview = {k: params[k] for k in sorted(params.keys(), key=lambda x: str(x))} + return { + "ok": True, + "source": src, + "rank": rank, + "metrics": metrics, + "params_preview": preview, + "params_full": preview, + "params_count": len(params), + "result_json": str(path), + "strategy": (meta or {}).get("strategy") or data.get("strategy"), + "start": data.get("start"), + "end": data.get("end"), + } + + +def apply_optuna_result( + *, + job_id: Optional[str] = None, + result_json: Optional[str] = None, + source: str = "gated", + rank: int = 1, + allow_non_positive_pnl: bool = False, + symbol: Optional[str] = None, + exchange: Optional[str] = None, + stock_group: Optional[str] = None, +) -> Dict[str, Any]: + """ + Optuna JSON 후보 → 전략별 apply_params_to_db. + source: gated | stable | learn | mode + rank: gated/stable/learn 1-based + symbol: us_momentum 종목 cfg 적용 시 (없으면 job/JSON 메타 또는 전역) + """ + path = result_json + meta = None + if job_id: + meta = load_job(job_id) + if not meta: + raise FileNotFoundError(f"job not found: {job_id}") + if meta.get("status") != "done": + raise RuntimeError(f"job status={meta.get('status')} — 완료 후에만 적용") + path = path or meta.get("result_json") + if not path or not Path(path).is_file(): + raise FileNotFoundError("result_json 없음") + + data = json.loads(Path(path).read_text(encoding="utf-8")) + strat = str( + (meta or {}).get("strategy") + or data.get("strategy") + or "", + ).strip().lower() + if strat in ("", "all"): + # JSON 파일명에서 추론 + name = Path(path).name + for s in _STRATS: + if f"_{s}_" in f"_{name}_" or name.startswith(f"optuna_{s}_"): + strat = s + break + if strat not in _STRATS: + raise ValueError(f"전략 불명: {strat}") + + src = str(source or "gated").strip().lower() + rank = max(1, int(rank or 1)) + item: Optional[Dict[str, Any]] = None + merged: Dict[str, Any] = {} + + if src == "mode": + mc = data.get("mode_combo") or {} + merged = dict(mc.get("params") or {}) + bt = mc.get("backtest") or {} + pnl = float(bt.get("total_pnl") or 0) + metrics = { + "total_pnl": bt.get("total_pnl"), + "total_trades": bt.get("total_trades"), + "win_rate": bt.get("win_rate"), + "pf": bt.get("pf"), + "optuna_trial_number": None, + } + if not merged: + raise RuntimeError("mode_combo.params 없음") + else: + if src == "stable": + pool = data.get("results_stable") + elif src == "gated": + pool = data.get("results_gated") + else: + pool = data.get("results") or [] + pool = list(pool or []) + if not pool: + raise RuntimeError(f"{src} 결과 없음") + if rank > len(pool): + raise RuntimeError(f"rank {rank} 범위 초과 (1~{len(pool)})") + item = pool[rank - 1] + from kis_trader.backtest.backtest_portfolio_common import merge_param_search_apply_source + merged = merge_param_search_apply_source(item, data) + pnl = float(item.get("total_pnl") or 0) + metrics = { + "total_pnl": item.get("total_pnl"), + "total_trades": item.get("total_trades"), + "win_rate": item.get("win_rate"), + "pf": item.get("pf"), + "optuna_trial_number": item.get("optuna_trial_number"), + "stability_score": item.get("stability_score"), + "n_losing_days": item.get("n_losing_days"), + "worst_day_pnl": item.get("worst_day_pnl"), + } + + if pnl <= 0 and not allow_non_positive_pnl: + raise RuntimeError( + f"total_pnl={pnl} ≤ 0 — DB 미적용. 강제 시 allow_non_positive_pnl=true", + ) + + sym = str( + symbol + or (meta or {}).get("symbol") + or data.get("symbol") + or data.get("_apply_symbol") + or "", + ).strip().upper() + + env_id = None + if strat == "momentum": + from kis_trader.backtest.param_search_momentum import apply_params_to_db + env_id = apply_params_to_db(merged) + elif strat == "us_momentum": + from kis_trader.backtest.param_search_momentum import apply_params_to_db_us + if exchange: + merged["exchange"] = str(exchange).strip() or merged.get("exchange") + if stock_group: + merged["stock_group"] = str(stock_group).strip() or merged.get("stock_group") + env_id = apply_params_to_db_us(merged, symbol=sym) + elif strat == "breakout": + from kis_trader.backtest.param_search_breakout import apply_params_to_db + apply_params_to_db(merged) + elif strat == "scalp": + from kis_trader.backtest.param_search_scalping import apply_params_to_db + apply_params_to_db(merged) + elif strat == "tail": + from kis_trader.backtest.tail_param_search import apply_params_to_db + apply_params_to_db(merged) + else: + raise ValueError(strat) + + # apply 시에만 다단트레일 추천값 → 전략별 *_DAILY_PROFIT_* (탐색 축 아님) + # 종목 cfg 적용 시 전역 다단트레일 오염 금지 + trail_apply: Dict[str, Any] = {"applied": False} + if not sym: + try: + from kis_trader.backtest.optuna_daily_trail_recommend import ( + apply_daily_trail_recommend_from_optuna_json, + recommend_from_optuna_out_data, + ) + if not data.get("daily_trail_recommend"): + data["daily_trail_recommend"] = recommend_from_optuna_out_data(data) + trail_apply = apply_daily_trail_recommend_from_optuna_json( + str(path), strategy=strat, + ) + except Exception as exc: + trail_apply = {"applied": False, "error": str(exc)} + else: + trail_apply = {"applied": False, "reason": f"stock_cfg:{sym}"} + + if meta is not None: + meta["applied_at"] = _now_iso() + meta["applied_source"] = src + meta["applied_rank"] = rank + meta["applied_trial"] = metrics.get("optuna_trial_number") + meta["applied_symbol"] = sym or None + meta["daily_trail_applied"] = bool(trail_apply.get("applied")) + save_job(meta) + + trail_note = "" + if trail_apply.get("applied"): + patch = trail_apply.get("patch") or {} + tiers = patch.get( + next((k for k in patch if k.endswith("_DAILY_PROFIT_TRAIL_TIERS")), ""), + "", + ) + trail_note = f" · 다단트레일 추천 반영 tiers={tiers}" + elif trail_apply.get("reason"): + trail_note = f" · 다단트레일 미반영({trail_apply.get('reason')})" + + apply_target = f"stock_config:{sym}" if (strat == "us_momentum" and sym) else "global" + return { + "ok": True, + "strategy": strat, + "source": src, + "rank": rank, + "symbol": sym or None, + "apply_target": apply_target, + "env_id": env_id, + "metrics": metrics, + "result_json": str(path), + "daily_trail_apply": trail_apply, + "note": ( + "TIME_* 는 session_env_patch 기본 OFF — 운영 시간창 유지" + + trail_note + ), + } + + +def register_result_json_as_job( + result_json: str, + *, + source_label: str = "cli", +) -> Dict[str, Any]: + """ + CLI/순차 스크립트가 남긴 Optuna JSON 을 웹 잡 목록에 등록. + 동일 result_json 경로가 이미 있으면 갱신만 한다. + """ + _ensure_dirs() + path = Path(result_json).resolve() + if not path.is_file(): + raise FileNotFoundError(str(path)) + data = json.loads(path.read_text(encoding="utf-8")) + strat = str(data.get("strategy") or "").strip().lower() + if strat not in _STRATS: + for s in _STRATS: + if path.name.startswith(f"optuna_{s}_"): + strat = s + break + if strat not in _STRATS: + raise ValueError(f"전략 불명: {path.name}") + + brief = path.with_suffix("").as_posix() + if brief.endswith(".json"): + brief = brief[:-5] + briefing = Path(str(path).replace(".json", ".briefing.md")) + study = str(data.get("optuna_study_name") or data.get("study_name") or "") + start = str(data.get("start") or "") + end = str(data.get("end") or "") + mode = str(data.get("mode") or "tpe") + # 안정 job_id: 파일 stem + job_id = f"import_{path.stem}" + + existing = load_job(job_id) + meta: Dict[str, Any] = existing or {} + meta.update({ + "job_id": job_id, + "kind": "import", + "source": source_label, + "strategy": strat, + "mode": mode, + "start": start, + "end": end, + "trials": int(data.get("optuna_trials_completed") or data.get("optuna_n_trials_requested") or 0), + "study_name": study, + "status": "done", + "pid": None, + "log_path": None, + "result_json": str(path), + "briefing_md": str(briefing) if briefing.is_file() else None, + "started_ts": meta.get("started_ts") or path.stat().st_mtime, + "started_at": meta.get("started_at") or _now_iso(), + "finished_at": meta.get("finished_at") or _now_iso(), + "imported_at": _now_iso(), + }) + meta["result_summary"] = _summarize_result_json(str(path)) + if briefing.is_file(): + try: + meta["briefing_preview"] = briefing.read_text(encoding="utf-8")[:4000] + except Exception: + pass + save_job(meta) + return meta + + +def import_recent_cli_results(*, limit_per_strategy: int = 3) -> List[Dict[str, Any]]: + """전략별 최근 Optuna JSON 을 웹 잡으로 등록 (CLI 결과 노출용).""" + _ensure_dirs() + out: List[Dict[str, Any]] = [] + lim = max(1, int(limit_per_strategy or 3)) + for strat in _STRATS: + files = sorted( + RESULTS_DIR.glob(f"optuna_{strat}_tpe_*.json"), + key=lambda p: p.stat().st_mtime, + reverse=True, + )[:lim] + for p in files: + try: + out.append(register_result_json_as_job(str(p), source_label="cli")) + except Exception: + continue + return out + + +def refresh_job_status(meta: Dict[str, Any]) -> Dict[str, Any]: + """pid/로그/study 로 status·progress 갱신 후 저장.""" + m = dict(meta) + pid = m.get("pid") + alive = _pid_alive(pid) + log_path = str(m.get("log_path") or "") + paths = _parse_result_paths_from_log(log_path) if log_path else {} + if paths.get("result_json"): + m["result_json"] = paths["result_json"] + if paths.get("briefing_md"): + m["briefing_md"] = paths["briefing_md"] + + prog = _study_progress(str(m.get("study_name") or ""), int(m.get("trials") or 0)) + # 순차(seq/seq4): 마스터 로그에서 현재 전략 힌트 + if m.get("kind") in ("seq4", "seq") and log_path: + tail = _tail_text(log_path, 30) + mm = re.findall(r"\[(momentum|us_momentum|tail|breakout|scalp)\] START", tail) + if mm: + m["current_strategy"] = mm[-1] + if "ALL DONE" in tail: + m["status"] = "done" + alive = False + + if m.get("status") not in ("done", "error"): + # 로그에 결과 JSON 이 이미 찍혔으면 좀비/고아 PID 여도 완료로 확정 + rj = m.get("result_json") + if rj and Path(str(rj)).is_file() and ( + "OPTUNA_RESULT_JSON=" in (_tail_text(log_path, 40) or "") + ): + alive = False + if alive: + m["status"] = "running" + else: + # 프로세스 종료 + if m.get("result_json") and Path(str(m["result_json"])).is_file(): + m["status"] = "done" + elif m.get("kind") in ("seq4", "seq") and m.get("status") != "done": + # seq 마스터가 죽었는데 ALL DONE 없으면 error 가능 + tail = _tail_text(log_path, 20) + if "ALL DONE" in (tail or ""): + m["status"] = "done" + else: + m["status"] = "error" + m["error"] = m.get("error") or "process ended without ALL DONE" + else: + # 싱글: 결과 JSON 최신 glob 보조 + strat = str(m.get("strategy") or "") + if strat and strat not in ("all", "seq"): + # us_momentum 결과 파일명: optuna_us_momentum_* (구버전 momentum_* 폴백) + globs = [ + f"optuna_{strat}_{m.get('mode') or 'tpe'}_*.json", + f"optuna_{strat}_*.json", + ] + if strat == "us_momentum": + globs.append("optuna_momentum_tpe_*.json") + globs.append("optuna_momentum_*.json") + cands = [] + for g in globs: + cands.extend(RESULTS_DIR.glob(g)) + cands = sorted( + {p.resolve(): p for p in cands}.values(), + key=lambda p: p.stat().st_mtime, + reverse=True, + ) + if cands and cands[0].stat().st_mtime >= float(m.get("started_ts") or 0) - 5: + m["result_json"] = str(cands[0]) + brief = Path(str(cands[0]).replace(".json", ".briefing.md")) + if brief.is_file(): + m["briefing_md"] = str(brief) + m["status"] = "done" + else: + m["status"] = "error" + m["error"] = m.get("error") or "process ended (no result json)" + else: + m["status"] = "error" + m["error"] = m.get("error") or "process ended" + if m["status"] in ("done", "error") and not m.get("finished_at"): + m["finished_at"] = _now_iso() + m["finished_ts"] = time.time() + elif m["status"] in ("done", "error") and not m.get("finished_ts"): + fa = str(m.get("finished_at") or "")[:19] + try: + m["finished_ts"] = datetime.strptime(fa, "%Y-%m-%dT%H:%M:%S").timestamp() + except Exception: + m["finished_ts"] = float(m.get("started_ts") or time.time()) + + if m.get("status") == "done": + prog["pct"] = 100.0 + if prog["trials_total"] and prog["trials_done"] < prog["trials_total"]: + prog["trials_done"] = prog["trials_total"] + + m["progress"] = prog + m["pid_alive"] = alive + m["log_tail"] = _tail_text(log_path, 25) + m["result_summary"] = _summarize_result_json(m.get("result_json")) + if m.get("briefing_md") and Path(str(m["briefing_md"])).is_file(): + try: + m["briefing_preview"] = Path(str(m["briefing_md"])).read_text(encoding="utf-8")[:4000] + except Exception: + m["briefing_preview"] = None + save_job(m) + return m + + +def find_running_jobs() -> List[Dict[str, Any]]: + out: List[Dict[str, Any]] = [] + for meta in list_jobs(40): + if meta.get("status") == "running" or _pid_alive(meta.get("pid")): + refreshed = refresh_job_status(meta) + if refreshed.get("status") == "running": + out.append(refreshed) + return out + + +def any_optuna_python_running() -> Optional[Dict[str, Any]]: + """웹 외 CLI nohup 도 상단바에 힌트용.""" + try: + r = subprocess.run( + ["pgrep", "-af", "param_search_optuna.py|run_optuna_4strat_tpe_seq.sh"], + capture_output=True, + text=True, + timeout=3, + ) + lines = [] + for ln in (r.stdout or "").splitlines(): + if "extglob" in ln or "pgrep" in ln: + continue + if "param_search_optuna.py" in ln or "run_optuna_4strat_tpe_seq.sh" in ln: + lines.append(ln) + if not lines: + return None + return {"external": True, "cmdline": lines[0][:240], "count": len(lines)} + except Exception: + return None + + +def _normalize_strategies( + strategy: Optional[str] = None, + strategies: Optional[Any] = None, +) -> List[str]: + """ + 웹 체크박스 / 레거시 strategy=all · 단일 문자열 → 전략 리스트. + 국내4 기본(all): momentum tail breakout scalp (해외는 명시 체크 시에만). + """ + order = ("momentum", "us_momentum", "tail", "breakout", "scalp") + raw: List[str] = [] + if strategies is not None: + if isinstance(strategies, str): + raw = re.split(r"[\s,]+", strategies.strip()) + elif isinstance(strategies, (list, tuple)): + raw = [str(x) for x in strategies] + if not raw: + s = str(strategy or "").strip().lower() + if not s: + raise ValueError("strategy/strategies 필요") + if s in ("all", "seq", "seq4", "kr4"): + # 레거시 '4전략' = 국내 4만 (해외 자동 포함 안 함) + return ["momentum", "tail", "breakout", "scalp"] + raw = re.split(r"[\s,]+", s) + seen = set() + out: List[str] = [] + for x in raw: + k = str(x or "").strip().lower() + if not k or k in seen: + continue + if k not in _STRATS: + raise ValueError(f"unknown strategy={k} (허용: {_STRATS})") + seen.add(k) + out.append(k) + if not out: + raise ValueError("전략을 1개 이상 선택하세요") + # 표시·실행 순서는 고정 순서(체크 순 혼선 방지) + return [k for k in order if k in seen] + + +def start_optuna_job( + *, + strategy: Optional[str] = None, + strategies: Optional[Any] = None, + start: str, + end: str, + trials: int = 200, + mode: str = "tpe", + symbol: Optional[str] = None, +) -> Dict[str, Any]: + """ + subprocess 로 Optuna 시작. apply-best 없음. + 전략 2개 이상 → scripts/run_optuna_4strat_tpe_seq.sh + STRATEGIES= + (레거시 strategy='all' → 국내 4순차, 해외 미포함) + symbol: us_momentum 종목 cfg Optuna (1종목 유니버스). 순차잡과 병행 불가. + """ + _ensure_dirs() + running = find_running_jobs() + if running: + raise RuntimeError( + f"이미 실행 중 job={running[0].get('job_id')} " + f"({running[0].get('strategy')}). 끝난 뒤 다시 시작하세요." + ) + ext = any_optuna_python_running() + if ext: + raise RuntimeError( + "CLI/다른 Optuna 프로세스가 이미 실행 중입니다. " + "끝난 뒤 웹에서 시작하세요. (" + str(ext.get("cmdline") or "")[:120] + ")" + ) + + picked = _normalize_strategies(strategy=strategy, strategies=strategies) + mode = str(mode or "tpe").strip().lower() or "tpe" + trials = max(1, min(2000, int(trials or 200))) + start = str(start or "").strip() + end = str(end or "").strip() + if not start or not end: + raise ValueError("start/end 필요") + sym = str(symbol or "").strip().upper() + if sym: + if len(picked) != 1 or picked[0] != "us_momentum": + raise ValueError("종목 Optuna(--symbol)는 us_momentum 단독만 가능") + + from kis_trader.utils.kr_trading_day import clamp_to_prev_kr_trading_day + + start = clamp_to_prev_kr_trading_day(start) + end = clamp_to_prev_kr_trading_day(end) + if start > end: + start, end = end, start + + ts = datetime.now().strftime("%Y%m%d_%H%M%S") + started_ts = time.time() + + env = os.environ.copy() + env["PYTHONUNBUFFERED"] = "1" + + _labels = { + "momentum": "모멘텀", + "us_momentum": "해외모멘텀", + "tail": "꼬리", + "breakout": "돌파", + "scalp": "스캘핑", + } + + if len(picked) >= 2: + job_id = f"opt_{ts}_seq" + log_path = ROOT / "logs" / f"optuna_web_seq_{ts}.log" + study_name = f"seq_{start.replace('-', '')}_{end.replace('-', '')}_{ts}" + cmd = [ + "bash", + str(ROOT / "scripts" / "run_optuna_4strat_tpe_seq.sh"), + ] + env["START"] = start + env["END"] = end + env["TRIALS"] = str(trials) + env["MODE"] = mode + env["MIN_WIN_RATE"] = "0" + env["MIN_PF"] = "0" + env["MIN_TRADES"] = "1" + env["STRATEGIES"] = " ".join(picked) + kind = "seq" + label = "순차(" + "+".join(_labels.get(s, s) for s in picked) + ")" + strat_field = ",".join(picked) + else: + strat = picked[0] + job_id = f"opt_{ts}_{strat[:4]}" + if sym and strat == "us_momentum": + study_name = ( + f"usmom_{sym}_{mode}_{start.replace('-', '')}_{end.replace('-', '')}_{ts}" + ) + log_path = ROOT / "logs" / f"optuna_web_usmom_{sym}_{ts}.log" + label = f"해외모멘텀·종목 {sym}" + else: + study_name = f"{strat}_{mode}_{start.replace('-', '')}_{end.replace('-', '')}_{ts}" + log_path = ROOT / "logs" / f"optuna_web_{strat}_{ts}.log" + label = _labels.get(strat, strat) + sort_by = "score" if strat in ("momentum", "us_momentum", "scalp") else "pnl" + cmd = [ + str(PY if PY.is_file() else "python3"), + "-u", + str(ROOT / "kis_trader" / "backtest" / "param_search_optuna.py"), + "--strategy", strat, + "--mode", mode, + "--start", start, + "--end", end, + "--trials", str(trials), + "--min_trades", "1", + "--min_win_rate", "0", + "--min_pf", "0", + "--orderbook-filter", "off", + "--no-progress", + "--study-name", study_name, + "--sort-by", sort_by, + ] + if sym and strat == "us_momentum": + cmd.extend(["--symbol", sym]) + kind = "single" + strat_field = strat + + log_f = open(log_path, "w", encoding="utf-8") + # start_new_session: 세션 분리. 부모 wait 필수(reaper) — 없으면 좀비(Z). + proc = subprocess.Popen( + cmd, + cwd=str(ROOT), + env=env, + stdout=log_f, + stderr=subprocess.STDOUT, + start_new_session=True, + ) + meta = { + "job_id": job_id, + "kind": kind, + "label": label, + "strategy": strat_field, + "strategies": picked, + "mode": mode, + "start": start, + "end": end, + "trials": trials, + "study_name": study_name, + "symbol": sym or None, + "log_path": str(log_path), + "pid": int(proc.pid), + "status": "running", + "started_at": _now_iso(), + "started_ts": started_ts, + "finished_at": None, + "finished_ts": None, + "result_json": None, + "briefing_md": None, + "error": None, + "apply_best": False, + "cmd": " ".join(cmd)[:500], + } + save_job(meta) + _spawn_job_reaper(proc, job_id, log_f) + # latest pointer + (ROOT / "logs" / "optuna_web_latest_job.txt").write_text(job_id + "\n", encoding="utf-8") + return refresh_job_status(meta) + + +def stop_optuna_job(job_id: str) -> Dict[str, Any]: + """프로세스 그룹 kill (선택). 결과는 보장하지 않음.""" + meta = load_job(job_id) + if not meta: + raise FileNotFoundError(job_id) + pid = int(meta.get("pid") or 0) + if pid and _pid_alive(pid): + try: + os.killpg(pid, signal.SIGTERM) + except Exception: + try: + os.kill(pid, signal.SIGTERM) + except Exception as exc: + meta["error"] = str(exc) + meta["status"] = "error" + meta["error"] = meta.get("error") or "stopped by user" + meta["finished_at"] = _now_iso() + save_job(meta) + return refresh_job_status(meta) diff --git a/kis_trader/backtest/param_search_apply_snapshot.py b/kis_trader/backtest/param_search_apply_snapshot.py index 04995c9..3fbbac6 100644 --- a/kis_trader/backtest/param_search_apply_snapshot.py +++ b/kis_trader/backtest/param_search_apply_snapshot.py @@ -68,8 +68,14 @@ def _env_bool_10(v: Any) -> str: def _detect_strategy(data: Dict[str, Any], path: str) -> str: base = os.path.basename(path).lower() s = (data.get("strategy") or "").strip().upper() + if s in ("US_MOMENTUM", "US-MOMENTUM"): + return "US_MOMENTUM" if s in ("MOMENTUM", "BREAKOUT", "SCALP", "TAIL", "UPDOW"): return s + # CLI / JSON strategy 슬러그 + s_low = (data.get("strategy") or "").strip().lower() + if s_low == "us_momentum": + return "US_MOMENTUM" if base.startswith("updow_param_"): return "UPDOW" @@ -77,7 +83,12 @@ def _detect_strategy(data: Dict[str, Any], path: str) -> str: return "TAIL" if base.startswith("search_breakout_") or base.startswith("optuna_breakout_"): return "BREAKOUT" + if base.startswith("optuna_us_momentum_") or base.startswith("search_us_momentum_"): + return "US_MOMENTUM" if base.startswith("search_momentum_") or base.startswith("optuna_momentum_"): + # market=US 결과 JSON + if str(data.get("market") or "").strip().upper() == "US": + return "US_MOMENTUM" return "MOMENTUM" if base.startswith("optuna_tail_"): return "TAIL" @@ -130,11 +141,8 @@ def _patch_from_momentum_merged(m: Dict[str, Any]) -> Dict[str, str]: patch["MOMENTUM_VOL_WIN"] = str(gi("mom_vol_win", 5)) - patch["MOMENTUM_TIME_END_HM"] = str(gi("mom_time_end_hm", 1430)) - - ts = m.get("time_start_hm") - if ts not in (None, ""): - patch["MOMENTUM_TIME_START"] = str(int(float(ts))) + # TIME_* 는 session_env_patch / PARAM_SEARCH_APPLY_SESSION_TIME 경로만. + # Optuna 과적합 창이 실매 매수시간을 덮지 않도록 여기서는 쓰지 않음. # ※ 모멘텀 apply 는 MOMENTUM_* 만 기록. SCALP_* 를 덮으면 스캘핑 실매/웹이 오염되고, # 엔진은 MOMENTUM_COOLDOWN_SEC 등을 읽는데 SCALP_COOLDOWN 만 써서 apply 가 무효가 된다. @@ -237,6 +245,12 @@ def _patch_from_momentum_merged(m: Dict[str, Any]) -> Dict[str, str]: x = m.get("pullback_max_pct") if x not in (None, ""): patch["MOMENTUM_PULLBACK_MAX_PCT"] = str(float(x)) + x = m.get("setup_vol_max_mult") + if x not in (None, ""): + patch["MOMENTUM_SETUP_VOL_MAX_MULT"] = str(float(x)) + x = m.get("setup_bear_bars_min") + if x not in (None, ""): + patch["MOMENTUM_SETUP_BEAR_BARS_MIN"] = str(int(float(x))) x = m.get("ema_fast_period") if x not in (None, ""): patch["MOMENTUM_EMA_FAST_PERIOD"] = str(int(float(x))) @@ -340,14 +354,7 @@ def _patch_from_breakout_merged(m: Dict[str, Any]) -> Dict[str, str]: if x is not None: patch["BREAKOUT_BODY_MIN_PCT"] = str(float(x)) - x = gv("time_start_hm") - if x is not None: - patch["BREAKOUT_TIME_START"] = str(int(float(x))) - x = gv("time_end_hm") - if x is not None: - te = str(int(float(x))) - patch["BREAKOUT_TIME_END"] = te - patch["BREAKOUT_GOLDEN_END_HM"] = te + # TIME_* / GOLDEN_END 는 session_env_patch(기본 OFF) — Optuna apply 가 창을 자르지 않음 x = gv("max_daily") if x is not None: @@ -580,6 +587,14 @@ def main(argv: Optional[List[str]] = None) -> int: patch.update(session_env_patch("MOMENTUM", merged)) patch = strip_portfolio_keys_from_apply_patch(patch, "MOMENTUM") + elif strategy == "US_MOMENTUM": + from kis_trader.engine.us_momentum_env_keys import params_to_us_momentum_env_patch + merged = merge_param_search_apply_source(item, data) + patch = params_to_us_momentum_env_patch(merged) + patch.update(session_env_patch("US_MOMENTUM", merged)) + patch = strip_portfolio_keys_from_apply_patch(patch, "US_MOMENTUM") + patch = {k: v for k, v in patch.items() if str(k).startswith("US_MOMENTUM_")} + elif strategy == "BREAKOUT": merged = merge_param_search_apply_source(item, data) patch = _patch_from_breakout_merged(merged) diff --git a/kis_trader/backtest/param_search_breakout.py b/kis_trader/backtest/param_search_breakout.py index d12f6d7..cc31b81 100644 --- a/kis_trader/backtest/param_search_breakout.py +++ b/kis_trader/backtest/param_search_breakout.py @@ -939,7 +939,8 @@ def evaluate_breakout_param_combo( merged["max_stocks"] = int(max_stocks) merged["total_budget_krw"] = float(total_budget_krw) - return { + from kis_trader.backtest.optuna_common import attach_daily_stability + return attach_daily_stability({ "params": {k: ui_params[k] for k in grid_keys if k in ui_params}, "total_pnl": int(total_pnl), "win_rate": round(win_rate, 2), @@ -955,7 +956,7 @@ def evaluate_breakout_param_combo( (meta.get("skip_stats") or {}).get("skipped_micro_buys") or 0 ), "merged_params": merged, - } + }, trades) def _evaluate_breakout_chunk( @@ -1053,37 +1054,27 @@ def _load_candles_for_search( end: str, lookback_min: int = 1, fixed: Optional[Dict[str, Any]] = None, + *, + history_source: str = "kiwoom", ) -> dict: db = TradeDB() codes_candles: Dict[str, List[Dict]] = {} try: start_key = (start.replace("-", "") + "0000") if start else "20260101" end_key = (end.replace("-", "") + "2359") if end else "99991231" - - codes_raw = db.conn.execute( - "SELECT DISTINCT code FROM ws_candles WHERE timeframe=1 " - "AND candle_time >= %s AND candle_time <= %s ORDER BY code", - [start_key, end_key] - ).fetchall() - codes = [r["code"] for r in codes_raw] - probe = dict(fixed or {}) probe.setdefault("lookback_min", lookback_min) probe.setdefault("vol_window", 7) - need_n = breakout_min_bars_required(probe) - for code in codes: - rows = db.conn.execute( - "SELECT candle_time, open, high, low, close, volume " - "FROM ws_candles " - "WHERE timeframe=1 AND code=%s " - "AND candle_time >= %s AND candle_time <= %s " - "AND is_confirmed=1 " - "ORDER BY candle_time ASC", - [code, start_key, end_key] - ).fetchall() - if len(rows) < need_n: - continue - codes_candles[code] = [dict(r) for r in rows] + from kis_trader.backtest.breakout_backtest_common import load_breakout_candles_by_code + + codes_candles, _ = load_breakout_candles_by_code( + db, + start_key, + end_key, + lookback_min=int(probe.get("lookback_min") or 1), + vol_window=int(probe.get("vol_window") or 7), + history_source=history_source, + ) finally: db.close() return codes_candles diff --git a/kis_trader/backtest/param_search_cli_common.py b/kis_trader/backtest/param_search_cli_common.py index 410a904..75d7e80 100644 --- a/kis_trader/backtest/param_search_cli_common.py +++ b/kis_trader/backtest/param_search_cli_common.py @@ -42,13 +42,13 @@ def add_search_filter_cli_args(parser: argparse.ArgumentParser) -> None: "--min_win_rate", default=MIN_WIN_RATE_DEFAULT, type=float, - help="승률 하한(%%). 기본 40", + help="승률 하한(%%). Grid 기본 40 / Optuna CLI 는 set_defaults(0) 로 덮음", ) parser.add_argument( "--min_pf", default=MIN_PF_DEFAULT, type=float, - help="Profit Factor 하한 (총익/|총손|). 기본 1.0", + help="Profit Factor 하한. Grid 기본 1.0 / Optuna CLI 는 set_defaults(0) 로 덮음", ) diff --git a/kis_trader/backtest/param_search_momentum.py b/kis_trader/backtest/param_search_momentum.py index 6ca620b..32a950c 100644 --- a/kis_trader/backtest/param_search_momentum.py +++ b/kis_trader/backtest/param_search_momentum.py @@ -186,12 +186,13 @@ def _rr_search_base_from_env() -> Dict[str, float]: return {} -def _mom_fixed_defaults() -> Dict[str, Any]: +def _mom_fixed_defaults(market: str = "KR") -> Dict[str, Any]: """그리드에 안 넣은 축만 채움 + 각 축의 폴백값. - 숫자 기본값은 전부 ``get_env_*`` / DB ``_pick`` 으로만 둠 (리터럴 하드코딩 금지). - 트레일·쿨다운·일일한도·방어·슬롯 등은 coarse/fine/full 그리드가 덮어씀 (폴백은 JSON 재현용). - ``MOMENTUM_RR_SEARCH_BASE_JSON`` 이 있으면 청산 축 폴백을 R:R 스윕 1위로 맞춤. + - market=US 이면 ``US_MOMENTUM_*``(config_us_momentum) 로 실매 앵커 덮어씀. """ rr_base = _rr_search_base_from_env() _d = me.get_momentum_defaults_from_db() @@ -211,7 +212,7 @@ def _mom_fixed_defaults() -> Dict[str, Any]: _fee_r = float(_d.get("fee_rate", 0.00015)) _tax_r = float(_d.get("sell_tax", 0.0018)) - return { + out = { "rsi_period": get_env_int("MOMENTUM_SEARCH_RSI_PERIOD", int(_d.get("rsi_period", 3))), # 슬롯: 탐색 시 max_loss/sl 로 _ui_to_engine_params 가 재계산. 폴백만 env/DB. "slot_money": float(_pick( @@ -295,10 +296,36 @@ def _mom_fixed_defaults() -> Dict[str, Any]: "mom_max_from_open_pct": float(_d.get("mom_max_from_open_pct", 999.0)), "pattern_breakout": bool(_d.get("pattern_breakout", True)), "pattern_pullback": bool(_d.get("pattern_pullback", True)), - "chase_lookback_min": int(_d.get("chase_lookback_min", 10)), - "pullback_lookback_min": int(_d.get("pullback_lookback_min", 15)), - "pullback_min_pct": float(_d.get("pullback_min_pct", 0.3)), - "pullback_max_pct": float(_d.get("pullback_max_pct", 3.0)), + "chase_lookback_min": int( + _d.get("chase_lookback_min") + if _d.get("chase_lookback_min") is not None + else get_env_int("MOMENTUM_CHASE_LOOKBACK_MIN", 10) + ), + "pullback_lookback_min": int( + _d.get("pullback_lookback_min") + if _d.get("pullback_lookback_min") is not None + else get_env_int("MOMENTUM_PULLBACK_LOOKBACK_MIN", 15) + ), + "pullback_min_pct": float( + _d.get("pullback_min_pct") + if _d.get("pullback_min_pct") is not None + else get_env_float("MOMENTUM_PULLBACK_MIN_PCT", 0.3) + ), + "pullback_max_pct": float( + _d.get("pullback_max_pct") + if _d.get("pullback_max_pct") is not None + else get_env_float("MOMENTUM_PULLBACK_MAX_PCT", 3.0) + ), + "setup_vol_max_mult": float( + _d.get("setup_vol_max_mult") + if _d.get("setup_vol_max_mult") is not None + else get_env_float("MOMENTUM_SETUP_VOL_MAX_MULT", 0.8) + ), + "setup_bear_bars_min": int( + _d.get("setup_bear_bars_min") + if _d.get("setup_bear_bars_min") is not None + else get_env_int("MOMENTUM_SETUP_BEAR_BARS_MIN", 1) + ), "use_rsi_max_filter": bool(_d.get("use_rsi_max_filter", False)), "use_ema_filter": bool(_d.get("use_ema_filter", True)), "use_high_chase_filter": bool(_d.get("use_high_chase_filter", False)), @@ -307,10 +334,7 @@ def _mom_fixed_defaults() -> Dict[str, Any]: "ema_slow_period": int(_d.get("ema_slow_period", 21)), "eod_enabled": bool(_d.get("eod_enabled", True)), "eod_hm": str(_d.get("eod_hm") or "15:25").strip() or "15:25", - "skip_hts_scan_dupes": bool(_d.get( - "skip_hts_scan_dupes", - resolve_momentum_skip_hts_scan_dupes(env), - )), + "skip_hts_scan_dupes": False, # Optuna/그리드: false 고정 (True 스윕·universe 폴백 금지) # HTS E(전일시가) TRIGGER — 실매 ``MOMENTUM_TRIGGER_E_CONFIRM`` 과 동일 키. # 전일 1분봉이 DB에 없으면 E가 전원 탈락 → Optuna -1e18. 그때만 env=0 으로 탐색. "trigger_e_confirm": get_env_bool( @@ -328,6 +352,128 @@ def _mom_fixed_defaults() -> Dict[str, Any]: cast=lambda v: str(v or "").strip(), ) or "").strip(), } + # mom_rsi / mom_vol — get_momentum_defaults 에 있으면 포함 (그리드 앵커) + if _d.get("mom_rsi_min") is not None: + out["mom_rsi_min"] = float(_d["mom_rsi_min"]) + if _d.get("mom_rsi_max") is not None: + out["mom_rsi_max"] = float(_d["mom_rsi_max"]) + if _d.get("mom_vol_mult") is not None: + out["mom_vol_mult"] = float(_d["mom_vol_mult"]) + if _d.get("max_hold_bars") is not None: + out["max_hold_bars"] = int(float(_d["max_hold_bars"])) + + if str(market or "KR").strip().upper() == "US": + out = _overlay_us_momentum_ui_fixed(out) + return out + + +def _overlay_us_momentum_ui_fixed(base: Dict[str, Any]) -> Dict[str, Any]: + """국내 UI fixed 위에 config_us_momentum(US_MOMENTUM_*) 실매 앵커 덮어씀.""" + out = dict(base or {}) + from kis_trader.utils.env import get_strategy_env_dict, get_env_bool, get_env_float, get_env_int + + env = get_strategy_env_dict("US_MOMENTUM") + + def _pick(*keys, default=None, cast=float): + for k in keys: + v = env.get(k) + if v not in (None, "", "None"): + try: + return cast(v) + except (ValueError, TypeError): + continue + return default + + def _pct_ui(key: str, default_ui: float) -> float: + raw = env.get(key) + if raw in (None, "", "None"): + return float(default_ui) + try: + x = abs(float(raw)) + except (TypeError, ValueError): + return float(default_ui) + if x == 0: + return 0.0 + return x if x >= 0.5 else round(x * 100.0, 6) + + def _bool(key: str, default: bool) -> bool: + v = env.get(key) + if v in (None, "", "None"): + return bool(default) + return str(v).strip().lower() in ("1", "true", "t", "y", "yes", "on") + + # 수수료·SEC·환전 — UI% 단위(fee/tax는 *100). fx는 엔진 비율 그대로. + try: + from kis_trader.engine.us_momentum_env_keys import us_momentum_trading_cost_rates + _c = us_momentum_trading_cost_rates() + out["fee_rate"] = float(_c["fee_rate"]) * 100.0 + out["sell_tax"] = float(_c["sell_tax"]) * 100.0 + out["fx_fee_rate"] = float(_c["fx_fee_rate"]) + except Exception: + out["fee_rate"] = float(get_env_float("US_MOMENTUM_FEE_RATE", 0.0025)) * 100.0 + out["sell_tax"] = float(get_env_float("US_MOMENTUM_SELL_TAX", 0.0000206)) * 100.0 + out["fx_fee_rate"] = float(get_env_float("US_MOMENTUM_FX_FEE_RATE", 0.0005)) + out["time_start_hm"] = int(_pick("US_MOMENTUM_TIME_START", default=2230, cast=lambda v: int(float(v)))) + out["time_end_hm"] = int(_pick("US_MOMENTUM_TIME_END", default=500, cast=lambda v: int(float(v)))) + out["mom_time_end_hm"] = out["time_end_hm"] + out["slot_money"] = float(_pick("US_MOMENTUM_SLOT_MONEY", "US_MOMENTUM_MAX_BUY_AMOUNT", default=out.get("slot_money", 200000), cast=float)) + # USD 최소가 — 국내 1000원 잔존 금지. 기본 $1 (천달러 필터 아님) + _mp = _pick("US_MOMENTUM_MIN_PRICE", default=None, cast=float) + out["min_price"] = float(_mp) if _mp is not None else 1.0 + out["max_daily"] = float(int(_pick("US_MOMENTUM_MAX_DAILY", default=int(out.get("max_daily") or 5), cast=lambda v: int(float(v))))) + cd = _pick("US_MOMENTUM_COOLDOWN_SEC", default=None, cast=lambda v: int(float(v))) + if cd is not None and cd >= 0: + out["cooldown_min"] = float(cd) / 60.0 + # 고정 유니버스 — Optuna/TPE 에서 금액(슬롯·손절액) 탐색/연동 안 함. DB 슬롯만 사용. + out["max_loss_krw"] = 0.0 + out["sl_pct"] = _pct_ui("US_MOMENTUM_STOP_LOSS_PCT", float(out.get("sl_pct") or 1.5)) + out["tp_pct"] = _pct_ui("US_MOMENTUM_TAKE_PROFIT_PCT", float(out.get("tp_pct") or 2.5)) + out["tp_max_pct"] = _pct_ui("US_MOMENTUM_TP_MAX_PCT", float(out.get("tp_max_pct") or 2.0)) + out["shoulder_min_high"] = _pct_ui("US_MOMENTUM_SHOULDER_MIN_HIGH_PCT", float(out.get("shoulder_min_high") or 0.5)) + out["shoulder_cut_pct"] = _pct_ui("US_MOMENTUM_SHOULDER_CUT_PCT", float(out.get("shoulder_cut_pct") or 0.3)) + out["trail_pct"] = _pct_ui("US_MOMENTUM_TRAIL_PCT", float(out.get("trail_pct") or 0.0)) + out["trail_arm_pct"] = _pct_ui("US_MOMENTUM_TRAIL_ARM_PCT", float(out.get("trail_arm_pct") or 0.0)) + mh = _pick("US_MOMENTUM_MAX_HOLD_BARS", default=None, cast=lambda v: int(float(v))) + if mh is not None: + out["max_hold_bars"] = mh + rt = env.get("US_MOMENTUM_RATCHET_TIERS") + if rt not in (None, "", "None"): + out["ratchet_tiers"] = str(rt).strip() + out["mom_rsi_min"] = float(_pick("US_MOMENTUM_RSI_MIN", default=out.get("mom_rsi_min", 50), cast=float)) + out["mom_rsi_max"] = float(_pick("US_MOMENTUM_RSI_MAX", default=out.get("mom_rsi_max", 90), cast=float)) + out["mom_vol_mult"] = float(_pick("US_MOMENTUM_VOL_MULT", default=out.get("mom_vol_mult", 1.5), cast=float)) + out["mom_vol_win"] = float(_pick("US_MOMENTUM_VOL_WIN", default=out.get("mom_vol_win", 5), cast=float)) + out["high_chase_thr"] = float(_pick("US_MOMENTUM_HIGH_CHASE_THR", default=out.get("high_chase_thr", 0.96), cast=float)) + out["max_daily_chg"] = float(_pick("US_MOMENTUM_MAX_DAILY_CHG", default=out.get("max_daily_chg", 20), cast=float)) + out["mom_max_from_open_pct"] = float(_pick("US_MOMENTUM_MAX_FROM_OPEN_PCT", default=out.get("mom_max_from_open_pct", 999), cast=float)) + out["mom_min_from_open_pct"] = float(_pick("US_MOMENTUM_MIN_FROM_OPEN_PCT", default=out.get("mom_min_from_open_pct", -999), cast=float)) + mm = _pick("US_MOMENTUM_MIN_PROFIT_PCT", default=None, cast=float) + if mm is not None: + out["min_margin"] = float(mm) + out["use_defense_filters"] = _bool("US_MOMENTUM_USE_DEFENSE_FILTERS", bool(out.get("use_defense_filters", True))) + out["use_high_chase_filter"] = _bool("US_MOMENTUM_USE_HIGH_CHASE_FILTER", False) + out["use_daily_range_filter"] = _bool("US_MOMENTUM_USE_DAILY_RANGE_FILTER", False) + out["use_ema_filter"] = _bool("US_MOMENTUM_USE_EMA_FILTER", True) + out["use_rsi_max_filter"] = _bool("US_MOMENTUM_USE_RSI_MAX_FILTER", False) + out["pattern_breakout"] = _bool("US_MOMENTUM_PATTERN_BREAKOUT", True) + out["pattern_pullback"] = _bool("US_MOMENTUM_PATTERN_PULLBACK", True) + out["chase_lookback_min"] = int(_pick("US_MOMENTUM_CHASE_LOOKBACK_MIN", default=out.get("chase_lookback_min", 10), cast=lambda v: int(float(v)))) + out["pullback_lookback_min"] = int(_pick("US_MOMENTUM_PULLBACK_LOOKBACK_MIN", default=out.get("pullback_lookback_min", 15), cast=lambda v: int(float(v)))) + out["pullback_min_pct"] = float(_pick("US_MOMENTUM_PULLBACK_MIN_PCT", default=out.get("pullback_min_pct", 0.3), cast=float)) + out["pullback_max_pct"] = float(_pick("US_MOMENTUM_PULLBACK_MAX_PCT", default=out.get("pullback_max_pct", 3.0), cast=float)) + out["setup_vol_max_mult"] = float(_pick("US_MOMENTUM_SETUP_VOL_MAX_MULT", default=out.get("setup_vol_max_mult", 0.8), cast=float)) + out["setup_bear_bars_min"] = int(_pick("US_MOMENTUM_SETUP_BEAR_BARS_MIN", default=out.get("setup_bear_bars_min", 1), cast=lambda v: int(float(v)))) + out["ema_fast_period"] = int(_pick("US_MOMENTUM_EMA_FAST_PERIOD", default=out.get("ema_fast_period", 9), cast=lambda v: int(float(v)))) + out["ema_slow_period"] = int(_pick("US_MOMENTUM_EMA_SLOW_PERIOD", default=out.get("ema_slow_period", 21), cast=lambda v: int(float(v)))) + out["eod_enabled"] = _bool("US_MOMENTUM_EOD_ENABLED", False) + out["eod_hm"] = str(env.get("US_MOMENTUM_EOD_HM") or out.get("eod_hm") or "05:00").strip() or "05:00" + # 해외: HTS 없음 — 엔진 skip 은 True. Optuna 그리드 false 스윕은 하지 않음(고정). + out["skip_hts_scan_dupes"] = True + out["trigger_e_confirm"] = False + out["use_rsi_filter"] = True + out["market"] = "US" + out["_session_wrap_midnight"] = True + return out # ────────────────────────────────────────────────────────────────────────────── @@ -487,7 +633,7 @@ def _apply_from_latest_json(rank: int) -> None: # 모멘텀 그리드 — coarse / fine / full # ────────────────────────────────────────────────────────────────────────────── -def _momentum_grids() -> Dict[str, Dict[str, List]]: +def _momentum_grids(market: str = "KR") -> Dict[str, Dict[str, List]]: """탐색 모드별 모멘텀 그리드. 각 축은 DB ``env_config`` 문자열 ``MOMENTUM_GRID_{MODE}_{키대문자}`` 로 덮어쓸 수 있다 @@ -498,8 +644,9 @@ def _momentum_grids() -> Dict[str, Dict[str, List]]: - rr : 손익비(어깨·SL·TP) 중심 - wide : **축 스크리닝** — 축당 ~10값 초광범위, Optuna 소수 trial로 유효 축·구간 탐색용 (실매 앵커 포함, 적대값 min_margin≥10 / vol≥20 단독 제외) + - market=US: ``config_us_momentum`` 실매값을 그리드에 강제 포함 """ - live = _mom_fixed_defaults() + live = _mom_fixed_defaults(market=market) # 실매 래칫 문자열 (빈칸=OFF). 그리드에 없으면 DB 고정값으로만 동작. _live_ratchet = str(live.get("ratchet_tiers") or "").strip() # 안전용 래칫 = 늦게 잠금 (이익 충분히 난 뒤 보호). 조기(+1~2%) 익절형 제외. @@ -529,7 +676,7 @@ def _momentum_grids() -> Dict[str, Dict[str, List]]: out.append(s) return out - return { + grids = { # ───────────────────────────────────────────────────────────────────── # [FAST] wide(7/15) Top 근방 스모크 — tp15·sl5·sh0.8·0.2·trail3/1.5 분지 # 실매 앵커: rsi55/80 · vol2 · tp3 · sl3.5 · sh3/0.15 · trail0/0.5 · cd5 · daily50 @@ -780,11 +927,69 @@ def _momentum_grids() -> Dict[str, Dict[str, List]]: ), "tp_pct": _parse_csv_floats( "MOMENTUM_GRID_FINE_TP_PCT", - _fmerge([3.0, 5.0, 8.0, 15.0], float(live.get("tp_pct") or 3.0)), + _fmerge([2.0, 3.0, 5.0, 8.0, 15.0], float(live.get("tp_pct") or 3.0)), + ), + "tp_max_pct": _parse_csv_floats( + "MOMENTUM_GRID_FINE_TP_MAX_PCT", + _fmerge([3.0, 5.0, 8.0], float(live.get("tp_max_pct") or 5.0)), ), "sl_pct": _parse_csv_floats( "MOMENTUM_GRID_FINE_SL_PCT", - _fmerge([3.5, 4.0, 5.0], float(live.get("sl_pct") or 3.5)), + _fmerge([3.0, 3.5, 4.0, 5.0], float(live.get("sl_pct") or 3.5)), + ), + # V4 추격 패턴 축 (기존 fine 미포함 → 실매 고정값만 사용하던 구간) + "chase_lookback_min": _parse_csv_ints( + "MOMENTUM_GRID_FINE_CHASE_LOOKBACK_MIN", + _imerge( + [5, 10, 15], + int(float(live.get("chase_lookback_min") or 10)), + ), + ), + "pullback_lookback_min": _parse_csv_ints( + "MOMENTUM_GRID_FINE_PULLBACK_LOOKBACK_MIN", + _imerge( + [10, 15, 20], + int(float(live.get("pullback_lookback_min") or 15)), + ), + ), + "pullback_min_pct": _parse_csv_floats( + "MOMENTUM_GRID_FINE_PULLBACK_MIN_PCT", + _fmerge( + [0.2, 0.3, 0.5], + float(live.get("pullback_min_pct") or 0.3), + ), + ), + "pullback_max_pct": _parse_csv_floats( + "MOMENTUM_GRID_FINE_PULLBACK_MAX_PCT", + _fmerge( + [2.0, 3.0, 5.0], + float(live.get("pullback_max_pct") or 3.0), + ), + ), + "setup_vol_max_mult": _parse_csv_floats( + "MOMENTUM_GRID_FINE_SETUP_VOL_MAX_MULT", + _fmerge( + [0.5, 0.8, 1.0], + float(live.get("setup_vol_max_mult") or 0.8), + ), + ), + "setup_bear_bars_min": _parse_csv_ints( + "MOMENTUM_GRID_FINE_SETUP_BEAR_BARS_MIN", + _imerge( + [0, 1, 2], + int(float(live.get("setup_bear_bars_min") or 1)), + ), + ), + "mom_vol_win": _parse_csv_ints( + "MOMENTUM_GRID_FINE_MOM_VOL_WIN", + _imerge([3, 5, 8], int(float(live.get("mom_vol_win") or 5))), + ), + "time_start_hm": _parse_csv_ints( + "MOMENTUM_GRID_FINE_TIME_START_HM", + _imerge( + [830, 900, 930], + int(float(live.get("time_start_hm") or 830)), + ), ), "mom_time_end_hm": _parse_csv_ints( "MOMENTUM_GRID_FINE_MOM_TIME_END_HM", @@ -939,7 +1144,7 @@ def _momentum_grids() -> Dict[str, Dict[str, List]]: "MOMENTUM_GRID_FULL_SL_PCT", [1.5, 2.5, 3.0], ), "mom_time_end_hm": _parse_csv_ints( - "MOMENTUM_GRID_FULL_MOM_TIME_END_HM", [1330, 1430], + "MOMENTUM_GRID_FULL_MOM_TIME_END_HM", [1330, 1430, 1530], ), "mom_max_from_open_pct": _parse_csv_floats( "MOMENTUM_GRID_FULL_MOM_MAX_FROM_OPEN_PCT", [22.0, 30.0], @@ -962,13 +1167,30 @@ def _momentum_grids() -> Dict[str, Dict[str, List]]: "max_daily_chg": _parse_csv_floats( "MOMENTUM_GRID_FULL_MAX_DAILY_CHG_PCT", [35.0, 50.0], ), - # full+ 전용 — apply 시 DB 미반영(운영 false 고정) - "skip_hts_scan_dupes": _parse_csv_bools( - "MOMENTUM_GRID_FULL_SKIP_HTS_SCAN_DUPES", [False, True], - ), + # skip_hts_scan_dupes: full 스윕 금지 — 운영 false 고정 (FIXED_DEFAULTS) }, } + # 해외: 국내 장종료(1430/1520/1530) 스윕이 base 2230~500 을 덮어 세션이 깨짐 + # → US 세션축만 해외 RTH(기본 2230~500) 로 교체 + if str(market or "KR").strip().upper() == "US": + us_start = int(float(live.get("time_start_hm") or 2230)) + us_end = int(float(live.get("mom_time_end_hm") or live.get("time_end_hm") or 500)) + us_ends = _imerge([400, 500, 530, 600], us_end) + us_starts = _imerge([2200, 2230, 2300], us_start) + for _mode, _g in grids.items(): + if "mom_time_end_hm" in _g: + _g["mom_time_end_hm"] = _parse_csv_ints( + "US_MOMENTUM_GRID_%s_MOM_TIME_END_HM" % str(_mode).upper(), + us_ends, + ) + if "time_start_hm" in _g: + _g["time_start_hm"] = _parse_csv_ints( + "US_MOMENTUM_GRID_%s_TIME_START_HM" % str(_mode).upper(), + us_starts, + ) + return grids + MOMENTUM_GRID_AXIS_HINTS_KO: Dict[str, str] = { "mom_rsi_min": "RSI3 하한 — 약세 제외", @@ -981,6 +1203,10 @@ MOMENTUM_GRID_AXIS_HINTS_KO: Dict[str, str] = { "pullback_lookback_min": "눌림 패턴 스윙고점 탐색 구간(분)", "pullback_min_pct": "눌림 최소 깊이(%)", "pullback_max_pct": "눌림 최대 깊이(%)", + "setup_vol_max_mult": "눌림 구간 거래량 상한배수 (0=OFF)", + "setup_bear_bars_min": "눌림 음봉 최소 개수 (0=OFF)", + "mom_vol_win": "거래량 관찰 봉수", + "time_start_hm": "매수 시작 HHMM", "mom_max_from_open_pct": "레거시: 당일 시가 대비 과열 상한(%)", "sl_pct": "고정 손절(%)", "tp_pct": "고정 익절(%)", @@ -1058,6 +1284,8 @@ def _get_momentum_field_map() -> Dict[str, Tuple[str, Any]]: "pullback_lookback_min": ("MOMENTUM_PULLBACK_LOOKBACK_MIN", lambda v: str(int(float(v)))), "pullback_min_pct": ("MOMENTUM_PULLBACK_MIN_PCT", lambda v: str(float(v))), "pullback_max_pct": ("MOMENTUM_PULLBACK_MAX_PCT", lambda v: str(float(v))), + "setup_vol_max_mult": ("MOMENTUM_SETUP_VOL_MAX_MULT", lambda v: str(float(v))), + "setup_bear_bars_min": ("MOMENTUM_SETUP_BEAR_BARS_MIN", lambda v: str(int(float(v)))), "use_ema_filter": ("MOMENTUM_USE_EMA_FILTER", lambda v: "true" if _momentum_ema_filter_on(v) else "false"), "ema_fast_period": ("MOMENTUM_EMA_FAST_PERIOD", lambda v: str(int(float(v)))), "ema_slow_period": ("MOMENTUM_EMA_SLOW_PERIOD", lambda v: str(int(float(v)))), @@ -1076,10 +1304,11 @@ def _get_momentum_field_map() -> Dict[str, Tuple[str, Any]]: "MOMENTUM_TRIGGER_REQUIRE_BULL_BAR", lambda v: "true" if _momentum_ema_filter_on(v) else "false", ), - # skip_hts_scan_dupes: full 그리드 탐색만, apply 제외 + # skip_hts_scan_dupes: 그리드 스윕 금지 — FIXED_DEFAULTS false 고정 "tp_max_pct": ("MOMENTUM_TP_MAX_PCT", lambda v: str(float(v) / 100)), # 엔진 get_momentum_defaults 와 동일 — SCALP_* 오염 금지 "cooldown_min": ("MOMENTUM_COOLDOWN_SEC", lambda v: str(int(float(v)) * 60)), + "time_start_hm": ("MOMENTUM_TIME_START", lambda v: str(int(float(v)))), "high_chase_thr": ("MOMENTUM_HIGH_CHASE_THR", lambda v: str(float(v))), "max_daily_chg": ("MOMENTUM_MAX_DAILY_CHG", lambda v: str(float(v))), "min_price": ("MOMENTUM_MIN_PRICE", lambda v: str(int(float(v)))), @@ -1120,6 +1349,110 @@ def apply_params_to_db(best_params: dict) -> Optional[int]: return _apply_to_db(best_params) +def _apply_to_db_us(best_params: dict) -> Optional[int]: + """1위 파라미터 → config_us_momentum INSERT (US_MOMENTUM_* 만, 국내 미오염).""" + from kis_trader.engine.us_momentum_env_keys import params_to_us_momentum_env_patch + from kis_trader.backtest.param_search_apply_snapshot import apply_env_patch + + patch = params_to_us_momentum_env_patch(best_params) + patch.update(session_env_patch("US_MOMENTUM", best_params)) + patch = strip_portfolio_keys_from_apply_patch(patch, "US_MOMENTUM") + # 안전: US_ 접두만 + patch = {k: v for k, v in patch.items() if str(k).startswith("US_MOMENTUM_")} + if not patch: + print("DB 적용할 US 파라미터가 없습니다.") + return None + eid = apply_env_patch(patch) + if eid is None: + print("❌ insert_env_snapshot 실패 (US)") + return None + print(f"\n✅ config_us_momentum INSERT id={eid} (US_MOMENTUM_* 키):") + for k, v in sorted(patch.items()): + print(f" {k:<40s} = {v}") + return eid + + +def apply_params_to_db_us(best_params: dict, *, symbol: str = "") -> Optional[int]: + """해외 모멘텀 Optuna/웹 apply — US_MOMENTUM_* 전용. + + symbol 이 있으면 전역 INSERT 대신 ``us_momentum_stock_config`` 행에 + TRIGGER/청산 축을 핀(성격별 탐색 결과). + """ + sym = str(symbol or best_params.get("_apply_symbol") or "").strip().upper() + if sym: + try: + from kis_trader.strategies.us_momentum_stock_cfg import ( + upsert_us_momentum_stock_config, + ) + from database import TradeDB + p = best_params or {} + fields = { + "sl_pct": abs(float(p["sl_pct"])) if p.get("sl_pct") is not None else None, + "tp_pct": abs(float(p["tp_pct"])) if p.get("tp_pct") is not None else None, + "tp_max_pct": abs(float(p["tp_max_pct"])) if p.get("tp_max_pct") is not None else None, + "shoulder_min_high_pct": abs(float(p["shoulder_min_high"])) if p.get("shoulder_min_high") is not None else None, + "shoulder_cut_pct": abs(float(p["shoulder_cut_pct"])) if p.get("shoulder_cut_pct") is not None else None, + "trail_pct": abs(float(p["trail_pct"])) if p.get("trail_pct") is not None else None, + "trail_arm_pct": abs(float(p["trail_arm_pct"])) if p.get("trail_arm_pct") is not None else None, + "ratchet_tiers": str(p.get("ratchet_tiers") or "").strip() or None, + "max_hold_bars": int(float(p["max_hold_bars"])) if p.get("max_hold_bars") not in (None, "") else None, + "max_daily": int(float(p["max_daily"])) if p.get("max_daily") not in (None, "") else None, + "slot_money": float(p["slot_money"]) if p.get("slot_money") not in (None, "") else None, + "rsi_min": float(p["mom_rsi_min"]) if p.get("mom_rsi_min") is not None else None, + "rsi_max": float(p["mom_rsi_max"]) if p.get("mom_rsi_max") is not None else None, + "vol_mult": float(p["mom_vol_mult"]) if p.get("mom_vol_mult") is not None else None, + "vol_win": int(float(p["mom_vol_win"])) if p.get("mom_vol_win") not in (None, "") else None, + "chase_lookback_min": int(float(p["chase_lookback_min"])) if p.get("chase_lookback_min") not in (None, "") else None, + "pullback_lookback_min": int(float(p["pullback_lookback_min"])) if p.get("pullback_lookback_min") not in (None, "") else None, + "pullback_min_pct": float(p["pullback_min_pct"]) if p.get("pullback_min_pct") is not None else None, + "pullback_max_pct": float(p["pullback_max_pct"]) if p.get("pullback_max_pct") is not None else None, + "setup_vol_max_mult": float(p["setup_vol_max_mult"]) if p.get("setup_vol_max_mult") is not None else None, + "setup_bear_bars_min": int(float(p["setup_bear_bars_min"])) if p.get("setup_bear_bars_min") not in (None, "") else None, + "high_chase_thr": float(p["high_chase_thr"]) if p.get("high_chase_thr") is not None else None, + "max_daily_chg": float(p["max_daily_chg"]) if p.get("max_daily_chg") is not None else None, + "min_price": float(p["min_price"]) if p.get("min_price") is not None else None, + "ema_fast_period": int(float(p["ema_fast_period"])) if p.get("ema_fast_period") not in (None, "") else None, + "ema_slow_period": int(float(p["ema_slow_period"])) if p.get("ema_slow_period") not in (None, "") else None, + } + # bool 축 — 키가 있을 때만 + for eng, col in ( + ("use_defense_filters", "use_defense_filters"), + ("use_high_chase_filter", "use_high_chase_filter"), + ("use_daily_range_filter", "use_daily_range_filter"), + ("use_ema_filter", "use_ema_filter"), + ("use_rsi_max_filter", "use_rsi_max_filter"), + ("pattern_breakout", "pattern_breakout"), + ("pattern_pullback", "pattern_pullback"), + ): + if eng in p and p.get(eng) is not None: + fields[col] = 1 if p.get(eng) else 0 + if p.get("cooldown_min") is not None: + fields["cooldown_sec"] = int(float(p["cooldown_min"]) * 60) + # None 값 키는 upsert 에 넣지 않음 → 기존 컬럼 보존 + fields = {k: v for k, v in fields.items() if v is not None} + db = TradeDB() + try: + ok = upsert_us_momentum_stock_config( + db, sym, + exchange=str(p.get("exchange") or "NASD"), + symbol=sym, + name=sym, + stock_group=str(p.get("stock_group") or "STOCK"), + fields=fields, + ) + finally: + db.close() + if ok: + print(f"\n✅ us_momentum_stock_config UPSERT {sym}") + return 1 + print(f"❌ stock_config 저장 실패 {sym}") + return None + except Exception as e: + print(f"❌ stock apply 실패: {e}") + return None + return _apply_to_db_us(best_params) + + # ────────────────────────────────────────────────────────────────────────────── # UI(%) → 엔진(비율) 변환 + 워커 청크 평가 # ────────────────────────────────────────────────────────────────────────────── @@ -1188,6 +1521,14 @@ def _ui_to_engine_params(ui_params: dict) -> dict: engine_params["pullback_min_pct"] = float(ui_params["pullback_min_pct"]) if "pullback_max_pct" in ui_params: engine_params["pullback_max_pct"] = float(ui_params["pullback_max_pct"]) + if "setup_vol_max_mult" in ui_params: + engine_params["setup_vol_max_mult"] = float(ui_params["setup_vol_max_mult"]) + if "setup_bear_bars_min" in ui_params: + engine_params["setup_bear_bars_min"] = int(float(ui_params["setup_bear_bars_min"])) + if "mom_vol_win" in ui_params: + engine_params["mom_vol_win"] = int(float(ui_params["mom_vol_win"])) + if "time_start_hm" in ui_params: + engine_params["time_start_hm"] = int(float(ui_params["time_start_hm"])) if "ema_fast_period" in ui_params: engine_params["ema_fast_period"] = int(float(ui_params["ema_fast_period"])) if "ema_slow_period" in ui_params: @@ -1205,10 +1546,19 @@ def _ui_to_engine_params(ui_params: dict) -> dict: ) # 손절 % 에 맞춰 1회 투자금(slot_money) 자동 계산 (라이브 봇과 동일 공식) - max_loss = engine_params.get("max_loss_krw", 200_000) - if engine_params["sl_pct"] > 0 and 0 < max_loss < 10_000_000: - # max_loss < 1000만일 때만 자동 계산 (라이브 운영 정상 범위) - engine_params["slot_money"] = max_loss / engine_params["sl_pct"] + # ※ 해외 US: 고정 유니버스 — 금액 재계산 금지. DB/포트폴리오 슬롯만 사용. + if str(ui_params.get("market") or "").strip().upper() == "US": + engine_params["max_loss_krw"] = float(ui_params.get("max_loss_krw") or 0.0) + if "slot_money" in ui_params and ui_params.get("slot_money") is not None: + try: + engine_params["slot_money"] = float(ui_params["slot_money"]) + except (TypeError, ValueError): + pass + else: + max_loss = engine_params.get("max_loss_krw", 200_000) + if engine_params["sl_pct"] > 0 and 0 < max_loss < 10_000_000: + # max_loss < 1000만일 때만 자동 계산 (라이브 운영 정상 범위) + engine_params["slot_money"] = max_loss / engine_params["sl_pct"] return engine_params @@ -1300,7 +1650,8 @@ def evaluate_momentum_param_combo( merged["max_stocks"] = int(max_stocks) merged["total_budget_krw"] = float(total_budget_krw) - return { + from kis_trader.backtest.optuna_common import attach_daily_stability + return attach_daily_stability({ "params": {k: ui_params[k] for k in grid_keys if k in ui_params}, "total_pnl": int(total_pnl), "win_rate": round(win_rate, 2), @@ -1315,7 +1666,7 @@ def evaluate_momentum_param_combo( (meta.get("skip_stats") or {}).get("skipped_micro_buys") or 0 ), "merged_params": merged, - } + }, trades) def _evaluate_momentum_chunk( @@ -1409,30 +1760,71 @@ def _evaluate_momentum_chunk( # 캔들 로드 (param_search_scalping.py 와 동일 패턴) # ────────────────────────────────────────────────────────────────────────────── -def _load_candles_for_search(start: str, end: str, rsi_period: int) -> dict: +def _load_candles_for_search( + start: str, + end: str, + rsi_period: int, + *, + market: Optional[str] = None, + codes_filter: Optional[List[str]] = None, +) -> dict: db = TradeDB() codes_candles: Dict[str, List[Dict]] = {} try: start_key = (start.replace("-", "") + "0000") if start else "20260101" end_key = (end.replace("-", "") + "2359") if end else "99991231" + mk = (market or "").strip().upper() + want = { + str(c).strip().upper() + for c in (codes_filter or []) + if str(c).strip() + } - codes_raw = db.conn.execute( - "SELECT DISTINCT code FROM ws_candles WHERE timeframe=1 " - "AND candle_time >= %s AND candle_time <= %s ORDER BY code", - [start_key, end_key] - ).fetchall() + if mk in ("US", "KR"): + codes_raw = db.conn.execute( + "SELECT DISTINCT code FROM ws_candles WHERE timeframe=1 AND market=%s " + "AND candle_time >= %s AND candle_time <= %s ORDER BY code", + [mk, start_key, end_key], + ).fetchall() + else: + codes_raw = db.conn.execute( + "SELECT DISTINCT code FROM ws_candles WHERE timeframe=1 " + "AND candle_time >= %s AND candle_time <= %s ORDER BY code", + [start_key, end_key] + ).fetchall() codes = [r["code"] for r in codes_raw] + if mk == "US": + try: + from permanent_subs import codes_by_market as _perm_us + _us_perm = {str(r.get("code") or "").upper() for r in _perm_us(db, "US")} + if _us_perm: + codes = [c for c in codes if str(c).upper() in _us_perm] or codes + except Exception: + pass + if want: + codes = [c for c in codes if str(c).upper() in want] for code in codes: - rows = db.conn.execute( - "SELECT candle_time, open, high, low, close, volume " - "FROM ws_candles " - "WHERE timeframe=1 AND code=%s " - "AND candle_time >= %s AND candle_time <= %s " - "AND is_confirmed=1 " - "ORDER BY candle_time ASC", - [code, start_key, end_key] - ).fetchall() + if mk in ("US", "KR"): + rows = db.conn.execute( + "SELECT candle_time, open, high, low, close, volume " + "FROM ws_candles " + "WHERE timeframe=1 AND code=%s AND market=%s " + "AND candle_time >= %s AND candle_time <= %s " + "AND is_confirmed=1 " + "ORDER BY candle_time ASC", + [code, mk, start_key, end_key] + ).fetchall() + else: + rows = db.conn.execute( + "SELECT candle_time, open, high, low, close, volume " + "FROM ws_candles " + "WHERE timeframe=1 AND code=%s " + "AND candle_time >= %s AND candle_time <= %s " + "AND is_confirmed=1 " + "ORDER BY candle_time ASC", + [code, start_key, end_key] + ).fetchall() if len(rows) < rsi_period + 5: continue codes_candles[code] = [dict(r) for r in rows] @@ -1752,16 +2144,19 @@ def run_search( ) ticks_by_code, tick_rows = load_momentum_ticks_by_code( _snap_db, start_key, end_key, set(codes_candles.keys()), + market=str(FIXED_DEFAULTS.get("market") or "KR").strip().upper() or "KR", ) tick_meta = tick_coverage_stats(codes_candles, ticks_by_code) tick_meta["ws_tick_rows_loaded"] = tick_rows + _mkt = str(FIXED_DEFAULTS.get("market") or "KR").strip().upper() + _tick_tbl = "ws_ticks_us" if _mkt == "US" else "ws_ticks" print( - f"✅ 모멘텀 청산 ws_ticks {tick_rows:,}건 " + f"✅ 모멘텀 청산 {_tick_tbl} {tick_rows:,}건 " f"(커버리지 {tick_meta.get('tick_bar_coverage_pct', 0):.1f}% · " f"{tick_meta.get('tick_codes_with_data', 0)}/{tick_meta.get('tick_codes_total', 0)}종목)" ) if tick_rows <= 0: - print("⚠️ ws_ticks 없음 — 1분봉 OHLC 청산 폴백") + print(f"⚠️ {_tick_tbl} 없음 — 1분봉 OHLC 청산 폴백") finally: _snap_db.close() diff --git a/kis_trader/backtest/param_search_optuna.py b/kis_trader/backtest/param_search_optuna.py index f6d413b..7ac5e26 100644 --- a/kis_trader/backtest/param_search_optuna.py +++ b/kis_trader/backtest/param_search_optuna.py @@ -10,7 +10,9 @@ kis_trader/backtest/param_search_optuna.py — Optuna TPE 파라미터 탐색 ( # 꼬리 python3 kis_trader/backtest/param_search_optuna.py --strategy tail --mode fast --trials 200 # 모멘텀 (1위 정렬 기본 score=순익/MDD) - python3 kis_trader/backtest/param_search_optuna.py --strategy momentum --mode fast --trials 200 + # --mode fine → 기존 Grid 이산 메뉴 + categorical + # --mode tpe → 연속 float/int (TPE 가 구간 축소, Grid 메뉴 미사용) + python3 kis_trader/backtest/param_search_optuna.py --strategy momentum --mode tpe --trials 200 # 돌파 python3 kis_trader/backtest/param_search_optuna.py --strategy breakout --mode fast --trials 200 # 스캘핑 RSI V자 (trigger=진입 / exit=청산) @@ -19,12 +21,15 @@ kis_trader/backtest/param_search_optuna.py — Optuna TPE 파라미터 탐색 ( Win11 + VM 동시 분산: 같은 study-name · 같은 storage(141/kis_optuna) 로 각각 --trials 실행. DB 적용: - --apply-best (1위 trial → env_config, 총손익≤0 이면 스킵) + --apply-best (사후게이트 results_gated 통과 trial → env_config, 총손익≤0 이면 스킵) Env (선택): OPTUNA_DB_NAME=kis_optuna # 기본. 변경 시에만 설정 OPTUNA_STORAGE_URL=... # 전체 URL 직접 지정 시 위보다 우선 OPTUNA_TAIL_STUDY_NAME=... # study 이름 고정 + PARAM_SEARCH_OPTUNA_MIN_WIN_RATE / MIN_PF # 탐색 게이트 기본 0 (TPE 학습) + PARAM_SEARCH_OPTUNA_REPORT_MIN_WIN_RATE / MIN_PF # 사후 후보·apply (기본 40 / 1.0) + PARAM_SEARCH_OPTUNA_BRIEFING_AI=1 # 최종 JSON 시 Claude 보강(키 없으면 규칙만) """ from __future__ import annotations @@ -54,10 +59,16 @@ from kis_trader.backtest import tail_backtest_common as tbc from kis_trader.backtest.optuna_common import ( OPTUNA_STRATEGIES, announce_optuna_json_path, + build_optuna_result_tiers, + ensure_optuna_gate_env_defaults, optuna_run_lock_name, + optuna_search_gate_defaults, + pick_gated_apply_trial, release_shared_tick_store, resolve_optuna_storage_url, resolve_study_name, + set_optuna_trial_stability_attrs, + stability_fields_from_trial_attrs, ) from kis_trader.backtest.optuna_mode_combo import enrich_out_data_with_mode_combo from kis_trader.backtest.optuna_breakout import ( @@ -81,6 +92,7 @@ from kis_trader.backtest.optuna_dart import ( run_dart_optuna, ) from kis_trader.backtest.optuna_search_space import suggest_tail_params, tail_grid_axis_keys +from kis_trader.backtest.optuna_tail_tpe_space import suggest_tail_params_tpe, tail_tpe_axis_keys from kis_trader.backtest.param_search_cli_common import ( add_portfolio_cli_args, add_search_filter_cli_args, @@ -107,10 +119,11 @@ _FAIL_OBJECTIVE = -1e18 # 전략별 --mode 허용값 (Grid CLI 와 동일) STRATEGY_MODES: Dict[str, List[str]] = { - "tail": ["fast", "coarse", "fine", "wide", "full", "massive"], - "momentum": ["fast", "exit", "rr", "coarse", "fine", "wide", "full"], - "breakout": ["fast", "coarse", "fine", "wide", "full"], - "scalp": ["fast", "trigger", "exit", "coarse", "fine", "full", "wide"], + "tail": ["fast", "coarse", "fine", "wide", "full", "massive", "tpe"], + "momentum": ["fast", "exit", "rr", "coarse", "fine", "wide", "full", "tpe"], + "us_momentum": ["fast", "exit", "rr", "coarse", "fine", "wide", "full", "tpe"], + "breakout": ["fast", "coarse", "fine", "wide", "full", "tpe"], + "scalp": ["fast", "trigger", "exit", "coarse", "fine", "full", "wide", "tpe"], "dart": ["fast", "coarse", "fine"], } @@ -163,6 +176,7 @@ def prepare_tail_search_context( max_stocks: Optional[int] = None, total_budget_krw: Optional[float] = None, orderbook_filter: str = "off", + history_source: Optional[str] = None, ) -> Optional[TailSearchContext]: """ run_search 와 동일한 데이터·base_params 1회 로드 (Grid 중복 최소화). @@ -218,18 +232,29 @@ def prepare_tail_search_context( start_key, end_key, start_ymd, end_ymd = tbc.date_keys(start, end) use_saved_history = not use_fallback_universe - universe_by_slot, universe_source, universe_history_slots, scan_interval_min = ( - tbc.resolve_tail_universe(start_ymd, end_ymd, use_saved_history=use_saved_history) + from kis_trader.backtest.universe_history_source import ( + resolve_backtest_universe_history_source, ) + + _hs = resolve_backtest_universe_history_source(history_source) + universe_by_slot, universe_source, universe_history_slots, scan_interval_min = ( + tbc.resolve_tail_universe( + start_ymd, end_ymd, + use_saved_history=use_saved_history, + history_source=_hs, + ) + ) + # scan_at 타임라인과 슬롯 dict 동일 소스 스태시 + base_params["_universe_history_source"] = _hs if use_fallback_universe: print("📌 [유니버스] --fallback-universe: 저장 이력 무시 → ws_candles 전 종목") - elif universe_source == "history": + elif str(universe_source or "").startswith("history"): avg = ( sum(len(v) for v in universe_by_slot.values()) / max(1, universe_history_slots) if universe_by_slot else 0 ) print( - f"✅ 유니버스: SHORT 저장 이력 (웹백테 동일) | " + f"✅ 유니버스: SHORT 저장 이력 src={universe_source} | " f"{universe_history_slots:,}슬롯 · 평균 {avg:.1f}종목" ) else: @@ -239,15 +264,15 @@ def prepare_tail_search_context( base_params["scan_interval_min"] = scan_interval_min base_params["timeframe"] = tail_tf from kis_trader.engine.tail_tick_replay import ( - tail_backtest_tick_fallback_ohlc as _tail_tick_fallback, tail_backtest_use_tick_db as _tail_use_tick, tail_backtest_use_tick_exit as _tail_use_tick_exit, ) - base_params.setdefault("backtest_tick_fallback_ohlc", _tail_tick_fallback(None)) base_params.setdefault("backtest_use_tick_db", _tail_use_tick(None)) base_params.setdefault("backtest_use_tick_exit", _tail_use_tick_exit(None)) + # 절대규칙: Optuna/파람은 OHLC 폴백으로 숫자 변조 금지 (DB에 ON이어도 강제 OFF) + base_params["backtest_tick_fallback_ohlc"] = False if base_params.get("backtest_use_tick_db") or base_params.get("backtest_use_tick_exit"): - logger.info("📌 틱재생(ws_ticks): ON — 실매 체결 정합 모드 (OHLC 낙관편향 제거)") + logger.info("📌 틱재생(ws_ticks): ON — OHLC 폴백 강제 OFF (정합 절대규칙)") logger.info( f"📅 데이터 로드: {start} ~ {end} | TF={tail_tf} | " @@ -310,7 +335,15 @@ def prepare_tail_search_context( pass from kis_trader.backtest.tail_param_search import _tail_grids - pre_grid = _tail_grids(mode) + # tpe = 연속 Optuna (Grid 미사용). 알 수 없는 mode 가 fast 로 폴백되면 안 됨. + if mode == "tpe": + pre_grid: Dict[str, Any] = {} + base_params["skip_hts_scan_dupes"] = False + logger.info( + "📌 mode=tpe — 연속(float/int) 탐색 (Grid categorical 미사용, TPE 가 구간 축소)" + ) + else: + pre_grid = _tail_grids(mode) _ob_axes = ("max_spread_pct", "min_bid_ask_ratio") _ob_sweeping = any(len(set(pre_grid.get(k) or [])) > 1 for k in _ob_axes) if ob_filter_on and _ob_sweeping: @@ -382,7 +415,7 @@ def prepare_tail_search_context( total_budget_krw=total_budget_f, period_days=period_days, portfolio=portfolio, - grid_keys=tail_grid_axis_keys(mode), + grid_keys=tail_tpe_axis_keys() if mode == "tpe" else tail_grid_axis_keys(mode), ob_filter_on=ob_filter_on, cache_holder=cache_holder, shared_tick_store=shared_tick_store, @@ -395,7 +428,8 @@ def _make_sampler(name: str, seed: Optional[int]): n = (name or "tpe").strip().lower() if n == "random": return RandomSampler(seed=seed) - return TPESampler(seed=seed, multivariate=True) + # multivariate TPE + 조건부 suggest 시 independent sampling 경고가 trial마다 폭주 → 억제 + return TPESampler(seed=seed, multivariate=True, warn_independent_sampling=False) def run_tail_optuna( @@ -426,7 +460,10 @@ def run_tail_optuna( ) def objective(trial: optuna.Trial) -> float: - combo = suggest_tail_params(trial, ctx.mode) + if ctx.mode == "tpe": + combo = suggest_tail_params_tpe(trial) + else: + combo = suggest_tail_params(trial, ctx.mode) result = evaluate_tail_param_combo( combo, base_params=ctx.base_params, @@ -457,6 +494,7 @@ def run_tail_optuna( trial.set_user_attr("pf", float(result.get("pf") or 0)) trial.set_user_attr("total_trades", int(result["total_trades"])) trial.set_user_attr("params_json", json.dumps(result["params"], ensure_ascii=False)) + set_optuna_trial_stability_attrs(trial, result) if sort_by == "win_rate": return float(result["win_rate"]) @@ -489,7 +527,7 @@ def run_tail_optuna( combo = json.loads(params_raw) except json.JSONDecodeError: combo = dict(trial.params) - passing.append({ + row = { "params": combo, "apply_cfg": {**ctx.base_params, **combo}, "total_trades": int(trial.user_attrs.get("total_trades") or 0), @@ -497,18 +535,19 @@ def run_tail_optuna( "total_pnl": float(trial.user_attrs.get("total_pnl") or 0), "pf": float(trial.user_attrs.get("pf") or 0), "optuna_trial_number": trial.number, - }) + } + row.update(stability_fields_from_trial_attrs(trial)) + passing.append(row) if sort_by == "pnl": passing.sort(key=lambda r: (-float(r["total_pnl"]), -float(r["win_rate"]))) else: passing.sort(key=lambda r: (-float(r["win_rate"]), -float(r["total_pnl"]))) - profitable = [r for r in passing if float(r.get("total_pnl") or 0) > 0] - if profitable: - passing = profitable + tiers = build_optuna_result_tiers(passing, sort_by=sort_by) out_data = { "engine": "optuna", + "strategy": "tail", "mode": ctx.mode, "start": ctx.start, "end": ctx.end, @@ -535,7 +574,7 @@ def run_tail_optuna( "optuna_best_value": study.best_value if study.best_trial else None, "optuna_best_trial_number": study.best_trial.number if study.best_trial else None, "elapsed_sec": round(elapsed, 1), - "results": passing[:5000], + **tiers, } ts = datetime.now().strftime("%Y%m%d_%H%M%S") @@ -626,21 +665,35 @@ def run_tail_optuna( def apply_best_trial(study: optuna.Study, ctx: TailSearchContext) -> bool: - """Best trial → env_config (총손익≤0 스킵).""" - if not study.best_trial or study.best_value <= _FAIL_OBJECTIVE + 1: - logger.warning("⚠️ 적용할 best trial 없음 — DB 미적용") + """사후게이트 통과 trial → env_config (총손익≤0 스킵).""" + trial = pick_gated_apply_trial(study, sort_by="pnl", fail_objective=_FAIL_OBJECTIVE) + if trial is None: + logger.warning( + "⚠️ 사후게이트(results_gated) 통과 trial 없음 — DB 미적용" + ) return False - pnl = float(study.best_trial.user_attrs.get("total_pnl") or 0) + pnl = float(trial.user_attrs.get("total_pnl") or 0) if pnl <= 0: - logger.warning("⚠️ Best trial 총손익 ≤ 0 — DB 미적용. 기존 설정 유지.") + logger.warning("⚠️ gated trial 총손익 ≤ 0 — DB 미적용. 기존 설정 유지.") return False - params_raw = study.best_trial.user_attrs.get("params_json") or "{}" + params_raw = trial.user_attrs.get("params_json") or "{}" combo = json.loads(params_raw) merged = {**ctx.base_params, **combo} apply_params_to_db(merged) env_map = _tail_params_to_env_map(merged) - logger.info("🚀 [Optuna apply-best] trial #%d → env_config", study.best_trial.number) + logger.info("🚀 [Optuna apply-best] gated trial #%d → env_config", trial.number) logger.info("적용된 값: %s", json.dumps(env_map, indent=2, ensure_ascii=False)) + try: + from kis_trader.backtest.optuna_daily_trail_recommend import ( + apply_daily_trail_recommend_from_optuna_json, + ) + apply_daily_trail_recommend_from_optuna_json( + getattr(study, "_kis_export_path", None), + strategy="tail", + log=logger, + ) + except Exception as exc: + logger.warning("⚠️ 다단트레일 추천 반영 스킵: %s", exc) return True @@ -648,6 +701,12 @@ def main() -> None: from kis_trader.backtest.param_search_dates import resolve_param_search_range week_ago, today = resolve_param_search_range("TAIL", lookback_days=7) + # Optuna 게이트·브리핑 키 DB 기본값 (없으면 삽입) + try: + ensure_optuna_gate_env_defaults() + except Exception: + pass + parser = argparse.ArgumentParser( description="Optuna TPE 파라미터 탐색 (Grid CLI add-on, storage=MariaDB 141 기본)", ) @@ -691,9 +750,25 @@ def main() -> None: help="목적함수: tail/breakout pnl|win_rate, momentum score|pnl|win_rate (미지정=전략 기본)", ) add_search_filter_cli_args(parser) - parser.add_argument("--min_trades", default=3, type=int, help="최소 거래 건수") + # Optuna: 탐색 중 승률·PF 게이트 OFF(0) — TPE가 PnL 차이를 학습. 사후 results_gated 로 후보 분리. + _sw, _sp, _st = optuna_search_gate_defaults() + parser.set_defaults(min_win_rate=_sw, min_pf=_sp, min_trades=_st) + parser.add_argument( + "--min_trades", + default=_st, + type=int, + help=f"최소 거래 건수 (Optuna 기본 {_st}, Grid CLI 와 별개)", + ) parser.add_argument("--fallback-universe", action="store_true", dest="fallback_universe") parser.add_argument("--use-universe-history", action="store_true", dest="use_universe_history") + parser.add_argument( + "--universe-history-source", + default=None, + choices=["kiwoom", "ls"], + dest="universe_history_source", + help="이력 테이블: kiwoom=target_candidates_history, ls=ls_candidates_history " + "(기본 env BACKTEST_UNIVERSE_HISTORY_SOURCE 또는 kiwoom)", + ) parser.add_argument( "--orderbook-filter", default="off", choices=["off", "on", "auto"], dest="orderbook_filter", @@ -706,6 +781,10 @@ def main() -> None: "--no-progress", action="store_true", dest="no_progress", help="Optuna progress bar 끄기", ) + parser.add_argument( + "--symbol", default="", + help="us_momentum 전용: 1종목 유니버스(종목 cfg Optuna). 예: TSLA", + ) args = parser.parse_args() n_trials = args.trials @@ -732,7 +811,7 @@ def main() -> None: strategy = (args.strategy or "tail").strip().lower() if strategy not in OPTUNA_STRATEGIES: - logger.error("❌ --strategy 는 tail/momentum/breakout/scalp 중 하나") + logger.error("❌ --strategy 는 tail/momentum/us_momentum/breakout/scalp 중 하나") sys.exit(2) allowed_modes = STRATEGY_MODES.get(strategy, []) @@ -743,10 +822,10 @@ def main() -> None: sort_by = (args.sort_by or "").strip().lower() if not sort_by: - sort_by = "score" if strategy in ("momentum", "scalp") else "pnl" + sort_by = "score" if strategy in ("momentum", "us_momentum", "scalp") else "pnl" momentum_sort = {"score", "pnl", "win_rate"} basic_sort = {"pnl", "win_rate"} - if strategy in ("momentum", "scalp") and sort_by not in momentum_sort: + if strategy in ("momentum", "us_momentum", "scalp") and sort_by not in momentum_sort: logger.error("❌ %s --sort-by 는 score|pnl|win_rate", strategy) sys.exit(2) if strategy in ("tail", "breakout") and sort_by not in basic_sort: @@ -790,6 +869,7 @@ def main() -> None: max_stocks=args.max_stocks, total_budget_krw=args.total_budget, orderbook_filter=args.orderbook_filter, + history_source=args.universe_history_source, ) if ctx is None: sys.exit(1) @@ -810,16 +890,24 @@ def main() -> None: if args.apply_best: apply_best_trial(study, ctx) - elif strategy == "momentum": + elif strategy in ("momentum", "us_momentum"): + _mom_market = "US" if strategy == "us_momentum" else "KR" + _sym = str(getattr(args, "symbol", "") or "").strip().upper() + if _sym and strategy != "us_momentum": + logger.error("❌ --symbol 은 us_momentum 전용") + sys.exit(2) ctx_m = prepare_momentum_search_context( args.start, args.end, mode, - use_fallback_universe=use_fallback, + use_fallback_universe=use_fallback or (_mom_market == "US"), time_start_hm=args.time_start, time_end_hm=args.time_end, slot_money=args.slot_money, max_stocks=args.max_stocks, total_budget_krw=args.total_budget, - orderbook_filter=args.orderbook_filter, + orderbook_filter="off" if _mom_market == "US" else args.orderbook_filter, + market=_mom_market, + symbol=_sym if strategy == "us_momentum" else "", + history_source=args.universe_history_source, ) if ctx_m is None: sys.exit(1) @@ -838,7 +926,11 @@ def main() -> None: show_progress=not args.no_progress, ) if args.apply_best: - apply_best_momentum_trial(study) + if strategy == "us_momentum": + from kis_trader.backtest.optuna_momentum import apply_best_us_momentum_trial + apply_best_us_momentum_trial(study, symbol=_sym) + else: + apply_best_momentum_trial(study) elif strategy == "scalp": ctx_s = prepare_scalp_search_context( @@ -850,6 +942,7 @@ def main() -> None: max_stocks=args.max_stocks, total_budget_krw=args.total_budget, orderbook_filter=args.orderbook_filter, + history_source=args.universe_history_source, ) if ctx_s is None: sys.exit(1) @@ -897,6 +990,7 @@ def main() -> None: max_stocks=args.max_stocks, total_budget_krw=args.total_budget, orderbook_filter=args.orderbook_filter, + history_source=args.universe_history_source, ) if ctx_b is None: sys.exit(1) diff --git a/kis_trader/backtest/param_search_scalping.py b/kis_trader/backtest/param_search_scalping.py index f01c3b5..dd46a89 100644 --- a/kis_trader/backtest/param_search_scalping.py +++ b/kis_trader/backtest/param_search_scalping.py @@ -703,8 +703,7 @@ def _get_scalp_field_map(): "min_hold_sec": ("SCALP_MIN_HOLD_SEC", lambda v: str(int(float(v)))), "rsi_period": ("SCALP_RSI_PERIOD", lambda v: str(int(float(v)))), "max_daily": ("SCALP_MAX_DAILY", lambda v: str(int(float(v)))), - "time_start_hm": ("SCALP_TIME_START", lambda v: str(int(float(v)))), - "time_end_hm": ("SCALP_TIME_END", lambda v: str(int(float(v)))), + # time_start/end: field_map 제외 — session_env_patch 기본 OFF(운영 시간창 보존) # 호가필터 축 → SCALP_ORDERBOOK_* (글로벌 ORDERBOOK_* 폐기) "max_spread_pct": ("SCALP_ORDERBOOK_MAX_SPREAD_PCT", lambda v: str(float(v))), "min_bid_ask_ratio": ("SCALP_ORDERBOOK_MIN_BID_ASK_RATIO", lambda v: str(float(v))), @@ -807,7 +806,8 @@ def evaluate_scalp_param_combo( merged["slot_money"] = float(slot_money) merged["max_stocks"] = int(max_stocks) merged["total_budget_krw"] = float(total_budget_krw) - return { + from kis_trader.backtest.optuna_common import attach_daily_stability + return attach_daily_stability({ "params": {k: ui_params[k] for k in grid_keys if k in ui_params}, "total_pnl": int(total_pnl), "win_rate": round(win_rate, 2), @@ -818,7 +818,7 @@ def evaluate_scalp_param_combo( "bot_pct": stats["bot_pct"], "daily_avg_pct": stats["daily_avg_pct"], "merged_params": merged, - } + }, trades) def _params_to_db_snapshot(params: dict) -> dict: @@ -1036,39 +1036,25 @@ def _evaluate_scalp_chunk( return local_heap -def _load_candles_for_search(start: str, end: str, rsi_period: int) -> dict: +def _load_candles_for_search( + start: str, + end: str, + rsi_period: int, + *, + history_source: str = "kiwoom", +) -> dict: """엔진 직접 타격을 위해 DB에서 캔들을 한 번만 메모리에 로드합니다.""" db = TradeDB() codes_candles = {} try: start_key = (start.replace("-", "") + "0000") if start else "20260101" end_key = (end.replace("-", "") + "2359") if end else "99991231" + from kis_trader.backtest.scalping_backtest_common import load_scalp_candles_by_code - codes_raw = db.conn.execute( - "SELECT DISTINCT code FROM ws_candles WHERE timeframe=1 " - "AND candle_time >= %s AND candle_time <= %s ORDER BY code", - [start_key, end_key] - ).fetchall() - codes = [r["code"] for r in codes_raw] - - for code in codes: - rows = db.conn.execute( - "SELECT candle_time, open, high, low, close, volume " - "FROM ws_candles " - "WHERE timeframe=1 AND code=%s " - "AND candle_time >= %s AND candle_time <= %s " - "AND is_confirmed=1 " - "ORDER BY candle_time ASC", - [code, start_key, end_key] - ).fetchall() - if len(rows) < rsi_period + 5: - continue - codes_candles[code] = [dict(r) for r in rows] - if codes_candles: - from kis_trader.backtest.scalping_backtest_common import ( - prepend_scalp_candle_warmup, - ) - prepend_scalp_candle_warmup(db, codes_candles, start_key[:12]) + codes_candles, _ = load_scalp_candles_by_code( + db, start_key, end_key, rsi_period=rsi_period, + history_source=history_source, + ) finally: db.close() return codes_candles diff --git a/kis_trader/backtest/range_break_backtest_common.py b/kis_trader/backtest/range_break_backtest_common.py index 36594a9..2ecf079 100644 --- a/kis_trader/backtest/range_break_backtest_common.py +++ b/kis_trader/backtest/range_break_backtest_common.py @@ -135,6 +135,10 @@ def run_range_break_backtest_web_aligned( start_key = str(meta_out.get("start_key") or "") end_key = str(meta_out.get("end_key") or "") db = meta_out.get("db") + if db is None and start_key and end_key: + from kis_trader.backtest.backtest_portfolio_common import ensure_meta_db + + db = ensure_meta_db(meta_out) if db and start_key and end_key: loaded_ticks, tick_rows = load_breakout_ticks_by_code( db, start_key, end_key, set(candles_by_code.keys()), diff --git a/kis_trader/backtest/results/optuna_breakout_tpe_20260721_133945.briefing.md b/kis_trader/backtest/results/optuna_breakout_tpe_20260721_133945.briefing.md new file mode 100644 index 0000000..784ede9 --- /dev/null +++ b/kis_trader/backtest/results/optuna_breakout_tpe_20260721_133945.briefing.md @@ -0,0 +1,17 @@ +# Optuna 브리핑 — 돌파 (tpe) +기간: 2026-07-20 ~ 2026-07-21 (거래일≈2일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 | 후보 게이트: WR≥40% PF≥1 +학습용 통과 200건 · 사후합격(results_gated) 118건 + +## 이전 장에서는 +- 실매 동기간 청산 19건 · 승률 63% · 합산 PnL 15,060원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #145 · 거래 7건 · 승률 71.4% · PF 9.48 · PnL 47,088원 +- 표본 장이 2일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-21 13:39:46 (rule)_ diff --git a/kis_trader/backtest/results/optuna_breakout_tpe_20260721_195738.briefing.md b/kis_trader/backtest/results/optuna_breakout_tpe_20260721_195738.briefing.md new file mode 100644 index 0000000..d0ffdcb --- /dev/null +++ b/kis_trader/backtest/results/optuna_breakout_tpe_20260721_195738.briefing.md @@ -0,0 +1,26 @@ +# Optuna 브리핑 — 돌파 (tpe) +기간: 2026-07-20 ~ 2026-07-21 (거래일≈2일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 200건 · 사후합격(results_gated) 92건 + +## 이전 장에서는 +- 실매 동기간 청산 22건 · 승률 59% · 합산 PnL 4,528원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #157 · 거래 12건 · 승률 58.3% · PF 4.23 · PnL 67,318원 +- 표본 장이 2일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-21 19:57:39 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +지난 2일간 실매는 22건 거래에 PnL 4,528원이었고, 백테스트 Optuna 최고 결과는 #157번 트라이얼로 12건 거래 PnL 67,318원이었습니다. 실매와 백테스트 PnL 차이(고스트퍼지 등)는 정상적인 현상입니다. 특히 2일이라는 짧은 기간의 백테스트는 표본 부족으로 인한 과적합 위험이 매우 높으므로, 이전 장에 일시적으로 잘 맞았을 뿐임을 분명히 경고합니다. + +## 앞으로 장에서는 +2일치 Optuna best를 실매에 즉시 적용하는 것은 위험합니다. 최소 5일 이상 다일 재검증과 웹백테스트를 거쳐 `results_gated` 후보군만 검토하십시오. 시장은 시시각각 변해 '내일도 같은 장'이 아닙니다. 과적합된 지표는 변동성 장에서 손절이 먼저 무너집니다. 높은 승률보다는 손실 방어에 집중하고, 페이퍼/소액으로 신중하게 관찰 후 점진적으로 확대하시길 바랍니다. diff --git a/kis_trader/backtest/results/optuna_breakout_tpe_20260723_214201.briefing.md b/kis_trader/backtest/results/optuna_breakout_tpe_20260723_214201.briefing.md new file mode 100644 index 0000000..82f2c88 --- /dev/null +++ b/kis_trader/backtest/results/optuna_breakout_tpe_20260723_214201.briefing.md @@ -0,0 +1,27 @@ +# Optuna 브리핑 — 돌파 (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 200건 · 사후합격(results_gated) 144건 + +## 이전 장에서는 +- 실매 동기간 청산 20건 · 승률 50% · 합산 PnL 22,893원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #132 · 거래 32건 · 승률 59.4% · PF 2.62 · PnL 122,760원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 21:42:04 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 + +지난 3일간의 돌파 전략 Optuna 백테스트에서 200개 시도 중 144개가 합격 기준을 통과했습니다. 최고 성능 조합은 32건 거래에 승률 59.4%, 122,760원의 PnL을 기록했습니다. 하지만 실제 매매에서는 20건 거래, 승률 50%, 합산 PnL 22,893원으로 백테스트 결과와 큰 차이를 보였습니다. 이는 고스트 슬리피지, 유니버스 구성, 틱 경로 차이 등 실매와 백테스트 간의 필연적인 괴리입니다. + +## 앞으로 장에서는 + +단 3일간의 Optuna 결과는 과적합 및 표본 부족(32거래) 위험이 매우 큽니다. 이 결과를 곧바로 실매에 적용하는 것은 위험하며, 최소 5거래일 이상 다일(多日) 재검증과 웹백테스트를 거쳐야 합니다. 실제 적용 시에는 `results_gated` 후보군만 신중하게 검토하시고, 시장 변동성 증가 시 승률보다는 손절 라인이 먼저 깨지는지 주의 깊게 관찰해야 합니다. 소액/모의 투자로 1~2일 추가 관찰 후 점진적으로 확대하시길 강력히 권고합니다. 특정 종목 매수 추천이나 확정 수익을 약속하지 않습니다. diff --git a/kis_trader/backtest/results/optuna_breakout_tpe_20260725_025947.briefing.md b/kis_trader/backtest/results/optuna_breakout_tpe_20260725_025947.briefing.md new file mode 100644 index 0000000..e4ed034 --- /dev/null +++ b/kis_trader/backtest/results/optuna_breakout_tpe_20260725_025947.briefing.md @@ -0,0 +1,21 @@ +# Optuna 브리핑 — 돌파 (tpe) +기간: 2026-07-21 ~ 2026-07-24 (거래일≈4일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 200건 · 사후합격(results_gated) 155건 + +## 이전 장에서는 +- 실매 동기간 청산 27건 · 승률 41% · 합산 PnL 24,882원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #49 · 거래 34건 · 승률 55.9% · PF 3.95 · PnL 312,543원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-25 02:59:51 (rule)_ + +## AI 코멘트 + +_(미생성: api_call_failed. 구글 키는 GEMINI_API_KEY 를 DB/환경에 넣으세요 — kis_trader/backtest/optuna_briefing.py 모듈 docstring 참고)_ diff --git a/kis_trader/backtest/results/optuna_breakout_tpe_20260725_095814.briefing.md b/kis_trader/backtest/results/optuna_breakout_tpe_20260725_095814.briefing.md new file mode 100644 index 0000000..e25d207 --- /dev/null +++ b/kis_trader/backtest/results/optuna_breakout_tpe_20260725_095814.briefing.md @@ -0,0 +1,21 @@ +# Optuna 브리핑 — 돌파 (tpe) +기간: 2026-07-21 ~ 2026-07-24 (거래일≈4일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 200건 · 사후합격(results_gated) 135건 + +## 이전 장에서는 +- 실매 동기간 청산 27건 · 승률 41% · 합산 PnL 24,882원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #69 · 거래 23건 · 승률 52.2% · PF 4.71 · PnL 291,426원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-25 09:58:18 (rule)_ + +## AI 코멘트 + +_(미생성: api_call_failed. 구글 키는 GEMINI_API_KEY 를 DB/환경에 넣으세요 — kis_trader/backtest/optuna_briefing.py 모듈 docstring 참고)_ diff --git a/kis_trader/backtest/results/optuna_breakout_tpe_20260728_005315.briefing.md b/kis_trader/backtest/results/optuna_breakout_tpe_20260728_005315.briefing.md new file mode 100644 index 0000000..07b892f --- /dev/null +++ b/kis_trader/backtest/results/optuna_breakout_tpe_20260728_005315.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — 돌파 (tpe) +기간: 2026-07-21 ~ 2026-07-27 (거래일≈7일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 200건 · 사후합격(results_gated) 154건 + +## 이전 장에서는 +- 실매 동기간 청산 32건 · 승률 34% · 합산 PnL -2,268원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #97 · 거래 15건 · 승률 73.3% · PF 4.62 · PnL 322,346원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-28 00:53:20 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +**「이전 장에서는」** +Optuna 백테스트에서는 #97 조합이 짧은 7일간 15거래, 승률 73.3%, PnL 32만원으로 높은 성과를 보였습니다. 하지만 실제 매매에서는 32건의 거래에서 PnL -2,268원, 승률 34%로 백테스트와 큰 차이를 보였음을 확인했습니다. 이는 백테스트와 실매 간의 '고스트 퍼지' 등 여러 괴리가 발생할 수 있음을 분명히 보여줍니다. + +**「앞으로 장에서는」** +단 7일간의 백테스트는 시장 변화에 취약하며 과적합이나 표본 부족 위험이 매우 높습니다. 따라서 Optuna 최적 조합을 바로 실매에 적용하지 말고, 반드시 `results_gated` 내에서 다일 재검증과 웹 백테스트를 거쳐야 합니다. 시장이 변할 때는 승률 자랑보다 손절 기능이 살아있는지를 확인하고, 소액/모의 투자로 관찰 후 점진적으로 확대하시기 바랍니다. 확정 수익은 그 누구도 보장할 수 없습니다. diff --git a/kis_trader/backtest/results/optuna_breakout_tpe_20260728_225245.briefing.md b/kis_trader/backtest/results/optuna_breakout_tpe_20260728_225245.briefing.md new file mode 100644 index 0000000..c159345 --- /dev/null +++ b/kis_trader/backtest/results/optuna_breakout_tpe_20260728_225245.briefing.md @@ -0,0 +1,27 @@ +# Optuna 브리핑 — 돌파 (tpe) +기간: 2026-07-27 ~ 2026-07-28 (거래일≈2일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 199건 · 사후합격(results_gated) 57건 + +## 이전 장에서는 +- 실매 동기간 청산 6건 · 승률 0% · 합산 PnL -36,813원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #178 · 거래 2건 · 승률 100.0% · PF 9999.00 · PnL 14,007원 +- 승률이 비정상적으로 높고 표본이 작습니다 → **해당 장에만 맞는 과적합** 신호. +- 표본 장이 2일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-28 22:52:47 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +돌파 전략 Optuna 백테스트는 단 2일, 2거래로 100% 승률의 최적값을 보였으나, 이는 **과적합**과 **표본 부족**의 명백한 증거입니다. 같은 기간 실매는 6거래 0% 승률, 마이너스 PnL로, 백테스트와 실매 간 **괴리**가 컸습니다. 고스트퍼지 등 실제 환경 차이로 백테스트 결과가 실매와 다를 수 있음을 경고합니다. + +## 앞으로 장에서는 +단기 Optuna 최적값을 바로 실매에 적용하지 마십시오. 최소 5일 이상 **다일 재검증**과 모의 투자로 파라미터 견고함을 확인하세요. 시장 변화 시 승률보다 **손절 기능이 유효한지**를 우선시하고, 소액 또는 페이퍼 트레이딩으로 충분히 관찰 후 확대해야 합니다. 특정 종목 추천이나 확정 수익 약속은 불가합니다. diff --git a/kis_trader/backtest/results/optuna_momentum_fast_20260722_000659.briefing.md b/kis_trader/backtest/results/optuna_momentum_fast_20260722_000659.briefing.md new file mode 100644 index 0000000..3422fcb --- /dev/null +++ b/kis_trader/backtest/results/optuna_momentum_fast_20260722_000659.briefing.md @@ -0,0 +1,22 @@ +# Optuna 브리핑 — 모멘텀 (fast) +기간: 2026-07-21 ~ 2026-07-21 (거래일≈1일) · trials 10/10 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 10건 · 사후합격(results_gated) 10건 + +## 이전 장에서는 +- 실매 동기간 청산 22건 · 승률 32% · 합산 PnL -24,472원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #1 · 거래 5건 · 승률 80.0% · PF 75.67 · PnL 12,843원 +- 표본 장이 1일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-22 00:07:00 (rule)_ + +## AI 코멘트 + +_(미생성: api_call_failed. 구글 키는 GEMINI_API_KEY 를 DB/환경에 넣으세요 — kis_trader/backtest/optuna_briefing.py 모듈 docstring 참고)_ diff --git a/kis_trader/backtest/results/optuna_momentum_fast_20260722_000822.briefing.md b/kis_trader/backtest/results/optuna_momentum_fast_20260722_000822.briefing.md new file mode 100644 index 0000000..7e03e48 --- /dev/null +++ b/kis_trader/backtest/results/optuna_momentum_fast_20260722_000822.briefing.md @@ -0,0 +1,22 @@ +# Optuna 브리핑 — 모멘텀 (fast) +기간: 2026-07-21 ~ 2026-07-21 (거래일≈1일) · trials 10/10 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 10건 · 사후합격(results_gated) 10건 + +## 이전 장에서는 +- 실매 동기간 청산 22건 · 승률 32% · 합산 PnL -24,472원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #9 · 거래 9건 · 승률 66.7% · PF 23.66 · PnL 15,837원 +- 표본 장이 1일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-22 00:08:22 (rule)_ + +## AI 코멘트 + +_(미생성: api_call_failed. 구글 키는 GEMINI_API_KEY 를 DB/환경에 넣으세요 — kis_trader/backtest/optuna_briefing.py 모듈 docstring 참고)_ diff --git a/kis_trader/backtest/results/optuna_momentum_fast_20260722_000857.briefing.md b/kis_trader/backtest/results/optuna_momentum_fast_20260722_000857.briefing.md new file mode 100644 index 0000000..088778a --- /dev/null +++ b/kis_trader/backtest/results/optuna_momentum_fast_20260722_000857.briefing.md @@ -0,0 +1,23 @@ +# Optuna 브리핑 — 모멘텀 (fast) +기간: 2026-07-21 ~ 2026-07-21 (거래일≈1일) · trials 10/10 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 10건 · 사후합격(results_gated) 10건 + +## 이전 장에서는 +- 실매 동기간 청산 22건 · 승률 32% · 합산 PnL -24,472원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #1 · 거래 5건 · 승률 100.0% · PF 9999.00 · PnL 14,283원 +- 승률이 비정상적으로 높고 표본이 작습니다 → **해당 장에만 맞는 과적합** 신호. +- 표본 장이 1일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-22 00:08:57 (rule)_ + +## AI 코멘트 + +_(미생성: api_call_failed. 구글 키는 GEMINI_API_KEY 를 DB/환경에 넣으세요 — kis_trader/backtest/optuna_briefing.py 모듈 docstring 참고)_ diff --git a/kis_trader/backtest/results/optuna_momentum_tpe_20260721_113936.briefing.md b/kis_trader/backtest/results/optuna_momentum_tpe_20260721_113936.briefing.md new file mode 100644 index 0000000..2f5142a --- /dev/null +++ b/kis_trader/backtest/results/optuna_momentum_tpe_20260721_113936.briefing.md @@ -0,0 +1,17 @@ +# Optuna 브리핑 — 모멘텀 (tpe) +기간: 2026-07-20 ~ 2026-07-21 (거래일≈2일) · trials 200/200 +탐색 게이트: WR≥40% PF≥1 | 후보 게이트: WR≥40% PF≥1 +학습용 통과 85건 · 사후합격(results_gated) 85건 + +## 이전 장에서는 +- 실매 동기간 청산 26건 · 승률 27% · 합산 PnL -115,432원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #176 · 거래 12건 · 승률 66.7% · PF 4.92 · PnL 46,786원 +- 표본 장이 2일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-21 13:25:20 (rule)_ diff --git a/kis_trader/backtest/results/optuna_momentum_tpe_20260721_140806.briefing.md b/kis_trader/backtest/results/optuna_momentum_tpe_20260721_140806.briefing.md new file mode 100644 index 0000000..edda3f4 --- /dev/null +++ b/kis_trader/backtest/results/optuna_momentum_tpe_20260721_140806.briefing.md @@ -0,0 +1,27 @@ +# Optuna 브리핑 — 모멘텀 (tpe) +기간: 2026-07-20 ~ 2026-07-21 (거래일≈2일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 | 후보 게이트: WR≥40% PF≥1 +학습용 통과 174건 · 사후합격(results_gated) 103건 + +## 이전 장에서는 +- 실매 동기간 청산 31건 · 승률 29% · 합산 PnL -112,534원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #194 · 거래 16건 · 승률 75.0% · PF 3.08 · PnL 46,954원 +- 표본 장이 2일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-21 14:08:09 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 + +지난 2일간 실매매는 31건, 승률 29%, 합산 PnL -112,534원을 기록했습니다. 이는 백테스트 결과와 분명한 괴리를 보였습니다. Optuna 백테스트에서는 #194번이 거래 16건, 승률 75.0%, PF 3.08, PnL 46,954원으로 가장 우수했으나, 단 2일이라는 **극히 짧은 기간**은 **과적합 및 표본 부족**의 위험을 내포합니다. **실매매와 백테스트 간의 고스트·유니버스·틱 경로 차이로 인한 괴리는 늘 발생할 수 있습니다.** + +## 앞으로 장에서는 + +단 1~2일 결과인 Optuna 최적값을 **절대 바로 실매에 적용하지 마십시오.** 최소 5거래일 이상 **충분한 다일 검증**과 웹백테스트를 통해 보수적으로 접근해야 합니다. 적용 시에는 엄선된 `results_gated` 후보만 고려하며, 시장 변동성 확대 시에는 **손절 기능 생존 여부**를 승률보다 우선시해야 합니다. **백테스트와 실매매 간의 괴리**는 언제든 발생할 수 있으므로, 반드시 페이퍼/소액 매매로 충분히 관찰 후 단계를 확대하시기 바랍니다. **특정 종목 추천이나 확정 수익은 보장되지 않습니다.** diff --git a/kis_trader/backtest/results/optuna_momentum_tpe_20260721_193521.briefing.md b/kis_trader/backtest/results/optuna_momentum_tpe_20260721_193521.briefing.md new file mode 100644 index 0000000..10de9a7 --- /dev/null +++ b/kis_trader/backtest/results/optuna_momentum_tpe_20260721_193521.briefing.md @@ -0,0 +1,26 @@ +# Optuna 브리핑 — 모멘텀 (tpe) +기간: 2026-07-20 ~ 2026-07-21 (거래일≈2일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 185건 · 사후합격(results_gated) 72건 + +## 이전 장에서는 +- 실매 동기간 청산 34건 · 승률 29% · 합산 PnL -108,819원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #146 · 거래 45건 · 승률 64.4% · PF 1.84 · PnL 73,410원 +- 표본 장이 2일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-21 19:35:25 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +지난 2일간의 Optuna 백테스트는 #146 조합에서 승률 64.4%, PF 1.84의 성과를 보였으나, 실제 운용에서는 -10만원 손실이 발생했습니다. 2일이라는 짧은 기간은 표본 부족과 과적합의 위험이 크며, 백테스트 결과와 실매는 고스트 퍼지 등 환경 차이로 언제든 괴리될 수 있음을 명심해야 합니다. + +## 앞으로 장에서는 +이틀간의 결과는 과적합 가능성이 높아, 즉시 실매 적용은 금지합니다. 최소 5일 이상 다일 검증 및 웹백테스트를 통해 `results_gated` 후보를 재확인하세요. 변동성 장세에서는 승률보다 손절 기능 유지가 중요합니다. 실매 전 페이퍼/소액으로 충분히 관찰하여 백테스트 괴리를 확인하고 점진적으로 확대해야 합니다. 특정 종목 매수 추천이나 확정 수익은 불가합니다. diff --git a/kis_trader/backtest/results/optuna_momentum_tpe_20260722_000031.briefing.md b/kis_trader/backtest/results/optuna_momentum_tpe_20260722_000031.briefing.md new file mode 100644 index 0000000..363b395 --- /dev/null +++ b/kis_trader/backtest/results/optuna_momentum_tpe_20260722_000031.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — 모멘텀 (tpe) +기간: 2026-07-20 ~ 2026-07-21 (거래일≈2일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 0건 · 사후합격(results_gated) 0건 + +## 이전 장에서는 +- 실매 동기간 청산 34건 · 승률 29% · 합산 PnL -108,819원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 이 기간 백테에서는 **유의미한 통과 조합이 거의 없었습니다.** 유니버스·틱·손절·시간창을 먼저 점검하세요 (돌파 0건이면 특히). + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 현재 사후합격 0건 → 파라미터 유지(현행 DB) + 유니버스/데이터 점검이 우선입니다. + +_생성: 2026-07-22 00:00:31 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +지난 2일간의 Optuna 백테스트에서는 유의미한 전략 조합을 전혀 찾지 못했습니다(0건). 실거래에서는 29% 승률로 손실이 발생했는데, 이는 백테스트 환경과 실매 환경 간의 고스트퍼지 등 괴리가 크다는 점을 분명히 보여줍니다. 단기 데이터는 표본 부족과 과적합 위험이 큽니다. + +## 앞으로 장에서는 +향후 단 1~2일치 Optuna 결과는 과적합 및 표본 부족 위험이 매우 높아 실매에 바로 적용하지 마십시오. 최소 5거래일 이상으로 재검증하고, 백테스트와 실매 간의 괴리를 항상 경계해야 합니다. 현재는 유효 조합이 없으므로 전략 파라미터나 유니버스 데이터를 먼저 점검하며, 오직 `results_gated` 후보만 신중히 검토하세요. 특정 종목 매수 추천이나 확정 수익은 절대 약속할 수 없음을 명심하십시오. diff --git a/kis_trader/backtest/results/optuna_momentum_tpe_20260722_001920.briefing.md b/kis_trader/backtest/results/optuna_momentum_tpe_20260722_001920.briefing.md new file mode 100644 index 0000000..c8c04ed --- /dev/null +++ b/kis_trader/backtest/results/optuna_momentum_tpe_20260722_001920.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — 모멘텀 (tpe) +기간: 2026-07-17 ~ 2026-07-22 (거래일≈6일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 167건 · 사후합격(results_gated) 167건 + +## 이전 장에서는 +- 실매 동기간 청산 34건 · 승률 29% · 합산 PnL -108,819원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #190 · 거래 12건 · 승률 91.7% · PF 46.80 · PnL 20,335원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-22 00:19:20 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +**이전 장에서는** +지난 6일간의 짧은 백테스트에서, 모멘텀 전략은 사후합격 기준(WR≥40%, PF≥1)으로 167개 조합이 통과했습니다. 이 중 특정 조합(#190)은 12건의 거래로 91.7%의 승률과 2만원 이상의 수익을 기록하며 우수한 성과를 보였습니다. 그러나 같은 기간 실매는 34건의 거래에서 29% 승률, 약 11만원의 손실을 기록했습니다. 이는 매우 짧은 기간의 과적합과 표본 부족, 그리고 백테스트와 실매 환경(고스트퍼지 등)의 근본적인 괴리로 인한 결과입니다. + +**앞으로 장에서는** +단 며칠간의 백테스트 최적화 결과는 시장 변화에 매우 취약하며, 특정 구간에 과적합되었을 가능성이 높습니다. 특히 12건 같은 소수 거래의 높은 승률과 수익은 통계적 우연일 수 있습니다. 따라서 Optuna `results_gated`의 우수 조합이라도 곧바로 실매에 적용하지 마십시오. 최소 5일 이상의 다일 재검증과 페이퍼/소액 모의 투자를 통해 손절 라인이 유효한지 면밀히 관찰 후 신중하게 접근해야 합니다. 어떠한 전략도 확정 수익을 약속하지 않으며, 특정 종목을 매수 추천하는 것이 아님을 명심해 주십시오. diff --git a/kis_trader/backtest/results/optuna_momentum_tpe_20260722_233450.briefing.md b/kis_trader/backtest/results/optuna_momentum_tpe_20260722_233450.briefing.md new file mode 100644 index 0000000..8bf1a07 --- /dev/null +++ b/kis_trader/backtest/results/optuna_momentum_tpe_20260722_233450.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — 모멘텀 (tpe) +기간: 2026-07-20 ~ 2026-07-22 (거래일≈3일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 183건 · 사후합격(results_gated) 89건 + +## 이전 장에서는 +- 실매 동기간 청산 41건 · 승률 24% · 합산 PnL -124,416원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #148 · 거래 67건 · 승률 52.2% · PF 1.60 · PnL 125,814원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-22 23:34:56 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +**이전 장에서는** +지난 3일간 모멘텀 전략 Optuna 백테스트 결과, trial #148이 67건 거래에 승률 52.2%, PF 1.6으로 12.5만 원 수익을 기록했습니다. 하지만 동기간 실매는 41건 청산, 승률 24%, -12.4만 원 손실을 보였습니다. 이는 백테스트와 실매 환경의 괴리(고스트·유니버스·틱 경로 차이) 때문입니다. + +**앞으로 장에서는** +단 3일 백테스트는 과적합 및 표본 부족 위험이 매우 큽니다. Optuna 최고 결과라도 바로 실매에 적용하지 마세요. 최소 5일 이상의 다일 재검증과 웹백테스트를 반드시 거쳐야 합니다. 특히 시장 변화 시 손절 작동 여부가 중요하며, 페이퍼/소액 모의투자로 충분히 관찰 후 적용을 고려하십시오. **특정 종목 매수 추천 및 확정 수익은 절대 약속할 수 없습니다.** diff --git a/kis_trader/backtest/results/optuna_momentum_tpe_20260723_204339.briefing.md b/kis_trader/backtest/results/optuna_momentum_tpe_20260723_204339.briefing.md new file mode 100644 index 0000000..9f4bde9 --- /dev/null +++ b/kis_trader/backtest/results/optuna_momentum_tpe_20260723_204339.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — 모멘텀 (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 178건 · 사후합격(results_gated) 141건 + +## 이전 장에서는 +- 실매 동기간 청산 60건 · 승률 30% · 합산 PnL -33,695원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #139 · 거래 19건 · 승률 84.2% · PF 8.68 · PnL 176,927원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 20:43:49 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +3일간의 모멘텀 백테스트 결과, 최적 조합은 19건 거래에서 84.2% 승률과 PF 8.68을 보였습니다. 그러나 실제 매매는 승률 30%로 손실을 기록하여 백테스트와 큰 괴리가 확인되었습니다. 이는 극히 짧은 기간과 적은 거래 건수로 인한 과적합, 그리고 실매와 백테스트 간의 차이 때문일 수 있습니다. + +## 앞으로 장에서는 +이처럼 짧은 기간의 Optuna 결과는 과적합 및 표본 부족 위험이 큽니다. 바로 실매에 적용하지 말고, 반드시 5거래일 이상 재검증과 웹백테스트를 거쳐 `results_gated` 후보만 신중히 검토하세요. 시장 변동 시 손절 로직의 생존이 중요하므로, 무조건적인 승률 자랑보다 손절 작동 여부를 먼저 확인하십시오. 페이퍼/소액 모의 매매로 충분히 관찰 후 단계적으로 확대하시길 바랍니다. diff --git a/kis_trader/backtest/results/optuna_momentum_tpe_20260725_024024.briefing.md b/kis_trader/backtest/results/optuna_momentum_tpe_20260725_024024.briefing.md new file mode 100644 index 0000000..cdd39ef --- /dev/null +++ b/kis_trader/backtest/results/optuna_momentum_tpe_20260725_024024.briefing.md @@ -0,0 +1,21 @@ +# Optuna 브리핑 — 모멘텀 (tpe) +기간: 2026-07-21 ~ 2026-07-24 (거래일≈4일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 173건 · 사후합격(results_gated) 116건 + +## 이전 장에서는 +- 실매 동기간 청산 69건 · 승률 26% · 합산 PnL -68,173원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #174 · 거래 10건 · 승률 80.0% · PF 46.99 · PnL 155,807원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-25 02:40:36 (rule)_ + +## AI 코멘트 + +_(미생성: api_call_failed. 구글 키는 GEMINI_API_KEY 를 DB/환경에 넣으세요 — kis_trader/backtest/optuna_briefing.py 모듈 docstring 참고)_ diff --git a/kis_trader/backtest/results/optuna_momentum_tpe_20260725_094527.briefing.md b/kis_trader/backtest/results/optuna_momentum_tpe_20260725_094527.briefing.md new file mode 100644 index 0000000..92e15ed --- /dev/null +++ b/kis_trader/backtest/results/optuna_momentum_tpe_20260725_094527.briefing.md @@ -0,0 +1,21 @@ +# Optuna 브리핑 — 모멘텀 (tpe) +기간: 2026-07-21 ~ 2026-07-24 (거래일≈4일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 179건 · 사후합격(results_gated) 111건 + +## 이전 장에서는 +- 실매 동기간 청산 69건 · 승률 26% · 합산 PnL -68,173원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #141 · 거래 13건 · 승률 69.2% · PF 15.99 · PnL 175,078원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-25 09:45:38 (rule)_ + +## AI 코멘트 + +_(미생성: api_call_failed. 구글 키는 GEMINI_API_KEY 를 DB/환경에 넣으세요 — kis_trader/backtest/optuna_briefing.py 모듈 docstring 참고)_ diff --git a/kis_trader/backtest/results/optuna_momentum_tpe_20260728_003629.briefing.md b/kis_trader/backtest/results/optuna_momentum_tpe_20260728_003629.briefing.md new file mode 100644 index 0000000..bdf43a4 --- /dev/null +++ b/kis_trader/backtest/results/optuna_momentum_tpe_20260728_003629.briefing.md @@ -0,0 +1,27 @@ +# Optuna 브리핑 — 모멘텀 (tpe) +기간: 2026-07-21 ~ 2026-07-27 (거래일≈7일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 177건 · 사후합격(results_gated) 105건 + +## 이전 장에서는 +- 실매 동기간 청산 89건 · 승률 26% · 합산 PnL -119,485원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #170 · 거래 10건 · 승률 80.0% · PF 31.62 · PnL 152,711원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-28 00:36:45 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 + +지난 7일간의 짧은 백테스트에서 실매는 저조한 성과(-119,485원, 승률 26%)를 보이며 백테스트와의 괴리를 확인했습니다. 이는 고스트 오더, 유니버스, 틱 경로 차이로 정상적입니다. Optuna 사후합격 1위는 #170번 조합으로 15만 원 이상의 수익과 80% 승률을 기록했지만, 이는 **단 10건의 거래에 불과하여 표본 부족 및 과적합 가능성이 매우 높습니다.** + +## 앞으로 장에서는 + +단기간의 Optuna 최적값을 실매에 바로 적용하지 마세요. 최소 5일 이상의 재검증과 웹백테스트를 거쳐 `results_gated` 후보만 신중히 검토해야 합니다. **과적합된 전략은 시장 변화에 취약**하며, 승률 자랑보다 손절 기능이 제대로 작동하는지 확인이 필수입니다. 과거 수익은 미래를 보장하지 않으므로, 소액 모의투자로 1~2일 관찰 후 점진적 확대가 중요합니다. **절대 확정 수익을 약속하지 않습니다.** diff --git a/kis_trader/backtest/results/optuna_momentum_tpe_20260728_194602.briefing.md b/kis_trader/backtest/results/optuna_momentum_tpe_20260728_194602.briefing.md new file mode 100644 index 0000000..f1bb719 --- /dev/null +++ b/kis_trader/backtest/results/optuna_momentum_tpe_20260728_194602.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — 모멘텀 (tpe) +기간: 2026-07-22 ~ 2026-07-28 (거래일≈7일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 182건 · 사후합격(results_gated) 41건 + +## 이전 장에서는 +- 실매 동기간 청산 74건 · 승률 22% · 합산 PnL -170,455원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #152 · 거래 16건 · 승률 62.5% · PF 1.95 · PnL 62,705원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-28 19:46:15 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +지난 7일간 모멘텀 전략 옵튜나 백테스트 결과, 사후합격(WR≥40%, PF≥1) 41건 중 #152번이 16거래 62.5% 승률, PF 1.95로 62,705원 PnL을 기록했습니다. 하지만 동기간 실매는 74거래 22% 승률로 -170,455원을 기록, 백테스트와 실매 간의 큰 괴리(고스트·유니버스·틱 경로 차이)를 다시 한번 확인했습니다. + +## 앞으로 장에서는 +이 짧은 기간의 백테스트 결과는 과적합 및 표본 부족 위험이 매우 큽니다. #152번도 16거래에 불과합니다. 따라서 `results_gated` 후보만으로 1~2일 내 바로 실매 적용은 절대 금지합니다. 최소 5거래일 이상 재검증과 웹 백테스트 후 페이퍼/소액으로 시장 관찰하며 손절 라인이 살아있는지 확인 후 신중하게 확대해야 합니다. 백테스트는 과거일 뿐, 미래를 보장하지 않습니다. diff --git a/kis_trader/backtest/results/optuna_momentum_tpe_20260728_200954.briefing.md b/kis_trader/backtest/results/optuna_momentum_tpe_20260728_200954.briefing.md new file mode 100644 index 0000000..4c5eca4 --- /dev/null +++ b/kis_trader/backtest/results/optuna_momentum_tpe_20260728_200954.briefing.md @@ -0,0 +1,28 @@ +# Optuna 브리핑 — 모멘텀 (tpe) +기간: 2026-07-27 ~ 2026-07-28 (거래일≈2일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 164건 · 사후합격(results_gated) 4건 + +## 이전 장에서는 +- 실매 동기간 청산 24건 · 승률 21% · 합산 PnL -126,754원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #36 · 거래 4건 · 승률 75.0% · PF 1.24 · PnL 1,412원 +- 표본 장이 2일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-28 20:09:56 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 + +지난 2거래일 백테스트에서 모멘텀 전략은 사후 합격 후보 중 1건이 소폭 수익을 냈습니다. 하지만 실제 시장에서는 이와 달리 큰 손실이 발생하여 백테스트와 실매 간 상당한 괴리를 보였습니다. 이는 단 2일이라는 매우 짧은 기간의 결과로, 과적합과 표본 부족에 의한 우연한 승률일 가능성이 매우 높다는 점을 분명히 경고합니다. + +## 앞으로 장에서는 + +이러한 짧은 백테스트 결과는 시장의 작은 변화에도 쉽게 깨질 수 있어, 절대 바로 실매에 적용해서는 안 됩니다. 최소 5거래일 이상 재검증하거나, 모의투자 또는 소액으로 충분히 관찰하며 검증해야 합니다. 백테스트의 결과(고스트 퍼지 등)가 실제 매매와 다를 수 있음을 항상 인지하고, 높은 승률을 맹신하기보다 손실 제한(손절)이 잘 작동하는지에 집중하세요. 확정적인 수익은 보장되지 않습니다. diff --git a/kis_trader/backtest/results/optuna_scalp_tpe_20260721_141215.briefing.md b/kis_trader/backtest/results/optuna_scalp_tpe_20260721_141215.briefing.md new file mode 100644 index 0000000..c0796b8 --- /dev/null +++ b/kis_trader/backtest/results/optuna_scalp_tpe_20260721_141215.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — 스캘핑 (tpe) +기간: 2026-07-20 ~ 2026-07-21 (거래일≈2일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 | 후보 게이트: WR≥40% PF≥1 +학습용 통과 170건 · 사후합격(results_gated) 154건 + +## 이전 장에서는 +- 실매 동기간 청산 12건 · 승률 42% · 합산 PnL -3,066원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #135 · 거래 10건 · 승률 90.0% · PF 15.27 · PnL 78,709원 +- 표본 장이 2일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-21 14:12:16 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +지난 2거래일(2026-07-20~21)간의 옵투나 백테스트 결과, #135 트라이얼이 90% 승률로 7.8만 원의 높은 PnL을 보였습니다. 하지만 같은 기간 실제 매매는 승률 42%에 -3천 원 손실을 기록했습니다. 이는 고스트퍼지, 틱 데이터 차이 등 백테스트와 실매 간의 괴리 및 단 2일이라는 극히 적은 표본 기간으로 인한 과적합 현상임을 명확히 경고합니다. + +## 앞으로 장에서는 +이번 2일치 최적화 결과는 시장 변화에 취약하므로 실매에 즉시 적용하는 것을 엄격히 금지합니다. 최소 5거래일 이상으로 재검증하고, 반드시 모의/소액 매매로 시장 적합성을 충분히 관찰 후 적용하십시오. 특히, 승률 자랑보다 손절선이 살아있는지 최우선으로 점검해야 합니다. 어떠한 경우에도 확정 수익을 약속할 수 없으며, 시장 상황에 따른 리스크 관리에 만전을 기하십시오. diff --git a/kis_trader/backtest/results/optuna_scalp_tpe_20260721_200431.briefing.md b/kis_trader/backtest/results/optuna_scalp_tpe_20260721_200431.briefing.md new file mode 100644 index 0000000..5eaa211 --- /dev/null +++ b/kis_trader/backtest/results/optuna_scalp_tpe_20260721_200431.briefing.md @@ -0,0 +1,26 @@ +# Optuna 브리핑 — 스캘핑 (tpe) +기간: 2026-07-20 ~ 2026-07-21 (거래일≈2일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 186건 · 사후합격(results_gated) 170건 + +## 이전 장에서는 +- 실매 동기간 청산 17건 · 승률 47% · 합산 PnL 10,543원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #182 · 거래 9건 · 승률 66.7% · PF 9.94 · PnL 63,760원 +- 표본 장이 2일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-21 20:04:33 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +2일간의 Optuna 백테스트에서 #182 트라이얼이 우수한 성과를 보였으나, 실매 결과와는 고스트 매매 등 환경 차이로 큰 괴리가 있었습니다. 단 2일 데이터는 표본 부족과 특정 시장 상황에 대한 과적합 위험이 매우 높음을 인지해야 합니다. + +## 앞으로 장에서는 +2일치 결과를 바로 실매에 적용하지 마세요. 다일(≥5거래일) 웹백테스트와 페이퍼/소액 모의 관찰이 필수입니다. 표본 부족으로 인한 과적합을 경계하며, 승률보다는 손절매가 시장 변화에 잘 작동하는지 항상 확인하여 실매↔백테 괴리에 대비해야 합니다. diff --git a/kis_trader/backtest/results/optuna_scalp_tpe_20260723_155350.briefing.md b/kis_trader/backtest/results/optuna_scalp_tpe_20260723_155350.briefing.md new file mode 100644 index 0000000..3292231 --- /dev/null +++ b/kis_trader/backtest/results/optuna_scalp_tpe_20260723_155350.briefing.md @@ -0,0 +1,21 @@ +# Optuna 브리핑 — 스캘핑 (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 186건 · 사후합격(results_gated) 142건 + +## 이전 장에서는 +- 실매 동기간 청산 12건 · 승률 42% · 합산 PnL 18,493원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #143 · 거래 29건 · 승률 75.9% · PF 5.37 · PnL 128,868원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 15:53:56 (rule)_ + +## AI 코멘트 + +_(미생성: api_call_failed. 구글 키는 GEMINI_API_KEY 를 DB/환경에 넣으세요 — kis_trader/backtest/optuna_briefing.py 모듈 docstring 참고)_ diff --git a/kis_trader/backtest/results/optuna_scalp_tpe_20260723_220659.briefing.md b/kis_trader/backtest/results/optuna_scalp_tpe_20260723_220659.briefing.md new file mode 100644 index 0000000..7c9d811 --- /dev/null +++ b/kis_trader/backtest/results/optuna_scalp_tpe_20260723_220659.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — 스캘핑 (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 188건 · 사후합격(results_gated) 145건 + +## 이전 장에서는 +- 실매 동기간 청산 12건 · 승률 42% · 합산 PnL 18,493원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #199 · 거래 21건 · 승률 71.4% · PF 5.19 · PnL 98,012원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 22:07:06 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +Optuna TPE 스캘핑 백테스트가 3일간(2026-07-21~23) 200회 중 145회 유효 조합을 찾았고, 최고 조합(#199)은 21건 거래에 9.8만원 수익(승률 71.4%)을 기록했습니다. 하지만 실제 매매는 12건에 1.8만원 수익으로, 백테스트와 괴리가 있었습니다. 이는 짧은 기간으로 인한 과적합, 표본 부족, 그리고 고스트퍼지 등 실매 환경 차이 때문일 수 있습니다. + +## 앞으로 장에서는 +단 3일간의 최적화 결과는 시장 변화에 취약하므로, 즉시 실매에 적용하지 마세요. 5일 이상 장기 백테스트와 웹백테 검증, 그리고 `results_gated` 후보군만 신중히 고려해야 합니다. 시장 변동 시 손절 라인 유지에 집중하고, 페이퍼/소액 모의 투자를 통해 충분히 관찰 후 확대를 결정하시기 바랍니다. diff --git a/kis_trader/backtest/results/optuna_scalp_tpe_20260725_003020.briefing.md b/kis_trader/backtest/results/optuna_scalp_tpe_20260725_003020.briefing.md new file mode 100644 index 0000000..5a9fbe3 --- /dev/null +++ b/kis_trader/backtest/results/optuna_scalp_tpe_20260725_003020.briefing.md @@ -0,0 +1,21 @@ +# Optuna 브리핑 — 스캘핑 (tpe) +기간: 2026-07-21 ~ 2026-07-24 (거래일≈4일) · trials 200/116 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 183건 · 사후합격(results_gated) 120건 + +## 이전 장에서는 +- 실매 동기간 청산 26건 · 승률 27% · 합산 PnL -48,048원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #103 · 거래 29건 · 승률 65.5% · PF 3.37 · PnL 138,207원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-25 00:30:32 (rule)_ + +## AI 코멘트 + +_(미생성: api_call_failed. 구글 키는 GEMINI_API_KEY 를 DB/환경에 넣으세요 — kis_trader/backtest/optuna_briefing.py 모듈 docstring 참고)_ diff --git a/kis_trader/backtest/results/optuna_scalp_tpe_20260725_091144.briefing.md b/kis_trader/backtest/results/optuna_scalp_tpe_20260725_091144.briefing.md new file mode 100644 index 0000000..74bb352 --- /dev/null +++ b/kis_trader/backtest/results/optuna_scalp_tpe_20260725_091144.briefing.md @@ -0,0 +1,21 @@ +# Optuna 브리핑 — 스캘핑 (tpe) +기간: 2026-07-21 ~ 2026-07-24 (거래일≈4일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 186건 · 사후합격(results_gated) 139건 + +## 이전 장에서는 +- 실매 동기간 청산 26건 · 승률 27% · 합산 PnL -48,048원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #141 · 거래 32건 · 승률 71.9% · PF 3.08 · PnL 114,358원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-25 09:11:55 (rule)_ + +## AI 코멘트 + +_(미생성: api_call_failed. 구글 키는 GEMINI_API_KEY 를 DB/환경에 넣으세요 — kis_trader/backtest/optuna_briefing.py 모듈 docstring 참고)_ diff --git a/kis_trader/backtest/results/optuna_scalp_tpe_20260727_235004.briefing.md b/kis_trader/backtest/results/optuna_scalp_tpe_20260727_235004.briefing.md new file mode 100644 index 0000000..a771d9a --- /dev/null +++ b/kis_trader/backtest/results/optuna_scalp_tpe_20260727_235004.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — 스캘핑 (tpe) +기간: 2026-07-21 ~ 2026-07-27 (거래일≈7일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 192건 · 사후합격(results_gated) 133건 + +## 이전 장에서는 +- 실매 동기간 청산 32건 · 승률 34% · 합산 PnL -28,563원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #122 · 거래 39건 · 승률 66.7% · PF 2.53 · PnL 101,956원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-27 23:50:20 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +지난 7일간의 Optuna 백테스팅 결과, #122 전략이 66.7%의 승률과 10만원 이상의 PnL로 가장 우수하게 나타났습니다. 하지만 동일 기간의 실제 매매는 34% 승률과 약 2.8만원 손실을 기록하며 백테스트와 큰 괴리를 보였습니다. 이는 ‘고스트 퍼지’ 등 백테스팅과 실거래 환경의 차이로 인해 발생하며, 단 7일이라는 짧은 기간의 결과는 특정 시장 상황에 과적합되었거나 표본 부족의 한계가 있음을 명확히 보여줍니다. + +## 앞으로 장에서는 +백테스트에서 아무리 좋은 성과를 보였더라도, 이는 미래의 확정 수익을 약속하거나 특정 종목의 매수를 추천하는 것이 절대 아닙니다. #122 전략을 포함한 `results_gated` 내의 모든 후보는 즉시 실매에 적용하지 말고, 최소 5거래일 이상 재검증 후 페이퍼 또는 소액으로 충분히 관찰해야 합니다. 시장 상황 변화 시 손절 기능 작동 여부가 가장 중요하며, 백테스트 결과가 실매와 괴리될 수 있음을 항상 경고하며 철저한 리스크 관리에 집중해야 합니다. diff --git a/kis_trader/backtest/results/optuna_scalp_tpe_20260728_201954.briefing.md b/kis_trader/backtest/results/optuna_scalp_tpe_20260728_201954.briefing.md new file mode 100644 index 0000000..4e672a2 --- /dev/null +++ b/kis_trader/backtest/results/optuna_scalp_tpe_20260728_201954.briefing.md @@ -0,0 +1,29 @@ +# Optuna 브리핑 — 스캘핑 (tpe) +기간: 2026-07-27 ~ 2026-07-28 (거래일≈2일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 151건 · 사후합격(results_gated) 75건 + +## 이전 장에서는 +- 실매 동기간 청산 13건 · 승률 38% · 합산 PnL -27,938원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #56 · 거래 2건 · 승률 100.0% · PF 9999.00 · PnL 5,507원 +- 승률이 비정상적으로 높고 표본이 작습니다 → **해당 장에만 맞는 과적합** 신호. +- 표본 장이 2일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-28 20:19:56 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 + +지난 2일간의 Optuna 백테스트 1위는 거래 2건, 승률 100%, PnL 5,507원을 기록했습니다. 이는 표본이 매우 적어 과적합 신호이며, 우연한 승률일 가능성이 큽니다. 실제 운영에선 13건 거래, 승률 38%, -27,938원 손실로, 백테스트와 큰 괴리를 보였습니다. 이는 ‘고스트 퍼지’처럼 백테스트와 실매 간의 불가피한 차이임을 명심해야 합니다. + +## 앞으로 장에서는 + +단 2일 데이터의 최적화 결과는 시장 변화에 취약합니다. 이 결과를 바로 실매에 적용하지 말고, 과적합 위험을 경계하세요. 최소 5일 이상의 재검증과 소액 모의 거래로 안정성을 먼저 확인해야 합니다. 특히 변동성 장세에서는 손절매 기준이 제대로 작동하는지 확인하는 것이 중요합니다. 백테스트 결과에 너무 의존하지 말고, 실매와 백테스트의 괴리를 항상 염두에 두세요. diff --git a/kis_trader/backtest/results/optuna_tail_tpe_20260721_195326.briefing.md b/kis_trader/backtest/results/optuna_tail_tpe_20260721_195326.briefing.md new file mode 100644 index 0000000..4c220c7 --- /dev/null +++ b/kis_trader/backtest/results/optuna_tail_tpe_20260721_195326.briefing.md @@ -0,0 +1,28 @@ +# Optuna 브리핑 — 꼬리 (tpe) +기간: 2026-07-20 ~ 2026-07-21 (거래일≈2일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 190건 · 사후합격(results_gated) 187건 + +## 이전 장에서는 +- 실매 동기간 청산 3건 · 승률 0% · 합산 PnL 0원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #185 · 거래 11건 · 승률 81.8% · PF 55.34 · PnL 25,215원 +- 표본 장이 2일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-21 19:53:32 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 + +2일간 실매는 0원 손실을 기록했지만, 백테스트에선 11거래 81.8% 승률로 높은 수익을 보였습니다. 이는 실매와 백테 간 괴리(고스트퍼지 등)가 큼을 명확히 보여줍니다. 단 2일이라는 극히 짧은 기간의 소수 거래는 표본 부족으로 특정 장세에 과적합되었을 가능성이 매우 높습니다. + +## 앞으로 장에서는 + +이런 결과는 절대 실매에 바로 적용해선 안 됩니다. 최소 5일 이상 다일 검증과 모의투자로 시장 변화에 따른 안정성을 확인해야 합니다. 높은 승률 자랑보다 손절매 기능이 살아있는지 점검하며, 과거의 데이터가 미래를 보장하지 않음을 명심하고 과감한 투자는 금지합니다. diff --git a/kis_trader/backtest/results/optuna_tail_tpe_20260722_222316.briefing.md b/kis_trader/backtest/results/optuna_tail_tpe_20260722_222316.briefing.md new file mode 100644 index 0000000..e596132 --- /dev/null +++ b/kis_trader/backtest/results/optuna_tail_tpe_20260722_222316.briefing.md @@ -0,0 +1,28 @@ +# Optuna 브리핑 — 꼬리 (tpe) +기간: 2026-07-20 ~ 2026-07-22 (거래일≈3일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 200건 · 사후합격(results_gated) 173건 + +## 이전 장에서는 +- 실매 동기간 청산 12건 · 승률 42% · 합산 PnL 566원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #80 · 거래 13건 · 승률 100.0% · PF 9999.00 · PnL 34,369원 +- 승률이 비정상적으로 높고 표본이 작습니다 → **해당 장에만 맞는 과적합** 신호. + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-22 22:23:27 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 + +3일간의 짧은 백테스트에서 Optuna 1위 전략은 13회 거래로 100% 승률을 기록했습니다. 이는 표본 부족으로 **특정 기간에만 과적합**된 신호로 해석해야 합니다. 실제 거래에서는 12건, 42% 승률로 백테스트와 큰 괴리가 있음을 확인했습니다. + +## 앞으로 장에서는 + +1~2일 단기 Optuna 결과는 바로 실매에 적용하지 마십시오. 최소 5거래일 이상 재검증과 모의투자가 필수입니다. 시장은 항상 변하며, 백테스트 결과와 실제는 고스트 현상 등으로 언제든 달라질 수 있습니다. 높은 승률보다 손절매가 제대로 작동하는지 확인하고, 소액으로 충분히 관찰 후 비중을 늘려야 합니다. diff --git a/kis_trader/backtest/results/optuna_tail_tpe_20260723_153140.briefing.md b/kis_trader/backtest/results/optuna_tail_tpe_20260723_153140.briefing.md new file mode 100644 index 0000000..1e17ce3 --- /dev/null +++ b/kis_trader/backtest/results/optuna_tail_tpe_20260723_153140.briefing.md @@ -0,0 +1,21 @@ +# Optuna 브리핑 — 꼬리 (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 183건 · 사후합격(results_gated) 148건 + +## 이전 장에서는 +- 실매 동기간 청산 18건 · 승률 44% · 합산 PnL 7,715원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #143 · 거래 25건 · 승률 88.0% · PF 6.99 · PnL 58,148원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 15:31:56 (rule)_ + +## AI 코멘트 + +_(미생성: api_call_failed. 구글 키는 GEMINI_API_KEY 를 DB/환경에 넣으세요 — kis_trader/backtest/optuna_briefing.py 모듈 docstring 참고)_ diff --git a/kis_trader/backtest/results/optuna_tail_tpe_20260723_213324.briefing.md b/kis_trader/backtest/results/optuna_tail_tpe_20260723_213324.briefing.md new file mode 100644 index 0000000..170ca29 --- /dev/null +++ b/kis_trader/backtest/results/optuna_tail_tpe_20260723_213324.briefing.md @@ -0,0 +1,26 @@ +# Optuna 브리핑 — 꼬리 (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 164건 · 사후합격(results_gated) 148건 + +## 이전 장에서는 +- 실매 동기간 청산 18건 · 승률 44% · 합산 PnL 7,715원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #188 · 거래 11건 · 승률 100.0% · PF 9999.00 · PnL 37,592원 +- 승률이 비정상적으로 높고 표본이 작습니다 → **해당 장에만 맞는 과적합** 신호. + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 21:33:42 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +「이전 장에서는」 +지난 3거래일(7/21~7/23)간 Optuna 백테스팅 결과입니다. 실제 매매에서는 18건 거래에 44% 승률, 7,715원 수익을 기록했습니다. 반면, 백테스팅 사후합격 1위(trial #188)는 단 11건 거래에서 100% 승률로 37,592원 수익을 보였습니다. 짧은 기간, 극소수 거래에서 나온 100% 승률은 **과적합**과 **표본 부족**의 강력한 신호입니다. 실매와 백테스트 PnL 차이는 고스트 매매, 유니버스 및 틱 경로 차이로 정상적인 현상임을 알려드립니다. + +「앞으로 장에서는」 +이번 1~2일치 Optuna 최적 조합을 **절대 바로 실매에 적용하지 마십시오.** 최소 5거래일 이상 재검증과 웹 백테스트를 거쳐야 합니다. 적용 시에도 `results_gated` 조건 통과 후보만을 검토해야 합니다. 시장은 매일 변하며, 백테스트 결과가 좋았더라도 다음 장에선 **과거의 승률은 무의미**할 수 있습니다. 승률 자랑보다 손절 기준이 여전히 유효한지, 손실 제한이 잘 작동하는지 먼저 확인하세요. 페이퍼 트레이딩이나 소액 모의 투자를 통해 충분히 관찰 후 점진적으로 규모를 확대하시길 바랍니다. 특정 종목 매수 추천이나 확정 수익 약속은 불가합니다. diff --git a/kis_trader/backtest/results/optuna_tail_tpe_20260725_015847.briefing.md b/kis_trader/backtest/results/optuna_tail_tpe_20260725_015847.briefing.md new file mode 100644 index 0000000..71295ee --- /dev/null +++ b/kis_trader/backtest/results/optuna_tail_tpe_20260725_015847.briefing.md @@ -0,0 +1,22 @@ +# Optuna 브리핑 — 꼬리 (tpe) +기간: 2026-07-21 ~ 2026-07-24 (거래일≈4일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 161건 · 사후합격(results_gated) 107건 + +## 이전 장에서는 +- 실매 동기간 청산 23건 · 승률 39% · 합산 PnL -7,307원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #136 · 거래 5건 · 승률 100.0% · PF 9999.00 · PnL 22,103원 +- 승률이 비정상적으로 높고 표본이 작습니다 → **해당 장에만 맞는 과적합** 신호. + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-25 01:59:13 (rule)_ + +## AI 코멘트 + +_(미생성: api_call_failed. 구글 키는 GEMINI_API_KEY 를 DB/환경에 넣으세요 — kis_trader/backtest/optuna_briefing.py 모듈 docstring 참고)_ diff --git a/kis_trader/backtest/results/optuna_tail_tpe_20260725_111234.briefing.md b/kis_trader/backtest/results/optuna_tail_tpe_20260725_111234.briefing.md new file mode 100644 index 0000000..01103fe --- /dev/null +++ b/kis_trader/backtest/results/optuna_tail_tpe_20260725_111234.briefing.md @@ -0,0 +1,21 @@ +# Optuna 브리핑 — 꼬리 (tpe) +기간: 2026-07-21 ~ 2026-07-24 (거래일≈4일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 175건 · 사후합격(results_gated) 136건 + +## 이전 장에서는 +- 실매 동기간 청산 23건 · 승률 39% · 합산 PnL -7,307원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #152 · 거래 9건 · 승률 77.8% · PF 8.62 · PnL 40,732원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-25 11:12:58 (rule)_ + +## AI 코멘트 + +_(미생성: api_call_failed. 구글 키는 GEMINI_API_KEY 를 DB/환경에 넣으세요 — kis_trader/backtest/optuna_briefing.py 모듈 docstring 참고)_ diff --git a/kis_trader/backtest/results/optuna_tail_tpe_20260728_022918.briefing.md b/kis_trader/backtest/results/optuna_tail_tpe_20260728_022918.briefing.md new file mode 100644 index 0000000..07ec7a0 --- /dev/null +++ b/kis_trader/backtest/results/optuna_tail_tpe_20260728_022918.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — 꼬리 (tpe) +기간: 2026-07-21 ~ 2026-07-27 (거래일≈7일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 181건 · 사후합격(results_gated) 108건 + +## 이전 장에서는 +- 실매 동기간 청산 24건 · 승률 42% · 합산 PnL -1,355원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #59 · 거래 13건 · 승률 76.9% · PF 6.06 · PnL 26,794원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-28 02:29:51 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +**이전 장에서는** +지난 7일 백테스트 1위(#59)는 13건 거래로 76.9% 승률, 26,794원 수익을 기록했습니다. 하지만 동기간 실매는 -1,355원 손실로 백테와 큰 괴리가 발생했습니다. 이는 고스트·유니버스·틱 경로 차이 때문이며, 13건은 표본 부족과 과적합 가능성을 경고합니다. + +**앞으로 장에서는** +Optuna best를 즉시 실매 적용은 금물입니다. 7일의 짧은 기간, 적은 거래 수는 과적합 우려가 큽니다. 최소 5일 이상 재검증 후 페이퍼/소액 모의 관찰이 필수입니다. 시장은 항상 변하므로, 승률보다 손절 작동에 집중해 리스크를 관리하세요. `results_gated` 후보만 신중히 적용하십시오. diff --git a/kis_trader/backtest/results/optuna_us_momentum_QQQM_tpe_20260723_201132.briefing.md b/kis_trader/backtest/results/optuna_us_momentum_QQQM_tpe_20260723_201132.briefing.md new file mode 100644 index 0000000..a37ec82 --- /dev/null +++ b/kis_trader/backtest/results/optuna_us_momentum_QQQM_tpe_20260723_201132.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — us_momentum (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 100/100 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 90건 · 사후합격(results_gated) 18건 + +## 이전 장에서는 +- 실매 동기간 청산 3건 · 승률 0% · 합산 PnL 0원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #57 · 거래 10건 · 승률 50.0% · PF 4.50 · PnL 7원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 20:11:34 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +3일간의 짧은 Optuna 백테스트에서 승률 50%, PF 4.50, PnL 7원의 최적 조합(trial #57)이 나왔습니다. 하지만 같은 기간 실매는 3건 거래, 승률 0%, PnL 0원으로, 백테스트와의 큰 괴리를 보였습니다. 이는 짧은 학습 기간으로 인한 과적합, 표본 부족, 그리고 실매와 백테스트 간의 고스트 퍼지 등 여러 차이 때문임을 명확히 인지해야 합니다. + +## 앞으로 장에서는 +이처럼 단기 백테스트 결과는 과적합 및 표본 부족 위험이 크므로, 절대 바로 실매에 적용해선 안 됩니다. 최소 5거래일 이상 재검증과 웹백테스트 후, `results_gated` 통과 후보만 신중히 검토하세요. 무엇보다 손절이 살아있는지 확인이 최우선입니다. 시장은 항상 변하며, 백테스트의 결과가 실매에서 확정 수익으로 이어지는 것은 아닙니다. 페이퍼/소액 모의로 관찰 후 점진적으로 확대하시기 바랍니다. diff --git a/kis_trader/backtest/results/optuna_us_momentum_QQQM_tpe_20260723_224619.briefing.md b/kis_trader/backtest/results/optuna_us_momentum_QQQM_tpe_20260723_224619.briefing.md new file mode 100644 index 0000000..154f7fa --- /dev/null +++ b/kis_trader/backtest/results/optuna_us_momentum_QQQM_tpe_20260723_224619.briefing.md @@ -0,0 +1,26 @@ +# Optuna 브리핑 — us_momentum (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 100/100 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 87건 · 사후합격(results_gated) 0건 + +## 이전 장에서는 +- 실매 동기간 청산 3건 · 승률 0% · 합산 PnL 0원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 학습 1위(사후게이트 미달 가능): trial #44 · 거래 1건 · 승률 0.0% · PF 0.00 · PnL -148원 +- 플러스/학습 후보는 있으나 승률·PF 사후 기준은 못 넘김 → **당장 DB 적용은 비권장.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 현재 사후합격 0건 → 파라미터 유지(현행 DB) + 유니버스/데이터 점검이 우선입니다. + +_생성: 2026-07-23 22:46:20 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +**이전 장에서는** +3일간의 짧은 기간 동안 진행된 'us_momentum' 전략 Optuna 탐색에서, 학습된 조합 중 사후 검증 기준(승률 40%, PF 1.0)을 통과한 것은 없었습니다. 이는 학습 데이터가 극히 적어 과적합 및 표본 부족 위험이 높음을 시사합니다. 실제 거래에서는 청산 3건, 승률 0%로 백테스트 결과와 큰 괴리를 보이며 수익이 발생하지 않았습니다. + +**앞으로 장에서는** +단기 Optuna 결과는 절대로 실매에 즉시 적용해서는 안 됩니다. 최소 5거래일 이상의 충분한 기간 동안 재검증하고, 반드시 웹 백테스트를 통해 견고성을 확인해야 합니다. `results_gated` 기준을 충족하는 조합이 나올 때까지 기존 파라미터와 유니버스/데이터 점검을 우선합니다. 백테스트 상의 승률 자랑보다 실전에서 손절 기능이 정상 작동하는지 항상 주의해야 합니다. 특정 종목 매수 추천이나 확정 수익 약속은 불가합니다. diff --git a/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_032558.briefing.md b/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_032558.briefing.md new file mode 100644 index 0000000..207af3a --- /dev/null +++ b/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_032558.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — us_momentum (tpe) +기간: 2026-07-16 ~ 2026-07-23 (거래일≈8일) · trials 100/100 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 44건 · 사후합격(results_gated) 1건 + +## 이전 장에서는 +- 실매(2026-07-16~2026-07-23) 해당 전략 청산 기록 없음(또는 전략명 불일치). +- 사후합격 1위: trial #95 · 거래 5건 · 승률 40.0% · PF 1.06 · PnL 1원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 03:25:58 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +**이전 장에서는** +지난 8거래일(`26/07/16~07/23`) Optuna 백테스트는 실매 기록이 없습니다. `results_gated` 통과 전략은 단 1건(trial #95)으로, 거래 5건, 승률 40.0%, PF 1.06, PnL 1원을 기록했습니다. 짧은 기간, 적은 거래로 **과적합 및 표본 부족** 가능성이 매우 높으며, **실제 시장과의 괴리(고스트퍼지 등)**를 특히 주의해야 합니다. + +**앞으로 장에서는** +앞으로는 `results_gated` 통과 후보를 최소 5거래일 이상 재검증 후 검토하십시오. 짧은 백테스트 기간의 결과는 **과적합** 가능성이 높아 실매 적용은 절대 금지입니다. 페이퍼/소액 모의로 **실매와 백테스트 간 괴리(고스트퍼지 등)**를 충분히 관찰 후 확대하세요. 시장은 항상 변하며, 승률보다 **손절매 원칙 준수**가 훨씬 중요합니다. diff --git a/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_033013.briefing.md b/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_033013.briefing.md new file mode 100644 index 0000000..2946d66 --- /dev/null +++ b/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_033013.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — us_momentum (tpe) +기간: 2026-07-16 ~ 2026-07-23 (거래일≈8일) · trials 100/100 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 54건 · 사후합격(results_gated) 3건 + +## 이전 장에서는 +- 실매(2026-07-16~2026-07-23) 해당 전략 청산 기록 없음(또는 전략명 불일치). +- 사후합격 1위: trial #38 · 거래 6건 · 승률 66.7% · PF 3.00 · PnL 6원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 03:30:14 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +**「이전 장에서는」** +8일간의 Optuna 학습에서 해당 전략의 실매 기록은 없었습니다. 사후 합격 1위(#38)는 단 6건의 거래로 승률 66.7%, PF 3.00을 보였으나, 이는 매우 적은 표본에 기인한 과적합 가능성이 높습니다. 우연한 결과일 수 있음에 유의해야 합니다. + +**「앞으로 장에서는」** +Optuna 단기 최적화 결과는 실매와 큰 괴리(고스트퍼포먼스)를 보일 수 있습니다. 최소 5일 이상 다일 재검증 및 웹백테스트 후 적용을 신중히 검토하세요. 시장 변동 시 손절매가 제대로 작동하는지 살피고, 표본 부족 결과는 반드시 페이퍼/소액 모의로 관찰 후 확대하세요. 특정 종목 매수 추천이나 확정 수익 약속은 금지합니다. diff --git a/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_034624.briefing.md b/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_034624.briefing.md new file mode 100644 index 0000000..915a478 --- /dev/null +++ b/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_034624.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — us_momentum (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 100/100 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 53건 · 사후합격(results_gated) 1건 + +## 이전 장에서는 +- 실매(2026-07-21~2026-07-23) 해당 전략 청산 기록 없음(또는 전략명 불일치). +- 사후합격 1위: trial #12 · 거래 7건 · 승률 57.1% · PF 1.83 · PnL 10원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 03:46:24 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +지난 3거래일(2026-07-21~23) 동안 미국 주식 모멘텀 전략의 Optuna TPE 백테스트 결과, 총 100개 시도 중 단 1개의 조합만 사후 검증 기준을 통과했습니다. 이 조합은 7번의 거래로 57.1% 승률, PF 1.83, PnL 10원을 기록했으나, 실거래 기록은 없습니다. 매우 짧은 기간과 적은 거래 횟수로 인해 **과적합 및 표본 부족의 위험**이 매우 높음을 경고합니다. + +## 앞으로 장에서는 +발견된 최적 조합을 즉시 실매에 적용하는 것은 위험합니다. 3일이라는 짧은 백테스트 기간은 **백테스트와 실매 간의 괴리(Ghost PnL)**가 클 수 있음을 명심해야 합니다. 최소 5거래일 이상 다일 재검증과 웹 백테스트를 거친 후, **반드시 페이퍼 또는 소액 모의 투자로 충분히 관찰 후 확대**를 고려하십시오. 수익률보다는 손절 기준이 시장 상황에 맞게 작동하는지를 우선 확인하시고, 특정 종목 매수 추천이나 확정 수익은 약속할 수 없습니다. diff --git a/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_114846.briefing.md b/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_114846.briefing.md new file mode 100644 index 0000000..aeb83ba --- /dev/null +++ b/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_114846.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — us_momentum (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 100/100 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 56건 · 사후합격(results_gated) 13건 + +## 이전 장에서는 +- 실매(2026-07-21~2026-07-23) 해당 전략 청산 기록 없음(또는 전략명 불일치). +- 사후합격 1위: trial #49 · 거래 8건 · 승률 50.0% · PF 2.22 · PnL 11원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 11:48:47 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +3거래일의 짧은 기간 Optuna 백테스트 결과, 사후합격 1위 전략은 단 8건의 거래로 11원의 PnL을 기록했습니다. 이는 매우 적은 표본 수로, 전략이 특정 시점에 과적합되었을 가능성이 높습니다. 이 기간의 실제 거래 기록은 없습니다. + +## 앞으로 장에서는 +이처럼 짧은 백테스트 최적안은 과적합과 표본 부족 위험이 크므로 절대 바로 실매에 적용해선 안 됩니다. 백테스트와 실매 간의 괴리(고스트 슬리피지 등)를 항상 경고하며, 손절 기준이 살아있는지 확인 후 최소 5거래일 이상 재검증하고 소액/모의 투입 후 점진적으로 확대하시기 바랍니다. diff --git a/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_201245.briefing.md b/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_201245.briefing.md new file mode 100644 index 0000000..bd7fd8c --- /dev/null +++ b/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_201245.briefing.md @@ -0,0 +1,27 @@ +# Optuna 브리핑 — us_momentum (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 100/100 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 53건 · 사후합격(results_gated) 10건 + +## 이전 장에서는 +- 실매 동기간 청산 3건 · 승률 0% · 합산 PnL 0원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #71 · 거래 5건 · 승률 60.0% · PF 2.80 · PnL 9원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 20:12:45 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 + +3일간의 짧은 백테스트 결과, 100회 탐색 중 합격 기준을 통과한 #71번 조합이 5회 거래에서 60% 승률, PF 2.8로 9원의 수익을 보였습니다. 그러나 같은 기간 실매매에서는 3회 거래, 승률 0%, 손익 0원으로 백테스트와 큰 괴리를 보였습니다. 이는 고스트퍼지, 유니버스 차이 등 실매 환경과 백테스트의 본질적 괴리로 정상적인 현상입니다. 최소 거래 건수 1회는 표본 부족의 위험을 간과할 수 없는 최소한의 기준입니다. + +## 앞으로 장에서는 + +단 3일간의 백테스트 결과는 **과최적화**와 **표본 부족** 가능성이 매우 높으므로, `results_gated` 후보군이라도 즉시 실매에 적용하는 것은 위험합니다. 최소 5거래일 이상의 **다일 재검증**과 웹백테스트를 통해 전략의 견고함을 확인해야 합니다. 백테스트 결과와 **실매매 괴리(고스트퍼지 등)**는 항상 발생할 수 있으니, 단순 승률 자랑보다 **시장 변화에 손절 기준이 유효한지**를 먼저 점검하십시오. 페이퍼/모의 거래로 충분히 관찰 후 신중하게 접근하시기 바랍니다. diff --git a/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_224736.briefing.md b/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_224736.briefing.md new file mode 100644 index 0000000..4479784 --- /dev/null +++ b/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_224736.briefing.md @@ -0,0 +1,26 @@ +# Optuna 브리핑 — us_momentum (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 100/100 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 41건 · 사후합격(results_gated) 0건 + +## 이전 장에서는 +- 실매 동기간 청산 3건 · 승률 0% · 합산 PnL 0원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 학습 1위(사후게이트 미달 가능): trial #37 · 거래 1건 · 승률 0.0% · PF 0.00 · PnL -251원 +- 플러스/학습 후보는 있으나 승률·PF 사후 기준은 못 넘김 → **당장 DB 적용은 비권장.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 현재 사후합격 0건 → 파라미터 유지(현행 DB) + 유니버스/데이터 점검이 우선입니다. + +_생성: 2026-07-23 22:47:37 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +지난 3일간의 짧은 백테스트에서, 어떤 파라미터 조합도 최소 승률/PF 기준을 통과하지 못했습니다. 특히, 학습 상위 후보조차 거래 건수가 1건에 불과해 표본 부족 및 과적합 위험이 큽니다. 실제 매매와 백테스트는 고스트/유니버스/틱 경로 차이로 괴리가 발생했으니 주의 바랍니다. + +## 앞으로 장에서는 +단기 최적화 결과를 즉시 실매 적용하는 것은 위험합니다. 최소 5거래일 이상 재검증과 웹백테스트를 거쳐야 하며, `results_gated`에 합격한 후보만 검토해야 합니다. 현재 합격 후보가 없으므로, 전략 파라미터 유지 및 유니버스/데이터 점검이 우선입니다. 시장 변동 시 손절 장치 작동 여부를 반드시 확인해야 합니다. diff --git a/kis_trader/backtest/results/optuna_us_momentum_SPYM_tpe_20260723_201422.briefing.md b/kis_trader/backtest/results/optuna_us_momentum_SPYM_tpe_20260723_201422.briefing.md new file mode 100644 index 0000000..18f3ee6 --- /dev/null +++ b/kis_trader/backtest/results/optuna_us_momentum_SPYM_tpe_20260723_201422.briefing.md @@ -0,0 +1,26 @@ +# Optuna 브리핑 — us_momentum (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 100/100 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 81건 · 사후합격(results_gated) 76건 + +## 이전 장에서는 +- 실매 동기간 청산 3건 · 승률 0% · 합산 PnL 0원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #6 · 거래 2건 · 승률 100.0% · PF 9999.00 · PnL 4원 +- 승률이 비정상적으로 높고 표본이 작습니다 → **해당 장에만 맞는 과적합** 신호. + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 20:14:22 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +지난 3일간의 짧은 백테스트에서 Optuna는 높은 승률의 조합들을 찾았습니다. 특히 거래 2건으로 100% 승률을 보인 조합이 최상위였으나, 이는 극히 짧은 기간과 적은 거래 건수로 인한 **과적합 및 표본 부족** 신호입니다. 실제 거래에서는 동기간 3건 청산에 0% 승률로, **백테스트 결과와 심각한 괴리**가 있었습니다. 백테와 실매 간의 **고스트퍼지 현상(유니버스, 틱 경로 등 차이)**임을 분명히 인지해야 합니다. + +## 앞으로 장에서는 +이 결과를 곧바로 실매에 적용하는 것은 위험합니다. 최소 5거래일 이상으로 기간을 늘려 재검증하고, 반드시 모의투자나 소액으로 시작하여 1~2일간 실제 시장과의 괴리를 관찰해야 합니다. 승률 자랑보다 **손절매 로직이 살아있는지**를 우선적으로 점검하십시오. 시장은 항상 변동하며, 과거의 결과가 **확정적인 미래 수익을 보장하지 않습니다.** diff --git a/kis_trader/backtest/results/optuna_us_momentum_SPYM_tpe_20260723_224908.briefing.md b/kis_trader/backtest/results/optuna_us_momentum_SPYM_tpe_20260723_224908.briefing.md new file mode 100644 index 0000000..79a2b85 --- /dev/null +++ b/kis_trader/backtest/results/optuna_us_momentum_SPYM_tpe_20260723_224908.briefing.md @@ -0,0 +1,26 @@ +# Optuna 브리핑 — us_momentum (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 100/100 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 85건 · 사후합격(results_gated) 0건 + +## 이전 장에서는 +- 실매 동기간 청산 3건 · 승률 0% · 합산 PnL 0원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 학습 1위(사후게이트 미달 가능): trial #1 · 거래 1건 · 승률 0.0% · PF 0.00 · PnL -220원 +- 플러스/학습 후보는 있으나 승률·PF 사후 기준은 못 넘김 → **당장 DB 적용은 비권장.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 현재 사후합격 0건 → 파라미터 유지(현행 DB) + 유니버스/데이터 점검이 우선입니다. + +_생성: 2026-07-23 22:49:09 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +3일간의 짧은 백테스트 기간(2026-07-21~23) 동안 100회 탐색했지만, 승률 40% 및 PF 1.0 기준을 넘는 전략은 하나도 발견되지 않았습니다(사후합격 0건). 실매 또한 저조했으며, 백테스트와의 괴리(고스트퍼지 등)는 자연스러운 현상입니다. 이 결과는 극심한 **표본 부족**과 **과적합** 우려가 매우 큽니다. + +## 앞으로 장에서는 +단 3일 결과만으로 실매 적용은 절대 금지합니다. 최소 5일 이상의 다일 재검증과 웹 백테스트를 거쳐야 합니다. **실매와 백테스트 괴리**는 항상 발생하므로, 단순 승률보다 **손절 기능이 정상 작동하는지**가 중요합니다. 현재로서는 전략 파라미터 유지 및 유니버스/데이터 점검에 집중해야 합니다. diff --git a/kis_trader/backtest/results/optuna_us_momentum_TSLA_tpe_20260723_201527.briefing.md b/kis_trader/backtest/results/optuna_us_momentum_TSLA_tpe_20260723_201527.briefing.md new file mode 100644 index 0000000..2a5829a --- /dev/null +++ b/kis_trader/backtest/results/optuna_us_momentum_TSLA_tpe_20260723_201527.briefing.md @@ -0,0 +1,26 @@ +# Optuna 브리핑 — us_momentum (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 100/100 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 81건 · 사후합격(results_gated) 75건 + +## 이전 장에서는 +- 실매 동기간 청산 3건 · 승률 0% · 합산 PnL 0원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #10 · 거래 1건 · 승률 100.0% · PF 9999.00 · PnL 9원 +- 승률이 비정상적으로 높고 표본이 작습니다 → **해당 장에만 맞는 과적합** 신호. + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 20:15:28 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +지난 3일간의 백테스트 결과, 사후합격 1위는 단 1건의 거래로 100% 승률과 높은 PF를 보였습니다. 이는 짧은 기간과 매우 적은 표본 거래 수로 인한 **과적합** 신호이며, 우연에 의한 결과일 가능성이 매우 높습니다. 실제 매매에서는 3건 거래에 수익 0원으로 백테스트와 큰 **괴리**를 보였습니다. 이러한 실매↔백테 괴리(고스트퍼지 등)는 자연스러운 현상입니다. + +## 앞으로 장에서는 +단기간 Optuna best 조합을 바로 실매에 적용하는 것은 **절대 금지**입니다. 최소 5거래일 이상 다일 재검증과 웹 백테스트를 거치세요. 특히 단 1~2건의 거래는 **표본 부족**으로 신뢰할 수 없으며, 시장 변동 시 **손절 기능**이 제대로 작동하는지 확인하는 것이 승률보다 중요합니다. 초기에는 소액 모의 투자로 **실매↔백테 괴리**를 직접 경험하며 시장 변화에 대비하세요. 내일 장은 오늘과 다릅니다. diff --git a/kis_trader/backtest/results/optuna_us_momentum_TSLA_tpe_20260723_225019.briefing.md b/kis_trader/backtest/results/optuna_us_momentum_TSLA_tpe_20260723_225019.briefing.md new file mode 100644 index 0000000..d220b9f --- /dev/null +++ b/kis_trader/backtest/results/optuna_us_momentum_TSLA_tpe_20260723_225019.briefing.md @@ -0,0 +1,28 @@ +# Optuna 브리핑 — us_momentum (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 100/100 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 87건 · 사후합격(results_gated) 0건 + +## 이전 장에서는 +- 실매 동기간 청산 3건 · 승률 0% · 합산 PnL 0원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 학습 1위(사후게이트 미달 가능): trial #22 · 거래 1건 · 승률 0.0% · PF 0.00 · PnL -181원 +- 플러스/학습 후보는 있으나 승률·PF 사후 기준은 못 넘김 → **당장 DB 적용은 비권장.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 현재 사후합격 0건 → 파라미터 유지(현행 DB) + 유니버스/데이터 점검이 우선입니다. + +_생성: 2026-07-23 22:50:20 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 + +지난 3거래일간의 짧은 Optuna TPE 탐색에서 실매 적용 가능한 `사후합격` 기준(승률 40%, PF 1.0)을 통과한 파라미터 조합은 없었습니다. 학습 최고 결과마저 단 1회 거래, PnL -181원에 불과했습니다. 동기간 실매는 3건 청산, 승률 0%, PnL 0원을 기록, 백테스트와 실제 운용 간의 괴리(고스트 퍼지)와 함께 **과적합 및 표본 부족**의 위험을 명확히 보여줍니다. + +## 앞으로 장에서는 + +현재 `사후합격` 후보가 0건이므로, 어떤 파라미터도 즉시 실매에 적용할 수 없습니다. 며칠 간의 짧은 백테스트 결과는 과적합의 함정에 빠지기 쉬우니, 최소 5거래일 이상 재검증과 웹백테스트를 반드시 거쳐야 합니다. 시장 변동 시 승률보다 **손절 기능이 살아있는지**를 최우선으로 확인하고, 파라미터 유지와 유니버스/데이터 점검에 집중해야 합니다. **특정 종목 매수 추천이나 확정 수익은 절대 약속할 수 없습니다.** diff --git a/kis_trader/backtest/results/optuna_us_momentum_tpe_20260723_012516.briefing.md b/kis_trader/backtest/results/optuna_us_momentum_tpe_20260723_012516.briefing.md new file mode 100644 index 0000000..087fb2f --- /dev/null +++ b/kis_trader/backtest/results/optuna_us_momentum_tpe_20260723_012516.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — us_momentum (tpe) +기간: 2026-07-20 ~ 2026-07-23 (거래일≈4일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 171건 · 사후합격(results_gated) 85건 + +## 이전 장에서는 +- 실매(2026-07-20~2026-07-23) 해당 전략 청산 기록 없음(또는 전략명 불일치). +- 사후합격 1위: trial #162 · 거래 17건 · 승률 58.8% · PF 4.86 · PnL 27원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 01:25:20 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +「이전 장에서는」 +지난 4거래일간 Optuna로 us_momentum 전략을 탐색했습니다. 사후합격 1위는 #162번 Trial로 17건 거래, 승률 58.8%, PF 4.86을 기록했으나, 이는 백테스트 결과일 뿐 실매 기록은 없습니다. + +「앞으로 장에서는」 +4일이라는 매우 짧은 백테스트 기간과 17건의 적은 거래 건수는 과적합 및 표본 부족의 위험이 매우 큽니다. 이 결과는 실매 시 백테스트와 큰 괴리(고스트퍼지 등)를 보일 수 있습니다. 최소 5거래일 이상 재검증하고, 소액 모의투자 관찰 후 적용하세요. 손절 기능이 살아있는지 우선 확인해야 합니다. 특정 종목 매수 추천이나 확정 수익을 약속하지 않습니다. diff --git a/kis_trader/backtest/results/optuna_us_momentum_tpe_20260723_200907.briefing.md b/kis_trader/backtest/results/optuna_us_momentum_tpe_20260723_200907.briefing.md new file mode 100644 index 0000000..fca7c17 --- /dev/null +++ b/kis_trader/backtest/results/optuna_us_momentum_tpe_20260723_200907.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — us_momentum (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 100/100 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 87건 · 사후합격(results_gated) 25건 + +## 이전 장에서는 +- 실매 동기간 청산 3건 · 승률 0% · 합산 PnL 0원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #73 · 거래 8건 · 승률 62.5% · PF 17.00 · PnL 16원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 20:09:11 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +3일간의 짧은 백테스트 기간 동안, 실제 거래는 3건 청산에 승률 0%, PnL 0원을 기록하며 백테스트 결과(사후합격 1위: 8건 거래, 승률 62.5%, PnL 16원)와 큰 괴리를 보였습니다. 이는 짧은 기간으로 인한 표본 부족과 고스트퍼지 등 실매↔백테 괴리 현상임을 명확히 인지해야 합니다. + +## 앞으로 장에서는 +이 3일간의 최적화 결과는 과적합 및 표본 부족의 위험이 매우 높습니다. 1~2일 Optuna best를 바로 실매에 적용하지 말고, 반드시 5거래일 이상 다일 재검증과 웹백테스트를 거치십시오. 적용 시에는 `results_gated` 후보군만 검토하며, 승률 자랑보다 손절 로직이 살아있는지를 우선 확인하세요. '내일 장'은 늘 다릅니다. 페이퍼 또는 소액 모의 거래로 충분히 관찰 후 확대하시기 바랍니다. diff --git a/kis_trader/backtest/results/optuna_us_momentum_tpe_20260723_224424.briefing.md b/kis_trader/backtest/results/optuna_us_momentum_tpe_20260723_224424.briefing.md new file mode 100644 index 0000000..79e8d4c --- /dev/null +++ b/kis_trader/backtest/results/optuna_us_momentum_tpe_20260723_224424.briefing.md @@ -0,0 +1,25 @@ +# Optuna 브리핑 — us_momentum (tpe) +기간: 2026-07-21 ~ 2026-07-23 (거래일≈3일) · trials 100/100 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 81건 · 사후합격(results_gated) 33건 + +## 이전 장에서는 +- 실매 동기간 청산 3건 · 승률 0% · 합산 PnL 0원 (백테 Optuna와 숫자 달라도 정상 — 고스트·유니버스·틱 경로 차이). +- 사후합격 1위: trial #45 · 거래 4건 · 승률 50.0% · PF 1.37 · PnL 2원 + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-23 22:44:27 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +## 이전 장에서는 +3일간의 짧은 백테스트에서 Optuna는 승률 50%, PnL 2원의 결과를 보였으나, 이는 **단 4건의 거래에 불과한 표본 부족 및 과적합 가능성이 큰 결과**입니다. 실제 거래에서는 이와 달리 승률 0%, PnL 0원으로 백테스트와 **현격한 괴리**를 보였습니다. 이는 고스트 포지션, 유니버스, 틱 경로 등 다양한 요인으로 실매와 백테스트가 다를 수 있음을 명확히 보여줍니다. + +## 앞으로 장에서는 +이러한 단기 백테스트 best를 실매에 바로 적용하는 것은 매우 위험합니다. **최소 5거래일 이상**의 다일 재검증과 웹 백테스트를 통해 충분히 검증해야 합니다. `results_gated` 조건 통과 후보만 고려하되, 역시 **표본 부족**에 따른 우연한 결과일 수 있습니다. 시장 변동성 확대 시 **손절매가 살아있는지**를 최우선으로 확인하세요. 페이퍼/소액 모의 운용으로 며칠간 관찰 후 신중하게 접근해야 하며, **특정 종목 매수 추천이나 확정 수익은 절대 약속할 수 없습니다.** diff --git a/kis_trader/backtest/scalping_backtest_common.py b/kis_trader/backtest/scalping_backtest_common.py index 9d4bfc8..246e1a1 100644 --- a/kis_trader/backtest/scalping_backtest_common.py +++ b/kis_trader/backtest/scalping_backtest_common.py @@ -43,6 +43,7 @@ def resolve_scalp_universe( *, use_saved_history: bool, strategy_id: str = SCALP_STRATEGY_ID, + history_source: str = "kiwoom", ) -> Tuple[Optional[Dict[str, List[str]]], str, int, int]: """ backtest_web 유니버스 해석과 동일. @@ -53,16 +54,22 @@ def resolve_scalp_universe( if use_saved_history and strategy_id: try: from kis_trader.database.db_manager import get_db as _get_ext_db + from kis_trader.backtest.universe_history_source import ( + history_source_label, + resolve_backtest_universe_history_source, + ) debounce_sec = scalp_universe_exit_debounce_sec() + hs = resolve_backtest_universe_history_source(history_source) history = _get_ext_db().get_universe_by_candle_time( strategy_id=strategy_id, start_ymd=start_ymd, end_ymd=end_ymd, exit_debounce_sec=debounce_sec, + history_source=hs, ) if history: - return history, "history", len(history), 1 + return history, history_source_label(hs), len(history), 1 except Exception: pass return None, "all", 0, 1 @@ -88,6 +95,7 @@ def prepend_scalp_candle_warmup( period_start_key: str, *, warmup_bars: Optional[int] = None, + history_source: str = "kiwoom", ) -> int: """ ``period_start_key``(YYYYMMDDHHMM) 이전 N봉을 종목별로 prepend. @@ -100,6 +108,13 @@ def prepend_scalp_candle_warmup( ) if wb <= 0 or db is None or not period_start_key: return 0 + hs = str(history_source or "kiwoom").strip().lower() + if hs in ("ls", "ls_condition", "ls_ws"): + from kis_trader.backtest.ls_history_loaders import prepend_ls_candle_warmup + + return prepend_ls_candle_warmup( + db, candles_by_code, str(period_start_key)[:12], wb, + ) ps = str(period_start_key)[:12] total_prepended = 0 for code, rows in list(candles_by_code.items()): @@ -139,8 +154,23 @@ def load_scalp_candles_by_code( start_key: str, end_key: str, rsi_period: int = 3, + *, + history_source: str = "kiwoom", ) -> Tuple[Dict[str, List[Dict]], int]: - """ws_candles 1분봉 전 종목 로드 (+ 기간 전 웜업 prepend).""" + """1분봉 전 종목 로드 (+ 웜업). history_source=ls → ls_ws_candles.""" + min_bars = int(rsi_period) + 5 + hs = str(history_source or "kiwoom").strip().lower() + if hs in ("ls", "ls_condition", "ls_ws"): + from kis_trader.backtest.ls_history_loaders import load_ls_candles_by_code + + candles_by_code, total_candles = load_ls_candles_by_code( + db, start_key, end_key, min_bars=min_bars, + ) + prepend_scalp_candle_warmup( + db, candles_by_code, str(start_key)[:12], history_source="ls", + ) + return candles_by_code, total_candles + codes_raw = db.conn.execute( "SELECT DISTINCT code FROM ws_candles WHERE timeframe=1 " "AND candle_time >= %s AND candle_time <= %s ORDER BY code", @@ -150,7 +180,6 @@ def load_scalp_candles_by_code( candles_by_code: Dict[str, List[Dict]] = {} total_candles = 0 - min_bars = int(rsi_period) + 5 for code in codes: rows = db.conn.execute( @@ -212,7 +241,15 @@ def run_scalping_backtest_web_aligned( engine_params["_backtest_period_start_key"] = _sk_w _db_w = (meta_out or {}).get("db") if _db_w is not None and str(mode).strip().lower() != "momentum": - prepend_scalp_candle_warmup(_db_w, candles_by_code, _sk_w) + _hs_w = str( + engine_params.get("_universe_history_source") + or engine_params.get("universe_history_source") + or (meta_out or {}).get("universe_history_source") + or "kiwoom" + ).strip().lower() + prepend_scalp_candle_warmup( + _db_w, candles_by_code, _sk_w, history_source=_hs_w, + ) from kis_trader.backtest.backtest_env_timeline import attach_backtest_env_timeline_to_params attach_backtest_env_timeline_to_params(engine_params, meta_out, "SCALP") @@ -236,18 +273,41 @@ def run_scalping_backtest_web_aligned( start_key = str(meta_out.get("start_key") or "") end_key = str(meta_out.get("end_key") or "") db = meta_out.get("db") + if db is None and start_key and end_key: + from kis_trader.backtest.backtest_portfolio_common import ensure_meta_db + + db = ensure_meta_db(meta_out) if db and start_key and end_key: - loaded_ticks, tick_rows = load_breakout_ticks_by_code( - db, start_key, end_key, set(candles_by_code.keys()), - ) + _hs_tick = str( + engine_params.get("_universe_history_source") + or engine_params.get("universe_history_source") + or (meta_out or {}).get("universe_history_source") + or "kiwoom" + ).strip().lower() + if _hs_tick in ("ls", "ls_condition", "ls_ws"): + from kis_trader.backtest.ls_history_loaders import ( + load_ls_ticks_by_code, + ) + + loaded_ticks, tick_rows = load_ls_ticks_by_code( + db, start_key, end_key, set(candles_by_code.keys()), + ) + _tick_tbl = "ls_ws_ticks" + else: + loaded_ticks, tick_rows = load_breakout_ticks_by_code( + db, start_key, end_key, set(candles_by_code.keys()), + ) + _tick_tbl = "ws_ticks" tick_meta = tick_coverage_stats(candles_by_code, loaded_ticks) tick_meta["ws_tick_rows_loaded"] = tick_rows + tick_meta["tick_table"] = _tick_tbl if tick_rows <= 0: from kis_trader.utils.logger import get_logger as _get_logger _get_logger("kis_trader.scalping_backtest").warning( - "⚠️ ws_ticks 데이터 없음 — SCALP 틱 청산/진입 스킵 " + "⚠️ %s 데이터 없음 — SCALP 틱 청산/진입 스킵 " "(틱 수집 후 재백테 권장, FALLBACK_OHLC=1 시 OHLC)", + _tick_tbl, ) elif loaded_ticks: tick_meta = tick_coverage_stats(candles_by_code, loaded_ticks) diff --git a/kis_trader/backtest/scalping_portfolio_backtest.py b/kis_trader/backtest/scalping_portfolio_backtest.py index 8809b7f..65ee34c 100644 --- a/kis_trader/backtest/scalping_portfolio_backtest.py +++ b/kis_trader/backtest/scalping_portfolio_backtest.py @@ -455,12 +455,24 @@ def run_scalping_backtest_portfolio( if entry_price <= 0: continue + from kis_trader.engine.mid_enroll_entry_gate import bt_should_defer_mid_enroll + if bt_should_defer_mid_enroll( + str(next_c.get("candle_time") or ""), + code, + t, + tf_min=1, + universe_by_slot=universe_by_slot, + params=params, + ): + continue + stop = entry_price * (1 - sl_pct) target = entry_price * (1 + tp_pct) pri = _buy_priority_key(code, slot_key, universe_by_slot) pe_data: Dict[str, Any] = { "entry_time": next_c["candle_time"], "entry_price": entry_price, + "entry_bar_key": str(next_c.get("candle_time") or "")[:12], "stop": stop, "target": target, } diff --git a/kis_trader/backtest/tail_backtest_common.py b/kis_trader/backtest/tail_backtest_common.py index e74f2bd..0d32f4f 100644 --- a/kis_trader/backtest/tail_backtest_common.py +++ b/kis_trader/backtest/tail_backtest_common.py @@ -284,6 +284,7 @@ def resolve_tail_universe( *, use_saved_history: bool, strategy_id: str = TAIL_STRATEGY_ID, + history_source: str = "kiwoom", ) -> Tuple[Optional[Dict[str, List[str]]], str, int, int]: """ backtest_web._resolve_backtest_universe(꼬리) 와 동일. @@ -297,15 +298,21 @@ def resolve_tail_universe( from kis_trader.backtest.universe_timeline import ( universe_exit_debounce_sec_for_strategy, ) + from kis_trader.backtest.universe_history_source import ( + history_source_label, + resolve_backtest_universe_history_source, + ) + hs = resolve_backtest_universe_history_source(history_source) history = _get_ext_db().get_universe_by_candle_time( strategy_id=strategy_id, start_ymd=start_ymd, end_ymd=end_ymd, exit_debounce_sec=universe_exit_debounce_sec_for_strategy(strategy_id), + history_source=hs, ) if history: - return history, "history", len(history), 1 + return history, history_source_label(hs), len(history), 1 except Exception: pass return None, "all", 0, 1 @@ -704,11 +711,22 @@ def run_tail_backtest_web_aligned( build_universe_timeline, universe_exit_debounce_sec_for_strategy, ) + from kis_trader.backtest.universe_history_source import ( + resolve_backtest_universe_history_source, + ) + _deb = universe_exit_debounce_sec_for_strategy(TAIL_STRATEGY_ID) + # 슬롯 dict(resolve_tail_universe)와 동일 소스 — LS 라벨인데 키움 타임라인 쓰는 사고 방지 + _hs = resolve_backtest_universe_history_source( + engine_params.get("_universe_history_source") + or engine_params.get("universe_history_source") + ) + engine_params["_universe_history_source"] = _hs _tl = build_universe_timeline( strategy_id=TAIL_STRATEGY_ID, start_ymd=_sk[:8], end_ymd=_ek[:8], debounce_sec=_deb, strict=False, strict_lag_minutes=0, + history_source=_hs, ) if _tl is not None: engine_params["_universe_timeline"] = _tl @@ -716,6 +734,7 @@ def run_tail_backtest_web_aligned( meta_out["universe_timing"] = "scan_at" meta_out["universe_timeline_snapshots"] = _tl.snapshot_count meta_out["universe_exit_debounce_sec"] = _deb + meta_out["universe_history_source"] = _hs # ── 체결 검증 게이트 (STRICT_FILL_VERIFY) ────────────────────────────── # 백테 체결모델(슬리피지·체결량 상한)은 '엄격 체결 검증'이 켜졌을 때만 적용한다. @@ -744,6 +763,12 @@ def run_tail_backtest_web_aligned( start_key = str(meta_out.get("start_key") or "") end_key = str(meta_out.get("end_key") or "") db = meta_out.get("db") + # 웹은 meta_out["db"] 를 넘김. CLI/잡 경로에서 빠지면 틱 미로드 → + # tick_exit_count=0·OHLC 장마감만 → 실매 래칫(분단위)과 크게 어긋남. + if db is None and start_key and end_key: + from kis_trader.backtest.backtest_portfolio_common import ensure_meta_db + + db = ensure_meta_db(meta_out) if db and start_key and end_key: loaded_ticks, tick_rows = load_tail_ticks_by_code( db, start_key, end_key, set(candles_by_code.keys()), diff --git a/kis_trader/backtest/tail_bt_web_jobs.py b/kis_trader/backtest/tail_bt_web_jobs.py new file mode 100644 index 0000000..8b9bf52 --- /dev/null +++ b/kis_trader/backtest/tail_bt_web_jobs.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 +"""하위호환 — 실제 구현은 bt_web_jobs (공용 잡).""" +from kis_trader.backtest.bt_web_jobs import ( # noqa: F401 + find_running, + list_jobs, + load_job, + read_progress, + refresh_job, + save_job, + start_bt_job, + start_tail_bt_job, + stop_bt_job, + stop_tail_bt_job, +) diff --git a/kis_trader/backtest/tail_param_search.py b/kis_trader/backtest/tail_param_search.py index 5cc4acb..e01720f 100644 --- a/kis_trader/backtest/tail_param_search.py +++ b/kis_trader/backtest/tail_param_search.py @@ -79,6 +79,7 @@ from kis_trader.backtest.backtest_portfolio_common import ( strip_portfolio_keys_from_apply_patch, session_env_patch, ) +from kis_trader.backtest.optuna_common import attach_daily_stability from kis_trader.backtest.param_search_cli_common import ( add_portfolio_cli_args, add_search_filter_cli_args, @@ -367,9 +368,6 @@ def _tail_grids(mode: str) -> Dict[str, List[Any]]: "min_bid_ask_ratio": _parse_csv_floats( f"{p}MIN_BID_ASK_RATIO", [0.85, 1.0], ), - "trail_tiers": _parse_semi_strings(f"{p}TRAIL_TIERS", ["off"]), - "trail_drop_pct": _parse_csv_floats(f"{p}TRAIL_DROP_PCT", [0.0, 35.0]), - "trail_arm_krw": _parse_csv_floats(f"{p}TRAIL_ARM_KRW", [5000.0]), "max_loss_krw": _parse_csv_floats( f"{p}MAX_LOSS_KRW", [150000.0, 200000.0], ), @@ -469,12 +467,6 @@ def _tail_grids(mode: str) -> Dict[str, List[Any]]: "min_bid_ask_ratio": _parse_csv_floats( f"{p}MIN_BID_ASK_RATIO", [0.85, 1.0], ), - "trail_tiers": _parse_semi_strings(f"{p}TRAIL_TIERS", [ - "off", - "5000:40,10000:30,20000:20", - ]), - "trail_drop_pct": _parse_csv_floats(f"{p}TRAIL_DROP_PCT", [0.0, 35.0]), - "trail_arm_krw": _parse_csv_floats(f"{p}TRAIL_ARM_KRW", [5000.0, 10000.0]), "max_loss_krw": _parse_csv_floats( f"{p}MAX_LOSS_KRW", [100000.0, 150000.0, 200000.0], ), @@ -576,23 +568,22 @@ def _tail_grids(mode: str) -> Dict[str, List[Any]]: "rsi_threshold": _parse_csv_floats( f"{p}RSI_THRESHOLD", [75.0, 78.0, 85.0, 90.0], ), + # --- 반전 패턴 ON/OFF (실매 DB와 정합: 망치는 BASE 고정 True, 아래만 스윕) --- + # 빼고 싶으면 해당 줄 주석 처리. 값만 고정: [False] 또는 [True] + # 스윕: [False, True] / env: TAIL_GRID_FINE_PATTERN_* "pattern_pin": _parse_csv_bools(f"{p}PATTERN_PIN", [False, True]), "pattern_engulfing": _parse_csv_bools(f"{p}PATTERN_ENGULFING", [True]), "pattern_piercing": _parse_csv_bools(f"{p}PATTERN_PIERCING", [True]), + # 희귀 패턴 — 실매 기본 False. 과적합·노이즈 많으면 아래 3줄 통째 주석 or [False]만 + "pattern_harami": _parse_csv_bools(f"{p}PATTERN_HARAMI", [False, True]), + "pattern_doji": _parse_csv_bools(f"{p}PATTERN_DOJI", [False, True]), + "pattern_morning_star": _parse_csv_bools( + f"{p}PATTERN_MORNING_STAR", [False, True], + ), "max_spread_pct": _parse_csv_floats(f"{p}MAX_SPREAD_PCT", [0.30, 0.45]), "min_bid_ask_ratio": _parse_csv_floats( f"{p}MIN_BID_ASK_RATIO", [0.85, 1.0], ), - "trail_tiers": _parse_semi_strings(f"{p}TRAIL_TIERS", [ - "off", - "5000:40,10000:30,20000:20", - ]), - "trail_drop_pct": _parse_csv_floats( - f"{p}TRAIL_DROP_PCT", [0.0, 35.0], - ), - "trail_arm_krw": _parse_csv_floats( - f"{p}TRAIL_ARM_KRW", [5000.0, 10000.0], - ), "max_loss_krw": _parse_csv_floats( f"{p}MAX_LOSS_KRW", [100000.0, 150000.0, 200000.0], ), @@ -707,19 +698,6 @@ def _tail_grids(mode: str) -> Dict[str, List[Any]]: "min_bid_ask_ratio": _parse_csv_floats( f"{p}MIN_BID_ASK_RATIO", [0.50, 0.70, 0.85, 1.0, 1.2], ), - "trail_tiers": _parse_semi_strings(f"{p}TRAIL_TIERS", [ - "off", - "5000:40,10000:30,20000:20", - "30000:50,100000:35,300000:25", - "50000:60,200000:45,500000:30", - "10000:50,50000:40,200000:30", - ]), - "trail_drop_pct": _parse_csv_floats( - f"{p}TRAIL_DROP_PCT", [0.0, 20.0, 25.0, 35.0, 45.0, 55.0], - ), - "trail_arm_krw": _parse_csv_floats( - f"{p}TRAIL_ARM_KRW", [0.0, 5000.0, 10000.0, 20000.0, 30000.0], - ), "max_loss_krw": _parse_csv_floats( f"{p}MAX_LOSS_KRW", [30000.0, 50000.0, 100000.0, 150000.0, 200000.0, 300000.0, 500000.0], @@ -851,18 +829,6 @@ def _tail_grids(mode: str) -> Dict[str, List[Any]]: "min_bid_ask_ratio": _parse_csv_floats( f"{p}MIN_BID_ASK_RATIO", [0.50, 0.70, 0.85, 1.0, 1.2], ), - "trail_tiers": _parse_semi_strings(f"{p}TRAIL_TIERS", [ - "off", - "5000:40,10000:30,20000:20", - "30000:50,100000:35,300000:25", - "50000:60,200000:45,500000:30", - ]), - "trail_drop_pct": _parse_csv_floats( - f"{p}TRAIL_DROP_PCT", [0.0, 20.0, 25.0, 35.0, 45.0, 55.0], - ), - "trail_arm_krw": _parse_csv_floats( - f"{p}TRAIL_ARM_KRW", [0.0, 3000.0, 5000.0, 10000.0, 20000.0, 30000.0], - ), "max_loss_krw": _parse_csv_floats( f"{p}MAX_LOSS_KRW", [30000.0, 50000.0, 100000.0, 150000.0, 200000.0, 300000.0, 500000.0], @@ -981,19 +947,6 @@ def _tail_grids(mode: str) -> Dict[str, List[Any]]: "min_bid_ask_ratio": _parse_csv_floats( f"{p}MIN_BID_ASK_RATIO", [0.40, 0.50, 0.70, 0.85, 1.0, 1.2, 1.5], ), - "trail_tiers": _parse_semi_strings(f"{p}TRAIL_TIERS", [ - "off", - "5000:40,10000:30,20000:20", - "30000:50,100000:35,300000:25", - "50000:60,200000:45,500000:30", - "10000:50,50000:40,200000:30", - ]), - "trail_drop_pct": _parse_csv_floats( - f"{p}TRAIL_DROP_PCT", [0.0, 15.0, 20.0, 25.0, 35.0, 45.0, 55.0], - ), - "trail_arm_krw": _parse_csv_floats( - f"{p}TRAIL_ARM_KRW", [0.0, 3000.0, 5000.0, 10000.0, 20000.0, 30000.0], - ), "max_loss_krw": _parse_csv_floats( f"{p}MAX_LOSS_KRW", [30000.0, 50000.0, 100000.0, 150000.0, 200000.0, 300000.0, 500000.0], @@ -1029,9 +982,6 @@ TAIL_GRID_AXIS_HINTS_KO: Dict[str, str] = { "shoulder_min_high": "어깨 발동: 진입가 대비 최소 수익(0.003=0.3%) 후 max_price 추적", "shoulder_cut_pct": "어깨 폭: 갱신된 max_price 대비 되돌림(0.002=0.2%, 매도선=max×(1-cut))", "ratchet_tiers": "청산방식: off=단일 어깨컷 / '수익%:컷%,…'=다단 래칫 트레일", - "trail_tiers": "당일손익 다단 트레일 'off'/'수익원:컷%,…' — 벌수록 컷% 타이트(이익 보존), 일단위 표본", - "trail_drop_pct": "당일손익 단일 트레일(고점대비 %, 0=OFF) — tier='off' 일 때만 의미", - "trail_arm_krw": "단일 트레일 발동 최소수익(원) — tier='off' & drop>0 일 때만 의미", "max_daily": "종목당 일일 매수 안전판(무한루프 방지, 기본 20)", "symbol_daily_loss_limit_pct": "종목당 당일 실현손익 손실한도(%·양수, slot 대비) — 재진입 차단", "symbol_daily_loss_limit_krw": "종목당 당일 실현손익 손실한도(원·양수) — KRW·% 중 먼저 닿는 쪽", @@ -1044,6 +994,9 @@ TAIL_GRID_AXIS_HINTS_KO: Dict[str, str] = { "pattern_pin": "핀바(긴 아래꼬리 단일봉) 진입 패턴 ON/OFF", "pattern_engulfing": "장악형(2봉 반전) 진입 패턴 ON/OFF", "pattern_piercing": "관통형(2봉 반전) 진입 패턴 ON/OFF", + "pattern_harami": "하라미(안쪽형 2봉 반전) 진입 패턴 ON/OFF — fine 스윕", + "pattern_doji": "도지(십자형) 진입 패턴 ON/OFF — fine 스윕", + "pattern_morning_star": "샛별(모닝스타 3봉 반전) 진입 패턴 ON/OFF — fine 스윕", "max_loss_krw": "1회 최대 금액 손실(원, 트레일 미발동 시)", "limit_atr_mult": "ATR 지정가 깊이(anchor−ATR×배수) — limit_atr 전용, 클수록 체결↓", "entry_mode": "진입: align=다음봉 시가 / limit_atr=지정가(틱 체결 재생)", @@ -1052,6 +1005,11 @@ TAIL_GRID_AXIS_HINTS_KO: Dict[str, str] = { "max_daily_change": "급등주 필터(당일 등락률 상한, %)", "trail_pct": "보조 트레일 폭(고점 대비, 0=OFF). 래칫 ON이면 1단계보다 arm이 커야 효과", "trail_arm_pct": "보조 트레일 무장: 진입×(1+arm) 도달 후 (0=즉시)", + "whipsaw_enabled": "휩쏘 필터 ON/OFF — 실매 TAIL_WHIPSAW_FILTER_ENABLED (현재 false 포함)", + "whipsaw_subbar_sec": "휩쏘 미니봉(초) — 기본 30 · TPE [15,30,45,60]", + "whipsaw_lookback_sec": "휩쏘 룩백(초) — 기본 90 · TPE [60,90,120,180]", + "whipsaw_dip_pct": "휩쏘 지지이탈 하락폭(분율) — 기본 0.003", + "whipsaw_recovery_tol_pct": "휩쏘 회복 허용(분율) — 기본 0.001", "max_spread_pct": "호가 스프레드 상한(%) — kiwoom_0d 본체 재계산(6/25~)", "min_bid_ask_ratio": "총매수/총매도 잔량비 하한(꼬리지지) — kiwoom_0d 본체 재계산(6/25~)", } @@ -1088,23 +1046,11 @@ def evaluate_tail_param_combo( test_params["_ob_max_spread_pct"] = float(combo["max_spread_pct"]) if "min_bid_ask_ratio" in combo and combo.get("min_bid_ask_ratio") is not None: test_params["_ob_min_bid_ask_ratio"] = float(combo["min_bid_ask_ratio"]) - # 당일손익 트레일 익절 — tier(우선) 또는 단일 drop 이 켜졌을 때만 시뮬 게이트 ON. - _tier_combo = str(combo.get("trail_tiers") or "").strip().lower() - _tier_on = _tier_combo not in ("", "off") - if _tier_on: - test_params["_backtest_daily_profit_trail"] = True - test_params.setdefault("daily_profit_mode", "trailing") - test_params["daily_trail_tiers"] = str(combo["trail_tiers"]).strip() - elif float(combo.get("trail_drop_pct") or 0) > 0: - test_params["_backtest_daily_profit_trail"] = True - test_params.setdefault("daily_profit_mode", "trailing") - test_params["daily_trail_drop_pct"] = float(combo["trail_drop_pct"]) - if combo.get("trail_arm_krw") is not None: - test_params["daily_trail_arm_krw"] = float(combo["trail_arm_krw"]) - else: - _arm_env = os.environ.get("TAIL_GRID_TRAIL_ARM_KRW", "") - if str(_arm_env).strip() != "": - test_params["daily_trail_arm_krw"] = float(_arm_env) + # 당일손익 다단트레일 — 그리드/Optuna 탐색 제외. 시뮬은 DB/env(SHORT_DAILY_PROFIT_*) 고정 추종. + # (과거 combo 키 trail_tiers/drop/arm 이 남아 있어도 무시) + for _k in ("trail_tiers", "trail_drop_pct", "trail_arm_krw", + "daily_trail_tiers", "daily_trail_drop_pct", "daily_trail_arm_krw"): + test_params.pop(_k, None) if cache_holder: test_params.update(cache_holder) if log_verdict_by_code: @@ -1139,7 +1085,7 @@ def evaluate_tail_param_combo( ): return None - return { + return attach_daily_stability({ "params": combo, "apply_cfg": {**base_params, **combo}, "total_trades": total_trades, @@ -1155,7 +1101,7 @@ def evaluate_tail_param_combo( "skipped_micro_buys": int( (meta.get("skip_stats") or {}).get("skipped_micro_buys") or 0 ), - } + }, trades) def evaluate_param_chunk( @@ -1340,22 +1286,16 @@ def run_search( base_params["scan_interval_min"] = scan_interval_min base_params["timeframe"] = tail_tf from kis_trader.engine.tail_tick_replay import ( - tail_backtest_tick_fallback_ohlc as _tail_tick_fallback, tail_backtest_use_tick_db as _tail_use_tick, tail_backtest_use_tick_exit as _tail_use_tick_exit, ) - base_params.setdefault("backtest_tick_fallback_ohlc", _tail_tick_fallback(None)) # ── 틱재생(ws_ticks) — 기본 ON (실매 체결 정합) ────────────────────── - # 3분봉 OHLC(open→high→low→close 가정)는 손절보다 익절을 먼저 체결하는 - # 낙관 편향을 만든다. 모멘텀·돌파와 동일하게 tail_tick_replay 기본값(ON)을 - # 그대로 따르되, params/env(TAIL_BACKTEST_USE_TICK_DB)로 오버라이드 가능. + # 절대규칙: 파람서치는 OHLC 폴백으로 숫자 변조 금지 base_params.setdefault("backtest_use_tick_db", _tail_use_tick(None)) base_params.setdefault("backtest_use_tick_exit", _tail_use_tick_exit(None)) + base_params["backtest_tick_fallback_ohlc"] = False if base_params.get("backtest_use_tick_db") or base_params.get("backtest_use_tick_exit"): - if base_params.get("backtest_tick_fallback_ohlc"): - logger.info("📌 틱재생(ws_ticks): ON + OHLC 폴백 ON") - else: - logger.info("📌 틱재생(ws_ticks): ON — OHLC 폴백 OFF (틱 없는 구간 스킵)") + logger.info("📌 틱재생(ws_ticks): ON — OHLC 폴백 강제 OFF (정합 절대규칙)") logger.info( f"📅 데이터 로드: {start} ~ {end} | TF={tail_tf} | " @@ -1816,28 +1756,7 @@ def _tail_params_to_env_map(p: Dict[str, Any]) -> Dict[str, str]: env_map["RISK_PCT_PER_TRADE"] = str(p["risk_pct"]) if "kelly_mult" in p: env_map["KELLY_MULTIPLIER"] = str(p["kelly_mult"]) - # 당일손익 트레일 — 백테 trail_tiers 축 → 실매 DAILY_PROFIT_* / SHORT_* 동기 - if "trail_tiers" in p: - tier = str(p.get("trail_tiers") or "").strip() - if tier.lower() == "off": - env_map["DAILY_PROFIT_TRAIL_TIERS"] = "" - env_map["SHORT_DAILY_PROFIT_TRAIL_TIERS"] = "" - else: - env_map["DAILY_PROFIT_TRAIL_TIERS"] = tier - env_map["SHORT_DAILY_PROFIT_TRAIL_TIERS"] = tier - env_map["DAILY_PROFIT_MODE"] = "trailing" - env_map["SHORT_DAILY_PROFIT_MODE"] = "trailing" - if "trail_drop_pct" in p and p.get("trail_drop_pct") is not None: - drop = max(0.0, float(p["trail_drop_pct"])) - env_map["DAILY_PROFIT_TRAIL_DROP_PCT"] = str(drop) - env_map["SHORT_DAILY_PROFIT_TRAIL_DROP_PCT"] = str(drop) - if drop > 0: - env_map["DAILY_PROFIT_MODE"] = "trailing" - env_map["SHORT_DAILY_PROFIT_MODE"] = "trailing" - if "trail_arm_krw" in p and p.get("trail_arm_krw") is not None: - arm = max(0.0, float(p["trail_arm_krw"])) - env_map["DAILY_PROFIT_TRAIL_ARM_KRW"] = str(int(arm)) - env_map["SHORT_DAILY_PROFIT_TRAIL_ARM_KRW"] = str(int(arm)) + # 당일손익 다단트레일 — apply-best 로 DB 덮어쓰기 금지 (운영 UI/DB만 변경). from kis_trader.engine.orderbook_env import orderbook_params_to_env_patch env_map.update(orderbook_params_to_env_patch("TAIL", p)) return env_map diff --git a/kis_trader/backtest/universe_history_source.py b/kis_trader/backtest/universe_history_source.py new file mode 100644 index 0000000..e540a0c --- /dev/null +++ b/kis_trader/backtest/universe_history_source.py @@ -0,0 +1,81 @@ +""" +백테/Optuna 유니버스 이력 테이블 소스 해석 +======================================== +- ``kiwoom`` / ``target`` → ``target_candidates_history`` (실매 키움·KIS 조건식) +- ``ls`` → ``ls_candidates_history`` (LS AFR 수집) + +기본값 ``kiwoom``. CLI / 웹 body / env ``BACKTEST_UNIVERSE_HISTORY_SOURCE`` 우선순위. +""" +from __future__ import annotations + +from typing import Any, Optional + +from kis_trader.utils.env import get_env_bool, get_env_from_db + +VALID_HISTORY_SOURCES = frozenset({"kiwoom", "target", "ls"}) + + +def normalize_universe_history_source(raw: Any) -> str: + s = str(raw or "").strip().lower() + if s in ("", "kiwoom", "target", "kis", "condition"): + return "kiwoom" + if s in ("ls", "ls_condition", "ls_afr"): + return "ls" + return "kiwoom" + + +def resolve_backtest_universe_history_source( + override: Any = None, + *, + default: str = "kiwoom", +) -> str: + """override(CLI/웹) > env BACKTEST_UNIVERSE_HISTORY_SOURCE > default.""" + if override is not None and str(override).strip() != "": + return normalize_universe_history_source(override) + env_v = get_env_from_db("BACKTEST_UNIVERSE_HISTORY_SOURCE", default) + return normalize_universe_history_source(env_v or default) + + +def history_table_for_source(source: str) -> str: + src = normalize_universe_history_source(source) + if src == "ls": + return "ls_candidates_history" + return "target_candidates_history" + + +def history_source_label(source: str, *, strict: bool = False) -> str: + src = normalize_universe_history_source(source) + if src == "ls": + return "history_ls_strict" if strict else "history_ls" + return "history_strict" if strict else "history" + + +def ls_universe_session_only_enabled() -> bool: + """LS sticky(장전 00시 스냅) 제외 — 기본 ON.""" + return bool(get_env_bool("BACKTEST_LS_UNIVERSE_SESSION_ONLY", True)) + + +def apply_ls_session_filter_to_start( + start_time: str, + *, + source: str, + session_only: Optional[bool] = None, +) -> str: + """ + LS + session_only 이면 당일 09:00:00 이전 스냅을 조회 시작에서 잘라낸다. + start_time 형식: 'YYYY-MM-DD HH:MM:SS' + """ + src = normalize_universe_history_source(source) + if src != "ls": + return start_time + if session_only is None: + session_only = ls_universe_session_only_enabled() + if not session_only: + return start_time + # start_time 날짜의 09:00:00 과 max + try: + day = str(start_time)[:10] + floor = f"{day} 09:00:00" + return floor if floor > str(start_time) else str(start_time) + except Exception: + return start_time diff --git a/kis_trader/backtest/universe_timeline.py b/kis_trader/backtest/universe_timeline.py index 5e62188..66632d9 100644 --- a/kis_trader/backtest/universe_timeline.py +++ b/kis_trader/backtest/universe_timeline.py @@ -230,18 +230,33 @@ def build_universe_timeline( debounce_sec: int = 30, strict: bool = False, strict_lag_minutes: int = 1, + history_source: str = "kiwoom", ) -> Optional[UniverseTimeline]: - """``target_candidates_history`` (strategy_id) → 초단위 유니버스 타임라인.""" + """이력 테이블(키움/LS) → 초단위 유니버스 타임라인. + + ``history_source``: ``kiwoom`` | ``ls`` — resolve/슬롯 dict 와 **동일 소스**여야 + scan_at 매수가 라벨과 어긋나지 않는다. + """ try: from kis_trader.database.db_manager import get_db + from kis_trader.backtest.universe_history_source import ( + apply_ls_session_filter_to_start, + normalize_universe_history_source, + resolve_backtest_universe_history_source, + ) + + hs = resolve_backtest_universe_history_source(history_source) + hs = normalize_universe_history_source(hs) ext = get_db() start_time = f"{start_ymd[:4]}-{start_ymd[4:6]}-{start_ymd[6:8]} 00:00:00" + start_time = apply_ls_session_filter_to_start(start_time, source=hs) end_time = f"{end_ymd[:4]}-{end_ymd[4:6]}-{end_ymd[6:8]} 23:59:59" events = ext.iter_universe_events( strategy_id=strategy_id, start_time=start_time, end_time=end_time, preserve_insert_order=True, + history_source=hs, ) normalized = normalize_universe_events(events) if not normalized: diff --git a/kis_trader/backtest/us_momentum_web_backtest.py b/kis_trader/backtest/us_momentum_web_backtest.py new file mode 100644 index 0000000..7abd41a --- /dev/null +++ b/kis_trader/backtest/us_momentum_web_backtest.py @@ -0,0 +1,400 @@ +#!/usr/bin/env python3 +""" +us_momentum_web_backtest.py — 해외 모멘텀 웹 백테 (국내 API 와 완전 분리) + +※ 국내 ``/api/backtest/momentum`` · ``api_backtest_scalping`` 에 market=US if 를 + 넣지 말 것. 해외는 이 모듈 + ``/api/backtest/us_momentum`` 만 사용. +""" +from __future__ import annotations + +from typing import Any, Dict, List, Optional, Tuple + +from kis_trader.backtest import scalping_backtest_common as sbc +from kis_trader.utils.env import get_env_float + + +def _arg(args: Dict[str, Any], key: str, default: Any = None) -> Any: + v = args.get(key, default) + if v is None or v == "": + return default + return v + + +def _f(args: Dict[str, Any], key: str, default: float) -> float: + v = _arg(args, key, None) + if v is None: + return float(default) + return float(v) + + +def _i(args: Dict[str, Any], key: str, default: int) -> int: + v = _arg(args, key, None) + if v is None: + return int(default) + return int(float(v)) + + +def _b(args: Dict[str, Any], key: str, default: bool = False) -> bool: + v = _arg(args, key, None) + if v is None: + return bool(default) + return str(v).strip().lower() in ("1", "true", "t", "y", "yes", "on") + + +def build_us_momentum_engine_params( + args: Dict[str, Any], + *, + ui_def: Dict[str, Any], +) -> Dict[str, Any]: + """폼/쿼리 → momentum_engine 파라미터 (US 전용).""" + d = ui_def + + def pct_ratio(key: str, def_ui: float) -> float: + """UI % → 엔진 비율.""" + return abs(_f(args, key, def_ui)) / 100.0 + + sl = pct_ratio("sl_pct", float(d.get("sl_pct", 1.5))) + tp = pct_ratio("tp_pct", float(d.get("tp_pct", 2.5))) + tp_max = pct_ratio("tp_max_pct", float(d.get("tp_max_pct", 2.0))) + time_start = _i(args, "time_start", int(d.get("mom_time_start_hm") or d.get("time_start") or 2230)) + time_end = _i( + args, "time_end", + int(d.get("mom_time_end_hm") or d.get("time_end") or 500), + ) + mom_time_end = _i(args, "mom_time_end", time_end) + + params: Dict[str, Any] = { + "market": "US", + "sl_pct": sl, + "tp_pct": tp, + "tp_max_pct": tp_max, + "shoulder_min_high": pct_ratio("shoulder_min_high", float(d.get("shoulder_min_high", 0.5))), + "shoulder_cut_pct": pct_ratio("shoulder_cut_pct", float(d.get("shoulder_cut_pct", 0.3))), + "trail_pct": pct_ratio("trail_pct", float(d.get("trail_pct", 0.0))), + "trail_arm_pct": pct_ratio("trail_arm_pct", float(d.get("trail_arm_pct", 0.0))), + "max_hold_bars": _i(args, "max_hold_bars", int(d.get("max_hold_bars") or 0)), + "ratchet_tiers": str(_arg(args, "ratchet_tiers", d.get("ratchet_tiers") or "") or "").strip(), + "cooldown_min": _f(args, "cooldown_min", float(d.get("cooldown_min") or 5)), + "time_start_hm": time_start, + "time_end_hm": time_end, + "mom_time_end_hm": mom_time_end, + "max_daily": _i(args, "max_daily", int(d.get("max_daily") or 5)), + "high_chase_thr": _f(args, "high_chase_thr", float(d.get("high_chase_thr") or 0.96)), + "max_daily_chg": _f(args, "max_daily_chg", float(d.get("max_daily_chg") or 20)), + "min_price": _f(args, "min_price", float(d.get("min_price") or 1)), + "max_loss_krw": _f(args, "max_loss_krw", float(d.get("max_loss_krw") or 0)), + "min_margin": _f(args, "min_margin", float(d.get("min_margin") or 0.2)), + "use_defense_filters": _b(args, "use_defense_filters", bool(d.get("use_defense_filters", True))), + "use_high_chase_filter": _b(args, "use_high_chase_filter", False), + "use_daily_range_filter": _b(args, "use_daily_range_filter", False), + "use_ema_filter": _b(args, "use_ema_filter", bool(d.get("use_ema_filter", True))), + "use_rsi_max_filter": _b(args, "use_rsi_max_filter", False), + "pattern_breakout": _b(args, "pattern_breakout", True), + "pattern_pullback": _b(args, "pattern_pullback", True), + "chase_lookback_min": _i(args, "chase_lookback_min", int(d.get("chase_lookback_min") or 10)), + "pullback_lookback_min": _i(args, "pullback_lookback_min", int(d.get("pullback_lookback_min") or 15)), + "pullback_min_pct": _f(args, "pullback_min_pct", float(d.get("pullback_min_pct") or 0.3)), + "pullback_max_pct": _f(args, "pullback_max_pct", float(d.get("pullback_max_pct") or 3.0)), + "setup_vol_max_mult": _f(args, "setup_vol_max_mult", float(d.get("setup_vol_max_mult") or 0.8)), + "setup_bear_bars_min": _i(args, "setup_bear_bars_min", int(d.get("setup_bear_bars_min") or 1)), + "ema_fast_period": _i(args, "ema_fast_period", int(d.get("ema_fast_period") or 9)), + "ema_slow_period": _i(args, "ema_slow_period", int(d.get("ema_slow_period") or 21)), + "mom_rsi_min": _f(args, "mom_rsi_min", float(d.get("mom_rsi_min") or 50)), + "mom_rsi_max": _f(args, "mom_rsi_max", float(d.get("mom_rsi_max") or 90)), + "mom_vol_mult": _f(args, "mom_vol_mult", float(d.get("mom_vol_mult") or 1.5)), + "mom_vol_win": _i(args, "mom_vol_win", int(d.get("mom_vol_win") or 5)), + "mom_max_from_open_pct": _f(args, "mom_max_from_open_pct", float(d.get("mom_max_from_open_pct") or 999)), + "mom_min_from_open_pct": _f(args, "mom_min_from_open_pct", float(d.get("mom_min_from_open_pct") or -999)), + "eod_enabled": _b(args, "eod_enabled", bool(d.get("eod_enabled", False))), + "eod_hm": str(_arg(args, "eod_hm", d.get("eod_hm") or "05:00") or "05:00").strip(), + "slot_money": _f(args, "slot_money", float(d.get("slot_money") or 200000)), + # US 고정 플래그 + "_orderbook_filter_enabled": False, + "_program_filter_enabled": False, + "_session_wrap_midnight": True, + "skip_hts_scan_dupes": True, + "fee_rate": 0.0025, + "sell_tax": 0.0000206, + "fx_fee_rate": 0.0005, + "scan_interval_min": 5, + "backtest_skip_pre_subscribe": _b(args, "backtest_skip_pre_subscribe", False), + } + try: + from kis_trader.engine.us_momentum_env_keys import us_momentum_trading_cost_rates + _c = us_momentum_trading_cost_rates() + params["fee_rate"] = float(_c["fee_rate"]) + params["sell_tax"] = float(_c["sell_tax"]) + params["fx_fee_rate"] = float(_c["fx_fee_rate"]) + except Exception: + params["fee_rate"] = float(get_env_float("US_MOMENTUM_FEE_RATE", 0.0025)) + params["sell_tax"] = float(get_env_float("US_MOMENTUM_SELL_TAX", 0.0000206)) + params["fx_fee_rate"] = float(get_env_float("US_MOMENTUM_FX_FEE_RATE", 0.0005)) + return params + + +def load_us_candles( + db: Any, + start: str, + end: str, + codes_filter: Optional[List[str]] = None, +) -> Tuple[Dict[str, List[Dict]], str, str, List[str]]: + """ws_candles.market=US + 영구구독 US 교집합. codes_filter 있으면 해당 종목만.""" + start_key = (start.replace("-", "") + "0000") if start else "20260101" + end_key = (end.replace("-", "") + "2359") if end else "999912312359" + rows = db.conn.execute( + "SELECT DISTINCT code FROM ws_candles WHERE timeframe=1 AND market=%s " + "AND candle_time >= %s AND candle_time <= %s ORDER BY code", + ["US", start_key, end_key], + ).fetchall() + codes = [r["code"] for r in rows] + try: + from permanent_subs import codes_by_market as _perm_us + us_perm = {str(r.get("code") or "").upper() for r in _perm_us(db, "US")} + if us_perm: + codes = [c for c in codes if str(c).upper() in us_perm] or codes + except Exception: + pass + if codes_filter: + want = {str(c).strip().upper() for c in codes_filter if str(c).strip()} + if want: + codes = [c for c in codes if str(c).upper() in want] + + codes_candles: Dict[str, List[Dict]] = {} + for code in codes: + crow = db.conn.execute( + "SELECT candle_time, open, high, low, close, volume " + "FROM ws_candles " + "WHERE timeframe=1 AND code=%s AND market=%s " + "AND candle_time >= %s AND candle_time <= %s " + "AND is_confirmed=1 " + "ORDER BY candle_time ASC", + [code, "US", start_key, end_key], + ).fetchall() + if not crow: + continue + codes_candles[str(code)] = [dict(x) for x in crow] + return codes_candles, start_key, end_key, list(codes_candles.keys()) + + +def run_us_momentum_web_backtest( + args: Dict[str, Any], + *, + db: Any, + ui_def: Dict[str, Any], + enrich_trades_fn: Optional[Any] = None, + enrich_names_fn: Optional[Any] = None, + trades_recent_fn: Optional[Any] = None, + period_days_fn: Optional[Any] = None, +) -> Dict[str, Any]: + """ + 해외 모멘텀 웹 백테 실행 → jsonify 용 dict. + enrich_* 는 backtest_web 헬퍼를 주입 (순환 import 방지). + """ + start = str(_arg(args, "start", "") or "") + end = str(_arg(args, "end", "") or "") + params = build_us_momentum_engine_params(args, ui_def=ui_def) + # 종목 필터: symbol / code / codes (쉼표) + filt: List[str] = [] + for k in ("symbol", "code", "codes"): + raw = _arg(args, k, None) + if raw in (None, ""): + continue + if isinstance(raw, (list, tuple)): + filt.extend(str(x).strip() for x in raw if str(x).strip()) + else: + filt.extend(p.strip() for p in str(raw).split(",") if p.strip()) + codes_candles, start_key, end_key, codes = load_us_candles( + db, start, end, codes_filter=filt or None, + ) + # 웹 폼이 소스 오브 트루스. + # (구) 단일종목이면 stock_config 로 폼을 덮어써서 Optuna·폼 수정과 백테가 어긋남. + # 종목행 → 폼 로드는 UI(usmomOnStockSelect)에서. 실매 오버레이는 전략 엔진 경로. + use_stock_cfg = _b(args, "use_stock_cfg", False) or _b(args, "apply_stock_cfg", False) + stock_overlay_applied = False + if use_stock_cfg and len(codes) == 1: + try: + from kis_trader.strategies.us_momentum_stock_cfg import ( + apply_us_momentum_stock_overlay, + ) + params = apply_us_momentum_stock_overlay(db, codes[0], params) + stock_overlay_applied = bool(params.get("_us_stock_cfg")) + except Exception: + pass + + env_row: Dict[str, Any] = {} + try: + latest = db.get_latest_env() + env_row = dict(latest["snapshot"]) if latest else {} + except Exception: + env_row = {} + + slot_money_v = float(params.get("slot_money") or 200000) + max_stocks_req = _arg(args, "max_stocks", None) + if max_stocks_req in (None, ""): + max_stocks_req = _arg(args, "slots", None) + max_stocks_req_i = ( + int(float(max_stocks_req)) if max_stocks_req not in (None, "") else None + ) + tb_raw = _arg(args, "total_budget_krw", None) + total_budget_req = float(tb_raw) if tb_raw not in (None, "") else None + + portfolio = sbc.resolve_scalp_portfolio_params( + env_row, + None, + strategy="US_MOMENTUM", + slot_money=slot_money_v, + max_stocks=max_stocks_req_i, + total_budget_krw=total_budget_req, + ) + max_stocks_v = int(portfolio["max_stocks"]) + total_budget_v = float(portfolio["total_budget_krw"]) + slot_money_v = float(portfolio["slot_money"]) + fee_rate_v = float(params.get("fee_rate") or 0.0) + sell_tax_v = float(params.get("sell_tax") or 0.0) + + bt_meta: Dict[str, Any] = { + "db": db, + "start_key": start_key, + "end_key": end_key, + "backtest_env_timeline": False, + } + trades = sbc.run_scalping_backtest_web_aligned( + codes_candles, + params, + None, # permanent US — 슬롯 유니버스 없음 + slot_money=slot_money_v, + fee_rate=fee_rate_v, + sell_tax=sell_tax_v, + max_stocks=max_stocks_v, + total_budget_krw=total_budget_v, + mode="momentum", + meta_out=bt_meta, + ) + + period_days = 1 + if callable(period_days_fn): + period_days = int(period_days_fn(start, end, fallback=1) or 1) + stats = sbc.summarize_scalp_trades( + trades, + total_budget_krw=total_budget_v, + period_days=period_days, + ) + total = int(stats["total_trades"]) + # 해외 USD — summarize_trades 의 int(total_pnl) 대신 거래 합산(소수 유지) + total_pnl = float(sum(float(t.get("pnl") or 0) for t in trades)) + wins_n = int(stats["wins"]) + losses_n = int(stats["losses"]) + avg_hold = float(stats.get("avg_hold_min") or 0) + # summarize_trades 키는 pf (profit_factor 아님) — 국내 모멘텀 웹과 동일 + pf = float(stats.get("pf") or stats.get("profit_factor") or 0) + bot_pct = float(stats.get("bot_pct") or 0) + daily_avg_pct = float(stats.get("daily_avg_pct") or 0) + + equity = [] + peak, mdd, cum = 0.0, 0.0, 0.0 + peak_cum_at = "" + for t in sorted(trades, key=lambda x: str(x.get("sell_time") or "")): + cum += float(t.get("pnl") or 0) + if cum > peak: + peak = cum + peak_cum_at = str(t.get("sell_time") or "") + dd = peak - cum + if dd > mdd: + mdd = dd + st = str(t.get("sell_time") or "") + day = st[:8] + if len(day) == 8: + day_fmt = f"{day[:4]}-{day[4:6]}-{day[6:]}" + else: + day_fmt = day + equity.append({"date": day_fmt, "cum_pnl": round(cum, 2), "pnl": float(t.get("pnl") or 0)}) + + reasons: Dict[str, int] = {} + for t in trades: + rk = str(t.get("sell_reason") or "unknown") + reasons[rk] = reasons.get(rk, 0) + 1 + + daily: Dict[str, float] = {} + for t in trades: + d8 = str(t.get("sell_time") or "")[:8] + if len(d8) == 8: + daily[d8] = daily.get(d8, 0.0) + float(t.get("pnl") or 0) + daily_list = [ + {"date": f"{d[:4]}-{d[4:6]}-{d[6:]}", "pnl": round(v, 2)} + for d, v in sorted(daily.items()) + ] + + if callable(enrich_trades_fn): + enrich_trades_fn(trades, total_budget_krw=total_budget_v, with_tick_debug=False) + trades_out = trades + if callable(trades_recent_fn): + trades_out = trades_recent_fn(trades, 200) + if callable(enrich_names_fn): + enrich_names_fn(db, trades_out) + + ts = int(params["time_start_hm"]) + te = int(params["mom_time_end_hm"]) + out = { + "params": { + "market": "US", + "sl_pct": params["sl_pct"] * 100, + "tp_pct": params["tp_pct"] * 100, + "tp_max_pct": params["tp_max_pct"] * 100, + "slot_money": slot_money_v, + "max_stocks": max_stocks_v, + "total_budget_krw": total_budget_v, + "cooldown_min": params["cooldown_min"], + "time_window": f"{ts:04d}-{te:04d}", + "time_start_hm": ts, + "time_end_hm": te, + "mom_time_end": te, + "mom_time_end_hm": te, + "mom_rsi_min": params["mom_rsi_min"], + "mom_rsi_max": params["mom_rsi_max"], + "mom_vol_mult": params["mom_vol_mult"], + "mom_vol_win": params["mom_vol_win"], + "max_hold_bars": params["max_hold_bars"], + "ratchet_tiers": params["ratchet_tiers"], + "trail_pct": params["trail_pct"] * 100, + "trail_arm_pct": params["trail_arm_pct"] * 100, + "shoulder_min_high": params["shoulder_min_high"] * 100, + "shoulder_cut_pct": params["shoulder_cut_pct"] * 100, + "codes_analyzed": len(codes), + "universe_source": "permanent_us", + "universe_history_slots": 0, + "universe": "all", + "strategy_id": "US_MOMENTUM", + "mode": "momentum", + "start": start, + "end": end, + "stock_overlay": stock_overlay_applied, + "exit_priority": "ratchet/shoulder→trail→sl→time→loss_cap→tp_max→eod", + }, + "summary": { + "total_trades": total, + "win_trades": wins_n, + "loss_trades": losses_n, + "win_rate": float(stats["win_rate"]), + "total_pnl": total_pnl, + "avg_hold_min": round(avg_hold, 1), + "profit_factor": round(pf, 2), + "max_drawdown": round(float(mdd), 2), + "peak_cum_pnl": round(float(peak), 2), + "peak_cum_at": peak_cum_at[:19] if peak_cum_at else "", + "bot_pct": bot_pct, + "daily_avg_pct": daily_avg_pct, + "backtest_days": period_days, + }, + "equity": equity, + "daily": daily_list, + "reasons": reasons, + "trades": trades_out, + } + # 표시용: USD 금액 + 청산일(또는 매수일) 환율로 원 환산 + try: + from kis_trader.utils.usd_krw_fx import enrich_payload_with_usd_krw_fx + + enrich_payload_with_usd_krw_fx(out) + except Exception: + out["currency"] = "USD" + return out diff --git a/kis_trader/database/db_manager.py b/kis_trader/database/db_manager.py index 0724e91..c619a11 100644 --- a/kis_trader/database/db_manager.py +++ b/kis_trader/database/db_manager.py @@ -581,19 +581,27 @@ class TradeDBExt: # ------------------------------------------------------------------ # 백테스트 헬퍼: 특정 시점의 유니버스 복원 # ------------------------------------------------------------------ + @staticmethod + def _universe_history_table(history_source: str = "kiwoom") -> str: + from kis_trader.backtest.universe_history_source import history_table_for_source + return history_table_for_source(history_source) + def get_universe_at( - self, *, strategy_id: str, at_time: str + self, *, strategy_id: str, at_time: str, history_source: str = "kiwoom", ) -> List[Dict]: """ ``at_time`` ('YYYY-MM-DD HH:MM:SS') 시점에 봇이 보던 유니버스를 복원. = 그 시각 이전의 가장 최근 event_time 스냅샷. + + ``history_source``: ``kiwoom``(target_candidates_history) | ``ls``(ls_candidates_history) """ self._ensure_history_columns() + table = self._universe_history_table(history_source) try: row = self.conn.execute( - """ + f""" SELECT MAX(event_time) AS et - FROM target_candidates_history + FROM {table} WHERE strategy_id=%s AND event_time <= %s """, (strategy_id, at_time), @@ -602,8 +610,8 @@ class TradeDBExt: if not et: return [] rows = self.conn.execute( - """ - SELECT code, name FROM target_candidates_history + f""" + SELECT code, name FROM {table} WHERE strategy_id=%s AND event_time=%s ORDER BY code """, @@ -611,7 +619,7 @@ class TradeDBExt: ).fetchall() return [{"code": r["code"], "name": r["name"]} for r in rows] except Exception as e: - logger.error("get_universe_at 실패: %s", e) + logger.error("get_universe_at 실패(src=%s): %s", history_source, e) return [] def iter_universe_events( @@ -621,6 +629,7 @@ class TradeDBExt: start_time: str, end_time: str, preserve_insert_order: bool = False, + history_source: str = "kiwoom", ) -> List[Dict]: """ ``[start_time, end_time]`` 구간의 모든 스냅샷 이벤트를 시간순 반환. @@ -629,14 +638,16 @@ class TradeDBExt: ``preserve_insert_order=True``: 스냅샷 내 종목 순서를 DB insert(id) 순으로 유지 (백테 매수 우선순위 정합). 기본 False 는 code 가나다순. + ``history_source``: ``kiwoom`` | ``ls`` """ self._ensure_history_columns() + table = self._universe_history_table(history_source) order_clause = "event_time, id" if preserve_insert_order else "event_time, code" try: rows = self.conn.execute( f""" SELECT event_time, code, name - FROM target_candidates_history + FROM {table} WHERE strategy_id=%s AND event_time BETWEEN %s AND %s ORDER BY {order_clause} @@ -654,7 +665,7 @@ class TradeDBExt: for et, items in sorted(grouped.items()) ] except Exception as e: - logger.error("iter_universe_events 실패: %s", e) + logger.error("iter_universe_events 실패(src=%s): %s", history_source, e) return [] @staticmethod @@ -673,6 +684,7 @@ class TradeDBExt: strict: bool = False, strict_lag_minutes: int = 1, exit_debounce_sec: int = 0, + history_source: str = "kiwoom", ) -> Dict[str, List[str]]: """ 백테스트 편의용 — 1분봉 캔들 시각(YYYYMMDDHHMM)을 키로 하는 유니버스 dict. @@ -695,6 +707,7 @@ class TradeDBExt: strict: 종목별 첫 event_time 기준 편입 지연 적용 strict_lag_minutes: 첫 편입 분 이후 추가 대기 분 (기본 1) exit_debounce_sec: 짧은 EXIT→재편입 무시(초). 0=OFF. + history_source: ``kiwoom`` | ``ls`` Returns: ``{candle_time(YYYYMMDDHHMM): [code, ...]}`` — @@ -703,12 +716,23 @@ class TradeDBExt: """ self._ensure_history_columns() + from kis_trader.backtest.universe_history_source import ( + apply_ls_session_filter_to_start, + normalize_universe_history_source, + ) + + history_source = normalize_universe_history_source(history_source) + # 조회 범위: 전일 마지막 스냅샷도 포함하기 위해 시작일 00:00:00 이전 1건은 # 엔진 쪽에서 "이전에 유효했던 유니버스" 로 물려받는 게 자연스럽다. # 단순화를 위해 start_ymd 00:00:00 ~ end_ymd 23:59:59 범위로 쿼리. + # LS + SESSION_ONLY: 장전 sticky 스냅 제외 → 당일 09:00 부터. start_time = ( f"{start_ymd[:4]}-{start_ymd[4:6]}-{start_ymd[6:8]} 00:00:00" ) + start_time = apply_ls_session_filter_to_start( + start_time, source=history_source, + ) end_time = ( f"{end_ymd[:4]}-{end_ymd[4:6]}-{end_ymd[6:8]} 23:59:59" ) @@ -718,6 +742,7 @@ class TradeDBExt: start_time=start_time, end_time=end_time, preserve_insert_order=True, + history_source=history_source, ) if not events: return {} @@ -768,6 +793,7 @@ class TradeDBExt: try: prev_items = self.get_universe_at( strategy_id=strategy_id, at_time=start_time, + history_source=history_source, ) prev_codes_set = { str(it["code"]) for it in prev_items if it.get("code") diff --git a/kis_trader/database/paper_store.py b/kis_trader/database/paper_store.py new file mode 100644 index 0000000..240689d --- /dev/null +++ b/kis_trader/database/paper_store.py @@ -0,0 +1,500 @@ +""" +kis_trader/database/paper_store.py — 페이퍼 매매 전용 테이블 (실매와 완전 분리) + +실매 ``active_trades`` / ``orders`` / ``trade_history`` 와 스키마를 맞추되 +테이블을 분리해 보유·매도·고아복구·브로커 대조에 절대 섞이지 않게 한다. + +- active_trades_paper +- orders_paper +- trade_history_paper +""" +from __future__ import annotations + +import datetime +import logging +import uuid +from typing import Any, Dict, List, Optional + +logger = logging.getLogger("kis_trader.paper_store") + + +def ensure_paper_tables(db) -> None: + """TradeDB.conn 에 paper 3테이블 생성 (없으면).""" + conn = db.conn + with conn: + conn.execute( + """ + CREATE TABLE IF NOT EXISTS active_trades_paper ( + code VARCHAR(20) NOT NULL, + name VARCHAR(100) NOT NULL, + strategy VARCHAR(50) NOT NULL DEFAULT 'MANUAL', + PRIMARY KEY (code, strategy), + avg_buy_price DOUBLE NOT NULL, + current_price DOUBLE, + stop_price DOUBLE, + target_price DOUBLE, + max_price DOUBLE, + atr_entry DOUBLE, + target_qty INT NOT NULL, + current_qty INT NOT NULL, + total_invested DOUBLE, + status VARCHAR(20) NOT NULL, + buy_date VARCHAR(30) NOT NULL, + updated_at VARCHAR(30) NOT NULL, + size_class VARCHAR(20), + fill_mode VARCHAR(16) NOT NULL DEFAULT 'paper', + note VARCHAR(200) DEFAULT NULL + ) CHARACTER SET utf8mb4 + """ + ) + conn.execute( + """ + CREATE TABLE IF NOT EXISTS orders_paper ( + id BIGINT NOT NULL AUTO_INCREMENT, + ord_no VARCHAR(40) NOT NULL, + strategy_id VARCHAR(40) NOT NULL, + code VARCHAR(20) NOT NULL, + name VARCHAR(100) NOT NULL DEFAULT '', + side VARCHAR(8) NOT NULL, + qty INT NOT NULL, + price DOUBLE DEFAULT 0, + filled_qty INT NOT NULL DEFAULT 0, + filled_avg_price DOUBLE DEFAULT 0, + status VARCHAR(16) NOT NULL DEFAULT 'FILLED', + msg_cd VARCHAR(20) DEFAULT NULL, + msg1 VARCHAR(300) DEFAULT NULL, + ord_date VARCHAR(10) NOT NULL, + submitted_at VARCHAR(30) NOT NULL, + filled_at VARCHAR(30) DEFAULT NULL, + raw_json MEDIUMTEXT DEFAULT NULL, + PRIMARY KEY (id), + UNIQUE KEY uq_paper_ord_no_ctx (ord_no, strategy_id, code, side, ord_date), + INDEX idx_paper_strategy_date (strategy_id, ord_date), + INDEX idx_paper_code_date (code, ord_date) + ) CHARACTER SET utf8mb4 + """ + ) + conn.execute( + """ + CREATE TABLE IF NOT EXISTS trade_history_paper ( + id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + code VARCHAR(20) NOT NULL, + name VARCHAR(100) NOT NULL, + strategy VARCHAR(50), + buy_price DOUBLE NOT NULL, + sell_price DOUBLE NOT NULL, + qty INT NOT NULL, + profit_rate DOUBLE NOT NULL, + realized_pnl DOUBLE NOT NULL, + hold_minutes INT, + buy_date VARCHAR(30), + sell_date VARCHAR(30) NOT NULL, + sell_reason VARCHAR(200), + env_snapshot TEXT, + size_class VARCHAR(20), + fill_mode VARCHAR(16) NOT NULL DEFAULT 'paper', + INDEX idx_thp_strategy_sell (strategy, sell_date), + INDEX idx_thp_code_sell (code, sell_date) + ) CHARACTER SET utf8mb4 + """ + ) + + +def _new_paper_ord_no(side: str) -> str: + side_u = (side or "X").upper()[:1] + ts = datetime.datetime.now().strftime("%Y%m%d%H%M%S") + return f"PAPER-{side_u}{ts}-{uuid.uuid4().hex[:8]}" + + +def insert_order_paper( + db, + *, + strategy_id: str, + code: str, + name: str, + side: str, + qty: int, + price: float, + filled_qty: Optional[int] = None, + status: str = "FILLED", + msg1: str = "paper", +) -> str: + """즉시 체결 가정으로 orders_paper INSERT. 반환: ord_no.""" + ensure_paper_tables(db) + side_u = (side or "").upper() + assert side_u in ("BUY", "SELL"), side_u + now = datetime.datetime.now() + ord_no = _new_paper_ord_no(side_u) + fq = int(filled_qty if filled_qty is not None else qty) + with db.conn: + db.conn.execute( + """ + INSERT INTO orders_paper ( + ord_no, strategy_id, code, name, side, qty, price, + filled_qty, filled_avg_price, status, msg1, + ord_date, submitted_at, filled_at + ) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) + """, + ( + ord_no, + strategy_id, + code, + name or code, + side_u, + int(qty), + float(price or 0), + fq, + float(price or 0), + status, + msg1, + now.strftime("%Y-%m-%d"), + now.strftime("%Y-%m-%d %H:%M:%S"), + now.strftime("%Y-%m-%d %H:%M:%S"), + ), + ) + return ord_no + + +def upsert_active_trade_paper(db, trade_data: Dict[str, Any]) -> bool: + """active_trades_paper UPSERT (실매 upsert_trade 와 동일 의미, ML컬럼 생략).""" + ensure_paper_tables(db) + code = str(trade_data.get("code") or "").strip() + if not code: + return False + now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + try: + from kis_trader.utils.strategy_ids import canonical_strategy_id + strategy = canonical_strategy_id(trade_data.get("strategy", "MANUAL")) + except Exception: + strategy = trade_data.get("strategy", "MANUAL") or "MANUAL" + avg = float(trade_data.get("avg_buy_price") or trade_data.get("buy_price") or 0) + qty = int(trade_data.get("current_qty") or trade_data.get("qty") or 0) + try: + with db.conn: + db.conn.execute( + """ + INSERT INTO active_trades_paper ( + code, name, strategy, avg_buy_price, current_price, + stop_price, target_price, max_price, atr_entry, + target_qty, current_qty, total_invested, status, + buy_date, updated_at, size_class, fill_mode, note + ) VALUES ( + %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s + ) + ON DUPLICATE KEY UPDATE + avg_buy_price = VALUES(avg_buy_price), + current_price = VALUES(current_price), + stop_price = COALESCE(VALUES(stop_price), stop_price), + target_price = COALESCE(VALUES(target_price), target_price), + atr_entry = COALESCE(VALUES(atr_entry), atr_entry), + current_qty = VALUES(current_qty), + target_qty = VALUES(target_qty), + total_invested = VALUES(total_invested), + max_price = GREATEST(COALESCE(max_price,0), COALESCE(VALUES(max_price),0)), + status = VALUES(status), + updated_at = VALUES(updated_at), + size_class = COALESCE(VALUES(size_class), size_class), + note = COALESCE(VALUES(note), note) + """, + ( + code, + trade_data.get("name") or code, + strategy, + avg, + float(trade_data.get("current_price") or avg), + float(trade_data.get("stop_price") or 0), + float(trade_data.get("target_price") or 0), + float(trade_data.get("max_price") or avg), + float(trade_data.get("atr_entry") or trade_data.get("atr_at_entry") or 0), + int(trade_data.get("target_qty") or qty), + qty, + float(trade_data.get("total_invested") or (avg * qty)), + trade_data.get("status") or "HOLDING", + trade_data.get("buy_date") or now, + now, + trade_data.get("size_class") or "", + trade_data.get("fill_mode") or "paper", + trade_data.get("note"), + ), + ) + return True + except Exception as e: + logger.error("upsert_active_trade_paper 실패 (%s): %s", code, e) + return False + + +def get_active_trades_paper( + db, *, strategy_id: Optional[str] = None +) -> Dict[str, Dict[str, Any]]: + """strategy 정확 일치(또는 전체). 반환 {code: holding_dict} — Base holdings 호환.""" + ensure_paper_tables(db) + try: + if strategy_id: + rows = db.conn.execute( + "SELECT * FROM active_trades_paper WHERE strategy=%s", + (strategy_id,), + ).fetchall() + else: + rows = db.conn.execute("SELECT * FROM active_trades_paper").fetchall() + out: Dict[str, Dict[str, Any]] = {} + for row in rows: + code = row["code"] + out[code] = { + "code": code, + "name": row["name"], + "strategy": row["strategy"], + "buy_price": row["avg_buy_price"], + "avg_buy_price": row["avg_buy_price"], + "current_price": row["current_price"], + "stop_price": row["stop_price"], + "target_price": row["target_price"], + "max_price": row["max_price"], + "atr_at_entry": row["atr_entry"], + "qty": row["current_qty"], + "target_qty": row["target_qty"], + "current_qty": row["current_qty"], + "total_invested": row["total_invested"], + "status": row["status"], + "buy_date": row["buy_date"], + "updated_at": row["updated_at"], + "size_class": row["size_class"] if "size_class" in row.keys() else None, + "paper": True, + } + return out + except Exception as e: + logger.error("get_active_trades_paper 실패: %s", e) + return {} + + +def close_trade_paper( + db, + *, + code: str, + strategy: str, + sell_price: float, + sell_reason: str = "", + realized_pnl_override: Optional[float] = None, +) -> bool: + """active_trades_paper → trade_history_paper 이동 후 삭제.""" + ensure_paper_tables(db) + try: + row = db.conn.execute( + "SELECT * FROM active_trades_paper WHERE code=%s AND strategy=%s", + (code, strategy), + ).fetchone() + if not row: + logger.warning("close_trade_paper: %s/%s 없음", code, strategy) + return False + buy_price = float(row["avg_buy_price"] or 0) + qty = int(row["current_qty"] or 0) + if realized_pnl_override is not None: + realized_pnl = float(realized_pnl_override) + else: + realized_pnl = (float(sell_price) - buy_price) * qty + profit_rate = ( + (realized_pnl / (buy_price * qty) * 100.0) if buy_price * qty > 0 else 0.0 + ) + try: + buy_time = datetime.datetime.strptime( + str(row["buy_date"])[:19], "%Y-%m-%d %H:%M:%S" + ) + hold_minutes = int( + (datetime.datetime.now() - buy_time).total_seconds() / 60 + ) + except Exception: + hold_minutes = 0 + sell_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + try: + from kis_trader.utils.strategy_ids import canonical_strategy_id + hist_strategy = canonical_strategy_id(row.get("strategy") or strategy) + except Exception: + hist_strategy = row.get("strategy") or strategy + with db.conn: + db.conn.execute( + """ + INSERT INTO trade_history_paper ( + code, name, strategy, buy_price, sell_price, qty, + profit_rate, realized_pnl, hold_minutes, + buy_date, sell_date, sell_reason, size_class, fill_mode + ) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) + """, + ( + row["code"], + row["name"], + hist_strategy, + buy_price, + float(sell_price), + qty, + profit_rate, + realized_pnl, + hold_minutes, + row["buy_date"], + sell_time, + sell_reason or "paper", + row["size_class"] if "size_class" in row.keys() else None, + "paper", + ), + ) + db.conn.execute( + "DELETE FROM active_trades_paper WHERE code=%s AND strategy=%s", + (code, strategy), + ) + return True + except Exception as e: + logger.error("close_trade_paper 실패 (%s): %s", code, e) + return False + + +def count_paper_trades_today(db, *, strategy_id: str, code: str, ymd: str) -> int: + """ymd=YYYYMMDD — 당일 paper 청산 건수 (일일 매수 한도용).""" + ensure_paper_tables(db) + day = f"{ymd[:4]}-{ymd[4:6]}-{ymd[6:8]}" if len(ymd) == 8 else ymd + try: + row = db.conn.execute( + """ + SELECT COUNT(*) AS n FROM trade_history_paper + WHERE strategy=%s AND code=%s + AND sell_date >= %s AND sell_date <= %s + """, + (strategy_id, code, day + " 00:00:00", day + " 23:59:59"), + ).fetchone() + return int(row["n"] if row else 0) + except Exception: + return 0 + + +def list_trade_history_paper( + db, + *, + strategy_like: str, + start: str = "", + end: str = "", +) -> List[Dict[str, Any]]: + ensure_paper_tables(db) + params: List[Any] = [strategy_like] + sql = "SELECT * FROM trade_history_paper WHERE strategy LIKE %s" + if start: + sql += " AND sell_date >= %s" + params.append(start + " 00:00:00") + if end: + sql += " AND sell_date <= %s" + params.append(end + " 23:59:59") + sql += " ORDER BY sell_date ASC" + try: + rows = db.conn.execute(sql, tuple(params)).fetchall() + return [dict(r) for r in rows] + except Exception as e: + logger.error("list_trade_history_paper 실패: %s", e) + return [] + + +def open_paper_buy( + db, + *, + strategy_id: str, + code: str, + name: str, + price: float, + qty: int, + stop_price: float = 0.0, + target_price: float = 0.0, + atr_entry: float = 0.0, + size_class: str = "", + entry_features: Optional[Dict] = None, +) -> Optional[str]: + """ + 페이퍼 매수 1건: orders_paper + active_trades_paper. + 성공 시 ord_no, 실패 시 None. + """ + if qty <= 0 or price <= 0: + return None + now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + ord_no = insert_order_paper( + db, + strategy_id=strategy_id, + code=code, + name=name, + side="BUY", + qty=qty, + price=price, + msg1="paper_buy", + ) + note = None + if entry_features: + try: + import json + note = json.dumps(entry_features, ensure_ascii=False)[:190] + except Exception: + note = "paper" + ok = upsert_active_trade_paper( + db, + { + "code": code, + "name": name, + "strategy": strategy_id, + "avg_buy_price": price, + "current_price": price, + "stop_price": stop_price, + "target_price": target_price, + "max_price": price, + "atr_entry": atr_entry, + "target_qty": qty, + "current_qty": qty, + "total_invested": price * qty, + "status": "HOLDING", + "buy_date": now, + "size_class": size_class or "", + "fill_mode": "paper", + "note": note, + }, + ) + if not ok: + return None + logger.info( + "📝 [PAPER BUY] %s %s @ %.4f × %d (ord=%s)", + strategy_id, code, price, qty, ord_no, + ) + return ord_no + + +def open_paper_sell( + db, + *, + strategy_id: str, + code: str, + name: str, + qty: int, + sell_price: float, + sell_reason: str = "", + buy_price: float = 0.0, +) -> bool: + """페이퍼 매도: orders_paper SELL + close_trade_paper.""" + if qty <= 0 or sell_price <= 0: + return False + insert_order_paper( + db, + strategy_id=strategy_id, + code=code, + name=name, + side="SELL", + qty=qty, + price=sell_price, + msg1=sell_reason or "paper_sell", + ) + pnl_override = None + if buy_price > 0: + pnl_override = (sell_price - buy_price) * qty + ok = close_trade_paper( + db, + code=code, + strategy=strategy_id, + sell_price=sell_price, + sell_reason=sell_reason or "paper", + realized_pnl_override=pnl_override, + ) + if ok: + logger.info( + "📝 [PAPER SELL] %s %s @ %.4f × %d (%s)", + strategy_id, code, sell_price, qty, sell_reason or "", + ) + return ok diff --git a/kis_trader/engine/daily_profit_halt.py b/kis_trader/engine/daily_profit_halt.py index 884ad39..6193a53 100644 --- a/kis_trader/engine/daily_profit_halt.py +++ b/kis_trader/engine/daily_profit_halt.py @@ -11,6 +11,8 @@ kis_trader/engine/daily_profit_halt.py — 일일 익절 목표 달성 시 신 **신규매수 중단(``*_HALT_NEW_BUYS``)** = 목표와 무관한 **수동** 매수 잠금(별도 스위치). 매도(손절·익절)는 계속 — **신규 매수만** 차단. +옵션 B(잔여 리스크 버짓): 트레일/목표 hit 후 보유 최악손절합 > cushion 이면 +약한(리스크 큰) 종목부터 전량 청산 — ``{SID}_DAILY_PROFIT_RISK_BUDGET_ENABLED`` (기본 OFF). 모든 임계값 env/DB — 하드코딩 금지. """ from __future__ import annotations @@ -139,6 +141,14 @@ def load_strategy_profit_target(strategy_id: str) -> Dict[str, Any]: "trail_arm_pct": _target_pct( "DAILY_PROFIT_TRAIL_ARM_PCT", f"{pfx}_DAILY_PROFIT_TRAIL_ARM_PCT", 0.0, ), + # B: 잔여 리스크 버짓 — 전략별만 (마스터 없음). 기본 OFF. + "risk_budget_enabled": get_env_bool( + f"{pfx}_DAILY_PROFIT_RISK_BUDGET_ENABLED", False, + ), + "risk_budget_cooldown_sec": max( + 0, + int(get_env_int(f"{pfx}_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC", 300)), + ), } @@ -292,6 +302,217 @@ def _trail_reached( return pnl_krw <= cut +def trail_cut_line( + peak_krw: float, cfg: Dict[str, Any], budget_krw: float, +) -> Optional[float]: + """트레일 컷라인(원). tier/drop 과 _trail_reached 동일 공식. 비발동이면 None.""" + tiers = parse_trail_tiers(cfg.get("trail_tiers")) + if tiers: + drop = _active_tier_drop(peak_krw, tiers) + if drop <= 0: + return None + return float(peak_krw) * (1.0 - drop / 100.0) + drop = float(cfg.get("trail_drop_pct") or 0) + if drop <= 0: + return None + arm = _trail_arm_krw(cfg, budget_krw) + if arm <= 0 or peak_krw < arm: + return None + return float(peak_krw) * (1.0 - drop / 100.0) + + +def fixed_target_floor(cfg: Dict[str, Any], budget_krw: float) -> Optional[float]: + """고정 목표 바닥(원) — KRW·PCT 중 설정된 값들의 최대.""" + floors: List[float] = [] + krw_tgt = float(cfg.get("krw") or 0) + if krw_tgt > 0: + floors.append(krw_tgt) + pct_tgt = float(cfg.get("pct") or 0) + if pct_tgt > 0 and budget_krw > 0: + floors.append(budget_krw * pct_tgt / 100.0) + if not floors: + return None + return max(floors) + + +def hit_cut_line( + pnl_krw: float, + peak_krw: float, + cfg: Dict[str, Any], + budget_krw: float, + *, + trail_hit: bool, + fixed_hit: bool, +) -> Optional[float]: + """hit 시점 보호 바닥. 트레일 우선, 없으면 고정 목표.""" + if trail_hit: + cut = trail_cut_line(peak_krw, cfg, budget_krw) + if cut is not None: + return cut + if fixed_hit: + return fixed_target_floor(cfg, budget_krw) + return None + + +def risk_budget_cushion(pnl_krw: float, cut_line: float) -> float: + """컷라인까지 남은 여유(원). 이미 밑이면 0.""" + return max(0.0, float(pnl_krw) - float(cut_line)) + + +# 손절가 미기록 시 env 폴백 (분율, 음수 또는 양수 모두 abs 처리) +_FALLBACK_SL_ENV: Dict[str, Tuple[str, float]] = { + "SHORT": ("STOP_LOSS_PCT", -0.04), + "SCALP": ("SCALP_STOP_LOSS_PCT", -0.015), + "MOMENTUM": ("MOMENTUM_STOP_LOSS_PCT", -0.015), + "US_MOMENTUM": ("US_MOMENTUM_STOP_LOSS_PCT", -0.015), + "BREAKOUT": ("BREAKOUT_STOP_LOSS_PCT", -0.02), + "RANGE_BREAK": ("RANGE_BREAK_STOP_LOSS_PCT", -0.03), + "UPDOW": ("UPDOW_STOP_LOSS_PCT", -0.025), + "DBBAND": ("DBBAND_STOP_LOSS_PCT", -0.02), +} + + +def resolve_stop_price( + *, + entry: float, + stop_price: float, + strategy_id: str, +) -> float: + """유효 손절가. holdings.stop_price 우선 → 전략 SL% 폴백.""" + entry = float(entry or 0) + sp = float(stop_price or 0) + if entry <= 0: + return 0.0 + if sp > 0 and sp < entry: + return sp + pfx = _strategy_prefix(strategy_id) + key, default = _FALLBACK_SL_ENV.get(pfx, (f"{pfx}_STOP_LOSS_PCT", -0.02)) + raw = float(get_env_float(key, default) or default) + # STOP_LOSS 가 %단위(2.0)로 올 수 있음 → 절대값≥1 이면 /100 + if abs(raw) >= 1.0: + raw = raw / 100.0 + sl = -abs(raw) + return entry * (1.0 + sl) + + +def position_stop_risk_krw( + *, + qty: int, + entry: float, + stop_price: float, +) -> float: + """손절까지 최악 실현손실(원). 미실현 익절 가정 없음.""" + qty = int(qty or 0) + entry = float(entry or 0) + stop = float(stop_price or 0) + if qty <= 0 or entry <= 0 or stop <= 0: + return 0.0 + return float(qty) * max(0.0, entry - stop) + + +def build_open_risk_rows( + strategy_id: str, + holdings: Dict[str, dict], +) -> List[Dict[str, Any]]: + """전략 holdings → 리스크 행 목록.""" + rows: List[Dict[str, Any]] = [] + for code, h in (holdings or {}).items(): + if not code or not isinstance(h, dict): + continue + entry = float(h.get("buy_price") or h.get("avg_buy_price") or 0) + qty = int(h.get("qty") or h.get("current_qty") or 0) + if entry <= 0 or qty <= 0: + continue + stop = resolve_stop_price( + entry=entry, + stop_price=float(h.get("stop_price") or 0), + strategy_id=strategy_id, + ) + risk = position_stop_risk_krw(qty=qty, entry=entry, stop_price=stop) + rows.append({ + "code": str(code), + "name": str(h.get("name") or code), + "qty": qty, + "buy_price": entry, + "stop_price": stop, + "risk_krw": risk, + "current_price": float(h.get("current_price") or h.get("max_price") or entry), + }) + return rows + + +def select_closes_for_risk_budget( + positions: List[Dict[str, Any]], + deficit: float, +) -> List[Dict[str, Any]]: + """부족분(deficit)만큼 리스크 큰 종목부터 전량 청산 대상 선정.""" + need = float(deficit or 0) + if need <= 0: + return [] + ordered = sorted( + [p for p in (positions or []) if float(p.get("risk_krw") or 0) > 0], + key=lambda p: -float(p.get("risk_krw") or 0), + ) + picked: List[Dict[str, Any]] = [] + reduced = 0.0 + for p in ordered: + if reduced >= need: + break + picked.append(p) + reduced += float(p.get("risk_krw") or 0) + return picked + + +def plan_risk_budget_trim( + *, + pnl_krw: float, + peak_krw: float, + cfg: Dict[str, Any], + budget_krw: float, + positions: List[Dict[str, Any]], + trail_hit: bool, + fixed_hit: bool, +) -> Dict[str, Any]: + """B 판정 순수함수 — 실매·백테 공유.""" + cut = hit_cut_line( + pnl_krw, peak_krw, cfg, budget_krw, + trail_hit=trail_hit, fixed_hit=fixed_hit, + ) + if cut is None: + return { + "action": "skip", + "reason": "cut_line 없음", + "closes": [], + "cushion": 0.0, + "worst": 0.0, + "deficit": 0.0, + "cut_line": None, + } + cushion = risk_budget_cushion(pnl_krw, cut) + worst = sum(float(p.get("risk_krw") or 0) for p in (positions or [])) + deficit = max(0.0, worst - cushion) + if deficit <= 0: + return { + "action": "ok", + "reason": "worst ≤ cushion", + "closes": [], + "cushion": cushion, + "worst": worst, + "deficit": 0.0, + "cut_line": cut, + } + closes = select_closes_for_risk_budget(positions, deficit) + return { + "action": "trim", + "reason": "worst > cushion", + "closes": closes, + "cushion": cushion, + "worst": worst, + "deficit": deficit, + "cut_line": cut, + } + + def _format_hit_detail( pnl_krw: float, cfg: Dict[str, Any], budget_krw: float, ) -> str: @@ -332,7 +553,9 @@ def describe_profit_guard_startup(cfg: Dict[str, Any], *, scope: str = "마스 class DailyProfitHaltGuard: """ - Orchestrator 가 주입 — ``buy_allowed(strategy_id)`` 로 신규 매수 차단 여부 판단. + Orchestrator 가 주입 — + - ``buy_allowed(strategy_id)`` 신규매수 차단 + - ``maybe_trim_open_risk(strategy_id)`` B안 잔여리스크 정리(전량) """ def __init__( @@ -342,16 +565,24 @@ class DailyProfitHaltGuard: strategy_pnl_fn: Callable[[str, str], Tuple[float, int]], active_strategies_fn: Callable[[], List[str]], notify_fn: Optional[Callable[[str, Optional[str]], None]] = None, + open_positions_fn: Optional[Callable[[str], List[Dict[str, Any]]]] = None, + force_sell_fn: Optional[ + Callable[[str, List[Dict[str, Any]], str], None] + ] = None, ): self._global_pnl_fn = global_pnl_fn self._strategy_pnl_fn = strategy_pnl_fn self._active_strategies_fn = active_strategies_fn self._notify_fn = notify_fn + self._open_positions_fn = open_positions_fn + self._force_sell_fn = force_sell_fn self._lock = threading.Lock() self._notified_keys: set = set() self._last_log_ts: Dict[str, float] = {} # 트레일링용 당일 손익 고점 추적 {scope_key: (today, peak_krw)} self._peaks: Dict[str, Tuple[str, float]] = {} + # B: 당일 정리 완료 시각 {sid:today -> unix_ts} + self._risk_budget_done_ts: Dict[str, float] = {} def _update_peak(self, scope_key: str, today: str, pnl_krw: float) -> float: """당일 손익 고점 갱신·반환. 날짜가 바뀌면 리셋.""" @@ -363,6 +594,103 @@ class DailyProfitHaltGuard: self._peaks[scope_key] = (today, peak) return peak + def maybe_trim_open_risk(self, strategy_id: str) -> Optional[Dict[str, Any]]: + """ + B안: 전략 일일익절 hit 상태이면 cushion vs 보유 최악손절합 비교 후 + 부족분만큼 전량 청산. 마스터(총합) 경로에는 붙이지 않음(전략별만). + """ + if not self._open_positions_fn or not self._force_sell_fn: + return None + today = dt.now().strftime("%Y-%m-%d") + sid = _strategy_prefix(strategy_id) + scfg = load_strategy_profit_target(sid) + if not scfg.get("risk_budget_enabled"): + return None + if not _guard_active(scfg): + return None + + spnl, scnt = self._strategy_pnl_fn(today, sid) + sbudget = resolve_strategy_budget_krw(sid) + speak = self._update_peak(f"{sid}:{today}", today, spnl) + mode = str(scfg.get("mode") or "fixed").lower() + fixed_hit = mode in ("fixed", "both") and _target_reached(spnl, scfg, sbudget) + trail_hit = mode in ("trailing", "both") and _trail_reached( + spnl, speak, scfg, sbudget, + ) + if not (fixed_hit or trail_hit): + return None + + done_key = f"{sid}:{today}" + cooldown = int(scfg.get("risk_budget_cooldown_sec") or 0) + now = time.time() + with self._lock: + last = float(self._risk_budget_done_ts.get(done_key) or 0) + if last > 0 and (cooldown <= 0 or (now - last) < cooldown): + return None + + try: + positions = list(self._open_positions_fn(sid) or []) + except Exception as ex: + logger.warning("⚠️ [%s] 리스크버짓 보유조회 실패: %s", sid, ex) + return None + + plan = plan_risk_budget_trim( + pnl_krw=spnl, + peak_krw=speak, + cfg=scfg, + budget_krw=sbudget, + positions=positions, + trail_hit=trail_hit, + fixed_hit=fixed_hit, + ) + if plan.get("action") != "trim" or not plan.get("closes"): + with self._lock: + self._risk_budget_done_ts[done_key] = now + if plan.get("action") == "ok": + self._throttled_log( + sid, + f"📅 [리스크버짓·{sid}] worst={plan['worst']:,.0f} ≤ " + f"cushion={plan['cushion']:,.0f} → 보유 유지", + ) + return plan + + closes = list(plan["closes"]) + reason = ( + f"일일익절리스크버짓(cushion={plan['cushion']:,.0f}" + f"/worst={plan['worst']:,.0f}/deficit={plan['deficit']:,.0f})" + ) + try: + self._force_sell_fn(sid, closes, reason) + except Exception as ex: + logger.warning("⚠️ [%s] 리스크버짓 청산 실패: %s", sid, ex) + return {**plan, "error": str(ex)} + + with self._lock: + self._risk_budget_done_ts[done_key] = now + + codes = ",".join(str(c.get("code")) for c in closes[:8]) + msg = ( + f"🧯 [리스크버짓·{sid}] 정리 {len(closes)}종목 " + f"cut={plan['cut_line']:,.0f} cushion={plan['cushion']:,.0f} " + f"worst={plan['worst']:,.0f} → {codes}" + ) + logger.info(msg) + if self._notify_fn: + try: + body = ( + f"🧯 **일일익절 리스크버짓 정리**\n" + f"- 범위: **{sid}**\n" + f"- 실현 {spnl:+,.0f}원 · 고점 {speak:+,.0f}원\n" + f"- cut {plan['cut_line']:,.0f} · cushion {plan['cushion']:,.0f} " + f"· worst {plan['worst']:,.0f}\n" + f"- 전량청산 {len(closes)}종목 ({codes})\n" + f"- 청산누적 {scnt}건 · 신규매수는 계속 중단" + ) + self._notify_fn(body, sid) + except Exception as ex: + logger.debug("리스크버짓 MM 실패: %s", ex) + return plan + def buy_allowed(self, strategy_id: str) -> Tuple[bool, str]: """신규 매수 허용 여부. (False, 사유) 이면 매수 스킵.""" today = dt.now().strftime("%Y-%m-%d") @@ -411,6 +739,11 @@ class DailyProfitHaltGuard: sid, f"⛔ [일일익절·{sid}] {detail} → 해당전략 신규매수 중단", ) + # hit 직후 B 평가 (매수루프가 비어도 base 에서 재호출) + try: + self.maybe_trim_open_risk(sid) + except Exception as ex: + logger.debug("리스크버짓(buy_allowed) 예외: %s", ex) return False, f"탈락-일일익절({sid})" return True, "" diff --git a/kis_trader/engine/ls_feed_gate.py b/kis_trader/engine/ls_feed_gate.py new file mode 100644 index 0000000..85e1ef6 --- /dev/null +++ b/kis_trader/engine/ls_feed_gate.py @@ -0,0 +1,20 @@ +"""LS 시세 복구 중 신규매수 게이트 (선택). + +LS 는 기본 그림자 검증만 하므로 ``LS_WS_BLOCK_BUY_WHILE_RECOVERING`` 기본 false. +거부권/보조눈 연동 시 true 로 켜면, 복구·끊김 동안 신규매수만 막는다 (청산은 막지 않음). +""" +from __future__ import annotations + + +def ls_feed_blocks_new_buy() -> bool: + try: + from kis_trader.utils.env import get_env_bool + if not get_env_bool("LS_WS_BLOCK_BUY_WHILE_RECOVERING", False): + return False + from kis_trader.ws.ls_ws import get_active_ls_ws + ws = get_active_ls_ws() + if ws is None: + return False + return bool(ws.blocks_new_buy()) + except Exception: + return False diff --git a/kis_trader/engine/mid_enroll_entry_gate.py b/kis_trader/engine/mid_enroll_entry_gate.py new file mode 100644 index 0000000..c8f51e6 --- /dev/null +++ b/kis_trader/engine/mid_enroll_entry_gate.py @@ -0,0 +1,241 @@ +"""편입(중분) 시 진입봉 시가가 애매하면 그 봉 매수 보류 — 실매·백테·Optuna 공통. + +초등 버전: + - 분이 이미 시작된 뒤에 종목이 들어오면 → 그 분 \"시가\"를 못 봤을 수 있음 + - 그때는 그 분으로 사지 말고, 다음 분부터 (기회↓ · 짜가↓) + +대전제(틱 없으면 시가 폴백)는 유지. \"틱 필수\"가 아님. +""" +from __future__ import annotations + +from datetime import datetime, timedelta +from typing import Any, Optional, Tuple, Union + +EnrollLike = Union[datetime, float, int, str, None] + + +def defer_mid_bar_enroll_enabled(params: Optional[dict] = None) -> bool: + """ON이면 중분 편입 + 같은 진입봉 시가 매수 보류.""" + if isinstance(params, dict) and "defer_mid_bar_enroll" in params: + v = params.get("defer_mid_bar_enroll") + if v is not None: + if isinstance(v, bool): + return v + s = str(v).strip().lower() + if s in ("0", "false", "no", "off", ""): + return False + if s in ("1", "true", "yes", "on"): + return True + try: + from kis_trader.utils.env import get_env_bool + return bool(get_env_bool("ALIGN_DEFER_MID_BAR_ENROLL", True)) + except Exception: + return True + + +def parse_enroll_datetime(enroll: EnrollLike) -> Tuple[Optional[datetime], str]: + """편입 시각 파싱. + + Returns: + (datetime|None, precision) precision = \"second\" | \"minute\" | \"\" + - second: 초까지 앎 + - minute: 분키만 있음 → 그 분 중 편입으로 보수 처리 + """ + if enroll is None: + return None, "" + if isinstance(enroll, datetime): + return enroll, "second" + if isinstance(enroll, (int, float)): + try: + ts = float(enroll) + if ts > 1e12: # ms + ts = ts / 1000.0 + return datetime.fromtimestamp(ts), "second" + except Exception: + return None, "" + s = str(enroll).strip() + if not s: + return None, "" + # YYYY-MM-DD HH:MM:SS / YYYYMMDDHHMMSS / YYYYMMDDHHMM + digits = ( + s.replace("-", "").replace(":", "").replace(" ", "").replace("T", "") + ) + if len(digits) >= 14 and digits[:14].isdigit(): + try: + return datetime.strptime(digits[:14], "%Y%m%d%H%M%S"), "second" + except Exception: + return None, "" + if len(digits) >= 12 and digits[:12].isdigit(): + try: + return datetime.strptime(digits[:12], "%Y%m%d%H%M"), "minute" + except Exception: + return None, "" + for fmt in ("%Y-%m-%d %H:%M:%S", "%Y-%m-%d %H:%M", "%Y/%m/%d %H:%M:%S"): + try: + dt = datetime.strptime(s[:19], fmt) + prec = "second" if "%S" in fmt else "minute" + return dt, prec + except Exception: + continue + return None, "" + + +def is_entry_open_ambiguous( + entry_bar_key: str, + enroll: EnrollLike, + *, + tf_min: int = 1, + params: Optional[dict] = None, +) -> bool: + """진입봉 시가가 편입 때문에 애매하면 True → 매수 보류. + + 규칙: + bar_open < enroll_dt < bar_end → 애매 (분 중간에 들어옴) + 분키만 알면 해당 분 전체를 애매로 봄 (안전빵) + enroll == bar_open 정각(초=0) → 애매 아님 + 진입봉이 편입 분과 다르면 → 애매 아님 (REST 시가·이미 구독 후 시가 OK) + """ + if not defer_mid_bar_enroll_enabled(params): + return False + ek = str(entry_bar_key or "").replace(":", "").replace("-", "").replace(" ", "") + if len(ek) < 12 or not ek[:12].isdigit(): + return False + try: + bar_open = datetime.strptime(ek[:12], "%Y%m%d%H%M") + except Exception: + return False + tf = max(1, int(tf_min or 1)) + bar_end = bar_open + timedelta(minutes=tf) + + enroll_dt, prec = parse_enroll_datetime(enroll) + if enroll_dt is None: + return False + + if prec == "minute": + # 초를 모르면 그 분 편입 = 중분 가능 → 그 분 시가 매수 금지 + enroll_min = enroll_dt.replace(second=0, microsecond=0) + return bar_open <= enroll_min < bar_end + + # 초 단위: 봉 열린 뒤~닫히기 전에 편입하면 시가 미관측 + return bar_open < enroll_dt < bar_end + + +def gate_reason_mid_enroll( + entry_bar_key: str, + enroll: EnrollLike, + *, + tf_min: int = 1, + params: Optional[dict] = None, +) -> Optional[str]: + """보류 시 짧은 사유 문자열, 아니면 None.""" + if not is_entry_open_ambiguous( + entry_bar_key, enroll, tf_min=tf_min, params=params, + ): + return None + enroll_dt, prec = parse_enroll_datetime(enroll) + en_s = enroll_dt.strftime("%Y%m%d%H%M%S") if enroll_dt else str(enroll) + return "탈락-중편입시가애매 entry=%s enroll=%s prec=%s" % ( + str(entry_bar_key or "")[:12], en_s, prec or "?", + ) + + +def last_enter_et_from_timeline( + timeline: Any, + code: str, + at_key: str, +) -> Optional[str]: + """UniverseTimeline 스냅샷에서 code 의 마지막 ENTER event_time 키(14자리).""" + if timeline is None or not code: + return None + keys = getattr(timeline, "_keys", None) + codes_list = getattr(timeline, "_codes", None) + if not keys or not codes_list: + return None + sk = str(at_key or "") + if len(sk) >= 14: + sk14 = sk[:14] + elif len(sk) >= 12: + sk14 = sk[:12] + "59" + else: + return None + cs = str(code).strip() + prev: set = set() + last_enter: Optional[str] = None + for et_key, snap_codes in zip(keys, codes_list): + et = str(et_key) + if et[:14] > sk14: + break + cur = {str(c).strip() for c in (snap_codes or []) if str(c).strip()} + if cs in cur and cs not in prev: + last_enter = et if len(et) >= 14 else (et[:12] + "00") + prev = cur + return last_enter + + +def first_slot_enter_minute( + universe_by_slot: Optional[dict], + code: str, + at_minute: str, +) -> Optional[str]: + """분슬롯 dict 에서 code 의 마지막 ENTER 분키 (초 없음→minute precision).""" + if not universe_by_slot or not code: + return None + cs = str(code).strip() + am = str(at_minute or "")[:12] + if len(am) < 12: + return None + prev_has = False + last_enter: Optional[str] = None + for slot in sorted(universe_by_slot.keys()): + minute = str(slot)[:12] + if minute > am: + break + has = cs in {str(c).strip() for c in (universe_by_slot.get(slot) or [])} + if has and not prev_has: + last_enter = minute + prev_has = has + return last_enter + + +def bt_resolve_enroll( + code: str, + at_key: str, + *, + universe_timeline: Any = None, + universe_by_slot: Optional[dict] = None, + params: Optional[dict] = None, +) -> Optional[str]: + """백테용 편입 시각 — 타임라인(초) 우선, 없으면 분슬롯.""" + if isinstance(params, dict): + ov = (params.get("_code_enroll_et") or {}).get(str(code).strip()) + if ov: + return str(ov) + et = last_enter_et_from_timeline(universe_timeline, code, at_key) + if et: + return et + return first_slot_enter_minute(universe_by_slot, code, str(at_key)[:12]) + + +def bt_should_defer_mid_enroll( + entry_bar_key: str, + code: str, + at_key: str, + *, + tf_min: int = 1, + universe_timeline: Any = None, + universe_by_slot: Optional[dict] = None, + params: Optional[dict] = None, +) -> bool: + """백테 진입 보류 여부 — 실매 ``_defer_mid_enroll_entry`` 와 동일 의미.""" + enroll = bt_resolve_enroll( + code, + at_key, + universe_timeline=universe_timeline, + universe_by_slot=universe_by_slot, + params=params, + ) + if not enroll: + return False + return is_entry_open_ambiguous( + entry_bar_key, enroll, tf_min=tf_min, params=params, + ) diff --git a/kis_trader/engine/momentum_engine.py b/kis_trader/engine/momentum_engine.py index ab341d9..5c752e4 100644 --- a/kis_trader/engine/momentum_engine.py +++ b/kis_trader/engine/momentum_engine.py @@ -603,7 +603,10 @@ def run_momentum_backtest( slot_key = _slot_key(c["candle_time"], int(params.get("scan_interval_min", 1))) if code not in universe_by_slot.get(slot_key, []): continue - if hm < time_start_hm or hm >= time_end_hm: + # 해외 US: 자정 넘김 RTH (_session_wrap_midnight) — 국내 경로는 기존과 동일 + from kis_trader.utils.session_hm import hm_in_trading_window + _wrap = bool(params.get("_session_wrap_midnight")) + if not hm_in_trading_window(hm, time_start_hm, time_end_hm, wrap_midnight=_wrap): continue if live_align: if i < 6: diff --git a/kis_trader/engine/momentum_env_keys.py b/kis_trader/engine/momentum_env_keys.py index 325068a..038599c 100644 --- a/kis_trader/engine/momentum_env_keys.py +++ b/kis_trader/engine/momentum_env_keys.py @@ -78,6 +78,12 @@ MOMENTUM_CONFIG_KEYS = frozenset({ "MOMENTUM_BACKTEST_SCAN_SEC", "MOMENTUM_BACKTEST_UNIVERSE_SCAN_AT", "MOMENTUM_BACKTEST_CANDLE_WARMUP_BARS", + "MOMENTUM_BACKTEST_REST_WARMUP", + "MOMENTUM_BACKTEST_REST_WARMUP_BARS", + "MOMENTUM_BACKTEST_REST_WARMUP_BARS_RETRY", + "MOMENTUM_BACKTEST_REST_MAX_CODES", + "MOMENTUM_BACKTEST_REST_SLEEP_SEC", + "MOMENTUM_BACKTEST_REST_KIWOOM_MOCK", "MOMENTUM_PREV_DAY_OPEN_HM_MAX", "MOMENTUM_UNIVERSE_EXIT_DEBOUNCE_SEC", "MOMENTUM_LIVE_SIGNAL_LOOKBACK_BARS", diff --git a/kis_trader/engine/momentum_hts_logic.py b/kis_trader/engine/momentum_hts_logic.py index ee94e00..a52e5ad 100644 --- a/kis_trader/engine/momentum_hts_logic.py +++ b/kis_trader/engine/momentum_hts_logic.py @@ -52,8 +52,10 @@ def resolve_prev_trading_day_open( """ from kis_trader.utils.env import get_env_int - # 전일 시가로 인정할 최대 HHMM (기본 09:10 — 그 이후만 있으면 장시작 시가 미확정) - open_hm_max = max(900, int(get_env_int("MOMENTUM_PREV_DAY_OPEN_HM_MAX", 910))) + # 전일 시가로 인정할 최대 HHMM. + # 기본 1000: 저유동 종목이 09:14 첫체결만 있어도 시가로 인정. + # (구 910은 월요 갭 후 전일 오전 봉이 얇으면 전부 '전일시가없음'으로 매수 불가) + open_hm_max = max(900, int(get_env_int("MOMENTUM_PREV_DAY_OPEN_HM_MAX", 1000))) prev_day: Optional[str] = None prev_open: Optional[float] = None @@ -256,7 +258,18 @@ def eval_momentum_hts_buy_at_index( cl = float(c.get("close", 0) or 0) hi = float(c.get("high", cl) or cl) - if hm < time_start_hm or hm >= time_end_hm: + # 해외 US: params._session_wrap_midnight 로 자정 넘김 RTH 허용 (국내는 기존과 동일) + from kis_trader.utils.session_hm import hm_in_trading_window + _wrap = bool(params.get("_session_wrap_midnight")) + if not hm_in_trading_window(hm, time_start_hm, time_end_hm, wrap_midnight=_wrap): + # 국내는 장중 루프에서 흔한 silent skip. 해외는 세션 키 오설정 디버깅용으로 탈락 표기. + if str(params.get("market") or "").strip().upper() == "US": + return ( + "탈락-시간외", + "hm=%04d not in %d~%d (wrap=%s)" + % (hm, time_start_hm, time_end_hm, _wrap), + None, + ) return (None, None, None) if use_defense and cl < min_price: @@ -275,8 +288,49 @@ def eval_momentum_hts_buy_at_index( prev_open = resolve_prev_trading_day_open(candles, i, day) # kiwoom momentum SCAN — E∧F∧H∧I 이미 통과, TRIGGER 는 타이밍·호가·휩쏘만 + # ※ 해외(US)는 HTS SCAN 이 없으므로 skip_hts 숏컷으로 매 봉 시그널 내면 안 됨 + # → V4 추격 패턴(돌파 OR 눌림재돌파) + RSI 하한. if skip_hts: - sig_hts: Dict[str, Any] = { + is_us = str(params.get("market") or "").strip().upper() == "US" + if is_us: + from kis_trader.engine.momentum_chase_patterns import eval_momentum_chase_pattern + ok_pat, pat_name, metrics = eval_momentum_chase_pattern(candles, i, params) + if not ok_pat: + return ( + "탈락-패턴", + "추격패턴 미충족 (%s) close=%.4f" % (pat_name or "?", cl), + None, + ) + rsi_val: Optional[float] = None + if compute_rsi_series_fn is not None: + closes = [float(x["close"]) for x in candles] + ic = params.get("_indicator_cache") + if ic is not None and hasattr(ic, "rsi_at"): + rsi_val = ic.rsi_at(i, rsi_period) + else: + rsis = compute_rsi_series_fn(closes, rsi_period) + rsi_val = rsis[i] if i < len(rsis) else None + if rsi_val is None: + return ("탈락-RSI없음", "RSI 미계산", None) + if rsi_val < rsi_min: + return ("탈락-RSI약함", "RSI=%.1f < %.0f" % (rsi_val, rsi_min), None) + use_rsi_max = _to_bool(params.get("use_rsi_max_filter"), False) + if use_rsi_max and rsi_val > rsi_max: + return ("탈락-RSI과열", "RSI=%.1f > %.0f" % (rsi_val, rsi_max), None) + sig_hts: Dict[str, Any] = { + "signal": True, + "mode": "us_momentum_chase", + "pattern": pat_name or "chase", + "signal_candle_time": c.get("candle_time"), + "prev_day_open": prev_open, + } + if metrics: + sig_hts.update(metrics) + if rsi_val is not None: + sig_hts["rsi"] = rsi_val + return (None, None, sig_hts) + + sig_hts = { "signal": True, "mode": "momentum_hts", "pattern": "momentum_hts_scan", diff --git a/kis_trader/engine/momentum_tick_replay.py b/kis_trader/engine/momentum_tick_replay.py index ddcef81..6c7e9af 100644 --- a/kis_trader/engine/momentum_tick_replay.py +++ b/kis_trader/engine/momentum_tick_replay.py @@ -585,7 +585,12 @@ def resolve_momentum_sell_for_bar( except Exception: pass - if momentum_backtest_tick_fallback_ohlc(params): + # 절대규칙: 틱 청산 ON 이면 OHLC 봉 폴백으로 숫자 변조 금지 + # (FALLBACK_OHLC 체크 ON 이어도 무시. 벽시계 last-price 는 OHLC intrabar 가 아님) + if ( + not momentum_backtest_use_tick_exit(params) + and momentum_backtest_tick_fallback_ohlc(params) + ): res = check_sell_signal_momentum_backtest_bar(position, bar, params, is_eod=is_eod) if res: reason, exit_price = res diff --git a/kis_trader/engine/scalping_engine.py b/kis_trader/engine/scalping_engine.py index bff4813..c155c68 100644 --- a/kis_trader/engine/scalping_engine.py +++ b/kis_trader/engine/scalping_engine.py @@ -210,6 +210,24 @@ def get_scalping_defaults_from_db(*, env_row: Optional[Dict[str, Any]] = None) - if r.get("SCALP_EOD_ENABLED") in (None, "", "None") and r.get("force_eod_exit") not in (None, "", "None"): eod_enabled = _to_bool(r.get("force_eod_exit"), True) eod_hm = str(r.get("SCALP_EOD_HM") or "15:25").strip() or "15:25" + # 신호=T−1 확정봉, 진입=형성 중 봉 T 시가(첫 틱) — 모멘텀/꼬리 BT 정합 + # DB 신규 컬럼 NULL→'' 이면 _to_bool('')=False 가 되므로 빈값은 미설정 취급 + _la = r.get("SCALP_LIVE_BACKTEST_ALIGN") + live_backtest_align = ( + True if _la in (None, "") else _to_bool(_la, True) + ) + _lb = r.get("SCALP_LIVE_SIGNAL_LOOKBACK_BARS") + live_signal_lookback_bars = int(float(_lb or 1)) + _lf = r.get("SCALP_LIVE_ALIGN_USE_FORMING_BAR") + live_align_use_forming_bar = ( + True if _lf in (None, "") else _to_bool(_lf, True) + ) + backtest_use_tick_entry = _to_bool( + r.get("SCALP_BACKTEST_USE_TICK_ENTRY"), True, + ) + backtest_tick_fallback_ohlc = _to_bool( + r.get("SCALP_BACKTEST_TICK_FALLBACK_OHLC"), False, + ) else: cooldown_min, fee_pct, tax_pct, slot = 10, 0.015, 0.18, 300_000.0 high_chase_thr, max_daily_chg, min_price = 0.96, 20.0, 1000.0 @@ -230,6 +248,9 @@ def get_scalping_defaults_from_db(*, env_row: Optional[Dict[str, Any]] = None) - vol_mult = 0.0 time_start_hm, time_end_hm, max_daily = 900, 1530, 3 eod_enabled, eod_hm = True, "15:25" + live_backtest_align, live_signal_lookback_bars = True, 1 + live_align_use_forming_bar = True + backtest_use_tick_entry, backtest_tick_fallback_ohlc = True, False except Exception: cooldown_min, fee_pct, tax_pct, slot = 10, 0.015, 0.18, 300_000.0 @@ -251,6 +272,9 @@ def get_scalping_defaults_from_db(*, env_row: Optional[Dict[str, Any]] = None) - vol_mult = 0.0 time_start_hm, time_end_hm, max_daily = 900, 1530, 3 eod_enabled, eod_hm = True, "15:25" + live_backtest_align, live_signal_lookback_bars = True, 1 + live_align_use_forming_bar = True + backtest_use_tick_entry, backtest_tick_fallback_ohlc = True, False return { "cooldown_min": cooldown_min, @@ -298,6 +322,11 @@ def get_scalping_defaults_from_db(*, env_row: Optional[Dict[str, Any]] = None) - "eod_hm": eod_hm, # 레거시 별칭 — 포트폴리오/단건 엔진 force_eod 경로 호환 "force_eod_exit": eod_enabled, + "live_backtest_align": live_backtest_align, + "live_signal_lookback_bars": live_signal_lookback_bars, + "live_align_use_forming_bar": live_align_use_forming_bar, + "backtest_use_tick_entry": backtest_use_tick_entry, + "backtest_tick_fallback_ohlc": backtest_tick_fallback_ohlc, } @@ -1070,8 +1099,11 @@ def check_buy_signal_live( """ 실시간 reversal 매수 신호. - - ``live_backtest_align=True`` (기본): 백테스트와 동일 — **직전 확정봉=신호봉**, - **현재 확정봉=진입봉** (신호봉 종가 조건 충족 후 다음 봉에서 매수). + - ``live_backtest_align=True`` (기본): + - 신호봉 = 직전 확정봉 (T−1) + - 진입봉 = 형성 중 봉 T (``live_align_use_forming_bar`` 기본 True) + → ``entry_price`` = 진입봉 시가(실매·BT 첫 틱/시가 정합) + - forming 없으면 구 폴백: 신호=confirmed[-2], 진입=confirmed[-1] open - ``live_backtest_align=False``: 구버전 — 마지막 1봉만 검사. """ if len(candles) < 4: @@ -1079,6 +1111,14 @@ def check_buy_signal_live( live_align = _to_bool(params.get("live_backtest_align", True), True) lookback = max(1, int(params.get("live_signal_lookback_bars", 1))) + use_forming = _to_bool(params.get("live_align_use_forming_bar", True), True) + + forming: Optional[Dict[str, Any]] = None + if live_align and use_forming and candles: + last = candles[-1] + if last.get("is_confirmed") in (0, False, "0", "false"): + forming = last + confirmed = _confirmed_candles_only(candles) if len(confirmed) < 4: @@ -1089,9 +1129,16 @@ def check_buy_signal_live( ) if live_align: - entry_i = len(confirmed) - 1 + # forming 있으면: 신호=confirmed[-1], 진입=forming open (BT next open 과 동일) + # forming 없으면: 신호=confirmed[-2], 진입=confirmed[-1] open (구 폴백) + if forming is not None: + entry_bar = forming + signal_base_i = len(confirmed) - 1 + else: + entry_bar = confirmed[-1] + signal_base_i = len(confirmed) - 2 for k in range(lookback): - signal_i = entry_i - 1 - k + signal_i = signal_base_i - k if signal_i < 1: break st = _apply_buy_state_filters(confirmed, signal_i, params, state) @@ -1103,6 +1150,11 @@ def check_buy_signal_live( last_reject = (reject, msg, None) continue if sig: + entry_open = float(entry_bar.get("open", 0) or 0) + if entry_open <= 0: + entry_open = float(entry_bar.get("close", 0) or 0) + sig["entry_price"] = entry_open + sig["entry_bar_key"] = entry_bar.get("candle_time") return (None, None, sig) return last_reject diff --git a/kis_trader/engine/tail_engine.py b/kis_trader/engine/tail_engine.py index d71fb2f..b9bf543 100644 --- a/kis_trader/engine/tail_engine.py +++ b/kis_trader/engine/tail_engine.py @@ -32,7 +32,9 @@ kis_trader/engine/tail_engine.py — 꼬리잡기 백테스트·실매매 공통 1) 트레일(어깨컷) — max_price 갱신 후 되돌림(저가로 터치 판정, 체결=매도선), 발동 수익% 충족 시 **손절·금액손실보다 우선** 2) ATR 캡 적용 익절 / 3) ATR 캡 적용 손절 / 4) 금액손실컷(트레일 미발동 구간만) / 5) 장마감 ATR 목표·손절: 배수 × ATR 후 ``TAIL_ATR_*_MIN/MAX_PCT`` % 상·하한 캡 (잡주 과대 목표가 방지). - 백테 청산: ws_ticks 시간순 (``resolve_backtest_sell``, session_low) → OHLC 폴백 기본 OFF. + 백테 청산: ws_ticks 시간순 (``resolve_backtest_sell``, session_low). + **실매와 동일** — 고점(max_price)·청산 판정은 틱만. 봉 OHLC high/low 로 max 선반영·폴백 금지 + (``TAIL_BACKTEST_TICK_FALLBACK_OHLC`` 기본 False, EOD 도 OHLC 폴백 강제 금지 → 틱 미청산 시 장마감 플랫만). 진입·지표는 N분봉 그대로. ■ 진입 모드 (``TAIL_ENTRY_MODE``) @@ -1690,13 +1692,27 @@ def _fill_portfolio_align_entry( return False, skipped_micro, skipped_vol entry_price = float(pe.get("entry_price") or 0) + entry_src = "ohlc_open" + # 중분 편입 시가 애매 — pe 생성 시 enroll_et 기록, 여기서 최종 가드 + from kis_trader.engine.mid_enroll_entry_gate import is_entry_open_ambiguous + _ebk = str(pe.get("entry_bar_key") or t)[:12] + _en = pe.get("enroll_et") + if _en and is_entry_open_ambiguous( + _ebk, _en, tf_min=max(1, int(tick_tf or 1)), + ): + return False, skipped_micro, skipped_vol if use_ticks: bar_key = str(pe.get("entry_bar_key") or t)[:12] bar_ticks = collect_bar_ticks(ticks_by_code, code, bar_key, tick_tf) if bar_ticks: entry_price, align_src = align_entry_price_from_ticks(bar_ticks, entry_price) + entry_src = str(align_src or "ws_ticks") if align_src in tick_fill_stats: tick_fill_stats[align_src] += 1 + else: + tick_fill_stats["ws_ticks"] = tick_fill_stats.get("ws_ticks", 0) + 1 + else: + tick_fill_stats["ohlc_open"] = tick_fill_stats.get("ohlc_open", 0) + 1 if entry_price <= 0: return False, skipped_micro, skipped_vol @@ -1737,6 +1753,7 @@ def _fill_portfolio_align_entry( "max_price": entry_price, "session_low": entry_price, "qty": qty, + "entry_source": entry_src, } return True, 0, 0 @@ -1852,7 +1869,44 @@ def run_tail_backtest_portfolio( from kis_trader.backtest.backtest_env_timeline import apply_env_timeline_at - for t in all_times: + # 백테 CLI/웹 잡 진행률 (매매 로직 불변 — 파일에 pct만 기록) + _prog_path = str(params.get("_bt_progress_file") or "").strip() + _prog_base = float(params.get("_bt_progress_base_pct") or 45) + _prog_span = float(params.get("_bt_progress_span_pct") or 50) + _prog_n = max(1, len(all_times)) + _prog_last_i = -1 + + def _emit_bt_progress(i: int) -> None: + nonlocal _prog_last_i + if not _prog_path: + return + # 과도한 디스크 쓰기 방지 + if i != 0 and i != _prog_n - 1 and (i - _prog_last_i) < max(25, _prog_n // 40): + return + _prog_last_i = i + try: + pct = _prog_base + _prog_span * (float(i + 1) / float(_prog_n)) + payload = { + "pct": int(max(0, min(99, round(pct)))), + "phase": "engine", + "message": f"시계 {i + 1}/{_prog_n}", + "step": int(i + 1), + "total": int(_prog_n), + "ts": __import__("time").time(), + } + from pathlib import Path as _P + _p = _P(_prog_path) + _tmp = _p.with_suffix(".tmp") + _tmp.write_text( + __import__("json").dumps(payload, ensure_ascii=False), + encoding="utf-8", + ) + _tmp.replace(_p) + except Exception: + pass + + for _ti, t in enumerate(all_times): + _emit_bt_progress(_ti) if apply_env_timeline_at(params, t, "SHORT"): max_stocks = _tail_max_stocks_from_params(params) slot_money = resolve_tail_invest_amount_krw(params) @@ -1918,6 +1972,21 @@ def run_tail_backtest_portfolio( ) stop_p, target_p = compute_tail_atr_prices(entry_price, atr, params) exec_t = align_entry_execute_time(ent.get("candle_time"), tick_tf) or t + from kis_trader.engine.mid_enroll_entry_gate import ( + bt_resolve_enroll, + is_entry_open_ambiguous, + ) + _ebk = str(ent.get("candle_time") or "")[:12] + _enroll = bt_resolve_enroll( + code, t, + universe_timeline=universe_timeline, + universe_by_slot=universe_by_slot, + params=params, + ) + if _enroll and is_entry_open_ambiguous( + _ebk, _enroll, tf_min=tick_tf, params=params, + ): + continue pri = _buy_priority_key(code, uni_codes) incl_cands.append((pri, code, { "entry_time": exec_t, @@ -1925,14 +1994,23 @@ def run_tail_backtest_portfolio( "stop": stop_p, "target": target_p, "entry_bar_key": ent.get("candle_time"), + "enroll_et": _enroll, "from_inclusion": True, })) if incl_cands: incl_cands.sort(key=lambda x: x[0]) _pri, pick_code, pe = incl_cands[0] - # 편입 직후 = 실매 즉시 시장가 (진입봉 이미 확정된 경우 같은 시각 체결) + # 편입·재편입 직후 체결: + # - entry_time == t : 진입봉 마감 시각과 동일 → 즉시 체결 + # - entry_time < t : 재편입 lookback 이 과거 신호봉을 찾은 경우 + # (실매: EXIT 후 RE-ENTER 시 과거 align 진입가로 즉시 시장가). + # 과거 entry_time 을 pending 으로 남기면 Phase0b 가 영구 미체결 → 금지. + # - entry_time > t : 아직 진입봉 미도래 → pending _ctx_pick = ctx_by_code[pick_code] - if str(pe.get("entry_time") or "")[:12] == str(t)[:12]: + _pe_t = str(pe.get("entry_time") or "")[:12] + _now_t = str(t)[:12] + _fill_now = (not _pe_t) or (_pe_t <= _now_t) + if _fill_now: _filled, _sm, _sv = _fill_portfolio_align_entry( portfolio=portfolio, ctx=_ctx_pick, @@ -1954,6 +2032,9 @@ def run_tail_backtest_portfolio( if _filled: inclusion_entries += 1 else: + # 잔여한도 등으로 즉시 실패 시에만 pending (시각은 현재 t 로 맞춤) + pe = dict(pe) + pe["entry_time"] = t _ctx_pick["pending_entry"] = pe else: _ctx_pick["pending_entry"] = pe @@ -2024,6 +2105,7 @@ def run_tail_backtest_portfolio( "max_price": fill, "session_low": fill, "qty": qty, + "entry_source": str(fill_src or "ohlc_low"), } ctx["pending_limit"] = None break @@ -2079,6 +2161,7 @@ def run_tail_backtest_portfolio( # 틱만으로 청산 검사(봉 OHLC 폴백 없음 — 유령 청산 방지). # 단 EOD는 실매 벽시계와 동일하게 ``t`` 기준(DB eod_enabled/eod_hm)으로 추적. is_eod = is_strategy_eod_bar(t, params, "TAIL") + ep0 = float(pos.get("entry_price") or 0) if idx is None: if not use_tick_exit and not is_eod: continue @@ -2088,22 +2171,14 @@ def run_tail_backtest_portfolio( ) if not bar_ticks and not is_eod: continue - ep0 = float(pos.get("entry_price") or 0) - # EOD·분키 miss: 직전 종가로 장마감 체결 근사 (틱 있으면 틱 경로 우선) + # 직전 종가 = EOD 플랫 체결가용. max_price 에는 넣지 않음(실매=틱/WS만). last_px = _last_close_at_or_before(candles, t, ep0) if last_px <= 0: last_px = ep0 - max_p = max(float(pos.get("max_price") or ep0), last_px) - sess_lo = float(pos.get("session_low") or ep0) - if last_px > 0: - sess_lo = min(sess_lo, last_px) if sess_lo > 0 else last_px - pos["max_price"] = max_p - if sess_lo > 0: - pos["session_low"] = sess_lo cur_c_info = { "open": last_px, - "high": max_p, - "low": sess_lo if sess_lo > 0 else last_px, + "high": float(pos.get("max_price") or last_px), + "low": float(pos.get("session_low") or last_px), "close": last_px, "candle_time": t, } @@ -2113,13 +2188,7 @@ def run_tail_backtest_portfolio( lo = float(c["low"]) cl = float(c["close"]) op = float(c["open"]) - - max_p = max(float(pos.get("max_price", 0) or 0), hi) - hp = float(c.get("holding_peak") or 0) - if hp > 0: - max_p = max(max_p, hp) - pos["max_price"] = max_p - + last_px = cl if cl > 0 else ep0 cur_c_info = { "open": op, "high": hi, @@ -2131,8 +2200,17 @@ def run_tail_backtest_portfolio( collect_bar_ticks(ticks_by_code, code, t, tick_tf) if use_tick_exit else None ) - # 분키 miss: 일반 청산은 틱만(유령 OHLC 방지). EOD만 시계·직전종가 폴백 허용. - _tick_fb = bool(is_eod) if idx is None else bool(tick_fallback_ohlc or is_eod) + # 틱 청산 ON: 봉 high/holding_peak 로 max_price 선반영 금지 + # (3분봉 high 에 미래 분 고점 포함 → 래칫 look-ahead, 실매와 분기). + # 틱 OFF(레거시 OHLC 청산)일 때만 봉 high 로 고점 갱신. + if not use_tick_exit: + max_p = max(float(pos.get("max_price", 0) or 0), hi) + hp = float(c.get("holding_peak") or 0) + if hp > 0: + max_p = max(max_p, hp) + pos["max_price"] = max_p + + # OHLC 폴백: env/params 명시 ON 만. EOD 로 강제하지 않음(정합 깨짐). res = resolve_backtest_sell( pos, cur_c_info, @@ -2142,17 +2220,27 @@ def run_tail_backtest_portfolio( low_mode="session_low", ticks=bar_ticks, use_tick_exit=use_tick_exit, - tick_fallback_ohlc=_tick_fb, + tick_fallback_ohlc=bool(tick_fallback_ohlc), poll_ms=tick_poll_ms, slip_pct=tick_sell_slip, ) if not res: - continue - reason, exit_price, sell_time, _hold_min, exit_src = res + # 틱으로 미청산 + EOD: 실매처럼 현재가(직전종가)로 장마감만 — 봉 고저로 래칫/손절 재계산 금지 + if is_eod and last_px > 0: + reason, exit_price, sell_time, exit_src = ( + "장마감", last_px, t, "eod_flat", + ) + else: + continue + else: + reason, exit_price, sell_time, _hold_min, exit_src = res if exit_src == "ws_ticks": tick_exit_count += 1 + elif exit_src == "eod_flat": + pass else: ohlc_exit_count += 1 + peak_px = float(pos.get("max_price") or exit_price or 0) all_trades.append({ "code": code, "entry_time": pos["entry_time"], @@ -2162,8 +2250,10 @@ def run_tail_backtest_portfolio( "pnl": 0, "reason": reason, "hold_min": 0, - "peak_price": round(max_p), + "peak_price": round(peak_px), "qty": pos.get("qty", 1), + "entry_source": str(pos.get("entry_source") or ""), + "exit_source": str(exit_src or ""), }) ctx["last_exit_dt"][day] = _t2dt(sell_time or t) ctx["daily_cnt"][day] = ctx["daily_cnt"].get(day, 0) + 1 @@ -2313,12 +2403,28 @@ def run_tail_backtest_portfolio( if entry_price <= 0: continue stop_p, target_p = compute_tail_atr_prices(entry_price, atr, params) + from kis_trader.engine.mid_enroll_entry_gate import ( + bt_resolve_enroll, + is_entry_open_ambiguous, + ) + _ebk = str(ent.get("candle_time") or "")[:12] + _enroll = bt_resolve_enroll( + code, t, + universe_timeline=universe_timeline, + universe_by_slot=universe_by_slot, + params=params, + ) + if _enroll and is_entry_open_ambiguous( + _ebk, _enroll, tf_min=tick_tf, params=params, + ): + continue candidates.append((pri, code, { "entry_time": close_t, "entry_price": entry_price, "stop": stop_p, "target": target_p, "entry_bar_key": ent.get("candle_time"), + "enroll_et": _enroll, })) if not candidates: @@ -2471,12 +2577,6 @@ def run_tail_backtest( # ── 1. 청산 검사 (포지션 보유 중일 때) ── if position is not None: - max_p = max(position["max_price"], hi) - hp = float(c.get("holding_peak") or 0) - if hp > 0: - max_p = max(max_p, hp) - position["max_price"] = max_p - cur_c_info = { "open": op, "high": hi, @@ -2489,6 +2589,13 @@ def run_tail_backtest( ticks_by_code, code, c["candle_time"], tick_tf, ) if use_tick_exit else None ) + # 틱 청산 ON: 봉 high 로 max_price 선반영 금지 (실매=틱/WS만) + if not use_tick_exit: + max_p = max(position["max_price"], hi) + hp = float(c.get("holding_peak") or 0) + if hp > 0: + max_p = max(max_p, hp) + position["max_price"] = max_p res = resolve_backtest_sell( position, cur_c_info, @@ -2498,10 +2605,12 @@ def run_tail_backtest( low_mode="session_low", ticks=bar_ticks, use_tick_exit=use_tick_exit, - tick_fallback_ohlc=tick_fallback_ohlc, + tick_fallback_ohlc=bool(tick_fallback_ohlc), poll_ms=tick_poll_ms, slip_pct=tick_sell_slip, ) + if not res and is_eod and cl > 0: + res = ("장마감", cl, c["candle_time"], 0.0, "eod_flat") if res: reason, exit_price, sell_time, _hold_min, _exit_src = res @@ -2514,8 +2623,10 @@ def run_tail_backtest( "pnl": 0, "reason": reason, "hold_min": 0, - "peak_price": round(max_p), + "peak_price": round(float(position.get("max_price") or exit_price)), "qty": position.get("qty", 1), + "entry_source": str(position.get("entry_source") or ""), + "exit_source": str(_exit_src or ""), }) last_exit_dt[day] = _t2dt(sell_time or c["candle_time"]) daily_cnt[day] = daily_cnt.get(day, 0) + 1 diff --git a/kis_trader/engine/tail_env_keys.py b/kis_trader/engine/tail_env_keys.py index 35d49e2..ddd0154 100644 --- a/kis_trader/engine/tail_env_keys.py +++ b/kis_trader/engine/tail_env_keys.py @@ -320,6 +320,18 @@ def params_to_tail_env_patch(p: Dict[str, Any]) -> Dict[str, str]: ): if js_k in p and p[js_k] is not None: _set(env_k, p[js_k]) + # 휩쏘 TRIGGER (Optuna TPE / apply-best) — 전략 전용 TAIL_WHIPSAW_* + if "whipsaw_enabled" in p: + _set("TAIL_WHIPSAW_FILTER_ENABLED", str(p["whipsaw_enabled"]).lower()) + for js_k, env_k in ( + ("whipsaw_subbar_sec", "TAIL_WHIPSAW_SUBBAR_SEC"), + ("whipsaw_lookback_sec", "TAIL_WHIPSAW_LOOKBACK_SEC"), + ("whipsaw_dip_pct", "TAIL_WHIPSAW_DIP_PCT"), + ("whipsaw_recovery_tol_pct", "TAIL_WHIPSAW_RECOVERY_TOL_PCT"), + ("whipsaw_min_subbars", "TAIL_WHIPSAW_MIN_SUBBARS"), + ): + if js_k in p and p[js_k] is not None and str(p[js_k]).strip() != "": + _set(env_k, p[js_k]) return patch diff --git a/kis_trader/engine/tail_tick_replay.py b/kis_trader/engine/tail_tick_replay.py index 196c6da..df01d10 100644 --- a/kis_trader/engine/tail_tick_replay.py +++ b/kis_trader/engine/tail_tick_replay.py @@ -167,6 +167,67 @@ def align_entry_price_from_ticks( return fo, "ohlc_open" +def _live_entry_tick_buffer_enabled() -> bool: + """실매 진입 계산가: RAM 틱 첫가 우선 (기본 ON). 없으면 분봉 시가 폴백.""" + from kis_trader.utils.env import get_env_bool + return get_env_bool("LIVE_ALIGN_ENTRY_FROM_TICK_BUFFER", True) + + +def _live_entry_tick_buffer_limit() -> int: + from kis_trader.utils.env import get_env_int + return max(10, int(get_env_int("LIVE_ENTRY_TICK_BUFFER_LIMIT", 300) or 300)) + + +def filter_recent_ticks_for_entry_bar( + ticks: List[Dict[str, Any]], + entry_bar_key: str, + tf_min: int = 1, +) -> List[Dict[str, Any]]: + """RAM 틱 중 진입봉(T)에 속하는 것만 (시간 오름차순 유지).""" + keys = set(tail_bar_minute_keys(entry_bar_key, tf_min)) + if not keys: + return [] + out: List[Dict[str, Any]] = [] + for tick in ticks or []: + tt = str(tick.get("tick_time") or "").replace(":", "").replace("-", "").replace(" ", "") + if len(tt) >= 12 and tt[:12] in keys: + out.append(tick) + return out + + +def live_align_entry_price( + ws: Any, + code: str, + fallback_open: float, + *, + entry_bar_key: Optional[str] = None, + tf_min: int = 1, + enabled: Optional[bool] = None, +) -> Tuple[float, str]: + """실매 진입 **계산가** — 백테 ``align_entry_price_from_ticks`` 와 동일 의미. + + 1) ``LIVE_ALIGN_ENTRY_FROM_TICK_BUFFER`` ON 이고 WS RAM에 진입봉 틱이 있으면 첫 체결가 + 2) 아니면 분봉 시가(``fallback_open``) + + 주문 유형(시장가/지정가)은 바꾸지 않는다. 수량·손절·백테 정합용 기준가만 정밀화. + """ + fo = float(fallback_open or 0) + use = _live_entry_tick_buffer_enabled() if enabled is None else bool(enabled) + if not use or fo <= 0: + return fo, "ohlc_open" + bar_key = str(entry_bar_key or "")[:12] + if len(bar_key) < 12: + return fo, "ohlc_open" + if ws is None or not code or not getattr(ws, "get_recent_ticks", None): + return fo, "ohlc_open" + try: + raw = list(ws.get_recent_ticks(str(code).strip(), limit=_live_entry_tick_buffer_limit()) or []) + except Exception: + return fo, "ohlc_open" + bar_ticks = filter_recent_ticks_for_entry_bar(raw, bar_key, tf_min=max(1, int(tf_min or 1))) + return align_entry_price_from_ticks(bar_ticks, fo) + + def resolve_align_entry_bar( candles: List[Dict[str, Any]], signal_idx: int, @@ -227,10 +288,14 @@ def try_limit_fill_on_bar_with_ticks( from kis_trader.engine.limit_entry_common import try_limit_fill_on_bar p = params or {} - if ticks and tail_backtest_use_tick_db(p): + use_ticks = tail_backtest_use_tick_db(p) + if use_ticks and ticks: fp = try_limit_fill_from_ticks(ticks, limit_price, fill_slip_pct) if fp and fp > 0: return fp, "ws_ticks" + # 절대규칙: 틱 진입 ON 이면 OHLC low 폴백으로 체결가 변조 금지 + if use_ticks: + return None, "none" if tail_backtest_tick_fallback_ohlc(p): fp = try_limit_fill_on_bar(bar, limit_price, fill_slip_pct) if fp and fp > 0: diff --git a/kis_trader/engine/tick_exit_common.py b/kis_trader/engine/tick_exit_common.py index 3f9298f..4ff83ea 100644 --- a/kis_trader/engine/tick_exit_common.py +++ b/kis_trader/engine/tick_exit_common.py @@ -3,8 +3,12 @@ 백테 틱 청산 공통 — 실매 폴링(STRATEGY_LOOP_SLEEP≈0.1초) 근사. 1분·N분봉 OHLC intrabar(open→high→low→close)는 익절/어깨를 손절보다 먼저 -체결하는 낙관 편향을 만든다. 전 전략 백테·파람서치는 ws_ticks 시간순 재생을 -기본으로 하고, 틱 없는 구간은 OHLC 폴백을 쓰지 않는다(기본 OFF). +체결하는 낙관 편향을 만든다. 전 전략 백테·파람서치·Optuna는 ws_ticks 시간순 재생. + +■ 절대규칙 (정합) + 틱 청산/틱 진입 ON 이면 OHLC 폴백으로 체결·고점·손익 숫자를 **절대 변조하지 않는다**. + ``*_TICK_FALLBACK_OHLC`` 체크가 ON이어도 ``use_tick_exit`` 경로에서는 무시한다. + (봉 high 선반영·EOD OHLC 강제 폴백 = 실매와 다른 엔진 — 금지) """ from __future__ import annotations @@ -91,6 +95,11 @@ def strategy_tick_fallback_ohlc( *, default: bool = False, ) -> bool: + """OHLC 폴백 플래그 조회. + + 기본 False. 틱 청산 ON 경로에서는 ``resolve_backtest_sell`` 이 이 값을 **무시**한다. + Optuna/파람서치는 호출측에서 False 고정. + """ return _param_bool(params, "backtest_tick_fallback_ohlc", env_key, default) @@ -331,7 +340,7 @@ def resolve_backtest_sell( slip_pct: float = 0.0, ) -> Optional[Tuple[str, float, str, float, str]]: """ - 한 봉 청산 — 틱 우선, 없으면 OHLC intrabar 폴백(기본 OFF). + 한 봉 청산 — 틱 청산 ON 이면 틱만. OHLC 폴백으로 숫자 변조 금지. Returns: (reason, fill_price, sell_time, hold_min, exit_source) @@ -345,19 +354,21 @@ def resolve_backtest_sell( ct = str(bar.get("candle_time") or "") entry_time = str(position.get("entry_time") or "") - if use_tick_exit and ticks: - tick_res = try_sell_on_ticks( - position, ticks, params, sell_fn, - is_eod=is_eod, entry_time=entry_time, - poll_ms=poll_ms, slip_pct=slip_pct, low_mode=low_mode, - ) - if tick_res: - reason, fill_px, sell_time, hold_min = tick_res - return reason, fill_px, sell_time, hold_min, "ws_ticks" - - if not tick_fallback_ohlc: + if use_tick_exit: + if ticks: + tick_res = try_sell_on_ticks( + position, ticks, params, sell_fn, + is_eod=is_eod, entry_time=entry_time, + poll_ms=poll_ms, slip_pct=slip_pct, low_mode=low_mode, + ) + if tick_res: + reason, fill_px, sell_time, hold_min = tick_res + return reason, fill_px, sell_time, hold_min, "ws_ticks" + # 절대규칙: 틱 청산 ON → OHLC intrabar 폴백 무시 (tick_fallback_ohlc 체크 무관) + # EOD 플랫은 호출측에서 직전가/장마감만 처리. return None + # 틱 청산 OFF = 레거시 순수 OHLC 경로 (폴백이 아님 — 봉 OHLC 가 본체) res = check_sell_signal_backtest_bar( position, bar, params, is_eod=is_eod, sell_fn=sell_fn, low_mode=low_mode, ) diff --git a/kis_trader/engine/us_momentum_env.py b/kis_trader/engine/us_momentum_env.py new file mode 100644 index 0000000..235156f --- /dev/null +++ b/kis_trader/engine/us_momentum_env.py @@ -0,0 +1,193 @@ +""" +kis_trader/engine/us_momentum_env.py — 해외 모멘텀(US_MOMENTUM_*) env 오버레이 +============================================================================= +국내 MOMENTUM_* 와 엔진 키는 동일하되, 저장·실매는 US_MOMENTUM_* 만 사용. +값이 없으면 국내 기본(이미 get_momentum_defaults_from_db 로 로드된 params) 유지. +""" +from __future__ import annotations + +from typing import Any, Dict, Optional + +from kis_trader.utils.env import get_env_bool, get_env_float, get_env_from_db, get_env_int + +# 웹 저장·ENV_CONFIG_KEYS 등록용 (TRIGGER/청산 핵심) +US_MOMENTUM_TRIGGER_EXIT_KEYS = ( + "US_MOMENTUM_RSI_MIN", + "US_MOMENTUM_RSI_MAX", + "US_MOMENTUM_VOL_MULT", + "US_MOMENTUM_VOL_WIN", + "US_MOMENTUM_TIME_START", + "US_MOMENTUM_TIME_END", + "US_MOMENTUM_SELL_TIME_END", + "US_MOMENTUM_MAX_FROM_OPEN_PCT", + "US_MOMENTUM_MIN_FROM_OPEN_PCT", + "US_MOMENTUM_STOP_LOSS_PCT", + "US_MOMENTUM_TAKE_PROFIT_PCT", + "US_MOMENTUM_TP_MAX_PCT", + "US_MOMENTUM_SHOULDER_MIN_HIGH_PCT", + "US_MOMENTUM_SHOULDER_CUT_PCT", + "US_MOMENTUM_RATCHET_TIERS", + "US_MOMENTUM_TRAIL_PCT", + "US_MOMENTUM_TRAIL_ARM_PCT", + "US_MOMENTUM_MAX_HOLD_BARS", + "US_MOMENTUM_MAX_DAILY", + "US_MOMENTUM_MIN_PRICE", + "US_MOMENTUM_MAX_DAILY_CHG", + "US_MOMENTUM_HIGH_CHASE_THR", + "US_MOMENTUM_USE_DEFENSE_FILTERS", + "US_MOMENTUM_USE_HIGH_CHASE_FILTER", + "US_MOMENTUM_USE_DAILY_RANGE_FILTER", + "US_MOMENTUM_USE_EMA_FILTER", + "US_MOMENTUM_EMA_FAST_PERIOD", + "US_MOMENTUM_EMA_SLOW_PERIOD", + "US_MOMENTUM_USE_RSI_MAX_FILTER", + "US_MOMENTUM_PATTERN_BREAKOUT", + "US_MOMENTUM_PATTERN_PULLBACK", + "US_MOMENTUM_CHASE_LOOKBACK_MIN", + "US_MOMENTUM_PULLBACK_LOOKBACK_MIN", + "US_MOMENTUM_PULLBACK_MIN_PCT", + "US_MOMENTUM_PULLBACK_MAX_PCT", + "US_MOMENTUM_SETUP_VOL_MAX_MULT", + "US_MOMENTUM_SETUP_BEAR_BARS_MIN", + "US_MOMENTUM_MAX_LOSS_PER_TRADE", + "US_MOMENTUM_MIN_PROFIT_PCT", + "US_MOMENTUM_SLOT_MONEY", + "US_MOMENTUM_MAX_STOCKS", + "US_MOMENTUM_TOTAL_BUDGET", + "US_MOMENTUM_MAX_BUY_AMOUNT", + "US_MOMENTUM_COOLDOWN_SEC", + "US_MOMENTUM_EOD_ENABLED", + "US_MOMENTUM_EOD_HM", + "US_MOMENTUM_DAILY_PROFIT_TARGET_ENABLED", + "US_MOMENTUM_DAILY_PROFIT_TRAIL_TIERS", + "US_MOMENTUM_DAILY_PROFIT_MODE", +) + + +def _pct_ratio_from_env(key: str) -> Optional[float]: + """DB 소수(0.015) 또는 퍼센트(1.5) → 엔진 비율. 키 없으면 None.""" + raw = get_env_from_db(key, "") + if raw in (None, "", "None"): + return None + try: + x = abs(float(raw)) + except (TypeError, ValueError): + return None + if x == 0: + return 0.0 + return x if x < 0.5 else x / 100.0 + + +def overlay_us_momentum_engine_params(params: Dict[str, Any]) -> Dict[str, Any]: + """국내 defaults 위에 US_MOMENTUM_* 가 있으면 덮어씀 (실매 UsMomentumStrategy).""" + out = dict(params or {}) + + def set_if(key: str, env_key: str, cast=float): + raw = get_env_from_db(env_key, "") + if raw in (None, "", "None"): + return + try: + out[key] = cast(raw) + except (TypeError, ValueError): + pass + + for eng, envk, cast in ( + ("mom_rsi_min", "US_MOMENTUM_RSI_MIN", float), + ("mom_rsi_max", "US_MOMENTUM_RSI_MAX", float), + ("mom_vol_mult", "US_MOMENTUM_VOL_MULT", float), + ("mom_vol_win", "US_MOMENTUM_VOL_WIN", int), + ("max_daily", "US_MOMENTUM_MAX_DAILY", int), + ("min_price", "US_MOMENTUM_MIN_PRICE", float), + ("max_daily_chg", "US_MOMENTUM_MAX_DAILY_CHG", float), + ("high_chase_thr", "US_MOMENTUM_HIGH_CHASE_THR", float), + ("mom_max_from_open_pct", "US_MOMENTUM_MAX_FROM_OPEN_PCT", float), + ("mom_min_from_open_pct", "US_MOMENTUM_MIN_FROM_OPEN_PCT", float), + ("chase_lookback_min", "US_MOMENTUM_CHASE_LOOKBACK_MIN", int), + ("pullback_lookback_min", "US_MOMENTUM_PULLBACK_LOOKBACK_MIN", int), + ("pullback_min_pct", "US_MOMENTUM_PULLBACK_MIN_PCT", float), + ("pullback_max_pct", "US_MOMENTUM_PULLBACK_MAX_PCT", float), + ("setup_vol_max_mult", "US_MOMENTUM_SETUP_VOL_MAX_MULT", float), + ("setup_bear_bars_min", "US_MOMENTUM_SETUP_BEAR_BARS_MIN", int), + ("ema_fast_period", "US_MOMENTUM_EMA_FAST_PERIOD", int), + ("ema_slow_period", "US_MOMENTUM_EMA_SLOW_PERIOD", int), + ("max_hold_bars", "US_MOMENTUM_MAX_HOLD_BARS", int), + ("slot_money", "US_MOMENTUM_SLOT_MONEY", int), + ("max_stocks", "US_MOMENTUM_MAX_STOCKS", int), + ): + set_if(eng, envk, cast) + + # 세션 HM 은 국내 defaults(900~1530)가 남아 있으면 야간 US 봉이 조용히 스킵됨. + # US_MOMENTUM_TIME_* 는 항상 강제 (DB 없으면 코드 기본 2230~500). + _ts = int(get_env_int("US_MOMENTUM_TIME_START", 2230) or 2230) + _te = int(get_env_int("US_MOMENTUM_TIME_END", 500) or 500) + out["time_start_hm"] = _ts + out["time_start"] = _ts + out["time_end_hm"] = _te + out["mom_time_end_hm"] = _te + out["mom_time_end"] = _te + + for eng, envk in ( + ("sl_pct", "US_MOMENTUM_STOP_LOSS_PCT"), + ("tp_pct", "US_MOMENTUM_TAKE_PROFIT_PCT"), + ("tp_max_pct", "US_MOMENTUM_TP_MAX_PCT"), + ("shoulder_min_high", "US_MOMENTUM_SHOULDER_MIN_HIGH_PCT"), + ("shoulder_cut_pct", "US_MOMENTUM_SHOULDER_CUT_PCT"), + ("trail_pct", "US_MOMENTUM_TRAIL_PCT"), + ("trail_arm_pct", "US_MOMENTUM_TRAIL_ARM_PCT"), + ): + r = _pct_ratio_from_env(envk) + if r is not None: + out[eng] = r + + cd = get_env_int("US_MOMENTUM_COOLDOWN_SEC", 0) + if cd > 0: + out["cooldown_min"] = cd / 60.0 + + rt = get_env_from_db("US_MOMENTUM_RATCHET_TIERS", "") + if rt not in (None, "", "None"): + out["ratchet_tiers"] = str(rt).strip() + + mp = get_env_float("US_MOMENTUM_MIN_PROFIT_PCT", -1.0) + if mp >= 0: + # UI는 % 숫자(0.2)로 저장하는 경우 많음 → 엔진은 그대로 쓰거나 소수 + out["min_margin"] = mp / 100.0 if mp >= 0.5 else mp + + for eng, envk, default in ( + ("use_defense_filters", "US_MOMENTUM_USE_DEFENSE_FILTERS", True), + ("use_high_chase_filter", "US_MOMENTUM_USE_HIGH_CHASE_FILTER", False), + ("use_daily_range_filter", "US_MOMENTUM_USE_DAILY_RANGE_FILTER", False), + ("use_ema_filter", "US_MOMENTUM_USE_EMA_FILTER", True), + ("use_rsi_max_filter", "US_MOMENTUM_USE_RSI_MAX_FILTER", False), + ("pattern_breakout", "US_MOMENTUM_PATTERN_BREAKOUT", True), + ("pattern_pullback", "US_MOMENTUM_PATTERN_PULLBACK", True), + ): + raw = get_env_from_db(envk, "") + if raw not in (None, "", "None"): + out[eng] = get_env_bool(envk, default) + + # 해외 고정 + out["_orderbook_filter_enabled"] = False + out["_program_filter_enabled"] = False + # HTS SCAN 없음 — skip_hts 숏컷(무조건 시그널) 금지. 추격 패턴은 hts_logic US 분기. + out["skip_hts_scan_dupes"] = True + out["trigger_e_confirm"] = False + out["use_rsi_filter"] = True # V4: RSI 하한 적용 (US 추격 경로) + out["market"] = "US" + out["_session_wrap_midnight"] = True + # 국내 min_price(천원대) 잔존 시 USD 종목 전부 탈락-최소가격 + out["min_price"] = float(get_env_float("US_MOMENTUM_MIN_PRICE", 1.0) or 1.0) + # 고정 유니버스 — 손절액으로 슬롯 재계산하지 않음 (DB SLOT_MONEY 고정) + out["max_loss_krw"] = 0.0 + # EOD: 국내 MOMENTUM_EOD_HM(15:20) 잔존 금지 — US 전용만 + out["eod_enabled"] = bool(get_env_bool("US_MOMENTUM_EOD_ENABLED", False)) + _eod = str(get_env_from_db("US_MOMENTUM_EOD_HM", "05:00") or "05:00").strip() or "05:00" + # 잘못 저장된 국장대(10:00~16:59)면 해외 기본 05:00 으로 + try: + _eh = int(_eod.replace(":", "")[:4]) if ":" in _eod else int(float(_eod)) + except (TypeError, ValueError): + _eh = 500 + if 1000 <= _eh <= 1659: + _eod = "05:00" + out["eod_hm"] = _eod + out["force_eod_exit"] = bool(out["eod_enabled"]) + return out diff --git a/kis_trader/engine/us_momentum_env_keys.py b/kis_trader/engine/us_momentum_env_keys.py new file mode 100644 index 0000000..eadb327 --- /dev/null +++ b/kis_trader/engine/us_momentum_env_keys.py @@ -0,0 +1,296 @@ +""" +kis_trader/engine/us_momentum_env_keys.py — 해외 모멘텀(US_MOMENTUM) env 키 +========================================================================== +config_us_momentum · UsMomentumStrategy · 웹 · Optuna apply 공통. +국내 MOMENTUM_* / config_momentum 과 분리 (오염 금지). +""" +from __future__ import annotations + +from typing import Any, Dict, Optional + +# ENV_CONFIG_KEYS / classify → config_us_momentum 과 동기화 +US_MOMENTUM_CONFIG_KEYS = frozenset({ + "STRATEGY_US_MOMENTUM_ENABLED", + "US_MOMENTUM_TIME_START", + "US_MOMENTUM_TIME_END", + "US_MOMENTUM_SESSION_START", + "US_MOMENTUM_BUY_WAIT_LOG_SEC", + "US_MOMENTUM_SELL_TIME_END", + "US_MOMENTUM_DRY_RUN", + "US_MOMENTUM_MAX_STOCKS", + "US_MOMENTUM_SLOT_MONEY", + "US_MOMENTUM_FEE_RATE", + "US_MOMENTUM_SELL_TAX", + "US_MOMENTUM_FX_FEE_RATE", + "US_MOMENTUM_MIN_PRICE", + "US_MOMENTUM_LIVE_MIN_CANDLES", + "US_MOMENTUM_EOD_ENABLED", + "US_MOMENTUM_EOD_HM", + "US_MOMENTUM_MAX_BUY_AMOUNT", + "US_MOMENTUM_TOTAL_BUDGET", + "US_MOMENTUM_MAX_ORDER_QTY", + "US_MOMENTUM_FORCE_BUY_QTY", + "US_MOMENTUM_RELOAD_INTERVAL_SEC", + "US_MOMENTUM_PSAMOUNT_CACHE_SEC", + "US_MOMENTUM_TRADES_CACHE_SEC", + "US_MOMENTUM_LOOP_SLEEP_MIN", + "US_MOMENTUM_LOOP_SLEEP_MAX", + "US_MOMENTUM_SCAN_REJECT_SLEEP_MIN", + "US_MOMENTUM_SCAN_REJECT_SLEEP_MAX", + "US_MOMENTUM_RSI_MIN", + "US_MOMENTUM_RSI_MAX", + "US_MOMENTUM_VOL_MULT", + "US_MOMENTUM_VOL_WIN", + "US_MOMENTUM_MAX_FROM_OPEN_PCT", + "US_MOMENTUM_MIN_FROM_OPEN_PCT", + "US_MOMENTUM_STOP_LOSS_PCT", + "US_MOMENTUM_TAKE_PROFIT_PCT", + "US_MOMENTUM_TP_MAX_PCT", + "US_MOMENTUM_SHOULDER_MIN_HIGH_PCT", + "US_MOMENTUM_SHOULDER_CUT_PCT", + "US_MOMENTUM_RATCHET_TIERS", + "US_MOMENTUM_TRAIL_PCT", + "US_MOMENTUM_TRAIL_ARM_PCT", + "US_MOMENTUM_MAX_HOLD_BARS", + "US_MOMENTUM_MAX_DAILY", + "US_MOMENTUM_MAX_DAILY_CHG", + "US_MOMENTUM_HIGH_CHASE_THR", + "US_MOMENTUM_USE_DEFENSE_FILTERS", + "US_MOMENTUM_USE_HIGH_CHASE_FILTER", + "US_MOMENTUM_USE_DAILY_RANGE_FILTER", + "US_MOMENTUM_USE_EMA_FILTER", + "US_MOMENTUM_EMA_FAST_PERIOD", + "US_MOMENTUM_EMA_SLOW_PERIOD", + "US_MOMENTUM_USE_RSI_MAX_FILTER", + "US_MOMENTUM_PATTERN_BREAKOUT", + "US_MOMENTUM_PATTERN_PULLBACK", + "US_MOMENTUM_CHASE_LOOKBACK_MIN", + "US_MOMENTUM_PULLBACK_LOOKBACK_MIN", + "US_MOMENTUM_PULLBACK_MIN_PCT", + "US_MOMENTUM_PULLBACK_MAX_PCT", + "US_MOMENTUM_SETUP_VOL_MAX_MULT", + "US_MOMENTUM_SETUP_BEAR_BARS_MIN", + "US_MOMENTUM_MAX_LOSS_PER_TRADE", + "US_MOMENTUM_MIN_PROFIT_PCT", + "US_MOMENTUM_COOLDOWN_SEC", + "US_MOMENTUM_DAILY_PROFIT_TARGET_ENABLED", + "US_MOMENTUM_DAILY_PROFIT_TRAIL_TIERS", + "US_MOMENTUM_DAILY_PROFIT_MODE", + "KIS_US_MOMENTUM_MM_CHANNEL", +}) + + +def _env_bool_10(v: Any) -> str: + if v is True or str(v).strip().lower() in ("1", "true", "t", "y", "yes", "on"): + return "1" + return "0" + + +def params_to_us_momentum_env_patch(p: Dict[str, Any]) -> Dict[str, str]: + """파라서치·웹 merged(UI %) → US_MOMENTUM_* 패치 (호가/프로그램 제외).""" + if not p: + return {} + patch: Dict[str, str] = {} + + def gi(key: str, default: int = 0) -> int: + v = p.get(key) + return int(float(v)) if v not in (None, "") else default + + def gf(key: str, default: float = 0.0) -> float: + v = p.get(key) + return float(v) if v not in (None, "") else default + + def _set(k: str, v: Any) -> None: + if v is not None and v != "": + patch[k] = str(v) + + if "mom_rsi_min" in p: + _set("US_MOMENTUM_RSI_MIN", gi("mom_rsi_min", 50)) + if "mom_rsi_max" in p: + _set("US_MOMENTUM_RSI_MAX", gi("mom_rsi_max", 80)) + if "mom_vol_mult" in p: + _set("US_MOMENTUM_VOL_MULT", gf("mom_vol_mult", 1.5)) + if "mom_vol_win" in p: + _set("US_MOMENTUM_VOL_WIN", gi("mom_vol_win", 5)) + + # TIME_* — session_env_patch 기본 OFF. 여기선 명시 키만(웹 저장용). + if "time_start" in p or "time_start_hm" in p: + ts = p.get("time_start_hm", p.get("time_start")) + if ts not in (None, ""): + _set("US_MOMENTUM_TIME_START", int(float(ts))) + if "time_end" in p or "time_end_hm" in p or "mom_time_end_hm" in p: + te = p.get("mom_time_end_hm", p.get("time_end_hm", p.get("time_end"))) + if te not in (None, ""): + _set("US_MOMENTUM_TIME_END", int(float(te))) + if "sell_time_end" in p and p.get("sell_time_end") not in (None, ""): + _set("US_MOMENTUM_SELL_TIME_END", int(float(p["sell_time_end"]))) + + if "sl_pct" in p: + _set("US_MOMENTUM_STOP_LOSS_PCT", abs(gf("sl_pct", 1.5)) / 100.0) + if "tp_pct" in p: + _set("US_MOMENTUM_TAKE_PROFIT_PCT", abs(gf("tp_pct", 2.5)) / 100.0) + if "tp_max_pct" in p and p.get("tp_max_pct") not in (None, ""): + _set("US_MOMENTUM_TP_MAX_PCT", abs(float(p["tp_max_pct"])) / 100.0) + + if "cooldown_min" in p and p.get("cooldown_min") is not None: + _set("US_MOMENTUM_COOLDOWN_SEC", int(float(p["cooldown_min"]) * 60)) + if "max_daily" in p: + _set("US_MOMENTUM_MAX_DAILY", gi("max_daily", 5)) + + sm = p.get("slot_money") + if sm not in (None, ""): + sms = str(int(float(sm))) + patch["US_MOMENTUM_SLOT_MONEY"] = sms + patch["US_MOMENTUM_MAX_BUY_AMOUNT"] = sms + if "slots" in p or "max_stocks" in p: + ms = p.get("max_stocks", p.get("slots")) + if ms not in (None, ""): + _set("US_MOMENTUM_MAX_STOCKS", int(float(ms))) + if "total_budget_krw" in p and p.get("total_budget_krw") not in (None, ""): + _set("US_MOMENTUM_TOTAL_BUDGET", int(float(p["total_budget_krw"]))) + + if "high_chase_thr" in p and p.get("high_chase_thr") is not None: + hc = float(p["high_chase_thr"]) + _set("US_MOMENTUM_HIGH_CHASE_THR", hc if 0 < hc <= 1 else hc / 100.0) + if "max_daily_chg" in p: + _set("US_MOMENTUM_MAX_DAILY_CHG", gf("max_daily_chg", 20.0)) + if "min_price" in p: + _set("US_MOMENTUM_MIN_PRICE", gf("min_price", 1.0)) + if "max_loss_krw" in p and p.get("max_loss_krw") not in (None, ""): + _set("US_MOMENTUM_MAX_LOSS_PER_TRADE", int(float(p["max_loss_krw"]))) + if "min_margin" in p: + _set("US_MOMENTUM_MIN_PROFIT_PCT", gf("min_margin", 0.2)) + + if "mom_max_from_open_pct" in p and p.get("mom_max_from_open_pct") not in (None, ""): + _set("US_MOMENTUM_MAX_FROM_OPEN_PCT", float(p["mom_max_from_open_pct"])) + if "mom_min_from_open_pct" in p and p.get("mom_min_from_open_pct") not in (None, ""): + _set("US_MOMENTUM_MIN_FROM_OPEN_PCT", float(p["mom_min_from_open_pct"])) + + if "shoulder_min_high" in p and p.get("shoulder_min_high") not in (None, ""): + _set("US_MOMENTUM_SHOULDER_MIN_HIGH_PCT", abs(float(p["shoulder_min_high"])) / 100.0) + if "shoulder_cut_pct" in p and p.get("shoulder_cut_pct") not in (None, ""): + _set("US_MOMENTUM_SHOULDER_CUT_PCT", abs(float(p["shoulder_cut_pct"])) / 100.0) + + has_trail_pct = "trail_pct" in p and p.get("trail_pct") not in (None, "") + has_trail_arm = "trail_arm_pct" in p and p.get("trail_arm_pct") not in (None, "") + has_legacy = ( + ("trail_trigger" in p and p.get("trail_trigger") not in (None, "")) + or ("trail_stop" in p and p.get("trail_stop") not in (None, "")) + ) + if has_trail_pct: + _set("US_MOMENTUM_TRAIL_PCT", abs(float(p["trail_pct"])) / 100.0) + elif has_legacy and not has_trail_arm: + patch["US_MOMENTUM_TRAIL_PCT"] = "0" + if has_trail_arm: + _set("US_MOMENTUM_TRAIL_ARM_PCT", abs(float(p["trail_arm_pct"])) / 100.0) + elif has_legacy and not has_trail_pct: + patch["US_MOMENTUM_TRAIL_ARM_PCT"] = "0" + + if "ratchet_tiers" in p: + patch["US_MOMENTUM_RATCHET_TIERS"] = str(p.get("ratchet_tiers") or "").strip() + if "max_hold_bars" in p and p.get("max_hold_bars") not in (None, ""): + _set("US_MOMENTUM_MAX_HOLD_BARS", int(float(p["max_hold_bars"]))) + + for js_k, env_k in ( + ("use_defense_filters", "US_MOMENTUM_USE_DEFENSE_FILTERS"), + ("use_high_chase_filter", "US_MOMENTUM_USE_HIGH_CHASE_FILTER"), + ("use_daily_range_filter", "US_MOMENTUM_USE_DAILY_RANGE_FILTER"), + ("use_ema_filter", "US_MOMENTUM_USE_EMA_FILTER"), + ("use_rsi_max_filter", "US_MOMENTUM_USE_RSI_MAX_FILTER"), + ("pattern_breakout", "US_MOMENTUM_PATTERN_BREAKOUT"), + ("pattern_pullback", "US_MOMENTUM_PATTERN_PULLBACK"), + ): + if js_k in p: + patch[env_k] = _env_bool_10(p.get(js_k)) + + if "chase_lookback_min" in p and p.get("chase_lookback_min") not in (None, ""): + _set("US_MOMENTUM_CHASE_LOOKBACK_MIN", int(float(p["chase_lookback_min"]))) + if "pullback_lookback_min" in p and p.get("pullback_lookback_min") not in (None, ""): + _set("US_MOMENTUM_PULLBACK_LOOKBACK_MIN", int(float(p["pullback_lookback_min"]))) + if "pullback_min_pct" in p and p.get("pullback_min_pct") not in (None, ""): + _set("US_MOMENTUM_PULLBACK_MIN_PCT", float(p["pullback_min_pct"])) + if "pullback_max_pct" in p and p.get("pullback_max_pct") not in (None, ""): + _set("US_MOMENTUM_PULLBACK_MAX_PCT", float(p["pullback_max_pct"])) + if "setup_vol_max_mult" in p and p.get("setup_vol_max_mult") not in (None, ""): + _set("US_MOMENTUM_SETUP_VOL_MAX_MULT", float(p["setup_vol_max_mult"])) + if "setup_bear_bars_min" in p and p.get("setup_bear_bars_min") not in (None, ""): + _set("US_MOMENTUM_SETUP_BEAR_BARS_MIN", int(float(p["setup_bear_bars_min"]))) + if "ema_fast_period" in p and p.get("ema_fast_period") not in (None, ""): + _set("US_MOMENTUM_EMA_FAST_PERIOD", int(float(p["ema_fast_period"]))) + if "ema_slow_period" in p and p.get("ema_slow_period") not in (None, ""): + _set("US_MOMENTUM_EMA_SLOW_PERIOD", int(float(p["ema_slow_period"]))) + + if "eod_enabled" in p: + patch["US_MOMENTUM_EOD_ENABLED"] = _env_bool_10(p.get("eod_enabled")) + if "eod_hm" in p and p.get("eod_hm") not in (None, ""): + eod_s = str(p["eod_hm"]).strip() + if eod_s and ":" not in eod_s and len(eod_s) == 4 and eod_s.isdigit(): + eod_s = f"{eod_s[:2]}:{eod_s[2:]}" + patch["US_MOMENTUM_EOD_HM"] = eod_s + + if "daily_profit_enabled" in p: + patch["US_MOMENTUM_DAILY_PROFIT_TARGET_ENABLED"] = ( + "true" if _env_bool_10(p.get("daily_profit_enabled")) == "1" else "false" + ) + if "daily_trail_tiers" in p: + tiers = str(p.get("daily_trail_tiers") or "").strip() + patch["US_MOMENTUM_DAILY_PROFIT_TRAIL_TIERS"] = "" if tiers.lower() == "off" else tiers + if tiers and tiers.lower() != "off": + patch["US_MOMENTUM_DAILY_PROFIT_MODE"] = ( + str(p.get("daily_profit_mode") or "trailing").strip().lower() or "trailing" + ) + elif "daily_profit_mode" in p: + patch["US_MOMENTUM_DAILY_PROFIT_MODE"] = ( + str(p.get("daily_profit_mode") or "trailing").strip().lower() or "trailing" + ) + + # 수수료·SEC·환전 — UI% 이면 /100, 이미 비율(≤1)이면 그대로 + def _ratio_from_ui_or_rate(key: str) -> Optional[float]: + if key not in p or p.get(key) in (None, ""): + return None + try: + x = abs(float(p[key])) + except (TypeError, ValueError): + return None + if x > 1.0: + return x / 100.0 + return x + + for ui_key, env_key in ( + ("fee_rate", "US_MOMENTUM_FEE_RATE"), + ("sell_tax", "US_MOMENTUM_SELL_TAX"), + ("fx_fee_rate", "US_MOMENTUM_FX_FEE_RATE"), + ): + r = _ratio_from_ui_or_rate(ui_key) + if r is not None: + _set(env_key, r) + + return patch + + +# 한투 미국주식 온라인 기준 기본값 (비율). DB 비어 있을 때 코드 폴백. +# 수수료 0.25% 편도 · SEC Fee 매도 0.00206% · 환전 스프레드 편도 0.05%(우대 95%≈1%×5%) +US_MOMENTUM_FEE_RATE_DEFAULT = 0.0025 +US_MOMENTUM_SELL_TAX_DEFAULT = 0.0000206 +US_MOMENTUM_FX_FEE_RATE_DEFAULT = 0.0005 + + +def us_momentum_trading_cost_rates() -> Dict[str, float]: + """실매·백테·Optuna 공통 — (수수료, SEC/매도세, 환전편도) 비율.""" + from kis_trader.utils.env import get_env_float + + fee = float(get_env_float("US_MOMENTUM_FEE_RATE", US_MOMENTUM_FEE_RATE_DEFAULT)) + tax = float(get_env_float("US_MOMENTUM_SELL_TAX", US_MOMENTUM_SELL_TAX_DEFAULT)) + fx = float(get_env_float("US_MOMENTUM_FX_FEE_RATE", US_MOMENTUM_FX_FEE_RATE_DEFAULT)) + # 실수로 % 숫자(0.25)로 저장된 경우 → 비율로 정규화 + if fee > 1.0: + fee = fee / 100.0 + if tax > 1.0: + tax = tax / 100.0 + if fx > 1.0: + fx = fx / 100.0 + return { + "fee_rate": max(0.0, fee), + "sell_tax": max(0.0, tax), + "fx_fee_rate": max(0.0, fx), + } diff --git a/kis_trader/engine/whipsaw_filter.py b/kis_trader/engine/whipsaw_filter.py index 17f8025..d55edda 100644 --- a/kis_trader/engine/whipsaw_filter.py +++ b/kis_trader/engine/whipsaw_filter.py @@ -394,6 +394,55 @@ def eval_whipsaw_ohlc_fallback( return (None, "") +def merge_whipsaw_cfg_from_params( + strategy: str, + params: Optional[Dict[str, Any]] = None, +) -> Dict[str, Any]: + """env 기본 + 백테/Optuna trial params 오버레이. + + 콤보 키 (엔진·TPE 공통): + whipsaw_enabled, whipsaw_subbar_sec, whipsaw_lookback_sec, + whipsaw_dip_pct, whipsaw_recovery_tol_pct, whipsaw_min_subbars + """ + cfg = dict(load_whipsaw_params(strategy)) + if not params: + return cfg + + def _has(k: str) -> bool: + return k in params and params.get(k) is not None and str(params.get(k)).strip() != "" + + if _has("whipsaw_enabled"): + cfg["enabled"] = str(params.get("whipsaw_enabled")).strip().lower() in ( + "1", "true", "t", "y", "yes", "on", + ) + if _has("whipsaw_subbar_sec"): + try: + cfg["subbar_sec"] = max(5, int(float(params.get("whipsaw_subbar_sec")))) + except (TypeError, ValueError): + pass + if _has("whipsaw_lookback_sec"): + try: + cfg["lookback_sec"] = max(15, int(float(params.get("whipsaw_lookback_sec")))) + except (TypeError, ValueError): + pass + if _has("whipsaw_dip_pct"): + try: + cfg["dip_pct"] = abs(float(params.get("whipsaw_dip_pct"))) + except (TypeError, ValueError): + pass + if _has("whipsaw_recovery_tol_pct"): + try: + cfg["recovery_tol_pct"] = abs(float(params.get("whipsaw_recovery_tol_pct"))) + except (TypeError, ValueError): + pass + if _has("whipsaw_min_subbars"): + try: + cfg["min_subbars"] = max(1, int(float(params.get("whipsaw_min_subbars")))) + except (TypeError, ValueError): + pass + return cfg + + def whipsaw_reject_for_signal( params: Dict[str, Any], strategy: str, @@ -411,8 +460,9 @@ def whipsaw_reject_for_signal( _whipsaw_ticks — 백테 틱 (포트폴리오 주입) _whipsaw_ws — 실매 WSManager (전략 check_buy 가 주입) _whipsaw_code — 실매 종목코드 + whipsaw_* — Optuna/백테 trial 오버레이 (merge_whipsaw_cfg_from_params) """ - cfg = load_whipsaw_params(strategy) + cfg = merge_whipsaw_cfg_from_params(strategy, params) if not cfg.get("enabled", True): return (None, "") @@ -453,6 +503,22 @@ def whipsaw_reject_for_signal( params=cfg, ) + # 틱 청산/진입 모드: 봉 OHLC로 휩쏘 근사하지 않음 (숫자 변조·정합 깨짐 방지) + _tick_mode = False + try: + for _k in ("backtest_use_tick_exit", "backtest_use_tick_db"): + if params.get(_k) is not None: + _s = str(params.get(_k)).strip().lower() + if _s in ("1", "true", "t", "y", "yes", "on"): + _tick_mode = True + break + if _s in ("0", "false", "f", "n", "no", "off"): + _tick_mode = False + except Exception: + _tick_mode = False + if _tick_mode: + return (None, "") + if whipsaw_backtest_ohlc_fallback(): return eval_whipsaw_ohlc_fallback( signal_bar, cl, diff --git a/kis_trader/execution/kis_client.py b/kis_trader/execution/kis_client.py index 064c29b..f272ba7 100644 --- a/kis_trader/execution/kis_client.py +++ b/kis_trader/execution/kis_client.py @@ -220,6 +220,33 @@ class KISClient(SafeRequest): j = r.json() return j.get("output") if j.get("rt_cd") == "0" else None + def inquire_stock_name(self, code: str) -> Optional[str]: + """국내 종목명 [주식기본조회 CTPF1002R]. 약명(prdt_abrv_name) 우선.""" + code = str(code or "").strip() + if not code: + return None + try: + r = self._get( + "/uapi/domestic-stock/v1/quotations/search-stock-info", + "CTPF1002R", + {"PRDT_TYPE_CD": "300", "PDNO": code}, + ) + if r.status_code != 200: + return None + j = r.json() + if j.get("rt_cd") != "0": + return None + out = j.get("output") or {} + if isinstance(out, list): + out = out[0] if out else {} + name = ( + str(out.get("prdt_abrv_name") or out.get("prdt_name") or "").strip() + ) + return name or None + except Exception as e: + logger.debug("종목명 조회 실패(%s): %s", code, e) + return None + def inquire_multi_price(self, codes: List[str]) -> Dict[str, dict]: """ 관심종목(멀티종목) 시세조회 [국내주식-205] — FHKST11300006. @@ -765,10 +792,32 @@ class KISClient(SafeRequest): "ORD_QTY": str(qty), "ORD_UNPR": str(price), } try: + from kis_trader.utils.api_reject_log import record_api_reject + r = self._post(path, tr_id, body) if r.status_code != 200: - logger.error("주문 HTTP 에러 side=%s code=%s status=%s", - side, code, r.status_code) + body_snip = (r.text or "")[:200] + http_cd = f"HTTP_{int(r.status_code)}" + if side == "BUY": + self._last_order_msg_cd = http_cd + self._last_order_msg1 = body_snip + else: + self._last_sell_msg_cd = http_cd + self._last_sell_msg1 = body_snip + logger.error( + "주문 HTTP 에러 side=%s code=%s status=%s", + side, code, r.status_code, + ) + record_api_reject( + kind="domestic_order_http", + side=side, + code=str(code or ""), + msg_cd=http_cd, + msg1=body_snip, + http=r.status_code, + path=str(path), + extra={"mock": bool(self.mock)}, + ) return None j = r.json() if j.get("rt_cd") == "0": @@ -797,9 +846,45 @@ class KISClient(SafeRequest): code, j.get("rt_cd"), self._last_sell_msg_cd, self._last_sell_msg1, ) + record_api_reject( + kind="domestic_order_reject", + side=side, + code=str(code or ""), + msg_cd=str( + (self._last_order_msg_cd if side == "BUY" else self._last_sell_msg_cd) + or "" + ), + msg1=str( + (self._last_order_msg1 if side == "BUY" else self._last_sell_msg1) + or "" + ), + rt_cd=str(j.get("rt_cd") or ""), + http=200, + path=str(path), + extra={"mock": bool(self.mock)}, + ) return None except Exception as e: + if side == "BUY": + self._last_order_msg_cd = "EXC" + self._last_order_msg1 = str(e)[:200] + else: + self._last_sell_msg_cd = "EXC" + self._last_sell_msg1 = str(e)[:200] logger.error("주문 예외 side=%s code=%s: %s", side, code, e) + try: + from kis_trader.utils.api_reject_log import record_api_reject + record_api_reject( + kind="domestic_order_exception", + side=side, + code=str(code or ""), + msg_cd="EXC", + msg1=str(e)[:300], + path=str(path), + extra={"mock": bool(self.mock)}, + ) + except Exception: + pass return None def buy_market_order(self, code: str, qty: int) -> Optional[str]: @@ -872,6 +957,323 @@ class KISClient(SafeRequest): code=code, qty=qty, price=0, order_type="01", side="SELL" ) + # ------------------------------------------------------------------ + # 해외주식 시세·주문 (미국 NASD/NYSE/AMEX) + # ※ 매수/매도는 body 가 아니라 헤더 tr_id 로만 구분 (국내 SLL_BUY 와 다름) + # ------------------------------------------------------------------ + @staticmethod + def _ovrs_excg_cd(exchange: Optional[str] = None) -> str: + """주문용 거래소 코드 (NASD/NYSE/AMEX). 시세 EXCD(NAS) 와 다름.""" + raw = ( + exchange + or get_env_from_db("KIS_OVRS_DEFAULT_EXCG", "NASD") + or "NASD" + ).strip().upper() + aliases = { + "NAS": "NASD", "NASDAQ": "NASD", "NASD": "NASD", + "NYS": "NYSE", "NYSE": "NYSE", + "AMS": "AMEX", "AMEX": "AMEX", + } + return aliases.get(raw, raw or "NASD") + + @staticmethod + def _ovrs_price_excd(exchange: Optional[str] = None) -> str: + """시세용 EXCD (NAS/NYS/AMS).""" + order_cd = KISClient._ovrs_excg_cd(exchange) + return {"NASD": "NAS", "NYSE": "NYS", "AMEX": "AMS"}.get(order_cd, "NAS") + + def inquire_overseas_price( + self, + symbol: str, + *, + exchange: Optional[str] = None, + ) -> Optional[dict]: + """해외주식 현재가 [해외주식-029] HHDFS00000300.""" + symb = str(symbol or "").strip().upper() + if not symb: + return None + excd = self._ovrs_price_excd(exchange) + try: + r = self._get( + "/uapi/overseas-price/v1/quotations/price", + "HHDFS00000300", + {"AUTH": "", "EXCD": excd, "SYMB": symb}, + ) + if r.status_code != 200: + logger.warning("해외시세 HTTP %s %s", r.status_code, symb) + return None + j = r.json() + if j.get("rt_cd") != "0": + logger.warning( + "해외시세 실패 %s rt_cd=%s msg=%s", + symb, j.get("rt_cd"), j.get("msg1"), + ) + return None + return j.get("output") or {} + except Exception as e: + logger.warning("해외시세 예외 %s: %s", symb, e) + return None + + def _overseas_order_tr_id(self, side: str, exchange: str) -> str: + """미국 매수 TTTT1002U / 매도 TTTT1006U. 모의는 앞 T→V.""" + side_u = (side or "").upper() + excg = self._ovrs_excg_cd(exchange) + if excg not in ("NASD", "NYSE", "AMEX"): + raise ValueError(f"unsupported overseas exchange for US order: {excg}") + if side_u == "BUY": + real_tr = get_env_from_db("KIS_OVRS_US_BUY_TR_ID", "TTTT1002U") or "TTTT1002U" + elif side_u == "SELL": + real_tr = get_env_from_db("KIS_OVRS_US_SELL_TR_ID", "TTTT1006U") or "TTTT1006U" + else: + raise ValueError(f"side must be BUY/SELL, got {side}") + real_tr = str(real_tr).strip().upper() + if self.mock: + # 공식 샘플: demo 시 'V' + tr_id[1:] (TTTT… → VTTT…) + return "V" + real_tr[1:] + return real_tr + + def overseas_order( + self, + *, + symbol: str, + qty: int, + price: float, + side: str, + exchange: Optional[str] = None, + ord_dvsn: Optional[str] = None, + ) -> Optional[str]: + """ + 해외주식 주문 [v1_해외주식-001]. 성공 시 ODNO, 실패 시 None. + + 모의(VTTT*): ORD_DVSN=00 지정가만 가능. price>0 필수. + """ + symb = str(symbol or "").strip().upper() + qty_i = int(qty or 0) + if not symb or qty_i <= 0: + return None + excg = self._ovrs_excg_cd(exchange) + side_u = (side or "").upper() + if ord_dvsn is None or str(ord_dvsn).strip() == "": + ord_dvsn = get_env_from_db("KIS_OVRS_ORD_DVSN", "00") or "00" + ord_dvsn = str(ord_dvsn).strip() + px = float(price or 0) + if self.mock and (ord_dvsn != "00" or px <= 0): + logger.error( + "해외모의주문은 지정가(00)+가격>0 필수 side=%s %s", + side_u, symb, + ) + return None + px_decimals = int(get_env_int("KIS_OVRS_PRICE_DECIMALS", 2)) + px_str = f"{px:.{px_decimals}f}" + try: + tr_id = self._overseas_order_tr_id(side_u, excg) + except ValueError as e: + logger.error("해외주문 tr_id: %s", e) + return None + path = get_env_from_db( + "KIS_OVRS_ORDER_PATH", + "/uapi/overseas-stock/v1/trading/order", + ) or "/uapi/overseas-stock/v1/trading/order" + # 매도만 SLL_TYPE=00 (공식 샘플). 매수는 공란. + sll_type = "00" if side_u == "SELL" else "" + body = { + "CANO": self.account_no, + "ACNT_PRDT_CD": self.account_code, + "OVRS_EXCG_CD": excg, + "PDNO": symb, + "ORD_QTY": str(qty_i), + "OVRS_ORD_UNPR": px_str, + "CTAC_TLNO": "", + "MGCO_APTM_ODNO": "", + "SLL_TYPE": sll_type, + "ORD_SVR_DVSN_CD": get_env_from_db("KIS_OVRS_ORD_SVR_DVSN_CD", "0") or "0", + "ORD_DVSN": ord_dvsn, + } + try: + from kis_trader.utils.api_reject_log import record_api_reject + + r = self._post(path, tr_id, body) + if r.status_code != 200: + body_snip = (r.text or "")[:200] + http_cd = f"HTTP_{int(r.status_code)}" + if side_u == "BUY": + self._last_order_msg_cd = http_cd + self._last_order_msg1 = body_snip + else: + self._last_sell_msg_cd = http_cd + self._last_sell_msg1 = body_snip + logger.error( + "해외주문 HTTP side=%s %s status=%s body=%s", + side_u, symb, r.status_code, body_snip, + ) + record_api_reject( + kind="overseas_order_http", + side=side_u, + code=symb, + msg_cd=http_cd, + msg1=body_snip, + http=r.status_code, + path=str(path), + extra={"tr_id": tr_id, "mock": bool(self.mock)}, + ) + return None + j = r.json() + if j.get("rt_cd") == "0": + if side_u == "BUY": + self._last_order_msg_cd = None + self._last_order_msg1 = None + else: + self._last_sell_msg_cd = None + self._last_sell_msg1 = None + out = j.get("output") or {} + ord_no = str(out.get("ODNO") or out.get("odno") or "").strip() + logger.info( + "✅ 해외주문 접수 side=%s %s qty=%s @%s excg=%s tr=%s odno=%s", + side_u, symb, qty_i, px_str, excg, tr_id, ord_no, + ) + return ord_no or None + msg_cd = j.get("msg_cd", "") + msg1 = str(j.get("msg1", "") or "") + if side_u == "BUY": + self._last_order_msg_cd = msg_cd + self._last_order_msg1 = msg1 + else: + self._last_sell_msg_cd = msg_cd + self._last_sell_msg1 = msg1 + logger.error( + "[해외주문실패] side=%s %s rt_cd=%s msg_cd=%s msg1=%s", + side_u, symb, j.get("rt_cd"), msg_cd, msg1, + ) + record_api_reject( + kind="overseas_order_reject", + side=side_u, + code=symb, + msg_cd=str(msg_cd or ""), + msg1=msg1, + rt_cd=str(j.get("rt_cd") or ""), + http=200, + path=str(path), + extra={"tr_id": tr_id, "mock": bool(self.mock)}, + ) + return None + except Exception as e: + if side_u == "BUY": + self._last_order_msg_cd = "EXC" + self._last_order_msg1 = str(e)[:200] + else: + self._last_sell_msg_cd = "EXC" + self._last_sell_msg1 = str(e)[:200] + logger.error("해외주문 예외 side=%s %s: %s", side_u, symb, e) + try: + from kis_trader.utils.api_reject_log import record_api_reject + record_api_reject( + kind="overseas_order_exception", + side=side_u, + code=symb, + msg_cd="EXC", + msg1=str(e)[:300], + path=str(path), + extra={"mock": bool(self.mock)}, + ) + except Exception: + pass + return None + + def inquire_overseas_psamount( + self, + symbol: str, + price: float, + *, + exchange: Optional[str] = None, + ) -> Dict: + """ + 해외주식 매수가능금액조회 [v1_해외주식-014] (TTTS3007R / VTTS3007R). + + Returns: + dict: ord_psbl_qty, max_ord_psbl_qty, ord_psbl_frcr_amt, exrt, ... + 실패 시 빈 dict. + """ + symb = str(symbol or "").strip().upper() + px = float(price or 0) + if not symb or px <= 0: + return {} + excg = self._ovrs_excg_cd(exchange) + px_decimals = int(get_env_int("KIS_OVRS_PRICE_DECIMALS", 2)) + px_str = f"{px:.{px_decimals}f}" + path = get_env_from_db( + "KIS_OVRS_PSAMOUNT_PATH", + "/uapi/overseas-stock/v1/trading/inquire-psamount", + ) or "/uapi/overseas-stock/v1/trading/inquire-psamount" + tr_id = "VTTS3007R" if self.mock else "TTTS3007R" + params = { + "CANO": self.account_no, + "ACNT_PRDT_CD": self.account_code, + "OVRS_EXCG_CD": excg, + "OVRS_ORD_UNPR": px_str, + "ITEM_CD": symb, + } + try: + r = self._get(path, tr_id, params) + if r.status_code != 200: + logger.warning( + "해외매수가능 HTTP %s %s status=%s", + symb, excg, r.status_code, + ) + return {} + j = r.json() if r is not None else {} + if j.get("rt_cd") != "0": + logger.warning( + "해외매수가능 실패 %s rt_cd=%s msg_cd=%s msg1=%s", + symb, j.get("rt_cd"), j.get("msg_cd"), j.get("msg1"), + ) + return {} + out = j.get("output") or j.get("output1") or {} + if isinstance(out, list): + out = out[0] if out else {} + if not isinstance(out, dict): + return {} + # 수량 필드 정규화 (문자열→int) + def _qi(key: str) -> int: + try: + return int(float(str(out.get(key) or "0").replace(",", "") or 0)) + except (TypeError, ValueError): + return 0 + + out = dict(out) + out["ord_psbl_qty"] = _qi("ord_psbl_qty") + out["max_ord_psbl_qty"] = _qi("max_ord_psbl_qty") + out["ovrs_max_ord_psbl_qty"] = _qi("ovrs_max_ord_psbl_qty") + return out + except Exception as e: + logger.warning("해외매수가능 예외 %s: %s", symb, e) + return {} + + def buy_overseas_limit( + self, + symbol: str, + qty: int, + price: float, + *, + exchange: Optional[str] = None, + ) -> Optional[str]: + """해외 지정가 매수.""" + return self.overseas_order( + symbol=symbol, qty=qty, price=price, side="BUY", exchange=exchange, + ) + + def sell_overseas_limit( + self, + symbol: str, + qty: int, + price: float, + *, + exchange: Optional[str] = None, + ) -> Optional[str]: + """해외 지정가 매도.""" + return self.overseas_order( + symbol=symbol, qty=qty, price=price, side="SELL", exchange=exchange, + ) + # ------------------------------------------------------------------ # 조건검색 (REST — 웹소켓은 공식 지원 안 함. 30초 폴링이 정석) # ------------------------------------------------------------------ @@ -941,33 +1343,139 @@ class KISClient(SafeRequest): def get_order_history_today(self, odno: str = "") -> Optional[dict]: """당일 주문 내역 조회 [국내주식-005 inquire-daily-ccld]. - ``odno`` 지정 시 해당 주문번호만 조회 → 응답 경량화로 장중 혼잡 시 - 모의서버 HTTP 500 회피율을 높인다. (모의가 ODNO 필터를 무시하면 - 기존처럼 전체를 받아 호출부에서 필터하므로 동작은 동일) + TR_ID: 공식 샘플 기준 3개월이내 = 실전 ``TTTC0081R`` / 모의 ``VTTC0081R``. + (레거시 ``*8001R`` 은 모의에서 '내역 없음'/빈맵이 나와 체결 재확인이 깨짐) + + ``odno`` 지정 시 해당 주문번호만 조회. 미지정 시 연속조회(모의 15건/페이지)로 + output1 을 병합해 반환한다. """ - tr_id = "VTTC8001R" if self.mock else "TTTC8001R" + # 공식 OpenAPI 샘플(inquire_daily_ccld) — env 로만 레거시 TR 오버라이드 + default_tr = "VTTC0081R" if self.mock else "TTTC0081R" + tr_id = str( + get_env_from_db("DAILY_CCLD_TR_ID", default_tr) or default_tr + ).strip() or default_tr today = dt.now().strftime("%Y%m%d") + # 모의 1페이지≈15건 — 장중 체결 누락 방지. 과도 연속조회 방지 상한. + max_pages = max(1, int(get_env_int("DAILY_CCLD_MAX_PAGES", 20))) try: - r = self._get( - "/uapi/domestic-stock/v1/trading/inquire-daily-ccld", - tr_id, - { - "CANO": self.account_no, "ACNT_PRDT_CD": self.account_code, - "INQR_STRT_DT": today, "INQR_END_DT": today, - "SLL_BUY_DVSN_CD": "00", "INQR_DVSN": "00", "PDNO": "", - "CCLD_DVSN": "00", "ORD_GNO_BRNO": "", "ODNO": str(odno or ""), - "INQR_DVSN_3": "00", "INQR_DVSN_1": "", - "CTX_AREA_FK100": "", "CTX_AREA_NK100": "", - }, - ) - if r.status_code != 200: + merged_out1: list = [] + last_j: Optional[dict] = None + fk100 = "" + nk100 = "" + tr_cont = "" + for _page in range(max_pages): + r = self._get( + "/uapi/domestic-stock/v1/trading/inquire-daily-ccld", + tr_id, + { + "CANO": self.account_no, + "ACNT_PRDT_CD": self.account_code, + "INQR_STRT_DT": today, + "INQR_END_DT": today, + "SLL_BUY_DVSN_CD": "00", + "INQR_DVSN": "00", + "PDNO": "", + "CCLD_DVSN": "00", + "ORD_GNO_BRNO": "", + "ODNO": str(odno or ""), + "INQR_DVSN_3": "00", + "INQR_DVSN_1": "", + "CTX_AREA_FK100": fk100, + "CTX_AREA_NK100": nk100, + "EXCG_ID_DVSN_CD": str( + get_env_from_db("DAILY_CCLD_EXCG_ID", "KRX") or "KRX" + ), + }, + tr_cont=tr_cont, + ) + if r is None or r.status_code != 200: + if merged_out1 and last_j is not None: + break + return None + j = r.json() + if j.get("rt_cd") != "0": + if merged_out1 and last_j is not None: + break + return None + last_j = j + chunk = j.get("output1") or [] + if isinstance(chunk, dict): + chunk = [chunk] + if isinstance(chunk, list): + merged_out1.extend(chunk) + # ODNO 단건이면 1페이지로 충분 + if odno: + break + hdr_cont = "" + try: + hdr_cont = str(r.headers.get("tr_cont") or "").strip().upper() + except Exception: + hdr_cont = "" + body_fk = str(j.get("ctx_area_fk100") or "").strip() + body_nk = str(j.get("ctx_area_nk100") or "").strip() + if hdr_cont not in ("M", "F") or not body_nk: + break + fk100 = body_fk + nk100 = body_nk + tr_cont = "N" + # 연속조회 간 짧은 간격 (유량 존중) + import time as _t + _t.sleep(max(0.05, float(get_env_float("DAILY_CCLD_PAGE_GAP_SEC", 0.08)))) + if last_j is None: return None - j = r.json() - return j if j.get("rt_cd") == "0" else None + out = dict(last_j) + out["output1"] = merged_out1 + return out except Exception as e: logger.debug("주문 내역 조회 실패: %s", e) return None + def inquire_psbl_order( + self, + code: str = "005930", + *, + price: int = 0, + ord_dvsn: str = "01", + ) -> Optional[Dict]: + """매수가능조회 [국내주식-007] inquire-psbl-order (TTTC8908R / VTTC8908R). + + 주식잔고(inquire-balance) output2 에는 주문가능현금 필드가 없다. + 주문가능현금·미수없는매수금액은 이 API 의 + ``ord_psbl_cash`` / ``nrcvb_buy_amt`` 를 쓴다 (공식 샘플 주석과 동일). + """ + pdno = str(code or "005930").strip() + tr_id = "VTTC8908R" if self.mock else "TTTC8908R" + try: + r = self._get( + "/uapi/domestic-stock/v1/trading/inquire-psbl-order", + tr_id, + { + "CANO": self.account_no, + "ACNT_PRDT_CD": self.account_code, + "PDNO": pdno, + "ORD_UNPR": str(int(price or 0)), + "ORD_DVSN": str(ord_dvsn or "01"), + "CMA_EVLU_AMT_ICLD_YN": str( + get_env_from_db("PSBL_ORDER_CMA_ICLD", "N") or "N" + ), + "OVRS_ICLD_YN": str( + get_env_from_db("PSBL_ORDER_OVRS_ICLD", "N") or "N" + ), + }, + ) + if r is None or r.status_code != 200: + return None + j = r.json() + if j.get("rt_cd") != "0": + return None + out = j.get("output") or j.get("output1") or {} + if isinstance(out, list) and out: + out = out[0] + return out if isinstance(out, dict) else None + except Exception as e: + logger.debug("매수가능조회 실패: %s", e) + return None + @staticmethod def _execution_map_from_history(j: Optional[dict]) -> Dict[str, Dict]: """inquire-daily-ccld 응답 → {odno: {filled_qty, avg_price, code}}.""" diff --git a/kis_trader/execution/order_manager.py b/kis_trader/execution/order_manager.py index 6b1556f..e1ca51d 100644 --- a/kis_trader/execution/order_manager.py +++ b/kis_trader/execution/order_manager.py @@ -34,6 +34,10 @@ kis_trader/execution/order_manager.py — Master Executor **시장가 보강 전에 지정가 취소 → ODNO 재조회**. 취소 실패·체결 미확인이면 시장가 금지 (PENDING). 지정가+시장가 이중체결로 타전략 몫까지 파는 사고 방지 (전 전략 공통). * ``SELL_LIMIT_RECHECK_WAIT_SEC`` (기본 1): 취소 후 지정가 ODNO 재조회 대기. + * ``SELL_LIMIT_CANCEL_FAIL_BALANCE_CONFIRM`` (기본 True): 취소 실패 후 ODNO 미확인이어도 + 브로커 잔고가 0(또는 요청수량만큼 감소)이면 **지정가 매도 체결로 finalize** (유령 금지). + * ``GHOST_PURGE_BLOCK_WHILE_PENDING_SELL`` (기본 True): PENDING 매도 ODNO 있으면 + ghost_purge 대신 체결 재조회·잔고확정 청산. * ``GHOST_PURGE_RECORD_HISTORY`` (기본 True): 유령잔고 삭제 시 trade_history 에 ``ghost_purge`` 기록 (미기록 유령 방지). * ``AccountCashLedger`` — kv_store+메모리 예수금. **기존 qty 우선**, 부족할 때만 @@ -94,6 +98,10 @@ class OrderRequest: # 매도 시 계산 결과 전달 (로그용) buy_price: float = 0.0 profit_pct: float = 0.0 + # 해외(US) — market="US" 또는 exchange 있으면 해외 주문 경로 + market: str = "" # "" | "US" | "KR" + exchange: str = "" # NASD / NYSE / AMEX … + currency: str = "" # "" | "USD" @dataclass @@ -959,7 +967,72 @@ class OrderManager: 브로커 0주인데 로컬만 남은 포지션 정리. DB 삭제(+ 선택적 trade_history) + 전략 holdings.pop 트리거(extra.purge_holdings). 동일 (전략, 종목) 은 GHOST_POSITION_COOLDOWN_SEC 동안 재로그·재API 방지. + + PENDING 매도 ODNO 가 있으면 유령이 아니라 **미확정 매도** 로 본다. + → 체결 재조회 / 잔고확정 finalize (PnL 기록). ghost_purge(0원) 금지. """ + # ── B: PENDING 매도 있으면 유령정리 금지 → 매도 확정 시도 ── + if get_env_bool("GHOST_PURGE_BLOCK_WHILE_PENDING_SELL", True): + try: + pending = self.db.get_pending_sell_order(req.strategy_id, req.code) + except Exception: + pending = None + if pending: + odno = str(pending.get("ord_no") or "").strip() + order_qty = int(pending.get("qty") or req.qty or 0) + wait_sec = float(get_env_int("SELL_LIMIT_RECHECK_WAIT_SEC", 1)) + fill = None + if odno: + try: + fill = self.client.get_execution_by_odno( + odno, code=req.code, wait_sec=wait_sec, + ) + except Exception as e: + logger.debug( + "유령경로 체결재조회 실패 %s ODNO=%s: %s", + req.code, odno, e, + ) + if fill and int(fill.get("filled_qty", 0) or 0) > 0: + fq = int(fill["filled_qty"]) + fp = float(fill["avg_price"]) + logger.info( + "%s✅ [PENDING매도→체결확정] [%s] %s %s ODNO=%s × %d @ %.0f " + "(유령정리 대신 정상 매도마감)%s", + LOG_GREEN, req.strategy_id, req.name, req.code, + odno, fq, fp, LOG_RESET, + ) + return self._finalize_sell_fill( + req, odno, fq, fp, max(order_qty, fq), + ) + # 체결 API 빈손 + 잔고 0 = 이미 팔림 (지정가 체결·취소잔량없음 패턴) + px = float( + (fill or {}).get("avg_price") + or req.price_ref + or req.buy_price + or 0 + ) + qty = order_qty if order_qty > 0 else int(req.qty or 0) + if px > 0 and qty > 0 and odno: + logger.warning( + "%s✅ [PENDING매도→잔고확정청산] [%s] %s %s ODNO=%s × %d @ %.0f " + "(브로커0·체결API미확인 → 유령금지·정상마감)%s", + LOG_GREEN, req.strategy_id, req.name, req.code, + odno, qty, px, LOG_RESET, + ) + return self._finalize_sell_fill(req, odno, qty, px, qty) + logger.warning( + "%s⏸ [유령보류] [%s] %s %s — PENDING 매도 ODNO=%s 존재, " + "체결가 미확보 → ghost_purge 스킵%s", + LOG_YELLOW, req.strategy_id, req.name, req.code, + odno or "-", LOG_RESET, + ) + return OrderResult( + False, + reason="pending_sell_block_ghost", + request=req, + ord_no=odno or None, + ) + key = (req.strategy_id, req.code) cooldown_sec = get_env_int("GHOST_POSITION_COOLDOWN_SEC", 300) now = time.time() @@ -1010,6 +1083,7 @@ class OrderManager: sell_qty: int, filled_so_far: int, wait_sec: float, + limit_price: float = 0.0, ) -> tuple: """ 익절 지정가 미확인·부분체결 후 시장가 보강. @@ -1083,6 +1157,32 @@ class OrderManager: if not cancel_ok: # 취소 실패 = 이미 체결·처리 중 가능 → 시장가 금지 (이중매도 방지) + # A: ODNO 미확인이어도 잔고가 이미 0이면 지정가 체결로 finalize + if get_env_bool("SELL_LIMIT_CANCEL_FAIL_BALANCE_CONFIRM", True): + try: + self.invalidate_holdings_cache() + real_map = self.get_broker_holdings(force=True) + real_qty = int( + (real_map.get(req.code) or {}).get("qty", 0) or 0 + ) + except Exception as e: + real_qty = -1 + logger.debug("취소실패 잔고확인 예외 %s: %s", req.code, e) + if real_qty == 0: + px = refill_px if refill_px > 0 else float( + limit_price or req.price_ref or req.buy_price or 0 + ) + if px > 0: + logger.info( + "%s✅ [익절지정가 잔고확정체결] %s ODNO=%s × %d주 @ %.0f " + "(취소실패·브로커0 → 시장가생략·정상마감)%s", + LOG_GREEN, req.code, ord_no, sell_qty, px, LOG_RESET, + ) + return ( + {"filled_qty": int(sell_qty), "avg_price": px}, + None, + False, + ) logger.warning( "%s⏸ [익절시장가보류] %s ODNO=%s — 취소실패·체결미확정 → PENDING " "(시장가 재시도 금지)%s", @@ -1140,12 +1240,430 @@ class OrderManager: def place(self, req: OrderRequest) -> OrderResult: """전략이 호출하는 유일한 진입점. BUY / SELL 모두 처리.""" side = (req.side or "").upper() + if self._is_overseas_request(req): + if side == "BUY": + return self._place_overseas_buy(req) + if side == "SELL": + return self._place_overseas_sell(req) + return OrderResult(success=False, reason=f"invalid side={req.side}", request=req) if side == "BUY": return self._place_buy(req) if side == "SELL": return self._place_sell(req) return OrderResult(success=False, reason=f"invalid side={req.side}", request=req) + @staticmethod + def _is_overseas_request(req: OrderRequest) -> bool: + mkt = str(req.market or "").strip().upper() + if mkt in ("US", "OVERSEAS", "OVRS"): + return True + if str(req.currency or "").strip().upper() == "USD": + return True + if str(req.exchange or "").strip(): + return True + sid = str(req.strategy_id or "").upper() + return sid.startswith("US_") + + def _overseas_exchange(self, req: OrderRequest) -> str: + ex = str(req.exchange or "").strip().upper() + if ex: + return ex + return str( + get_env_from_db("KIS_OVRS_DEFAULT_EXCG", "NASD") or "NASD" + ).strip().upper() or "NASD" + + def _place_overseas_buy(self, req: OrderRequest) -> OrderResult: + """해외 지정가 매수 → orders/active_trades + MM (접수=FILLED 추적).""" + if req.qty <= 0: + return OrderResult(False, reason="qty<=0", request=req) + px = float(req.price_ref or 0) + if px <= 0: + return OrderResult(False, reason="price<=0", request=req) + code = str(req.code or "").strip().upper() + if not code: + return OrderResult(False, reason="empty_code", request=req) + exchange = self._overseas_exchange(req) + slip = abs(float(get_env_float("KIS_OVRS_BUY_LIMIT_SLIPPAGE_PCT", 0.3) or 0)) + limit_px = px * (1.0 + slip / 100.0) if slip > 0 else px + with self._lock_for(code): + from kis_trader.utils.api_reject_log import ( + mark_order_cooldown, + order_cooldown_remaining, + record_api_reject, + ) + + rem = order_cooldown_remaining( + side="BUY", code=code, strategy_id=str(req.strategy_id or ""), + ) + if rem > 0: + # journal/JSONL 도배 방지 — remain 값은 fingerprint에 넣지 않음 + logger.debug( + "⏳ [해외매수] 쿨다운 스킵 [%s] %s remain=%.0fs", + req.strategy_id, code, rem, + ) + record_api_reject( + kind="overseas_buy_cooldown_skip", + side="BUY", + code=code, + strategy_id=str(req.strategy_id or ""), + msg_cd="COOLDOWN", + msg1="order_api_skipped", + path="order_manager", + extra={"remain_sec": int(rem)}, + ) + return OrderResult( + False, + reason="overseas_buy_fail:cooldown", + request=req, + extra={"cooldown_remain_sec": int(rem)}, + ) + if not hasattr(self.client, "buy_overseas_limit"): + return OrderResult(False, reason="no_overseas_buy", request=req) + ord_no = self.client.buy_overseas_limit( + code, int(req.qty), float(limit_px), exchange=exchange, + ) + if not ord_no: + msg_cd = str(getattr(self.client, "_last_order_msg_cd", "") or "") + msg1 = str(getattr(self.client, "_last_order_msg1", "") or "") + logger.warning( + "⚠️ [해외매수실패] [%s] %s qty=%s msg_cd=%s | %s", + req.strategy_id, code, req.qty, msg_cd or "-", (msg1 or "")[:100], + ) + until = mark_order_cooldown( + side="BUY", + code=code, + strategy_id=str(req.strategy_id or ""), + msg_cd=msg_cd, + msg1=msg1, + http=500 if str(msg_cd).startswith("HTTP_5") else None, + ) + if until: + logger.warning( + "🧊 [해외매수] 영구형 거절 → %.0f초 쿨다운 [%s] %s msg_cd=%s", + max(0.0, until - time.time()), + req.strategy_id, code, msg_cd or "-", + ) + return OrderResult( + False, + reason=f"overseas_buy_fail:{msg_cd or 'reject'}", + request=req, + extra={"msg_cd": msg_cd, "msg1": msg1}, + ) + feats = dict(req.entry_features or {}) + feats["exchange"] = exchange + feats["overseas"] = True + req.entry_features = feats + req.market = "US" + req.currency = "USD" + req.exchange = exchange + self.db.insert_order( + ord_no=str(ord_no), + strategy_id=req.strategy_id, + code=code, + name=req.name or code, + side="BUY", + qty=int(req.qty), + price=float(px), + status="SUBMITTED", + msg1="overseas_limit_accept", + ) + return self._finalize_overseas_buy_fill( + req, str(ord_no), int(req.qty), float(px), int(req.qty), + ) + + def _place_overseas_sell(self, req: OrderRequest) -> OrderResult: + """해외 지정가 매도 → orders + close_trade + MM.""" + if req.qty <= 0: + return OrderResult(False, reason="qty<=0", request=req) + px = float(req.price_ref or 0) + if px <= 0: + return OrderResult(False, reason="price<=0", request=req) + code = str(req.code or "").strip().upper() + if not code: + return OrderResult(False, reason="empty_code", request=req) + exchange = self._overseas_exchange(req) + slip = abs(float(get_env_float("KIS_OVRS_SELL_LIMIT_SLIPPAGE_PCT", 0.3) or 0)) + limit_px = px * (1.0 - slip / 100.0) if slip > 0 else px + if limit_px <= 0: + limit_px = px + with self._lock_for(code): + from kis_trader.utils.api_reject_log import ( + mark_order_cooldown, + order_cooldown_remaining, + record_api_reject, + ) + + rem = order_cooldown_remaining( + side="SELL", code=code, strategy_id=str(req.strategy_id or ""), + ) + if rem > 0: + # journal/JSONL 도배 방지 — remain 값은 fingerprint에 넣지 않음 + logger.debug( + "⏳ [해외매도] 쿨다운 스킵 [%s] %s remain=%.0fs", + req.strategy_id, code, rem, + ) + record_api_reject( + kind="overseas_sell_cooldown_skip", + side="SELL", + code=code, + strategy_id=str(req.strategy_id or ""), + msg_cd="COOLDOWN", + msg1="order_api_skipped", + path="order_manager", + extra={"remain_sec": int(rem)}, + ) + return OrderResult( + False, + reason="overseas_sell_fail:cooldown", + request=req, + extra={"cooldown_remain_sec": int(rem)}, + ) + if not hasattr(self.client, "sell_overseas_limit"): + return OrderResult(False, reason="no_overseas_sell", request=req) + ord_no = self.client.sell_overseas_limit( + code, int(req.qty), float(limit_px), exchange=exchange, + ) + if not ord_no: + # 매도는 client 가 _last_sell_msg_* 에 기록 (매수 _last_order_msg_* 와 분리) + msg_cd = str(getattr(self.client, "_last_sell_msg_cd", "") or "") + msg1 = str(getattr(self.client, "_last_sell_msg1", "") or "") + if not msg_cd and not msg1: + msg_cd = str(getattr(self.client, "_last_order_msg_cd", "") or "") + msg1 = str(getattr(self.client, "_last_order_msg1", "") or "") + logger.warning( + "⚠️ [해외매도실패] [%s] %s qty=%s msg_cd=%s | %s", + req.strategy_id, code, req.qty, msg_cd or "-", (msg1 or "")[:100], + ) + until = mark_order_cooldown( + side="SELL", + code=code, + strategy_id=str(req.strategy_id or ""), + msg_cd=msg_cd, + msg1=msg1, + http=500 if str(msg_cd).startswith("HTTP_5") else None, + ) + if until: + logger.warning( + "🧊 [해외매도] 영구형 거절 → %.0f초 쿨다운 [%s] %s msg_cd=%s", + max(0.0, until - time.time()), + req.strategy_id, code, msg_cd or "-", + ) + return OrderResult( + False, + reason=f"overseas_sell_fail:{msg_cd or 'reject'}", + request=req, + extra={"msg_cd": msg_cd, "msg1": msg1}, + ) + req.market = "US" + req.currency = "USD" + req.exchange = exchange + self.db.insert_order( + ord_no=str(ord_no), + strategy_id=req.strategy_id, + code=code, + name=req.name or code, + side="SELL", + qty=int(req.qty), + price=float(px), + status="SUBMITTED", + msg1="overseas_limit_accept", + ) + return self._finalize_overseas_sell_fill( + req, str(ord_no), int(req.qty), float(px), int(req.qty), + ) + + def _finalize_overseas_buy_fill( + self, + req: OrderRequest, + ord_no: str, + filled_qty: int, + filled_price: float, + order_qty: int, + *, + log_tag: str = "해외매수", + ) -> OrderResult: + """해외 매수 접수=체결 추적 → active_trades + MM($).""" + if filled_qty <= 0 or filled_price <= 0: + return OrderResult(False, ord_no=ord_no, reason="zero_fill", request=req) + self._resolve_order_display_name(req) + status = "FILLED" if filled_qty >= order_qty else "PARTIAL" + self.db.update_order_fill( + ord_no=ord_no, + strategy_id=req.strategy_id, + code=req.code, + filled_qty=filled_qty, + filled_avg_price=filled_price, + status=status, + ) + now_str = dt.now().strftime("%Y-%m-%d %H:%M:%S") + from ..utils.strategy_ids import canonical_strategy_id + feats = dict(req.entry_features or {}) + feats.setdefault("overseas", True) + if req.exchange: + feats["exchange"] = req.exchange + self.db.upsert_trade({ + "code": req.code, + "name": req.name, + "strategy": canonical_strategy_id(req.strategy_id), + "avg_buy_price": filled_price, + "current_price": filled_price, + "stop_price": req.stop_price, + "target_price": req.target_price, + "max_price": filled_price, + "atr_entry": req.atr_entry, + "target_qty": filled_qty, + "current_qty": filled_qty, + "total_invested": filled_price * filled_qty, + "status": "HOLDING", + "buy_date": now_str, + "size_class": req.size_class or "", + "entry_features": feats, + }) + self.invalidate_holdings_cache() + logger.info( + "%s✅ [%s] [%s] %s %s @ $%.4f × %d (ODNO=%s excg=%s)%s", + LOG_GREEN, log_tag, req.strategy_id, req.name, req.code, + filled_price, filled_qty, ord_no, req.exchange or "-", LOG_RESET, + ) + try: + disp = _strategy_display(req.strategy_id) + header = ( + f"🔷 **[{log_tag}:{disp}]** {req.name}({req.code})\n" + f"${filled_price:.4f} × {filled_qty}주 = ${filled_price * filled_qty:.2f}\n" + f"손절 ${req.stop_price:.4f} / 목표 ${req.target_price:.4f}\n" + f"거래소 {req.exchange or '-'} · ODNO={ord_no}" + ) + tail = "" + if self.asset_line_provider is not None: + try: + tail = self.asset_line_provider("BUY", {"currency": "USD"}) or "" + except Exception as _e: + logger.debug("asset_line_provider(BUY overseas) 실패: %s", _e) + msg = header + ("\n\n" + tail if tail else "") + msg_mm_strategy( + msg, + _strategy_mm_channel(req.strategy_id), + jitter=False, + ) + except Exception: + pass + return OrderResult( + True, ord_no=ord_no, + filled_qty=filled_qty, filled_avg_price=filled_price, + request=req, + ) + + def _finalize_overseas_sell_fill( + self, + req: OrderRequest, + ord_no: str, + filled_qty: int, + sell_price: float, + order_qty: int, + ) -> OrderResult: + """해외 매도 접수=체결 → close_trade + MM($).""" + if filled_qty <= 0 or sell_price <= 0: + return OrderResult(False, ord_no=ord_no, reason="zero_sell_fill", request=req) + self._resolve_order_display_name(req) + status = "FILLED" if filled_qty >= order_qty else "PARTIAL" + self.db.update_order_fill( + ord_no=ord_no, + strategy_id=req.strategy_id, + code=req.code, + filled_qty=filled_qty, + filled_avg_price=sell_price, + status=status, + ) + # US_MOMENTUM_* 우선 (수수료·SEC·환전). 없으면 한투 미국 온라인 기본. + try: + from kis_trader.engine.us_momentum_env_keys import us_momentum_trading_cost_rates + _c = us_momentum_trading_cost_rates() + fee_rate = float(_c["fee_rate"]) + tax_rate = float(_c["sell_tax"]) + fx_rate = float(_c["fx_fee_rate"]) + except Exception: + fee_rate = float(get_env_float("US_MOMENTUM_FEE_RATE", 0.0025) or 0.0025) + tax_rate = float(get_env_float("US_MOMENTUM_SELL_TAX", 0.0000206) or 0.0000206) + fx_rate = float(get_env_float("US_MOMENTUM_FX_FEE_RATE", 0.0005) or 0.0005) + if fee_rate > 1.0: + fee_rate = fee_rate / 100.0 + if tax_rate > 1.0: + tax_rate = tax_rate / 100.0 + if fx_rate > 1.0: + fx_rate = fx_rate / 100.0 + buy_price = float(req.buy_price or 0) + realized_pnl = None + if buy_price > 0: + buy_amt = buy_price * filled_qty + sell_amt = sell_price * filled_qty + fees = ( + buy_amt * fee_rate + + sell_amt * (fee_rate + tax_rate) + + (buy_amt + sell_amt) * fx_rate + ) + realized_pnl = (sell_amt - buy_amt) - fees + from ..utils.strategy_ids import canonical_strategy_id + sid = canonical_strategy_id(req.strategy_id) + ok_close = False + try: + ok_close = bool(self.db.close_trade( + code=req.code, + sell_price=float(sell_price), + sell_reason=str(req.reason or "overseas"), + strategy=sid, + realized_pnl_override=realized_pnl, + )) + except Exception as e: + logger.error("overseas close_trade 실패 %s: %s", req.code, e) + self.invalidate_holdings_cache() + color = LOG_GREEN if (realized_pnl is None or realized_pnl >= 0) else LOG_RED + logger.info( + "%s💸 [해외매도] [%s] %s %s × %d @ $%.4f | 사유=%s (ODNO=%s close=%s)%s", + color, req.strategy_id, req.name, req.code, + filled_qty, sell_price, req.reason, ord_no, ok_close, LOG_RESET, + ) + try: + emoji = "🟢" if (realized_pnl is None or realized_pnl >= 0) else "🔴" + pnl_str = f"{realized_pnl:+.2f}$" if realized_pnl is not None else "-" + disp = _strategy_display(req.strategy_id) + header = ( + f"{emoji} **[해외매도:{disp}]** {req.name}({req.code})\n" + f"${sell_price:.4f} × {filled_qty}주\n" + f"{req.reason} · 수익률 {req.profit_pct * 100:+.2f}%\n" + f"실현 {pnl_str} · ODNO={ord_no}" + ) + if self.strategy_pnl_provider is not None: + try: + _sp = self.strategy_pnl_provider(req.strategy_id) + if _sp is not None: + _spnl, _scnt = _sp + header += f"\n📊 {disp} 당일 {_spnl:+.2f} · 청산 {_scnt}건" + except Exception as _e: + logger.debug("strategy_pnl_provider(SELL overseas) 실패: %s", _e) + tail = "" + if self.asset_line_provider is not None: + try: + tail = self.asset_line_provider( + "SELL", + {"realized_pnl": realized_pnl, "currency": "USD"}, + ) or "" + except Exception as _e: + logger.debug("asset_line_provider(SELL overseas) 실패: %s", _e) + msg = header + ("\n\n" + tail if tail else "") + msg_mm_strategy( + msg, + _strategy_mm_channel(req.strategy_id), + jitter=False, + ) + except Exception: + pass + return OrderResult( + True, ord_no=ord_no, + filled_qty=filled_qty, filled_avg_price=sell_price, + request=req, + extra={"close_ok": ok_close, "realized_pnl": realized_pnl}, + ) + # ------------------------------------------------------------------ # 매수 # ------------------------------------------------------------------ @@ -1563,6 +2081,7 @@ class OrderManager: sell_qty=sell_qty, filled_so_far=filled_so_far, wait_sec=wait_sec, + limit_price=float(limit_price or 0), ) if merged and int(merged.get("filled_qty", 0) or 0) > 0: filled_qty = int(merged["filled_qty"]) @@ -1636,6 +2155,11 @@ class OrderManager: def _strategy_mm_channel(strategy_id: str) -> str: """전략별 MM 채널 alias (config_*). 없으면 MATTERMOST_CHANNEL(통합) 폴백.""" sid = (strategy_id or "").upper() + # US_MOMENTUM 은 MOMENTUM prefix 보다 먼저 (startswith("MOMENTUM")에 안 걸리지만 명시) + if sid.startswith("US_MOMENTUM") or sid == "US_MOMENTUM": + return str( + get_env_from_db("KIS_US_MOMENTUM_MM_CHANNEL", "stock") or "stock" + ) if sid.startswith("SCALP"): return str(get_env_from_db("KIS_SCALP_MM_CHANNEL", "scalping") or "scalping") if sid.startswith("SHORT"): diff --git a/kis_trader/execution/orphan_reconcile.py b/kis_trader/execution/orphan_reconcile.py index 8365612..bbe5267 100644 --- a/kis_trader/execution/orphan_reconcile.py +++ b/kis_trader/execution/orphan_reconcile.py @@ -176,6 +176,139 @@ def _broker_qty(broker: Dict[str, Any], code: str) -> int: return 0 +def _orphan_skip_sell_reasons() -> Optional[List[str]]: + """ + 재등록 금지 sell_reason 키워드 목록. + env 비우면 None → 매수 이후 **모든** 청산 히스토리를 재등록 금지로 본다. + 기본: 장마감청산·eod (모의잔고 지연으로 EOD 후 고아복구가 유령 재등록하던 케이스). + """ + raw = str( + get_env_from_db( + "ORPHAN_SKIP_SELL_REASONS", + "장마감청산,eod", + ) + or "" + ).strip() + if not raw: + return None + return [x.strip() for x in raw.replace(";", ",").split(",") if x.strip()] + + +def _find_sell_after_buy( + db, + *, + code: str, + strategy: str, + buy_date: Optional[str], +) -> Optional[Dict[str, Any]]: + """ + 같은 code+strategy 에서 buy_date(없으면 당일) 이후 청산 히스토리 1건. + ORPHAN_SKIP_SELL_REASONS 가 있으면 해당 사유만, 비면 모든 청산. + """ + if not get_env_bool("ORPHAN_SKIP_AFTER_SELL_HISTORY", True): + return None + code = str(code or "").strip() + sid = canonical_strategy_id(str(strategy or "").strip() or "SCALP") + if not code: + return None + reasons = _orphan_skip_sell_reasons() + buy_ts = str(buy_date or "").strip() + day = datetime.datetime.now().strftime("%Y-%m-%d") + try: + if buy_ts: + sql = ( + "SELECT code, strategy, sell_reason, sell_date, buy_date, qty " + "FROM trade_history " + "WHERE code=%s AND strategy=%s AND sell_date IS NOT NULL " + "AND sell_date<>'' AND sell_date>=%s " + "ORDER BY sell_date DESC LIMIT 20" + ) + rows = db.conn.execute(sql, (code, sid, buy_ts)).fetchall() or [] + else: + sql = ( + "SELECT code, strategy, sell_reason, sell_date, buy_date, qty " + "FROM trade_history " + "WHERE code=%s AND strategy=%s AND sell_date LIKE %s " + "ORDER BY sell_date DESC LIMIT 20" + ) + rows = db.conn.execute(sql, (code, sid, day + "%")).fetchall() or [] + except Exception as e: + logger.warning("청산 히스토리 조회 실패 %s/%s: %s", sid, code, e) + return None + + for row in rows: + d = dict(row) + reason = str(d.get("sell_reason") or "").strip() + if reasons is None: + return d + reason_l = reason.lower() + for kw in reasons: + if kw.lower() in reason_l or kw in reason: + return d + return None + + +def purge_active_after_sell_history(db) -> Dict[str, Any]: + """ + active_trades 행의 buy_date 이후에 같은 전략 청산 히스토리가 있으면 DB에서 제거. + (EOD 청산 후 모의잔고 지연 → 고아복구가 다시 넣은 유령 정리) + """ + out: Dict[str, Any] = {"purged": [], "failed": [], "skipped": []} + if not get_env_bool("ORPHAN_PURGE_ACTIVE_AFTER_SELL_HISTORY", True): + out["msg"] = "ORPHAN_PURGE_ACTIVE_AFTER_SELL_HISTORY=false" + return out + try: + rows = db.conn.execute( + "SELECT code, name, strategy, current_qty, buy_date FROM active_trades" + ).fetchall() or [] + except Exception as e: + out["error"] = str(e) + return out + + manual_hold = parse_manual_hold_codes() + for row in rows: + d = dict(row) + code = str(d.get("code") or "").strip() + strategy = str(d.get("strategy") or "").strip() + name = str(d.get("name") or code) + if not code: + continue + if code in manual_hold or strategy.upper() == "HOLDING": + out["skipped"].append({"code": code, "strategy": strategy, "why": "protected"}) + continue + hit = _find_sell_after_buy( + db, + code=code, + strategy=strategy, + buy_date=str(d.get("buy_date") or "") or None, + ) + if not hit: + continue + try: + db.delete_active_trade(code=code, strategy=strategy or None) + out["purged"].append({ + "code": code, + "name": name, + "strategy": strategy, + "qty": int(d.get("current_qty") or 0), + "sell_reason": hit.get("sell_reason"), + "sell_date": hit.get("sell_date"), + }) + logger.warning( + "🧹 [청산후유령정리] [%s] %s %s — 히스토리 %s @%s → active 삭제", + strategy, + name, + code, + hit.get("sell_reason"), + hit.get("sell_date"), + ) + except Exception as e: + out["failed"].append({"code": code, "strategy": strategy, "error": str(e)}) + logger.exception("청산후 유령 active 삭제 실패 %s", code) + out["purged_count"] = len(out["purged"]) + return out + + def purge_ghost_active_trades(order_mgr, broker: Optional[Dict[str, Any]] = None) -> Dict[str, Any]: """ DB(active_trades) 有 · 브로커 0주 → 유령 행 삭제. @@ -266,16 +399,19 @@ def reconcile_orphan_positions(order_mgr) -> Dict[str, Any]: 이어서 GHOST_PURGE_ON_RECONCILE 시 유령(DB有·브로커0) 삭제. Returns: - reconciled, skipped_tracked, skipped_manual, skipped_no_order, failed, - ghost_purged, ghost_purged_count + reconciled, skipped_tracked, skipped_manual, skipped_no_order, + skipped_after_sell, failed, ghost_purged, ghost_purged_count, + stale_purged, stale_purged_count """ result: Dict[str, Any] = { "reconciled": [], "skipped_tracked": [], "skipped_manual": [], "skipped_no_order": [], + "skipped_after_sell": [], "failed": [], "ghost_purged": [], + "stale_purged": [], } if not get_env_bool("ORPHAN_RECONCILE_ENABLED", True): @@ -289,6 +425,13 @@ def reconcile_orphan_positions(order_mgr) -> Dict[str, Any]: logger.warning("🧩 [고아복구] 잔고 API 실패 — 스킵") return result + # EOD 청산 후 잘못 다시 들어간 active 유령부터 정리 + stale = purge_active_after_sell_history(db) + result["stale_purged"] = list(stale.get("purged") or []) + result["stale_purged_count"] = int(stale.get("purged_count") or 0) + if stale.get("error"): + result["stale_error"] = stale["error"] + tracked = _tracked_codes(db) bot_bought, manual_hold = get_portfolio_origin_sets(db) @@ -318,16 +461,41 @@ def reconcile_orphan_positions(order_mgr) -> Dict[str, Any]: strategy = canonical_strategy_id( str(order_row.get("strategy_id") or meta.get("strategy_id") or "SCALP") ) + buy_date = ( + str(order_row.get("filled_at") or order_row.get("submitted_at") or "").strip() + or None + ) + + # 당일/매수 이후 장마감청산 등 히스토리 있으면 재등록 금지 + # (모의·잔고 API 지연으로 브로커 qty>0 이어도 EOD 후 유령 복구 방지) + closed = _find_sell_after_buy( + db, code=c, strategy=strategy, buy_date=buy_date, + ) + if closed: + result["skipped_after_sell"].append({ + "code": c, + "name": name, + "qty": qty, + "strategy": strategy, + "sell_reason": closed.get("sell_reason"), + "sell_date": closed.get("sell_date"), + }) + logger.info( + "⏭ [고아복구스킵] %s(%s) [%s] — 이미 청산(%s @%s), 재등록 안 함", + name, + c, + strategy, + closed.get("sell_reason"), + closed.get("sell_date"), + ) + continue + filled_px = _num(order_row.get("filled_avg_price")) if filled_px <= 0: filled_px = _num(order_row.get("price") or meta.get("price_ref")) br_avg = _num((br or {}).get("avg_price")) avg_buy = br_avg if br_avg > 0 else filled_px cur_px = _num((br or {}).get("current_price")) or avg_buy - buy_date = ( - str(order_row.get("filled_at") or order_row.get("submitted_at") or "").strip() - or None - ) stop_px = _num(meta.get("stop_price")) target_px = _num(meta.get("target_price")) atr_entry = _num(meta.get("atr_entry")) @@ -379,7 +547,7 @@ def reconcile_orphan_positions(order_mgr) -> Dict[str, Any]: # 유령(DB有·브로커0) — 동일 잔고 스냅샷으로 삭제 (추가 REST 없음) ghost = purge_ghost_active_trades(order_mgr, broker=broker) result["ghost_purged"] = list(ghost.get("purged") or []) - result["ghost_purged_count"] = int(ghost.get("purged_count") or 0) + result["ghost_purged_count"] = int(ghost.get("ghost_purged_count") or ghost.get("purged_count") or 0) if ghost.get("error"): result["ghost_error"] = ghost["error"] for f in ghost.get("failed") or []: @@ -387,9 +555,13 @@ def reconcile_orphan_positions(order_mgr) -> Dict[str, Any]: result["reconciled_count"] = len(result["reconciled"]) result["failed_count"] = len(result["failed"]) + result["skipped_after_sell_count"] = len(result["skipped_after_sell"]) logger.info( - "🧩 [고아복구] 완료 — 복구 %d / 유령삭제 %d / 실패 %d / 보호(수동) %d / 이미추적 %d / 주문없음 %d", + "🧩 [고아복구] 완료 — 복구 %d / 청산후스킵 %d / 청산후유령정리 %d / " + "유령삭제 %d / 실패 %d / 보호(수동) %d / 이미추적 %d / 주문없음 %d", len(result["reconciled"]), + len(result["skipped_after_sell"]), + result["stale_purged_count"], result["ghost_purged_count"], len(result["failed"]), len(result["skipped_manual"]), diff --git a/kis_trader/main.py b/kis_trader/main.py index 72264f8..8953214 100644 --- a/kis_trader/main.py +++ b/kis_trader/main.py @@ -72,6 +72,10 @@ from .execution.account_cash import AccountCashLedger from .execution.order_manager import OrderManager from .network.condition_manager import ConditionSearchManager from .network.kiwoom_condition_manager import KiwoomConditionSearchManager +from .network.ls_condition_manager import ( + DEFAULT_SID_TO_LS_NAME, + LsConditionSearchManager, +) from .network.market_guard import MarketGuard from .network.ranking_manager import VolumeRankManager from .network.ws_manager import WSManager @@ -80,6 +84,7 @@ from .strategies import ( DartStrategy, BreakoutStrategy, MomentumStrategy, + UsMomentumStrategy, RangeBreakStrategy, ScalpingStrategy, TailCatchStrategy, @@ -190,7 +195,9 @@ class TradingOrchestrator: self.overseas_ws = None self.condition_mgr: ConditionSearchManager | None = None self.kiwoom_condition_mgr: KiwoomConditionSearchManager | None = None + self.ls_condition_mgr: LsConditionSearchManager | None = None self._pending_kiwoom_condition_configs: List[dict] = [] + self._pending_ls_condition_configs: List[dict] = [] self.ranking_mgr: VolumeRankManager | None = None # 시장 급락 서킷브레이커 (KOSPI/KOSDAQ 지수 폭락 시 신규 매수 전면 차단). # 지수 조회는 모의 도메인 미지원 가능성 → 실키 우선, 폴백 self.client. @@ -198,6 +205,8 @@ class TradingOrchestrator: # 시세 마이그레이션 검증 (WS_PROVIDER=kis_with_validation 시만 기동) self.kiwoom_ws = None self.ws_validator = None + self.ls_ws = None + self.ls_ws_validator = None self.strategies: List[BaseStrategy] = [] self._stop = False @@ -254,6 +263,7 @@ class TradingOrchestrator: condition_mgr=self.condition_mgr, ranking_mgr=self.ranking_mgr, kiwoom_condition_mgr=self.kiwoom_condition_mgr, + ls_condition_mgr=self.ls_condition_mgr, market_guard=self.market_guard, ) @@ -277,6 +287,13 @@ class TradingOrchestrator: else: logger.info("⏸ [전략 비활성] MOMENTUM") + # 해외 모멘텀 — 영구구독 US 고정 유니버스 · 기본 ON(시그널 dry-run) + if get_env_bool("STRATEGY_US_MOMENTUM_ENABLED", True): + self.strategies.append(UsMomentumStrategy(**shared)) + logger.info("✅ [전략 등록] US_MOMENTUM (permanent US · dry-run 기본)") + else: + logger.info("⏸ [전략 비활성] US_MOMENTUM") + if get_env_bool("STRATEGY_BREAKOUT_ENABLED", False): self.strategies.append(BreakoutStrategy(**shared)) logger.info("✅ [전략 등록] BREAKOUT (%s)", @@ -319,20 +336,84 @@ class TradingOrchestrator: def _setup_daily_profit_halt(self) -> None: """일일 익절 목표 가드 — 전략 쓰레드에 공통 주입.""" + + def _open_positions(sid: str) -> list: + sid_u = str(sid or "").strip().upper() + for strat in self.strategies: + if str(getattr(strat, "strategy_id", "")).upper() != sid_u: + continue + from .engine.daily_profit_halt import build_open_risk_rows + return build_open_risk_rows(sid_u, getattr(strat, "holdings", {}) or {}) + return [] + + def _force_sell(sid: str, closes: list, reason: str) -> None: + sid_u = str(sid or "").strip().upper() + for strat in self.strategies: + if str(getattr(strat, "strategy_id", "")).upper() != sid_u: + continue + for row in closes or []: + code = str((row or {}).get("code") or "").strip() + if not code: + continue + h = (getattr(strat, "holdings", {}) or {}).get(code) or {} + qty = int((row or {}).get("qty") or h.get("qty") or 0) + if qty <= 0: + continue + buy_price = float( + (row or {}).get("buy_price") or h.get("buy_price") or 0 + ) + px = float( + (row or {}).get("current_price") + or h.get("max_price") + or buy_price + or 0 + ) + profit_pct = 0.0 + if buy_price > 0 and px > 0: + profit_pct = (px - buy_price) / buy_price * 100.0 + try: + strat._submit_sell({ + "code": code, + "name": (row or {}).get("name") or h.get("name") or code, + "qty": qty, + "current_price": px, + "price": px, + "buy_price": buy_price, + "profit_pct": profit_pct, + "reason": reason, + }) + except Exception as ex: + logger.warning( + "⚠️ [리스크버짓] %s %s 청산 실패: %s", sid_u, code, ex, + ) + return + guard = DailyProfitHaltGuard( global_pnl_fn=self._bot_daily_realized_pnl, strategy_pnl_fn=self._bot_daily_realized_pnl_by_strategy, active_strategies_fn=lambda: [s.strategy_id for s in self.strategies], notify_fn=self._daily_profit_notify_mm, + open_positions_fn=_open_positions, + force_sell_fn=_force_sell, ) for strat in self.strategies: strat.daily_profit_halt = guard from .engine.daily_profit_halt import ( describe_profit_guard_startup, load_global_profit_target, + load_strategy_profit_target, ) cfg = load_global_profit_target() logger.info(describe_profit_guard_startup(cfg, scope="마스터")) + for strat in self.strategies: + sid = str(getattr(strat, "strategy_id", "")).upper() + scfg = load_strategy_profit_target(sid) + if scfg.get("risk_budget_enabled"): + logger.info( + "🧯 [리스크버짓·%s] ON — 일일익절 hit 시 cushion < 보유최악손절합 이면 전량정리 " + "(쿨다운 %ss)", + sid, scfg.get("risk_budget_cooldown_sec"), + ) def _daily_profit_notify_mm( self, body: str, strategy_id: Optional[str] = None, @@ -342,6 +423,7 @@ class TradingOrchestrator: "SCALP": ("KIS_SCALP_MM_CHANNEL", "scalping"), "SHORT": ("KIS_SHORT_MM_CHANNEL", "stock"), "MOMENTUM": ("KIS_MOMENTUM_MM_CHANNEL", "stock"), + "US_MOMENTUM": ("KIS_US_MOMENTUM_MM_CHANNEL", "stock"), "BREAKOUT": ("KIS_BREAKOUT_MM_CHANNEL", "stock"), "RANGE_BREAK": ("KIS_RANGE_BREAK_MM_CHANNEL", "stock"), "UPDOW": ("KIS_UPDOW_MM_CHANNEL", "stock"), @@ -360,7 +442,7 @@ class TradingOrchestrator: msg_mm(body, channel_alias=ch, jitter=False) def _resolve_source(self, strategy_id: str) -> str: - """{STRATEGY}_UNIVERSE_SOURCE env → 'ranking' | 'condition' | 'kiwoom_condition'.""" + """{STRATEGY}_UNIVERSE_SOURCE env → ranking|condition|kiwoom_condition|ls_condition.""" from .utils.universe_source import resolve_universe_source default = self._DEFAULT_SOURCE.get(strategy_id, "ranking") return resolve_universe_source(strategy_id, default=default) @@ -372,6 +454,8 @@ class TradingOrchestrator: mgr = self.ranking_mgr elif src == "kiwoom_condition": mgr = self.kiwoom_condition_mgr + elif src == "ls_condition": + mgr = self.ls_condition_mgr else: mgr = self.condition_mgr if mgr is None: @@ -386,7 +470,12 @@ class TradingOrchestrator: ) nm = c.get("name") or "" sq = c.get("seq") or "" - label = "kiwoom_cond" if src == "kiwoom_condition" else "condition" + if src == "kiwoom_condition": + label = "kiwoom_cond" + elif src == "ls_condition": + label = "ls_cond" + else: + label = "condition" if nm and sq: return f"{label} · {nm}(seq={sq})" return f"{label} · {nm or sq or '?'}" @@ -409,12 +498,11 @@ class TradingOrchestrator: return patch: Dict[str, str] = {} for sid, (dname, dseq) in _DEFAULT_CONDITION_BY_STRATEGY.items(): - # ⚠️ 미설정/유효하지 않은 값일 때만 기본값(condition) 주입. - # 사용자가 명시적으로 고른 소스(ranking/condition/kiwoom_condition)는 - # 재시작해도 덮어쓰지 않는다 (런타임 스위치 유지 — 이 함수가 매 기동 - # 무조건 condition 으로 리셋하면 스위치가 무의미해지므로). + # ⚠️ 미설정/유효하지 않은 값일 때만 기본값 주입. + # 사용자가 명시적으로 고른 소스(ranking/condition/kiwoom_condition/ls_condition)는 + # 재시작해도 덮어쓰지 않는다 (런타임 스위치 유지). cur_src = (snap.get(f"{sid}_UNIVERSE_SOURCE") or "").strip().lower() - if cur_src not in ("ranking", "condition", "kiwoom_condition"): + if cur_src not in ("ranking", "condition", "kiwoom_condition", "ls_condition"): patch[f"{sid}_UNIVERSE_SOURCE"] = self._DEFAULT_SOURCE.get(sid, "condition") nk, sk = _CONDITION_ENV_KEYS.get(sid, ("", "")) if nk and not (snap.get(nk) or "").strip(): @@ -538,8 +626,10 @@ class TradingOrchestrator: # 시세 WS 마이그레이션 검증 / WS_SUBSCRIBE_KIS_MINIMAL 시 키움 WS 기동 self._start_ws_validator() + self._start_ls_ws_validation() # 키움 조건검색은 시세 WS 와 **동일 세션** 공유 → 시세 WS 기동 후에만 등록 self._start_kiwoom_condition_manager() + self._start_ls_condition_manager() self._wire_ws_split_feed_if_needed() # 예수금 캐시: 전략 기동 전 API 선동기화 (재시작 직후 stale kv 사용 방지) @@ -587,6 +677,8 @@ class TradingOrchestrator: # 전략 등록 후 쓰레드 시작 (각자 독립 쓰레드) self._register_strategies() + # 해외 WS 는 등록 전에 기동됨 → 여기서 US_MOMENTUM 에 핸들 주입 + self._attach_overseas_ws_to_strategies() for strat in self.strategies: strat.start() # threading.Thread.start() logger.info("▶ 쓰레드 기동: %s", strat.name) @@ -634,6 +726,7 @@ class TradingOrchestrator: "BREAKOUT": get_env_bool("STRATEGY_BREAKOUT_ENABLED", False), "RANGE_BREAK": get_env_bool("STRATEGY_RANGE_BREAK_ENABLED", False), "MOMENTUM": get_env_bool("STRATEGY_MOMENTUM_ENABLED", False), + "US_MOMENTUM": get_env_bool("STRATEGY_US_MOMENTUM_ENABLED", True), "UPDOW": get_env_bool("STRATEGY_UPDOW_ENABLED", False), } @@ -641,6 +734,8 @@ class TradingOrchestrator: condition_configs: List[dict] = [] # 키움 조건검색(WS 실시간) 소스 — KIS 와 별개. KIWOOM_CONDITION_{SID}_NAME/SEQ. kiwoom_condition_configs: List[dict] = [] + # LS 서버저장조건(AFR) — ls_condition 소스. 이력은 ls_candidates_history. + ls_condition_configs: List[dict] = [] cond_env_keys = { "SCALP": ("CONDITION_SCALP_NAME", "CONDITION_SCALP_SEQ"), @@ -667,6 +762,10 @@ class TradingOrchestrator: for sid, enabled in strategy_switch.items(): if not enabled: continue + # 해외 모멘텀: 영구구독 고정 — ranking/condition/키움 매니저 미등록 + if sid == "US_MOMENTUM": + logger.info("📌 [US_MOMENTUM] 유니버스=permanent US (조건검색/랭킹 매니저 스킵)") + continue src = self._resolve_source(sid) # 시작 시 '주 소스' (로그/기본값용) # ── ranking 쪽 설정 수집 (UNIVERSE_SOURCE=ranking 일 때만 KIS REST 폴링) ───── @@ -727,13 +826,35 @@ class TradingOrchestrator: sid, sid, ) + # ── LS 조건: 이름 있으면 등록 (런타임 ls_condition 전환용) ───── + # CONDITION_{SID}_LS_NAME > KIWOOM_NAME > CONDITION_NAME > 기본동명 + ls_nm = ( + (get_env_from_db(f"CONDITION_{sid}_LS_NAME", "") or "").strip() + or kw_nm + or DEFAULT_SID_TO_LS_NAME.get(sid, "") + ) + if ls_nm: + ls_condition_configs.append({ + "strategy_id": sid, + "name": ls_nm, + "seq": None, + }) + elif src == "ls_condition": + logger.warning( + "⚠️ [%s] UNIVERSE_SOURCE=ls_condition 인데 " + "조건명(CONDITION_%s_NAME/LS_NAME) 이 비어있음 → 후보 0.", + sid, sid, + ) + logger.info( - "🔀 [%s] 시작소스=%s (매니저등록: ranking=%s condition=%s kiwoom=%s) " + "🔀 [%s] 시작소스=%s (매니저등록: ranking=%s condition=%s kiwoom=%s ls=%s) " "— 런타임 DB %s_UNIVERSE_SOURCE 변경 시 재시작 없이 전환 " - "(KIS ranking/condition REST 는 시작소스 일치 시만)", + "(KIS ranking/condition REST 는 시작소스 일치 시만 · " + "LS 매니저 최초 기동은 재시작 필요할 수 있음)", sid, src, ("✓" if register_ranking else "✗"), ("✓" if register_kis_cond else "✗"), - ("✓" if has_kw_cond else "✗"), sid, + ("✓" if has_kw_cond else "✗"), + ("✓" if ls_nm else "✗"), sid, ) # ── ranking 매니저 기동 ──────────────────────────────── @@ -802,6 +923,11 @@ class TradingOrchestrator: if not kiwoom_condition_configs: logger.info("ℹ️ kiwoom_condition 소스 쓰는 전략 없음 → 키움 조건검색 매니저 비활성") + # ── LS 조건검색: start() 에서 _start_ls_condition_manager() ── + self._pending_ls_condition_configs = ls_condition_configs + if not ls_condition_configs: + logger.info("ℹ️ LS 조건명 없음 → LS 조건검색 매니저 비활성") + # ------------------------------------------------------------------ def _start_market_guard(self) -> None: """ @@ -922,6 +1048,188 @@ class TradingOrchestrator: elif need_validator and not kis_ws_handle: logger.warning("KIS WS 핸들 미발견 → Validator 비활성") + def _start_ls_ws_validation(self) -> None: + """LS 실키 WS — 검증·조건이력·AFR·ls_condition 틱. + + 매매 **주문** = KIS. + ``ls_condition``: LS US3 틱 + 키움 갭/분봉 (``ls_feed`` = 틱만 LS). + """ + from .utils.env import get_env_from_db + + validation_on = get_env_bool("LS_WS_VALIDATION_ENABLED", False) + history_on = get_env_bool("LS_CONDITION_HISTORY_ENABLED", False) + follow_on = get_env_bool("LS_WS_FOLLOW_CONDITION_UNIVERSE", True) + trade_ls = False + try: + for sid in ("SCALP", "BREAKOUT", "SHORT", "MOMENTUM"): + if self._resolve_source(sid) == "ls_condition": + trade_ls = True + break + except Exception: + trade_ls = False + if not validation_on and not (history_on and follow_on) and not trade_ls: + logger.info( + "ℹ️ LS WS 미기동 (VALIDATION=false, HISTORY/FOLLOW 미충족, " + "ls_condition 전략 없음)" + ) + return + if trade_ls: + logger.info( + "📡 LS WS 기동 — ls_condition AFR+틱 " + "(갭보정·분봉은 키움)" + ) + + force_real = get_env_bool("LS_WS_FORCE_REAL", True) + try: + row = self.db.conn.execute( + "SELECT LS_APP_KEY_REAL, LS_APP_SECRET_REAL, " + "LS_APP_KEY_MOCK, LS_APP_SECRET_MOCK " + "FROM env_config ORDER BY id DESC LIMIT 1" + ).fetchone() + except Exception as e: + logger.warning("LS 키 로드 실패 → LS WS 비활성: %s", e) + return + if not row: + logger.warning("env_config 없음 → LS WS 비활성") + return + r = dict(row) + if force_real: + app_key = (r.get("LS_APP_KEY_REAL") or "").strip() + app_secret = (r.get("LS_APP_SECRET_REAL") or "").strip() + is_mock = False + else: + app_key = (r.get("LS_APP_KEY_MOCK") or "").strip() + app_secret = (r.get("LS_APP_SECRET_MOCK") or "").strip() + is_mock = True + if not app_key or not app_secret: + logger.warning( + "LS AppKey/Secret 미설정 → LS WS 비활성 " + "(LS_APP_KEY_REAL / LS_APP_SECRET_REAL)" + ) + return + + try: + from .ws.ls_ws import LSWebSocketPriceCache + also_hoga = get_env_bool("LS_WS_ALSO_HOGA", True) + self.ls_ws = LSWebSocketPriceCache( + app_key, app_secret, is_mock=is_mock, also_hoga=also_hoga, + ) + if not self.ls_ws.start(): + logger.warning("LS WS start 실패") + self.ls_ws = None + return + + def _on_tick(code: str, payload: dict) -> None: + # DB (히스토리 정합) + RAM 링버퍼 (실매 get_recent_ticks) + self.db.insert_ls_ws_tick( + code=code, + ts=payload.get("ts"), + price=float(payload.get("price") or 0), + volume=payload.get("volume"), + tot_volume=payload.get("tot_volume"), + chetime=str(payload.get("chetime") or ""), + tr_cd=str(payload.get("tr_cd") or ""), + ) + tr = getattr(self.ws, "tick_recorder", None) + if tr is not None: + try: + px = float(payload.get("price") or 0) + vol = int(float(payload.get("volume") or 0)) + che = str(payload.get("chetime") or "") + if px > 0: + tr.on_tick( + code, px, vol, che, + market="KR", source="ls", + ) + except Exception: + pass + + def _on_candle(code: str, candle: dict) -> None: + self.db.upsert_ls_ws_candle(code=code, candle=candle) + + def _on_orderbook(code: str, snap: dict) -> None: + self.db.insert_ls_ws_orderbook(code=code, snap=snap, market="KR") + + def _on_vi(code: str, payload: dict) -> None: + self.db.insert_ls_ws_vi( + code=code, + ts=payload.get("ts"), + event_time=str(payload.get("event_time") or ""), + vi_gubun=str(payload.get("vi_gubun") or "0"), + krx_vi_gubun=payload.get("krx_vi_gubun"), + nxt_vi_gubun=payload.get("nxt_vi_gubun"), + svi_recprice=payload.get("svi_recprice"), + dvi_recprice=payload.get("dvi_recprice"), + vi_trgprice=payload.get("vi_trgprice"), + tr_cd=str(payload.get("tr_cd") or ""), + exchname=str(payload.get("exchname") or ""), + ) + + self.ls_ws.attach_tick_recorder(_on_tick) + self.ls_ws.attach_candle_flusher(_on_candle) + self.ls_ws.attach_orderbook_recorder(_on_orderbook) + self.ls_ws.attach_vi_recorder(_on_vi) + if also_hoga: + logger.info( + "LS WS 호가(UH1) 구독 ON → ls_ws_orderbook " + "(save=%s gap_ms=%s)", + get_env_bool("LS_WS_ORDERBOOK_SAVE", True), + get_env_int("LS_WS_ORDERBOOK_SAVE_MS", 1000), + ) + if get_env_bool("LS_WS_UVI_ENABLED", True): + logger.info( + "LS WS VI(UVI) 구독 ON → ls_ws_vi " + "(save=%s stale_sec=%s watchdog_skip=%s)", + get_env_bool("LS_WS_VI_SAVE", True), + get_env_int("LS_WS_VI_STALE_SEC", 180), + get_env_bool("LS_WS_WATCHDOG_SKIP_WHEN_VI", True), + ) + + # 영구구독 KR 선구독 (갭 표본 확보) + try: + rows = self.db.conn.execute( + "SELECT code FROM permanent_subscriptions " + "WHERE enabled=1 AND market_type=%s", + ("KR",), + ).fetchall() + for row2 in rows or []: + c = str(dict(row2).get("code") or "").strip() + if c: + self.ls_ws.subscribe(c, owner="permanent") + logger.info("LS WS 영구구독 KR 선등록 %d종목 (owner=permanent)", len(rows or [])) + except Exception as e: + logger.debug("LS 영구구독 선등록 실패: %s", e) + + if validation_on: + from .network.ls_ws_validator import LSWSPriceValidator + kis_ws_handle = getattr(self.ws, "ws_cache", None) + self.ls_ws_validator = LSWSPriceValidator( + ls_ws=self.ls_ws, + db=self.db, + kis_ws=kis_ws_handle, + kiwoom_ws=self.kiwoom_ws, + ) + self.ls_ws_validator.start() + logger.info( + "🔬 [LS 시세 검증] 그림자 ON — ls_ws_ticks / ls_ws_candles / " + "ls_ws_orderbook / ls_ws_vi / ws_price_validation_ls (매매 경로 미사용)" + ) + else: + logger.info( + "📡 [LS WS] 기동 — ticks/candles " + "(VALIDATION=%s HISTORY=%s trade_ls=%s)", + validation_on, history_on, trade_ls, + ) + try: + if getattr(self, "ws", None) is not None: + self.ws._reattach_all_price_listeners() + except Exception: + pass + except Exception as e: + logger.warning("LS WS 기동 실패: %s", e) + self.ls_ws = None + self.ls_ws_validator = None + def _start_kiwoom_condition_manager(self) -> None: """키움 조건검색 — 시세 WS(KiwoomWebSocketPriceCache) 와 단일 세션 공유. @@ -965,6 +1273,70 @@ class TradingOrchestrator: logger.error("키움 조건검색 매니저 기동 실패: %s", e) self.kiwoom_condition_mgr = None + def _start_ls_condition_manager(self) -> None: + """LS 서버저장조건(AFR) — 시세 get_price 와 무관. + + 기동 조건 (둘 중 하나): + - ``LS_CONDITION_HISTORY_ENABLED=true`` → 이력만 (실매 유니버스 소스와 분리) + - 또는 어떤 전략이 ``UNIVERSE_SOURCE=ls_condition`` + """ + configs = self._pending_ls_condition_configs or [] + if not configs: + return + history_on = get_env_bool("LS_CONDITION_HISTORY_ENABLED", False) + want_ls_trade = False + for c in configs: + sid = str(c.get("strategy_id") or "").upper() + if sid and self._resolve_source(sid) == "ls_condition": + want_ls_trade = True + break + if not history_on and not want_ls_trade: + logger.info( + "ℹ️ LS 조건 설정 %d건 있으나 HISTORY=false 이고 " + "UNIVERSE_SOURCE=ls_condition 전략 없음 → 매니저 미기동", + len(configs), + ) + return + try: + self.ls_condition_mgr = LsConditionSearchManager( + configs=configs, + db=self.db, + user_id=(get_env_from_db("LS_USER_ID", "") or "").strip(), + use_mock=False, + ) + # start() 중 t1859 스냅샷 emit 을 놓치지 않도록 listener 선등록 + follow = get_env_bool("LS_WS_FOLLOW_CONDITION_UNIVERSE", True) + if follow and self.ls_ws is not None: + def _on_ls_univ(codes: set) -> None: + try: + self.ls_ws.sync_owner_codes("condition", codes) + except Exception as e: + logger.debug("LS WS condition sync: %s", e) + + self.ls_condition_mgr.set_universe_codes_listener(_on_ls_univ) + logger.info( + "📡 LS 조건 유니버스 → LS WS follow ON (owner=condition, plain6=%s)", + get_env_bool("LS_WS_CONDITION_PLAIN6_ONLY", True), + ) + elif follow and self.ls_ws is None: + logger.warning( + "⚠️ LS_WS_FOLLOW_CONDITION_UNIVERSE=true 이나 LS WS 미기동 " + "— VALIDATION 또는 HISTORY+FOLLOW 로 WS 를 켜세요" + ) + if history_on: + logger.info( + "📼 LS_CONDITION_HISTORY_ENABLED — ls_candidates_history 적재 " + "(실매 UNIVERSE_SOURCE 와 분리). 단독 collect_ls_condition_history 중지 권고." + ) + if not self.ls_condition_mgr.start(): + self.ls_condition_mgr = None + return + if follow and self.ls_ws is not None: + self.ls_condition_mgr.emit_universe_union() + except Exception as e: + logger.error("LS 조건검색 매니저 기동 실패: %s", e) + self.ls_condition_mgr = None + def _wire_short_holding_peak_provider(self) -> None: """SHORT 보유 종목 max_price → ws_candles.holding_peak (백테·tail_engine 정합).""" ca = getattr(self.ws, "candle_agg", None) @@ -1027,12 +1399,30 @@ class TradingOrchestrator: "🌎 해외 WS active=%s (US %d종목: %s)", ok, len(us_rows), ", ".join(r.get("code", "") for r in us_rows), ) - if not ok: + if ok: + # NOTE: start() 순서상 전략 등록(_register_strategies)보다 먼저 호출됨. + # 이 시점엔 US_MOMENTUM 이 아직 없을 수 있음 → 등록 직후 + # _attach_overseas_ws_to_strategies() 로 다시 주입. + self._attach_overseas_ws_to_strategies() + else: self.overseas_ws = None except Exception as e: logger.error("해외 WS 기동 실패 (봇은 정상 동작): %s", e) self.overseas_ws = None + def _attach_overseas_ws_to_strategies(self) -> None: + """US_MOMENTUM 전략에 해외 WS 핸들 주입 (등록/재기동 후 필수).""" + ows = getattr(self, "overseas_ws", None) + if ows is None: + return + n = 0 + for s in self.strategies: + if getattr(s, "strategy_id", "") == "US_MOMENTUM": + s.overseas_ws = ows + n += 1 + if n: + logger.info("🌎 해외 WS → US_MOMENTUM 전략 %d개 주입", n) + def _wire_ws_split_feed_if_needed(self) -> None: """``WS_SUBSCRIBE_KIS_MINIMAL`` : 후보 틱→CandleAggregator + KIS/키움 분리 구독.""" if not get_env_bool("WS_SUBSCRIBE_KIS_MINIMAL", False): @@ -1198,16 +1588,36 @@ class TradingOrchestrator: dnca = _parse_amt(out2.get("dnca_tot_amt")) d2 = _parse_amt(out2.get("prvs_rcdl_excc_amt")) - # 브로커 응답에 주문가능금액 키가 계좌/상품별로 다를 수 있어 후보를 넓게 본다. + # 주식잔고(inquire-balance) output2 에는 주문가능현금 필드가 없음(공식 매핑 확인). + # 주문가능 = 매수가능조회 inquire-psbl-order 의 ord_psbl_cash / nrcvb_buy_amt. ord_psbl = 0.0 - for k in ( - "ord_psbl_cash", "ord_psbl_amt", "ord_psbl", - "buy_psbl_cash", "buy_psbl_amt", - ): - v = _parse_amt(out2.get(k)) - if v > 0: - ord_psbl = v - break + try: + psbl = self.client.inquire_psbl_order( + str(get_env_from_db("PSBL_ORDER_REF_CODE", "005930") or "005930"), + price=0, + ord_dvsn="01", + ) or {} + for k in ( + "ord_psbl_cash", + "nrcvb_buy_amt", + "max_buy_amt", + ): + v = _parse_amt(psbl.get(k)) + if v > 0: + ord_psbl = v + break + except Exception as _e: + logger.debug("매수가능조회(ord_psbl) 실패: %s", _e) + if ord_psbl <= 0: + # 폴백: 잔고 output2 에 혹시 있으면 (실전 일부 상품) + for k in ( + "ord_psbl_cash", "ord_psbl_amt", "ord_psbl", + "buy_psbl_cash", "buy_psbl_amt", + ): + v = _parse_amt(out2.get(k)) + if v > 0: + ord_psbl = v + break # output2.tot_evlu_amt = 예수금+평가액 (없을 경우 output1 로 합산) tot_evlu = _parse_amt(out2.get("tot_evlu_amt")) if tot_evlu <= 0: @@ -1568,7 +1978,9 @@ class TradingOrchestrator: result = reconcile_orphan_positions(self.order_mgr) n = int(result.get("reconciled_count") or 0) g = int(result.get("ghost_purged_count") or 0) - if n <= 0 and g <= 0 and not result.get("error"): + stale = int(result.get("stale_purged_count") or 0) + skip_sell = int(result.get("skipped_after_sell_count") or 0) + if n <= 0 and g <= 0 and stale <= 0 and skip_sell <= 0 and not result.get("error"): label = "Pre-EOD" if phase == "pre" else "장마감" logger.debug("🧩 [%s 고아복구] 복구·유령삭제 대상 없음", label) return @@ -1579,6 +1991,8 @@ class TradingOrchestrator: lines = [ f"🧩 **[{title}]**", f"- 복구: {n}종목", + f"- 청산후스킵: {skip_sell}종목", + f"- 청산후유령정리: {stale}종목", f"- 유령삭제: {g}종목", f"- 실패: {int(result.get('failed_count') or 0)}건", ] @@ -1589,6 +2003,15 @@ class TradingOrchestrator: ) if n > 8: lines.append(f" …외 {n - 8}종목") + for it in (result.get("skipped_after_sell") or [])[:5]: + lines.append( + f" ⏭스킵 {it.get('name')}({it.get('code')}) " + f"{it.get('sell_reason')}@{it.get('sell_date')}" + ) + for it in (result.get("stale_purged") or [])[:5]: + lines.append( + f" ✕청산후유령 {it.get('name')}({it.get('code')}) [{it.get('strategy')}]" + ) for it in (result.get("ghost_purged") or [])[:5]: lines.append( f" ✕유령 {it.get('name')}({it.get('code')}) [{it.get('strategy')}]" @@ -1599,7 +2022,10 @@ class TradingOrchestrator: msg_mm(body, channel_alias=self._system_mm_channel(), jitter=False) except Exception as e: logger.debug("고아복구 MM 전송 실패: %s", e) - logger.info("🧩 [고아복구] 복구 %d · 유령삭제 %d → active_trades 반영", n, g) + logger.info( + "🧩 [고아복구] 복구 %d · 청산후스킵 %d · 청산후유령정리 %d · 유령삭제 %d → active_trades 반영", + n, skip_sell, stale, g, + ) def _build_market_open_report(self, today_ymd: str) -> str: """09:00 장 시작 알림 메시지 — 보유종목·예수금·주문가능금액 현황.""" @@ -1770,6 +2196,8 @@ class TradingOrchestrator: condition_mgr=self.condition_mgr, ranking_mgr=self.ranking_mgr, ) + if getattr(ns, "strategy_id", "") == "US_MOMENTUM" and self.overseas_ws: + ns.overseas_ws = self.overseas_ws ns.start() new_list.append(ns) logger.info("🔁 전략 재기동: %s", ns.name) @@ -1851,6 +2279,8 @@ class TradingOrchestrator: try: if self.kiwoom_condition_mgr: self.kiwoom_condition_mgr.stop() + if self.ls_condition_mgr: + self.ls_condition_mgr.stop() except Exception: pass try: @@ -1863,11 +2293,21 @@ class TradingOrchestrator: self.ws_validator.stop() except Exception: pass + try: + if getattr(self, "ls_ws_validator", None): + self.ls_ws_validator.stop() + except Exception: + pass try: if self.kiwoom_ws: self.kiwoom_ws.stop() except Exception: pass + try: + if getattr(self, "ls_ws", None): + self.ls_ws.stop() + except Exception: + pass try: if self.overseas_ws: self.overseas_ws.stop() diff --git a/kis_trader/network/ls_chart.py b/kis_trader/network/ls_chart.py new file mode 100644 index 0000000..f001b5a --- /dev/null +++ b/kis_trader/network/ls_chart.py @@ -0,0 +1,238 @@ +""" +kis_trader/network/ls_chart.py — LS 분봉 REST (t8412) +============================================================================== +``ls_condition`` 전략 갭보정용. 주문 경로와 무관. +TR: t8412 주식차트(N분) — POST /stock/chart — 초당 1건. +""" +from __future__ import annotations + +import json +import threading +import time +from datetime import datetime +from typing import Any, Dict, List, Optional, Tuple + +import pandas as pd + +from ..utils.env import get_env_bool, get_env_float, get_env_from_db, get_env_int +from ..utils.logger import get_logger +from ..utils.request_handler import SafeRequest +from ..ws.ls_ws import LS_REST_BASE, fetch_ls_access_token + +logger = get_logger("kis_trader.ls_chart") + +CHART_URL = f"{LS_REST_BASE}/stock/chart" + + +def ls_datetime_to_candle_time(dt_s: str) -> str: + """``YYYY-MM-DD HH:MM:00`` → ``YYYYMMDDHHMM``.""" + s = (dt_s or "").strip() + if len(s) >= 16 and s[4] == "-" and s[10] == " ": + return s[0:4] + s[5:7] + s[8:10] + s[11:13] + s[14:16] + digits = "".join(ch for ch in s if ch.isdigit()) + return digits[:12] + + +def candle_time_to_ls_datetime(ct: str) -> str: + """``YYYYMMDDHHMM`` → ``YYYY-MM-DD HH:MM:00``.""" + d = "".join(ch for ch in (ct or "") if ch.isdigit())[:12] + if len(d) < 12: + return "" + return f"{d[0:4]}-{d[4:6]}-{d[6:8]} {d[8:10]}:{d[10:12]}:00" + + +def load_ls_real_creds() -> Tuple[str, str]: + """실키만 (시세 REST). 빈 값이면 ("","").""" + try: + from database import TradeDB + + db = TradeDB() + row = db.conn.execute( + "SELECT LS_APP_KEY_REAL, LS_APP_SECRET_REAL FROM env_config " + "ORDER BY id DESC LIMIT 1" + ).fetchone() + if not row: + return "", "" + r = dict(row) + return ( + (r.get("LS_APP_KEY_REAL") or "").strip(), + (r.get("LS_APP_SECRET_REAL") or "").strip(), + ) + except Exception as e: + logger.debug("LS 키 로드 실패: %s", e) + return "", "" + + +class LSChartClient(SafeRequest): + """t8412 SafeRequest — min_interval 기본 1.05s (서버 초당 1건).""" + + def __init__(self) -> None: + gap = max(1.0, float(get_env_float("LS_GAP_FILL_INTERVAL_SEC", 1.05) or 1.05)) + super().__init__( + min_interval_sec=gap, + max_retries=max(1, get_env_int("LS_GAP_FILL_MAX_RETRIES", 3)), + timeout_sec=max(5.0, float(get_env_float("LS_GAP_FILL_TIMEOUT_SEC", 20.0) or 20.0)), + ) + self._token = "" + self._token_at = 0.0 + self._tok_lock = threading.Lock() + self._app_key = "" + self._app_secret = "" + + def _ensure_creds(self) -> bool: + if self._app_key and self._app_secret: + return True + k, s = load_ls_real_creds() + self._app_key, self._app_secret = k, s + return bool(k and s) + + def _ensure_token(self) -> str: + with self._tok_lock: + if self._token and (time.time() - self._token_at) < 12 * 3600: + return self._token + if not self._ensure_creds(): + raise RuntimeError("LS AppKey/Secret 미설정") + self._token = fetch_ls_access_token(self._app_key, self._app_secret) + self._token_at = time.time() + return self._token + + def fetch_minute_bars( + self, + code: str, + *, + ncnt: int = 1, + qrycnt: Optional[int] = None, + edate: str = "99999999", + ) -> pd.DataFrame: + """ + t8412 → DataFrame columns: time(YYYYMMDDHHMM), open, high, low, close, volume + 오래된→최신 정렬. + """ + if not get_env_bool("LS_GAP_FILL_ENABLED", True): + return pd.DataFrame() + code = (code or "").strip() + if not (code.isdigit() and len(code) == 6): + return pd.DataFrame() + limit = int( + qrycnt + if qrycnt is not None + else get_env_int("LS_GAP_FILL_LIMIT", 150) + ) + limit = max(1, min(500, limit)) + ncnt = max(1, int(ncnt or 1)) + + token = self._ensure_token() + body = { + "t8412InBlock": { + "shcode": code, + "ncnt": ncnt, + "qrycnt": limit, + "nday": "0", + "sdate": "", + "stime": "", + "edate": edate or "99999999", + "etime": "", + "cts_date": "", + "cts_time": "", + "comp_yn": "N", + } + } + headers = { + "content-type": "application/json; charset=UTF-8", + "authorization": f"Bearer {token}", + "tr_cd": "t8412", + "tr_cont": "N", + "tr_cont_key": "", + "mac_address": "", + } + resp = self.request("POST", CHART_URL, headers=headers, data=json.dumps(body)) + if resp is None: + return pd.DataFrame() + try: + data = resp.json() if resp.text else {} + except Exception: + logger.warning("t8412 JSON 파싱 실패 code=%s", code) + return pd.DataFrame() + rsp = str(data.get("rsp_cd") or "") + if rsp and rsp not in ("00000", "0"): + # 09000 등 자료없음은 빈 DF + logger.debug( + "t8412 rsp_cd=%s msg=%s code=%s", + rsp, data.get("rsp_msg"), code, + ) + if rsp != "00000": + return pd.DataFrame() + rows_out = data.get("t8412OutBlock1") or [] + if isinstance(rows_out, dict): + rows_out = [rows_out] + parsed: List[Dict[str, Any]] = [] + for r in rows_out: + if not isinstance(r, dict): + continue + date = "".join(ch for ch in str(r.get("date") or "") if ch.isdigit()) + tim = "".join(ch for ch in str(r.get("time") or "") if ch.isdigit()) + if len(tim) >= 6: + tim = tim[:4] # HHMMSS → HHMM for candle_time + elif len(tim) == 4: + pass + else: + continue + if len(date) < 8: + continue + ctime = date[:8] + tim[:4] + try: + close = float(r.get("close") or 0) + except (TypeError, ValueError): + continue + if close <= 0: + continue + try: + o = float(r.get("open") or close) + h = float(r.get("high") or close) + l = float(r.get("low") or close) + v = float(r.get("jdiff_vol") or r.get("volume") or 0) + except (TypeError, ValueError): + o = h = l = close + v = 0.0 + parsed.append({ + "time": ctime, + "open": o, + "high": h, + "low": l, + "close": close, + "volume": v, + }) + if not parsed: + return pd.DataFrame() + df = pd.DataFrame(parsed) + df = df.drop_duplicates(subset=["time"], keep="last") + df = df.sort_values("time").reset_index(drop=True) + return df + + +_client: Optional[LSChartClient] = None +_client_lock = threading.Lock() + + +def get_ls_chart_client() -> LSChartClient: + global _client + with _client_lock: + if _client is None: + _client = LSChartClient() + return _client + + +def fetch_ls_minute_chart_df( + code: str, + *, + ncnt: int = 1, + qrycnt: Optional[int] = None, +) -> pd.DataFrame: + """갭보정 진입점 — DataFrame(time/open/high/low/close/volume).""" + try: + return get_ls_chart_client().fetch_minute_bars( + code, ncnt=ncnt, qrycnt=qrycnt, + ) + except Exception as e: + logger.warning("LS t8412 실패 %s: %s", code, e) + return pd.DataFrame() diff --git a/kis_trader/network/ls_condition_manager.py b/kis_trader/network/ls_condition_manager.py new file mode 100644 index 0000000..cbe1a28 --- /dev/null +++ b/kis_trader/network/ls_condition_manager.py @@ -0,0 +1,777 @@ +""" +kis_trader/network/ls_condition_manager.py — LS 서버저장조건(AFR) +============================================================================== +두 가지 용도 (실매 시세 get_price 와 무관): + +1) ``LS_CONDITION_HISTORY_ENABLED=true`` + → ``ls_candidates_history`` 적재 (실매 ``*_UNIVERSE_SOURCE`` 와 **분리**) +2) ``{SID}_UNIVERSE_SOURCE=ls_condition`` + → BaseStrategy 유니버스 소비 (opt-in) + +흐름: t1866 → t1859 → t1860/AFR → RAM + (옵션) 이력 INSERT + + (옵션) LS WS owner=condition 구독 diff + +운영 중 LS HTS 에서 조건 CRUD(삭제·이름변경·인덱스 재배열) 시: + ``LS_CONDITION_REMAP_SEC`` 주기로 t1866 이름→query_index 재매핑, + 바뀌면 구 AFR UNREG + t1860 D → t1859 → t1860 E → AFR REG (재시작 불필요). + ``LS_CONDITION_SNAPSHOT_REFRESH_SEC`` 주기로 동일 인덱스라도 t1859 스냅샷 + 재동기화 (AFR 는 델타만이라 장중 sticky/빈 RAM 보정). +""" +from __future__ import annotations + +import importlib +import json +import threading +import time +from datetime import datetime +from typing import Any, Callable, Dict, List, Optional, Set, Tuple + +from .condition_manager import ConditionSearchManager +from ..utils.env import get_env_bool, get_env_float, get_env_from_db, get_env_int +from ..utils.logger import get_logger + +logger = get_logger("kis_trader.lscond") + +# LS query_name → 전략 id (키움 CONDITION_*_KIWOOM_NAME 동명 정책) +DEFAULT_SID_TO_LS_NAME: Dict[str, str] = { + "BREAKOUT": "breakout", + "SHORT": "tail", + "MOMENTUM": "momentum", + "SCALP": "scalp_re", +} + +_LS_HISTORY_DDL = """ +CREATE TABLE IF NOT EXISTS ls_candidates_history ( + id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + slot_key VARCHAR(12) NOT NULL, + scan_time VARCHAR(30) NOT NULL, + code VARCHAR(20) NOT NULL, + name VARCHAR(100) NOT NULL DEFAULT '', + score DOUBLE NOT NULL DEFAULT 0, + price DOUBLE NOT NULL DEFAULT 0, + market CHAR(1) DEFAULT 'Q', + sector VARCHAR(100) NULL, + theme VARCHAR(100) NULL, + strategy_id VARCHAR(32) NOT NULL DEFAULT '', + event_time VARCHAR(30) NOT NULL DEFAULT '', + query_name VARCHAR(64) NOT NULL DEFAULT '', + query_index VARCHAR(32) NOT NULL DEFAULT '', + source VARCHAR(16) NOT NULL DEFAULT 'ls_afr', + INDEX idx_ls_cand_slot (slot_key), + INDEX idx_ls_cand_sid_evt (strategy_id, event_time), + INDEX idx_ls_cand_code (code), + INDEX idx_ls_cand_scan (scan_time) +) CHARACTER SET utf8mb4 +""" + + +def _load_ls_rt(): + """단독 테스트 모듈의 REST/WS 헬퍼 재사용 (실매 시세 경로와 분리).""" + return importlib.import_module("_test_ls_condition_realtime") + + +def insert_ls_candidates_snapshot( + db, + *, + strategy_id: str, + query_name: str, + query_index: str, + items: List[Dict[str, Any]], + event_time: Optional[str] = None, + source: str = "ls_afr", +) -> int: + """풀 유니버스 스냅샷 → ls_candidates_history (동일 event_time 재기록).""" + if db is None: + return 0 + try: + db.conn.execute(_LS_HISTORY_DDL) + except Exception: + pass + et = event_time or datetime.now().strftime("%Y-%m-%d %H:%M:%S") + sk = et.replace("-", "").replace(":", "").replace(" ", "")[:12] + sid = (strategy_id or "").strip().upper() + qn = (query_name or "")[:64] + qi = (query_index or "")[:32] + inserted = 0 + with db.conn: + db.conn.execute( + "DELETE FROM ls_candidates_history " + "WHERE strategy_id=%s AND event_time=%s", + (sid, et), + ) + for it in items: + code = str(it.get("code") or "").strip() + if not code: + continue + name = str(it.get("name") or code)[:100] + try: + price = float(it.get("price") or 0) + except (TypeError, ValueError): + price = 0.0 + db.conn.execute( + """ + INSERT INTO ls_candidates_history + (slot_key, scan_time, code, name, score, price, + market, sector, theme, strategy_id, event_time, + query_name, query_index, source) + VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) + """, + ( + sk, et, code, name, 0.0, price, + "Q", "", "", sid, et, qn, qi, source[:16], + ), + ) + inserted += 1 + return inserted + + +class _LsConditionState: + """AFR 편입/이탈 누적 (수집기 ConditionState 와 동일).""" + + def __init__( + self, + *, + strategy_id: str, + query_name: str, + query_index: str, + alert_num: str = "", + ) -> None: + self.strategy_id = strategy_id + self.query_name = query_name + self.query_index = query_index + self.alert_num = alert_num + self.codes: Dict[str, Dict[str, Any]] = {} + self.lock = threading.Lock() + + def set_from_snapshot(self, rows: List[Dict[str, Any]]) -> None: + with self.lock: + self.codes.clear() + for r in rows: + code = str(r.get("shcode") or r.get("code") or "").strip() + if not code: + continue + self.codes[code] = { + "code": code, + "name": str(r.get("hname") or r.get("name") or code)[:100], + "price": r.get("price") or 0, + } + + def apply_afr(self, body: Dict[str, Any]) -> tuple[str, Optional[str]]: + job = str(body.get("gsJobFlag") or "").strip().upper() + code = str(body.get("gsCode") or body.get("shcode") or "").strip() + if not code: + return job, None + name = str(body.get("gsHname") or body.get("hname") or code)[:100] + try: + price = float(str(body.get("gsPrice") or body.get("price") or 0).replace(",", "")) + except (TypeError, ValueError): + price = 0.0 + with self.lock: + if job in ("N", "R"): + self.codes[code] = {"code": code, "name": name, "price": price} + elif job == "O": + self.codes.pop(code, None) + return job, code + + def items(self) -> List[Dict[str, Any]]: + with self.lock: + return [dict(v) for v in self.codes.values()] + + def as_rows(self) -> List[Dict[str, Any]]: + return [{"code": it["code"], "name": it.get("name", it["code"])} for it in self.items()] + + +class LsConditionSearchManager(ConditionSearchManager): + """LS AFR 실시간 조건검색 — ConditionSearchManager 와 동일 public API.""" + + def __init__( + self, + *, + configs: Optional[List[Dict]] = None, + db=None, + on_change=None, + user_id: str = "", + use_mock: bool = False, + ): + super().__init__( + client=None, + user_id=(user_id or "LS").strip() or "LS", + configs=configs, + db=db, + on_change=on_change, + ) + self._use_mock = bool(use_mock) + self._token: Optional[str] = None + self._app_key: str = "" + self._app_secret: str = "" + self._rt = None + self._by_alert: Dict[str, _LsConditionState] = {} + self._states_by_sid: Dict[str, _LsConditionState] = {} + self._watcher: Any = None + self._flush_sec = float(get_env_int("LS_CONDITION_FLUSH_SEC", 60)) + # 서버 조건 CRUD 후 query_index/alert 재부착 (재시작 대체) + self._remap_sec = float(get_env_int("LS_CONDITION_REMAP_SEC", 60)) + # AFR 델타만 보정 — 동일 인덱스라도 t1859 로 RAM sticky 동기화 + self._snapshot_refresh_sec = float( + get_env_int("LS_CONDITION_SNAPSHOT_REFRESH_SEC", 120) + ) + self._tr_gap_sec = float(get_env_float("LS_CONDITION_TR_GAP_SEC", 1.1)) + self._flush_thread: Optional[threading.Thread] = None + self._maint_lock = threading.RLock() + self._last_remap_mono = 0.0 + self._last_snap_refresh_mono = 0.0 + self._last_missing_warn: Dict[str, float] = {} + self._ready = threading.Event() + self._start_ok = False + # LS 조건 유니버스 합집합 → LS WS sync 등 (main 이 등록) + self._universe_codes_listener: Optional[Callable[[Set[str]], None]] = None + # 이력: LS_CONDITION_HISTORY_ENABLED 우선, 없으면 기존 CONDITION/UNIVERSE 저장 토글 + self.history_enabled = get_env_bool( + "LS_CONDITION_HISTORY_ENABLED", + get_env_bool( + "CONDITION_HISTORY_SAVE", + get_env_bool("UNIVERSE_HISTORY_SAVE", True), + ), + ) + + def set_universe_codes_listener( + self, fn: Optional[Callable[[Set[str]], None]], + ) -> None: + """전 전략 LS 유니버스 코드 합집합이 바뀔 때 호출 (WS condition 구독 diff).""" + self._universe_codes_listener = fn + + def universe_code_union(self, *, plain6_only: Optional[bool] = None) -> Set[str]: + """RAM 상 전 전략 조건 종목 합집합.""" + if plain6_only is None: + plain6_only = get_env_bool("LS_WS_CONDITION_PLAIN6_ONLY", True) + out: Set[str] = set() + for st in list(self._states_by_sid.values()): + for it in st.items(): + code = str(it.get("code") or "").strip() + if not code: + continue + if plain6_only and not (code.isdigit() and len(code) == 6): + continue + out.add(code) + return out + + def emit_universe_union(self) -> None: + fn = self._universe_codes_listener + if fn is None: + return + try: + fn(self.universe_code_union()) + except Exception as e: + logger.debug("LS universe listener: %s", e) + + def start(self) -> bool: + if not self._configs: + logger.info("LS 조건검색 configs 비어 있음 → 매니저 비활성") + return False + if not get_env_bool("LS_CONDITION_MANAGER_ENABLED", True): + logger.info("LS_CONDITION_MANAGER_ENABLED=false → 매니저 비활성") + return False + + try: + self._rt = _load_ls_rt() + except Exception as e: + logger.warning("LS 조건 헬퍼 로드 실패: %s", e) + return False + + user_id = (self.user_id or "").strip() + if user_id in ("", "LS"): + user_id = (get_env_from_db("LS_USER_ID", "") or "").strip() + if not user_id: + logger.warning("LS_USER_ID 미설정 → LS 조건검색 매니저 비활성") + return False + self.user_id = user_id + + try: + app_key, app_secret = self._rt.load_ls_creds(use_mock=self._use_mock) + except Exception as e: + logger.warning("LS 앱키 로드 실패: %s", e) + return False + if not (app_key and app_secret): + logger.warning("LS 앱키 없음 → 조건검색 매니저 비활성") + return False + self._app_key = app_key + self._app_secret = app_secret + + if not self._ensure_token(force=True): + return False + + logger.warning( + "⚠️ LS 조건 매니저 ON — 단독 collect_ls_condition_history 와 " + "ls_candidates_history 이중 기록 가능. 수집기는 중지 권고." + ) + + # by_alert 는 watcher 와 동일 dict 참조 — rematch 시 in-place 갱신 + self._by_alert = {} + self._states_by_sid = {} + self._running = True + + # 초기 매핑 (실패해도 rematch 대기 모드로 기동 — 재시작 없이 조건 복구) + try: + self._remap_all(force_snapshot=True, force_afr=True) + except Exception as e: + logger.error("LS 초기 rematch 실패: %s", e) + + # AfrHistoryWatcher: 빈 by_alert 로도 기동 → 이후 rematch 가 REG + if not self._start_afr_watcher(): + # WS 실패여도 t1859 스냅샷·rematch 는 유지 (유니버스 sticky) + logger.warning( + "⚠️ LS AFR WS 미기동 → 스냅샷/rematch 전용 " + "(실시간 편입·이탈 없음). rematch 로 재시도." + ) + + self._flush_thread = threading.Thread( + target=self._maint_loop, daemon=True, name="LsCondMaint", + ) + self._flush_thread.start() + self._start_ok = True + self._ready.set() + n_map = len(self._states_by_sid) + n_afr = len(self._by_alert) + if n_map <= 0: + logger.warning( + "⚠️ LS 조건 매핑 0건 → rematch 대기 " + "(remap=%ss snap=%ss). 서버에 조건명 생기면 자동 부착.", + int(self._remap_sec), int(self._snapshot_refresh_sec), + ) + elif n_afr <= 0: + logger.warning( + "⚠️ LS AFR alert 0건 (매핑 %d) → 스냅샷/rematch 전용. " + "장중·조건복구 시 자동 AFR 재등록.", + n_map, + ) + else: + logger.info( + "✅ LS 조건검색 매니저 시작 (매핑=%d AFR=%d flush=%ss remap=%ss snap=%ss)", + n_map, n_afr, + int(self._flush_sec), int(self._remap_sec), + int(self._snapshot_refresh_sec), + ) + return True + + def stop(self) -> None: + self._running = False + with self._maint_lock: + for st in list(self._states_by_sid.values()): + try: + self._teardown_afr(st, clear_ram=False) + except Exception: + pass + w = self._watcher + self._watcher = None + if w is not None: + try: + w.stop() + except Exception: + pass + logger.info("⏹ LS 조건검색 매니저 정지") + + def _tr_sleep(self) -> None: + time.sleep(max(0.2, self._tr_gap_sec)) + + def _desired_bindings(self) -> List[Tuple[str, str]]: + """configs → (strategy_id, query_name) 목록.""" + out: List[Tuple[str, str]] = [] + for cfg in self._configs or []: + sid = str(cfg.get("strategy_id") or "").strip().upper() + nm = ( + str(cfg.get("name") or "").strip() + or DEFAULT_SID_TO_LS_NAME.get(sid, "") + ) + if not sid or not nm: + logger.warning("LS 조건 설정 스킵 (sid/name 부족): %s", cfg) + continue + out.append((sid, nm)) + return out + + def _ensure_token(self, *, force: bool = False) -> bool: + if self._token and not force: + return True + if not (self._app_key and self._app_secret and self._rt): + return False + try: + tok = self._rt.fetch_access_token(self._app_key, self._app_secret) + except Exception as e: + logger.warning("LS 토큰 발급 실패: %s", e) + return False + if not tok: + logger.warning("LS 토큰 빈값") + return False + self._token = str(tok) + w = self._watcher + if w is not None: + try: + w.token = self._token + except Exception: + pass + return True + + def _start_afr_watcher(self) -> bool: + if self._watcher is not None: + return True + if not self._token or self._rt is None: + return False + import importlib.util + from pathlib import Path + _mod_path = ( + Path(__file__).resolve().parents[2] + / "scripts" + / "collect_ls_condition_history.py" + ) + try: + spec = importlib.util.spec_from_file_location( + "collect_ls_condition_history_runtime", _mod_path, + ) + if spec is None or spec.loader is None: + raise ImportError(f"spec 실패: {_mod_path}") + col = importlib.util.module_from_spec(spec) + spec.loader.exec_module(col) + AfrHistoryWatcher = col.AfrHistoryWatcher + except Exception as e: + logger.error("AfrHistoryWatcher import 실패: %s", e) + return False + + ws_url = self._rt.LS_WS_MOCK if self._use_mock else self._rt.LS_WS_REAL + + def on_change(st: Any) -> None: + try: + self._apply_result(st.strategy_id, st.as_rows()) + self._save_ls_snapshot(st, source="ls_afr") + except Exception as e: + logger.warning("LS on_change: %s", e) + + self._watcher = AfrHistoryWatcher( + self._token, + ws_url, + logger, + by_alert=self._by_alert, + on_change=on_change, + also_tick_codes=None, + ) + self._watcher.start() + if not self._watcher.wait_open(20.0): + logger.error("LS AFR WS OPEN 타임아웃") + try: + self._watcher.stop() + except Exception: + pass + self._watcher = None + return False + # on_open 이 by_alert 전량 REG — 여기서 중복 REG 하지 않음 + return True + + def _warn_missing(self, sid: str, name: str) -> None: + now = time.monotonic() + last = float(self._last_missing_warn.get(sid) or 0.0) + # 동일 sid 미매칭은 5분마다 1회 (로그 폭주 방지) + gap = float(get_env_int("LS_CONDITION_MISSING_WARN_SEC", 300)) + if now - last < max(30.0, gap): + return + self._last_missing_warn[sid] = now + logger.warning( + "⚠️ LS 조건명 미매칭 sid=%s name=%r — 서버 목록에 없음. " + "HTS에서 생성·이름복구 시 rematch(%ss)로 자동 부착", + sid, name, int(self._remap_sec), + ) + + def _teardown_afr(self, st: _LsConditionState, *, clear_ram: bool) -> None: + """구 alert UNREG + t1860 D. clear_ram 시 유니버스 비움.""" + alert = str(st.alert_num or "").strip() + qidx = str(st.query_index or "").strip() + w = self._watcher + if alert and w is not None: + try: + w.reg_afr(alert, tr_type="4") + except Exception as e: + logger.debug("AFR UNREG %s: %s", alert, e) + self._by_alert.pop(alert, None) + if alert and qidx and self._token and self._rt: + try: + self._rt.t1860_realtime( + self._token, qidx, flag="D", alert_num=alert, logger=logger, + ) + self._tr_sleep() + except Exception as e: + logger.debug("t1860 D %s: %s", st.strategy_id, e) + st.alert_num = "" + if clear_ram: + st.set_from_snapshot([]) + self._apply_result(st.strategy_id, []) + self._save_ls_snapshot(st, source="ls_remap_clear") + + def _mount_snapshot_and_afr( + self, + st: _LsConditionState, + *, + do_snapshot: bool, + do_afr: bool, + ) -> None: + """t1859 → RAM, (옵션) t1860 E + AFR REG.""" + if not self._token or self._rt is None: + return + if do_snapshot: + try: + snap = self._rt.t1859_snapshot( + self._token, st.query_index, logger=logger, + ) + self._tr_sleep() + except Exception as e: + logger.warning("t1859 실패 %s: %s", st.strategy_id, e) + snap = [] + st.set_from_snapshot(snap or []) + self._apply_result(st.strategy_id, st.as_rows()) + self._save_ls_snapshot(st, source="ls_t1859") + n = len(st.as_rows()) + if n <= 0: + logger.warning( + "⚠️ LS 스냅샷 0종목 sid=%s name=%s idx=%s " + "(AFR 델타만으로는 장중 sticky 불가 → 주기 t1859 대기)", + st.strategy_id, st.query_name, st.query_index, + ) + else: + logger.info( + "📌 LS 스냅샷 sid=%s name=%s %d종목", + st.strategy_id, st.query_name, n, + ) + + if not do_afr: + return + + # 기존 alert 있으면 먼저 정리 + if str(st.alert_num or "").strip(): + self._teardown_afr(st, clear_ram=False) + + try: + ob = self._rt.t1860_realtime( + self._token, st.query_index, flag="E", alert_num="", logger=logger, + ) + self._tr_sleep() + except Exception as e: + logger.error("t1860 예외 %s: %s", st.strategy_id, e) + return + if str(ob.get("sResultFlag") or "").strip() != "S": + logger.error( + "t1860 실패 sid=%s %s", + st.strategy_id, json.dumps(ob, ensure_ascii=False), + ) + return + alert = str(ob.get("sAlertNum") or "").strip() + if (not alert) or (alert.strip("0") == ""): + logger.error( + "sAlertNum 무효 sid=%s alert=%r — AFR 스킵", + st.strategy_id, alert, + ) + return + st.alert_num = alert + self._by_alert[alert] = st + logger.info( + "✅ LS AFR 등록 sid=%s name=%s alert=%s idx=%s", + st.strategy_id, st.query_name, alert, st.query_index, + ) + # watcher 신규 기동 시 on_open 이 by_alert REG — 중복 전송 방지 + started_fresh = self._watcher is None + if started_fresh: + self._start_afr_watcher() + w = self._watcher + if w is not None and not started_fresh: + try: + w.reg_afr(alert, tr_type="3") + except Exception as e: + logger.warning("AFR REG 실패 %s: %s", alert, e) + + def _remap_all( + self, + *, + force_snapshot: bool = False, + force_afr: bool = False, + ) -> None: + """t1866 이름→index 재매핑. 변경 시 AFR 재부착 / 신규 부착 / 소실 시 해제.""" + with self._maint_lock: + if not self._ensure_token(force=False): + return + assert self._rt is not None and self._token + try: + rows = self._rt.t1866_list_conditions( + self._token, self.user_id, logger=logger, + ) + except Exception as e: + err_s = str(e).lower() + # 인증 만료 시에만 1회 재발급 (한도 존중) + if any(x in err_s for x in ("401", "403", "token", "auth", "unauthorized")): + logger.warning("t1866 인증성 오류 → 토큰 1회 재발급: %s", e) + if self._ensure_token(force=True): + try: + rows = self._rt.t1866_list_conditions( + self._token, self.user_id, logger=logger, + ) + except Exception as e2: + logger.error("t1866 재시도 실패: %s", e2) + return + else: + return + else: + logger.error("t1866 실패: %s", e) + return + + wanted = self._desired_bindings() + seen_sid: Set[str] = set() + for sid, nm in wanted: + seen_sid.add(sid) + hit = self._rt._resolve_query(rows, name=nm, query_index="") + if not hit or not hit.get("query_index"): + self._warn_missing(sid, nm) + st_old = self._states_by_sid.get(sid) + if st_old is not None: + logger.warning( + "🔄 LS 조건 소실 → 해제 sid=%s was=%s/%s", + sid, st_old.query_name, st_old.query_index, + ) + self._teardown_afr(st_old, clear_ram=True) + self._states_by_sid.pop(sid, None) + continue + + qidx = str(hit["query_index"]) + qname = str(hit.get("query_name") or nm) + st = self._states_by_sid.get(sid) + if st is None: + st = _LsConditionState( + strategy_id=sid, + query_name=qname, + query_index=qidx, + ) + self._states_by_sid[sid] = st + logger.info( + "📌 LS 신규 매핑 sid=%s name=%s query_index=%s", + sid, qname, qidx, + ) + self._mount_snapshot_and_afr( + st, do_snapshot=True, do_afr=True, + ) + continue + + idx_changed = str(st.query_index) != qidx + name_changed = str(st.query_name) != qname + need_afr = force_afr or (not str(st.alert_num or "").strip()) + if idx_changed or name_changed: + logger.warning( + "🔄 LS rematch sid=%s %s/%s → %s/%s", + sid, st.query_name, st.query_index, qname, qidx, + ) + self._teardown_afr(st, clear_ram=False) + st.query_name = qname + st.query_index = qidx + self._mount_snapshot_and_afr( + st, do_snapshot=True, do_afr=True, + ) + elif need_afr: + logger.info( + "🔄 LS AFR 재등록 sid=%s name=%s (alert 없음/강제)", + sid, st.query_name, + ) + self._mount_snapshot_and_afr( + st, do_snapshot=True, do_afr=True, + ) + elif force_snapshot: + self._mount_snapshot_and_afr( + st, do_snapshot=True, do_afr=False, + ) + + # configs 에 없는 sid 정리 (설정 제거된 경우) + for sid in list(self._states_by_sid.keys()): + if sid in seen_sid: + continue + st = self._states_by_sid.pop(sid) + logger.warning("🔄 LS 설정 제거 → 해제 sid=%s", sid) + self._teardown_afr(st, clear_ram=True) + + self._last_remap_mono = time.monotonic() + if force_snapshot: + self._last_snap_refresh_mono = self._last_remap_mono + + def _refresh_snapshots_only(self) -> None: + """인덱스 유지한 채 t1859 만 재동기화 (AFR sticky 보정).""" + with self._maint_lock: + if not self._ensure_token(force=False): + return + for st in list(self._states_by_sid.values()): + if not str(st.query_index or "").strip(): + continue + try: + self._mount_snapshot_and_afr( + st, do_snapshot=True, do_afr=False, + ) + except Exception as e: + logger.warning( + "LS snapshot refresh 실패 %s: %s", st.strategy_id, e, + ) + self._last_snap_refresh_mono = time.monotonic() + + def _maint_loop(self) -> None: + """flush + rematch + t1859 sticky 주기 루프.""" + # 기동 직후 즉시 rematch 하지 않음 (start 에서 1회 완료) + now0 = time.monotonic() + self._last_remap_mono = now0 + self._last_snap_refresh_mono = now0 + last_flush_mono = now0 + while self._running: + tick = min( + max(5.0, self._flush_sec), + max(5.0, self._remap_sec), + max(5.0, self._snapshot_refresh_sec), + ) + time.sleep(tick) + if not self._running: + return + now = time.monotonic() + try: + if now - self._last_remap_mono >= max(5.0, self._remap_sec): + self._remap_all(force_snapshot=False, force_afr=False) + now = time.monotonic() + if ( + now - self._last_snap_refresh_mono + >= max(5.0, self._snapshot_refresh_sec) + ): + self._refresh_snapshots_only() + now = time.monotonic() + if now - last_flush_mono >= max(5.0, self._flush_sec): + for st in list(self._states_by_sid.values()): + try: + self._save_ls_snapshot(st, source="ls_flush") + except Exception as e: + logger.debug( + "LS flush 실패 %s: %s", st.strategy_id, e, + ) + last_flush_mono = time.monotonic() + except Exception as e: + logger.warning("LS maint 루프 예외: %s", e) + + def _save_snapshot( + self, + strategy_id: str, + codes_ordered: List[str], + names: Dict[str, str], + ) -> None: + """부모는 target_candidates_history — LS 는 override 로 no-op 후 별도 저장.""" + # _apply_result 가 호출하는 부모 경로를 차단 (키움 테이블 오염 금지) + return + + def _save_ls_snapshot(self, st: _LsConditionState, *, source: str) -> None: + if self.history_enabled and self.db is not None: + n = insert_ls_candidates_snapshot( + self.db, + strategy_id=st.strategy_id, + query_name=st.query_name, + query_index=st.query_index, + items=st.items(), + source=source, + ) + logger.debug( + "📼 [ls_history] %s src=%s %d종목", + st.strategy_id, source, n, + ) + # 이력 OFF 여도 WS follow 를 위해 합집합 emit + self.emit_universe_union() diff --git a/kis_trader/network/ls_ws_validator.py b/kis_trader/network/ls_ws_validator.py new file mode 100644 index 0000000..66bb237 --- /dev/null +++ b/kis_trader/network/ls_ws_validator.py @@ -0,0 +1,168 @@ +""" +kis_trader/network/ls_ws_validator.py — KIS/키움 ↔ LS 시세 갭 검증 +================================================================ +``LS_WS_VALIDATION_ENABLED=true`` 일 때만 기동. +실매 시세 경로는 건드리지 않음 — 구독 동기화 + DB 비교 INSERT 만. +""" +from __future__ import annotations + +import threading +import time +from typing import Optional, Set + +from ..utils.env import get_env_float, get_env_int +from ..utils.logger import get_logger + +logger = get_logger("kis_trader.ls_ws_validator") + + +class LSWSPriceValidator: + """KIS(+키움) 구독 종목을 LS 에도 맞추고 가격 갭을 기록.""" + + def __init__( + self, + *, + ls_ws, + db, + kis_ws=None, + kiwoom_ws=None, + ) -> None: + self.ls_ws = ls_ws + self.db = db + self.kis_ws = kis_ws + self.kiwoom_ws = kiwoom_ws + self._thread: Optional[threading.Thread] = None + self._running = False + self._last_warn_ts: dict = {} + + def start(self) -> bool: + if self._thread and self._thread.is_alive(): + return True + self._running = True + self._thread = threading.Thread( + target=self._loop, daemon=True, name="LSWSPriceValidator", + ) + self._thread.start() + logger.info( + "✅ LS WS 갭 검증기 시작 (interval=%ds warn≥%.2f%%)", + self._interval_sec(), + self._warn_pct(), + ) + return True + + def stop(self) -> None: + self._running = False + + def _interval_sec(self) -> int: + return max(1, get_env_int("LS_WS_VALIDATION_INTERVAL_SEC", 5)) + + def _warn_pct(self) -> float: + return max(0.0, get_env_float("LS_WS_VALIDATION_DIFF_WARN_PCT", 0.10)) + + def _codes_from(self, ws) -> Set[str]: + if ws is None: + return set() + try: + with ws._sub_lock: # type: ignore[attr-defined] + return set(ws._subscribed) # type: ignore[attr-defined] + except Exception: + return set() + + def _sync_ls(self, target: Set[str]) -> None: + try: + with self.ls_ws._sub_lock: + current = set(self.ls_ws._subscribed) + # KR 6자리만 동기화 (US 는 영구구독에서 별도 붙일 수 있음) + kr_target = {c for c in target if c.isdigit() and len(c) == 6} + for code in kr_target - current: + self.ls_ws.subscribe(code) + for code in current - kr_target: + self.ls_ws.unsubscribe(code) + except Exception as e: + logger.debug("LS 구독 동기화 실패: %s", e) + + def _parse_price(self, data, key: str = "stck_prpr") -> Optional[float]: + if not data: + return None + raw = data.get(key) + if raw is None and "_price_f" in data: + raw = data.get("_price_f") + try: + v = float(str(raw).replace(",", "")) + return v if v > 0 else None + except (TypeError, ValueError): + return None + + def _parse_age_ms(self, data) -> Optional[int]: + if not data: + return None + try: + return int(data.get("_age_ms")) + except (TypeError, ValueError): + return None + + def _loop(self) -> None: + time.sleep(15) + while self._running: + try: + self._tick() + except Exception as e: + logger.warning("LS 검증기 tick 예외: %s", e) + time.sleep(self._interval_sec()) + + def _tick(self) -> None: + kis_codes = self._codes_from(self.kis_ws) + kw_codes = self._codes_from(self.kiwoom_ws) + codes = kis_codes | kw_codes + if not codes: + return + self._sync_ls(codes) + if not self.ls_ws.is_connected(): + return + + warn_pct = self._warn_pct() + n = 0 + for code in codes: + if not (code.isdigit() and len(code) == 6): + continue + kis_data = ( + self.kis_ws.get_price(code, max_age_sec=10.0) + if self.kis_ws is not None + else None + ) + kw_data = ( + self.kiwoom_ws.get_price(code, max_age_sec=10.0) + if self.kiwoom_ws is not None and self.kiwoom_ws.is_connected() + else None + ) + ls_data = self.ls_ws.get_price(code, max_age_sec=10.0) + + kis_p = self._parse_price(kis_data) + kw_p = self._parse_price(kw_data) + ls_p = self._parse_price(ls_data) + if ls_p is None and kis_p is None and kw_p is None: + continue + + self.db.insert_ws_price_validation_ls( + code=code, + kis_price=kis_p, + kiwoom_price=kw_p, + ls_price=ls_p, + kis_age_ms=self._parse_age_ms(kis_data), + kiwoom_age_ms=self._parse_age_ms(kw_data), + ls_age_ms=self._parse_age_ms(ls_data), + ) + n += 1 + + if kis_p not in (None, 0) and ls_p is not None: + diff = (ls_p - kis_p) / kis_p * 100.0 + if abs(diff) >= warn_pct: + now = time.time() + if now - self._last_warn_ts.get(code, 0) >= 60: + self._last_warn_ts[code] = now + logger.warning( + "⚠️ [LS 갭] %s KIS↔LS %.3f%% (KIS=%.0f LS=%.0f)", + code, diff, kis_p, ls_p, + ) + if n > 0: + logger.debug("LS 갭 검증 샘플 %d건", n) diff --git a/kis_trader/network/ws_manager.py b/kis_trader/network/ws_manager.py index 5639aa4..be73da7 100644 --- a/kis_trader/network/ws_manager.py +++ b/kis_trader/network/ws_manager.py @@ -115,6 +115,8 @@ class WSManager: self._lock = threading.Lock() # 갭보정 WS 재접속 시: split 모드면 KIS∪키움 관심 종목 전체 self._gap_refill_codes: Set[str] = set() + # BaseStrategy 틱매도 등 — 시세 캐시 갱신 리스너 + self._price_listeners: list = [] # ── 갭보정 비동기 파이프라인 ───────────────────────────── # (전략 쓰레드에서 subscribe() 시 동기 REST 호출하면 매수 체크가 @@ -126,12 +128,19 @@ class WSManager: self._gap_inflight: Set[str] = set() # 큐에 등록/처리 중인 코드 self._gap_retry_count: Dict[str, int] = {} # TF 실패 시 재시도 카운터 self._gap_tf_ok: Dict[str, Set[int]] = {} # 종목별 성공한 TF (재시도 시 스킵) + # 최대 재시도 초과 후 force 재큐 차단 (전략 check_buy 매초 fill_gap(force) 폭주 방지) + self._gap_give_up_until: Dict[str, float] = {} + self._gap_empty_log_ts: Dict[str, float] = {} # 빈응답 로그 스로틀 + self._gap_empty_hit_ts: List[float] = [] # 전역 빈응답 회로차단용 + self._gap_empty_circuit_until: float = 0.0 self._gap_lock = threading.Lock() self._gap_worker_threads: List[threading.Thread] = [] self._gap_worker_boot_logged = False # 전체 재갭보정(재접속 시) 중복 트리거 방지 self._bulk_refill_running = False self._bulk_refill_last_ts: float = 0.0 + # 평일 장시작 1회 — 장외 거짓완료 마커 클리어 + bulk refill (YYYYMMDD) + self._gap_session_day: Optional[str] = None # 키움 ka10001 유통/상장주식수 — 전략 공통 (stock_share_meta DB 동기) self._share_cache: Dict[str, Dict[str, int]] = {} self._share_q: "queue.Queue[str]" = queue.Queue(maxsize=1024) @@ -139,6 +148,17 @@ class WSManager: self._share_lock = threading.Lock() self._share_worker_thread: Optional[threading.Thread] = None + # ── ls_condition 전략 시세 라우팅 (키움/KIS 와 분리) ───────────── + # owner → 해당 전략의 LS 피드 코드 (후보∪보유) + self._ls_feed_owners: Dict[str, Set[str]] = defaultdict(set) + self._ls_gap_q: "queue.Queue[str]" = queue.Queue(maxsize=512) + self._ls_gap_filled: Set[str] = set() + self._ls_gap_inflight: Set[str] = set() + self._ls_gap_fail: Dict[str, int] = {} + self._ls_gap_lock = threading.Lock() + self._ls_gap_worker_threads: List[threading.Thread] = [] + self._ls_ws_missing_warned: bool = False + # ------------------------------------------------------------------ # 시작/종료 # ------------------------------------------------------------------ @@ -206,6 +226,7 @@ class WSManager: self._load_share_cache_from_db() self._start_share_meta_worker() self._start_gap_worker() + self._start_ls_gap_worker() # 영구 구독 (KOSPI/KOSDAQ ETF 등) self._load_permanent_codes() @@ -218,11 +239,12 @@ class WSManager: # 연결 성공 후 자동 갭 보정 등록 (WS 재접속 시 전체 재갭보정) self.ws_cache.set_on_connected_callback(self._trigger_bulk_refill_async) + self._reattach_all_price_listeners() logger.info( "✅ WSManager 활성 (tfs=%s, permanent=%d, gap_workers=%d)", tfs, len(self._permanent_codes), - max(1, min(get_env_int("WS_GAP_FILL_WORKERS", 4), 4)), + max(1, min(get_env_int("WS_GAP_FILL_WORKERS", 2), 4)), ) return True except Exception as e: @@ -248,6 +270,7 @@ class WSManager: def set_kiwoom_ws(self, kiwoom_ws: Any) -> None: """키움 WS 인스턴스 (기동 후 주입). ``activate_split_feed`` 전에 설정.""" self._kiwoom_ws = kiwoom_ws + self._reattach_all_price_listeners() def activate_split_feed(self, active: bool) -> None: """``WS_SUBSCRIBE_KIS_MINIMAL`` + 키움 준비 완료 후 True → 후보 구독을 키움으로.""" @@ -260,23 +283,178 @@ class WSManager: owner: str, candidates: Iterable[str], holdings: Iterable[str], + *, + ls_feed: bool = False, ) -> None: - """전략별 후보/보유를 분리 반영. ``WS_SUBSCRIBE_KIS_MINIMAL`` 아니면 레거시와 동일.""" + """전략별 후보/보유를 분리 반영. ``WS_SUBSCRIBE_KIS_MINIMAL`` 아니면 레거시와 동일. + + ls_feed=True (``UNIVERSE_SOURCE=ls_condition``): + - LS US3 구독 → 틱·현재가 (ls_ws_ticks 와 동일 파이프) + - 키움 구독·갭보정·분봉은 **그대로** (pure_ls 제외 안 함) + """ cand = {str(c).strip() for c in candidates if c} hold = {str(h).strip() for h in holdings if h} + with self._lock: + if ls_feed: + self._ls_feed_owners[owner] = set(cand | hold) + else: + self._ls_feed_owners.pop(owner, None) if not self._split_feed_active: + if ls_feed: + self._reconcile_ls_feed_subscriptions() self.sync_targets(owner, cand | hold) return if not self._kiwoom_ws: logger.warning( "⚠️ WS 분리 시세 요청이나 키움 WS 없음 → KIS 전체 구독(레거시)으로 폴백", ) + if ls_feed: + self._reconcile_ls_feed_subscriptions() self.sync_targets(owner, cand | hold) return with self._lock: self._owner_candidates[owner] = cand self._owner_holdings[owner] = hold self._reconcile_split_subscriptions() + self._reconcile_ls_feed_subscriptions() + + def _ls_feed_codes_locked(self) -> Set[str]: + """호출자 _lock 보유 가정.""" + out: Set[str] = set() + for s in self._ls_feed_owners.values(): + out |= s + return out + + def _non_ls_codes_locked(self) -> Set[str]: + """ls_feed 가 아닌 전략의 후보∪보유. 호출자 _lock 보유.""" + ls_owners = set(self._ls_feed_owners.keys()) + out: Set[str] = set() + for own, s in self._owner_candidates.items(): + if own not in ls_owners: + out |= s + for own, s in self._owner_holdings.items(): + if own not in ls_owners: + out |= s + # 레거시 sync_targets 경로 + for own, s in self._owner_codes.items(): + if own not in ls_owners: + out |= s + return out + + def _pure_ls_codes_locked(self) -> Set[str]: + """예전: LS 전용 코드를 키움/갭에서 빼던 집합. + + 지금은 비움 — ls_condition 도 키움 갭·분봉을 쓰고, LS 는 틱만. + """ + return set() + + def is_ls_feed_code(self, code: str) -> bool: + """LS 틱·현재가 라우팅 대상 (갭/분봉은 키움).""" + with self._lock: + return code in self._ls_feed_codes_locked() + + def _get_ls_ws(self): + try: + from ..ws.ls_ws import get_active_ls_ws + return get_active_ls_ws() + except Exception: + return None + + def _reconcile_ls_feed_subscriptions(self) -> None: + """ls_condition 코드를 LS US3 에만 sync — 갭(t8412)은 돌리지 않음.""" + with self._lock: + owners = { + str(o): set(codes) + for o, codes in self._ls_feed_owners.items() + } + if not owners: + return + ls_ws = self._get_ls_ws() + if ls_ws is None: + if not self._ls_ws_missing_warned: + logger.warning( + "⚠️ ls_condition 틱용 LS WS 미기동 — " + "AFR/틱 수신 실패 가능 (main LS WS 확인)", + ) + self._ls_ws_missing_warned = True + return + self._ls_ws_missing_warned = False + for owner, codes in owners.items(): + try: + ls_ws.sync_owner_codes(owner, codes) + except Exception as e: + logger.warning("LS sync_owner_codes(%s) 실패: %s", owner, e) + + def _enqueue_ls_gap_fill(self, code: str, *, force: bool = False, priority: bool = False) -> None: + if not code or not get_env_bool("LS_GAP_FILL_ENABLED", True): + return + fail_max = max(1, get_env_int("LS_GAP_FILL_FAIL_MAX", 5)) + with self._ls_gap_lock: + if self._ls_gap_fail.get(code, 0) >= fail_max and not force: + return + if code in self._ls_gap_inflight: + return + if code in self._ls_gap_filled and not force: + return + if force: + self._ls_gap_filled.discard(code) + self._ls_gap_inflight.add(code) + try: + self._ls_gap_q.put_nowait(code) + except queue.Full: + with self._ls_gap_lock: + self._ls_gap_inflight.discard(code) + logger.warning("⚠️ LS 갭보정 큐 full → %s 스킵", code) + + def _start_ls_gap_worker(self) -> None: + if self._ls_gap_worker_threads: + alive = [t for t in self._ls_gap_worker_threads if t.is_alive()] + if alive: + return + n = max(1, min(get_env_int("LS_GAP_FILL_WORKERS", 1), 2)) + threads = [] + for i in range(n): + t = threading.Thread( + target=self._ls_gap_worker_loop, + name=f"WS-LSGapWorker-{i}", + daemon=True, + ) + t.start() + threads.append(t) + self._ls_gap_worker_threads = threads + logger.info("✅ LS 갭보정 워커 시작 (t8412, workers=%d)", n) + + def _ls_gap_worker_loop(self) -> None: + while True: + try: + try: + code = self._ls_gap_q.get(timeout=1.0) + except queue.Empty: + continue + if not code: + continue + ok = False + try: + ls_ws = self._get_ls_ws() + if ls_ws is None: + logger.debug("LS 갭 워커: LS WS 없음 code=%s", code) + else: + n = int(ls_ws.fill_gap_from_rest(code) or 0) + ok = n > 0 + if not ok: + logger.debug("LS 갭 빈응답 code=%s", code) + except Exception as e: + logger.warning("LS 갭 실패 %s: %s", code, e) + with self._ls_gap_lock: + self._ls_gap_inflight.discard(code) + if ok: + self._ls_gap_filled.add(code) + self._ls_gap_fail.pop(code, None) + else: + self._ls_gap_fail[code] = int(self._ls_gap_fail.get(code, 0)) + 1 + except Exception as e: + logger.debug("LS gap worker: %s", e) + time.sleep(0.5) def _reconcile_split_subscriptions(self) -> None: """KIS/키움 구독 집합을 후보·보유·영구 기준으로 재동기화.""" @@ -295,9 +473,13 @@ class WSManager: for s in self._owner_holdings.values(): hold_u |= s perm = set(self._permanent_codes) - kis_want = perm | hold_u - kw_want = cand_u | hold_u | perm - tick_to_agg = set(cand_u - hold_u) + pure_ls = self._pure_ls_codes_locked() - perm + # ls_condition 전용 종목은 키움/KIS 후보·갭에서 제외 (교차 폭주 방지) + cand_u_kw = cand_u - pure_ls + hold_u_kw = hold_u - pure_ls + kis_want = perm | hold_u_kw + kw_want = cand_u_kw | hold_u_kw | perm + tick_to_agg = set(cand_u_kw - hold_u_kw) self._gap_refill_codes = set(kis_want) | set(kw_want) # 재진입 시 grace 재사용 가능하도록 소진 플래그 해제 active_want = cand_u | hold_u | perm @@ -341,7 +523,10 @@ class WSManager: str(owner): set(codes) for owner, codes in self._owner_candidates.items() } + pure_ls_now = self._pure_ls_codes_locked() for code in added_kw: + if code in pure_ls_now: + continue # 방어: LS 전용은 키움 갭 enqueue 금지 if code in self._permanent_codes: self._enqueue_gap_fill(code) else: @@ -525,7 +710,7 @@ class WSManager: if first_ref and self.ws_cache: self.ws_cache.subscribe(code) - # 신규 구독 → 워커에게 갭보정 위임 (논블로킹) + # 신규 구독 → 워커에게 갭보정 위임 (논블로킹) — 키움/KIS 경로 self._enqueue_gap_fill(code) self._sync_tick_record_codes() @@ -578,19 +763,22 @@ class WSManager: return [] return [] - def get_current_candle(self, code: str, tf: int) -> Optional[dict]: - """진행 중 봉 (RAM, is_confirmed=0) — B안 거래량·양봉 판정용.""" - if self.candle_agg: - try: - return self.candle_agg.get_current_candle(code, tf) - except Exception: - return None - return None - # ------------------------------------------------------------------ # 조회 헬퍼 (전략이 쓰는 API) # ------------------------------------------------------------------ def get_price(self, code: str, max_age_sec: float = 5.0) -> Optional[dict]: + # ls_condition 전략 코드 → LS WS 우선 + if self.is_ls_feed_code(code): + ls_ws = self._get_ls_ws() + if ls_ws is not None: + try: + p = ls_ws.get_price(code, max_age_sec=max_age_sec) + if p: + return p + except Exception: + pass + else: + logger.debug("LS 피드 코드이나 LS WS 없음: %s", code) if self.ws_cache: try: p = self.ws_cache.get_price(code, max_age_sec=max_age_sec) @@ -605,6 +793,41 @@ class WSManager: return None return None + def register_price_listener(self, callback) -> None: + """현재가 틱 갱신 콜백. callback(code, price, data_dict). BaseStrategy 틱매도용.""" + if callback is None: + return + if callback not in self._price_listeners: + self._price_listeners.append(callback) + self._attach_price_listener(callback) + + def _attach_price_listener(self, callback) -> None: + for src in (self.ws_cache, self._kiwoom_ws, self._get_ls_ws()): + if src is not None and hasattr(src, "add_price_listener"): + try: + src.add_price_listener(callback) + except Exception: + pass + + def unregister_price_listener(self, callback) -> None: + if callback is None: + return + try: + self._price_listeners.remove(callback) + except ValueError: + pass + for src in (self.ws_cache, self._kiwoom_ws, self._get_ls_ws()): + if src is not None and hasattr(src, "remove_price_listener"): + try: + src.remove_price_listener(callback) + except Exception: + pass + + def _reattach_all_price_listeners(self) -> None: + """키움/KIS WS 기동·교체 후 기존 리스너 재연결.""" + for cb in list(self._price_listeners): + self._attach_price_listener(cb) + def get_orderbook_snapshot(self, code: str, max_age_sec: float = 3.0): """키움 0D 호가 스냅샷 (분리 시세·키움 WS 활성 시).""" if self._kiwoom_ws and hasattr(self._kiwoom_ws, "get_orderbook_snapshot"): @@ -639,6 +862,7 @@ class WSManager: return None def get_candles(self, code: str, tf: int, n: int = 50) -> list: + # ls_condition 도 분봉은 키움 갭·candle_agg (틱만 LS) if self.candle_agg: try: return self.candle_agg.get_candles(code, tf, n) @@ -650,21 +874,50 @@ class WSManager: except Exception: return [] + def get_current_candle(self, code: str, tf: int) -> Optional[dict]: + """진행 중 봉 (RAM, is_confirmed=0) — B안 거래량·양봉 판정용.""" + if self.candle_agg: + try: + return self.candle_agg.get_current_candle(code, tf) + except Exception: + return None + return None + def fill_gap( self, codes: Optional[Iterable[str]] = None, *, force: bool = False, ) -> None: - """외부에서 수동으로 갭 보정 트리거 (비동기: 큐 등록 후 즉시 리턴). + """갭 보정 — 전부 키움/KIS 기존 경로 (LS t8412 안 씀). - force=True: 이미 ``_gap_filled`` 여도 재큐 (RAM 삭제 후 재ENTER·봉부족 복구). + force=True: 이미 ``_gap_filled`` 여도 재큐. """ + self._maybe_arm_session_gap_refill() if codes is None: self._trigger_bulk_refill_async() - else: - for c in codes: - self._enqueue_gap_fill(c, force=bool(force), priority=bool(force)) + return + for c in codes: + self._enqueue_gap_fill(c, force=bool(force), priority=bool(force)) + + def _maybe_arm_session_gap_refill(self) -> None: + """평일 장시작 세션 1회: 장외 거짓완료 마커 제거 + 구독 종목 bulk refill. + + 주말/장외에 ``_gap_filled`` 만 찍히면 개장 직후 REST 없이 have=0 레이스가 난다. + """ + if not self._is_market_hours(): + return + day = time.strftime("%Y%m%d") + if self._gap_session_day == day: + return + self._gap_session_day = day + logger.info( + "🔄 [갭보정-장시작] 세션 %s 오픈 → 완료마커 클리어 + bulk refill", + day, + ) + # debounce 우회: 세션 오픈은 강제 (직전 장외 bulk 와 충돌해도 재실행) + self._bulk_refill_last_ts = 0.0 + self._trigger_bulk_refill_async() def _clear_gap_fill_state(self, code: str) -> None: """RAM 봉 삭제와 짝 — 갭보정 완료 마커 해제. @@ -677,6 +930,80 @@ class WSManager: with self._gap_lock: self._gap_filled.discard(code) self._gap_tf_ok.pop(code, None) + self._gap_retry_count.pop(code, None) + self._gap_give_up_until.pop(code, None) + self._gap_empty_log_ts.pop(code, None) + + def _gap_give_up_sec(self) -> float: + """최대 재시도 초과 후 force 재큐 차단 시간(초). 계정 REST 폭주 방지.""" + return float(get_env_float("WS_GAP_FILL_GIVE_UP_SEC", 300.0)) + + def _gap_in_give_up(self, code: str, *, now: Optional[float] = None) -> bool: + """포기 쿨다운 중이면 True. 만료 시 카운터 리셋 후 False.""" + ts = float(now if now is not None else time.time()) + with self._gap_lock: + until = float(self._gap_give_up_until.get(code, 0.0) or 0.0) + if until <= 0: + return False + if ts < until: + return True + self._gap_give_up_until.pop(code, None) + self._gap_retry_count.pop(code, None) + return False + + def _mark_gap_give_up(self, code: str) -> None: + """REST 실패 상한 도달 — 전략 force 재큐를 일정 시간 무시.""" + sec = self._gap_give_up_sec() + if sec <= 0 or not code: + return + until = time.time() + sec + with self._gap_lock: + self._gap_give_up_until[code] = until + logger.warning( + "🛑 [갭보정] %s 포기 쿨다운 %.0fs — force 재큐 차단 (REST 폭주 방지)", + code, sec, + ) + + def _gap_empty_circuit_open(self) -> bool: + """짧은 구간에 빈응답이 몰리면 전역 갭보정 REST 일시 정지.""" + now = time.time() + with self._gap_lock: + if now < float(self._gap_empty_circuit_until or 0.0): + return True + return False + + def _note_gap_empty_response(self, code: str, tf: int) -> None: + """빈응답 기록 + 로그 스로틀 + 전역 회로차단 갱신.""" + now = time.time() + win = float(get_env_float("WS_GAP_FILL_EMPTY_CIRCUIT_WINDOW_SEC", 10.0)) + max_hits = get_env_int("WS_GAP_FILL_EMPTY_CIRCUIT_MAX", 40) + pause = float(get_env_float("WS_GAP_FILL_EMPTY_CIRCUIT_PAUSE_SEC", 60.0)) + log_every = float(get_env_float("WS_GAP_FILL_EMPTY_LOG_SEC", 30.0)) + opened = False + with self._gap_lock: + last_log = float(self._gap_empty_log_ts.get(code, 0.0) or 0.0) + do_log = (now - last_log) >= log_every + if do_log: + self._gap_empty_log_ts[code] = now + if win > 0 and max_hits > 0: + self._gap_empty_hit_ts.append(now) + cut = now - win + self._gap_empty_hit_ts = [t for t in self._gap_empty_hit_ts if t >= cut] + if len(self._gap_empty_hit_ts) >= max_hits and pause > 0: + if now >= float(self._gap_empty_circuit_until or 0.0): + self._gap_empty_circuit_until = now + pause + self._gap_empty_hit_ts.clear() + opened = True + if do_log: + logger.warning( + "⚠️ [갭보정] %s %dM → REST 빈 응답 (재시도 대상)", code, tf, + ) + if opened: + logger.error( + "🚨 [갭보정] 빈응답 폭주 → 전역 REST %.0fs 정지 " + "(window=%.0fs max=%d) — 계정 한도 보호", + pause, win, max_hits, + ) def _remove_candle_ram(self, code: str) -> None: """구독 해제 시 RAM 봉 정리 + 갭보정 재실행 가능하도록 상태 리셋.""" @@ -694,7 +1021,7 @@ class WSManager: # ------------------------------------------------------------------ def _start_gap_worker(self) -> None: """갭보정 백그라운드 워커 N개 기동 — 우선큐(후보 1M)와 일반큐 병렬 소진.""" - want = max(1, min(get_env_int("WS_GAP_FILL_WORKERS", 4), 4)) + want = max(1, min(get_env_int("WS_GAP_FILL_WORKERS", 2), 4)) alive = [t for t in self._gap_worker_threads if t.is_alive()] if len(alive) >= want: return @@ -758,6 +1085,11 @@ class WSManager: return mode_key = str(mode).strip().lower() fill_mode = mode_key if mode_key in ("1m", "3m") else "full" + # 빈응답 회로차단 / 종목 포기 쿨다운 — force 여부와 무관하게 REST 재큐 차단 + if self._gap_empty_circuit_open(): + return + if self._gap_in_give_up(code): + return with self._gap_lock: if code in self._gap_inflight: return @@ -942,18 +1274,32 @@ class WSManager: 1 if gap_mode == "1m" else (3 if gap_mode == "3m" else None) ) - # 장중만 실행 (장외면 완료 마커 찍고 다음) + # 장시작 세션 암 — 워커가 장중 첫 작업을 잡을 때도 보장 + self._maybe_arm_session_gap_refill() + + # 장중만 REST. 장외는 완료 마커를 찍지 않음(거짓완료 → 개장 have=0 방지). if not self._is_market_hours() and not get_env_bool("WS_GAP_FILL_OFF_HOURS", False): with self._gap_lock: self._gap_inflight.discard(code) self._gap_mode.pop(code, None) - self._gap_filled.add(code) if from_prio: self._gap_prio_q.task_done() else: self._gap_q.task_done() continue + # 전역 빈응답 회로차단 중이면 REST 호출 없이 큐만 비움 (재큐는 enqueue가 막음) + if self._gap_empty_circuit_open(): + with self._gap_lock: + self._gap_inflight.discard(code) + self._gap_mode.pop(code, None) + if from_prio: + self._gap_prio_q.task_done() + else: + self._gap_q.task_done() + time.sleep(0.2) + continue + if kw_key is None: kw_key, kw_secret, kw_mock = self._get_kiwoom_credentials() with self._gap_lock: @@ -969,7 +1315,7 @@ class WSManager: else: kw_status = "❌" n_workers = max( - 1, min(get_env_int("WS_GAP_FILL_WORKERS", 4), 4), + 1, min(get_env_int("WS_GAP_FILL_WORKERS", 2), 4), ) logger.info( "🔧 [갭보정-워커×%d] kiwoom=%s, KIS_fallback=%s", @@ -977,6 +1323,11 @@ class WSManager: kw_status, "ON" if get_env_bool("WS_GAP_FILL_KIS_FALLBACK", False) else "OFF", ) + # 키움 ka10080 유량=5 — 워커 수 > 세마포어면 대기만 늘어남 + logger.info( + "🔧 [갭보정] ka10080 MAX_INFLIGHT=%d (유량=5 보호)", + max(1, min(get_env_int("KIWOOM_KA10080_MAX_INFLIGHT", 2), 4)), + ) self._gap_worker_boot_logged = True try: @@ -993,6 +1344,7 @@ class WSManager: logger.debug("갭보정 워커 예외 (%s): %s", code, e) ok = False finally: + _give_up_code: Optional[str] = None with self._gap_lock: self._gap_inflight.discard(code) self._gap_mode.pop(code, None) @@ -1013,6 +1365,7 @@ class WSManager: else: self._gap_filled.add(code) self._gap_retry_count.pop(code, None) + self._gap_give_up_until.pop(code, None) else: retries = self._gap_retry_count.get(code, 0) + 1 max_retries = get_env_int("WS_GAP_FILL_MAX_RETRIES", 3) @@ -1036,9 +1389,11 @@ class WSManager: code, partial_tf, ) self._gap_filled.add(code) + _give_up_code = code elif ok: self._gap_filled.add(code) self._gap_retry_count.pop(code, None) + self._gap_give_up_until.pop(code, None) else: retries = self._gap_retry_count.get(code, 0) + 1 max_retries = get_env_int("WS_GAP_FILL_MAX_RETRIES", 3) @@ -1059,6 +1414,10 @@ class WSManager: code, ) self._gap_filled.add(code) + _give_up_code = code + + if _give_up_code: + self._mark_gap_give_up(_give_up_code) if from_prio: self._gap_prio_q.task_done() @@ -1330,6 +1689,8 @@ class WSManager: return False if not self._is_market_hours() and not get_env_bool("WS_GAP_FILL_OFF_HOURS", False): return False + if self._gap_empty_circuit_open(): + return False if self._all_gap_tfs_ok(code): return True @@ -1408,7 +1769,10 @@ class WSManager: if tf == 1: self._maybe_rollup_3m_from_1m(code) else: - logger.warning("⚠️ [갭보정] %s %dM → REST 빈 응답 (재시도 대상)", code, tf) + self._note_gap_empty_response(code, tf) + # 한 TF 빈응답이면 같은 패스의 나머지 TF REST도 생략 (1M+3M 이중 폭격 방지) + if get_env_bool("WS_GAP_FILL_ABORT_TF_ON_EMPTY", True): + break prev_tf = tf self._gap_tf_sleep() diff --git a/kis_trader/scripts/prune_env_config_strategy_columns.py b/kis_trader/scripts/prune_env_config_strategy_columns.py index 10e1a58..336bac3 100644 --- a/kis_trader/scripts/prune_env_config_strategy_columns.py +++ b/kis_trader/scripts/prune_env_config_strategy_columns.py @@ -88,7 +88,7 @@ def backup_all(db: TradeDB, out_dir: Path) -> Dict[str, Any]: meta["env_config_rows"] = len(full_rows) for tbl in ( - "config_scalp", "config_short", "config_momentum", "config_breakout", + "config_scalp", "config_short", "config_momentum", "config_us_momentum", "config_breakout", "config_range_break", "config_updow", "config_dbband", "env_config_ext", ): try: diff --git a/kis_trader/scripts/show_account_snapshot.py b/kis_trader/scripts/show_account_snapshot.py index 2ab88a6..7561486 100644 --- a/kis_trader/scripts/show_account_snapshot.py +++ b/kis_trader/scripts/show_account_snapshot.py @@ -77,10 +77,21 @@ def _extract_snapshot(balance: Dict[str, Any], client: KISClient) -> Dict[str, A dnca = _parse_amt(out2.get("dnca_tot_amt")) d2 = _parse_amt(out2.get("prvs_rcdl_excc_amt")) - ord_psbl = _pick_first_positive( - out2, - ["ord_psbl_cash", "ord_psbl_amt", "ord_psbl", "buy_psbl_cash", "buy_psbl_amt"], - ) + # 잔고 API 에는 주문가능현금 없음 → 매수가능조회(inquire-psbl-order) + ord_psbl = 0.0 + try: + psbl = client.inquire_psbl_order("005930", price=0, ord_dvsn="01") or {} + ord_psbl = _pick_first_positive( + psbl, + ["ord_psbl_cash", "nrcvb_buy_amt", "max_buy_amt"], + ) + except Exception: + ord_psbl = 0.0 + if ord_psbl <= 0: + ord_psbl = _pick_first_positive( + out2, + ["ord_psbl_cash", "ord_psbl_amt", "ord_psbl", "buy_psbl_cash", "buy_psbl_amt"], + ) total_asset = _parse_amt(out2.get("tot_evlu_amt")) if total_asset <= 0: holding_eval = 0.0 diff --git a/kis_trader/strategies/__init__.py b/kis_trader/strategies/__init__.py index ac6db8c..a3ada36 100644 --- a/kis_trader/strategies/__init__.py +++ b/kis_trader/strategies/__init__.py @@ -8,6 +8,7 @@ from .base import BaseStrategy from .breakout import BreakoutStrategy from .range_break import RangeBreakStrategy from .momentum import MomentumStrategy +from .us_momentum import UsMomentumStrategy from .scalping import ScalpingStrategy from .tail_catch import TailCatchStrategy from .updow_strategy import UpdowStrategy @@ -21,6 +22,7 @@ __all__ = [ "BreakoutStrategy", "RangeBreakStrategy", "MomentumStrategy", + "UsMomentumStrategy", "UpdowStrategy", "DbBandStrategy", "DartStrategy", diff --git a/kis_trader/strategies/base.py b/kis_trader/strategies/base.py index 95d6c62..725a974 100644 --- a/kis_trader/strategies/base.py +++ b/kis_trader/strategies/base.py @@ -76,6 +76,7 @@ class BaseStrategy(ABC, threading.Thread): condition_mgr=None, ranking_mgr=None, kiwoom_condition_mgr=None, + ls_condition_mgr=None, market_guard=None, ): super().__init__(daemon=True, name=f"Strat-{self.strategy_id}") @@ -87,19 +88,23 @@ class BaseStrategy(ABC, threading.Thread): self.ranking_mgr = ranking_mgr # VolumeRankManager (선택) # KiwoomConditionSearchManager (키움 WS 실시간 조건검색, 선택). KIS 와 별개 소스. self.kiwoom_condition_mgr = kiwoom_condition_mgr + # LsConditionSearchManager (LS AFR 조건검색, 선택). 시세는 키움/한투 유지. + self.ls_condition_mgr = ls_condition_mgr self.market_guard = market_guard # MarketGuard (선택, None 이면 가드 없음) self.logger = get_logger(f"kis_trader.strategy.{self.strategy_id}") # MarketGuard PANIC 차단 로그 스팸 방지용 (분당 1회) self._panic_log_ts: float = 0.0 - # 유니버스 소스: "ranking" | "condition"(KIS) | "kiwoom_condition"(키움 WS) + # 유니버스 소스: ranking | condition(KIS) | kiwoom_condition | ls_condition # env: {STRATEGY_ID}_UNIVERSE_SOURCE — 런타임에 스위치 가능. key = f"{self.strategy_id}_UNIVERSE_SOURCE" default = self.DEFAULT_UNIVERSE_SOURCES.get(self.strategy_id, "ranking") self.universe_source = ( (get_env_from_db(key, default) or default).strip().lower() ) - if self.universe_source not in ("ranking", "condition", "kiwoom_condition"): + if self.universe_source not in ( + "ranking", "condition", "kiwoom_condition", "ls_condition", + ): self.logger.warning( "알 수 없는 UNIVERSE_SOURCE=%s → 기본값 %s 사용", self.universe_source, default, @@ -113,12 +118,19 @@ class BaseStrategy(ABC, threading.Thread): self._runtime: Dict[str, dict] = {} # 최근 매도 쿨다운 (종목별 마지막 매도 타임스탬프) self.recently_sold: Dict[str, float] = {} + # 후보 ENTER 시각 (datetime) — 중분 편입 시 해당 봉 시가 매수 보류용 + self._cand_enter_dt: Dict[str, Any] = {} # 당일 매매불가 종목 (다음 후보로 넘어감) self.untradable_skip: set = set() # 일일 익절 목표 가드 (Orchestrator 주입, 없으면 OFF) self.daily_profit_halt: Any = None + # 틱매도 — WS 현재가 갱신 시 매도 검사 (기본 OFF · env 로 ON) + self._sell_lock = threading.Lock() + self._tick_sell_last_ts: Dict[str, float] = {} + self._tick_sell_listener_on = False + self._sync_holdings_from_db(log_restore=True) # ------------------------------------------------------------------ @@ -127,6 +139,87 @@ class BaseStrategy(ABC, threading.Thread): def stop_loop(self) -> None: """쓰레드 정지 요청 (daemon 이지만 정상 종료 시 호출).""" self._running = False + self._unregister_tick_sell_listener() + + def _tick_sell_enabled(self) -> bool: + """공통 TICK_SELL_ENABLED 또는 {SID}_TICK_SELL_ENABLED (전략키 비어있지 않으면 우선).""" + sid = (self.strategy_id or "BASE").upper() + sid_key = f"{sid}_TICK_SELL_ENABLED" + raw_sid = str(get_env_from_db(sid_key, "") or "").strip() + if raw_sid: + return bool(get_env_bool(sid_key, False)) + return bool(get_env_bool("TICK_SELL_ENABLED", False)) + + def _register_tick_sell_listener(self) -> None: + if self._tick_sell_listener_on: + return + ws = getattr(self, "ws", None) + if ws is None or not hasattr(ws, "register_price_listener"): + return + try: + ws.register_price_listener(self._on_ws_price_tick) + self._tick_sell_listener_on = True + if self._tick_sell_enabled(): + self.logger.info( + "📡 [틱매도] 리스너 등록 ON (%s_TICK_SELL / TICK_SELL)", + self.strategy_id, + ) + else: + self.logger.debug( + "틱매도 리스너 등록(대기) — env OFF 시 콜백 no-op", + ) + except Exception as ex: + self.logger.warning("틱매도 리스너 등록 실패: %s", ex) + + def _unregister_tick_sell_listener(self) -> None: + if not self._tick_sell_listener_on: + return + ws = getattr(self, "ws", None) + if ws is not None and hasattr(ws, "unregister_price_listener"): + try: + ws.unregister_price_listener(self._on_ws_price_tick) + except Exception: + pass + self._tick_sell_listener_on = False + + def _on_ws_price_tick(self, code: str, price: float, raw: Any = None) -> None: + """WS 현재가 갱신 → 보유 중이면 기존 check_sell_signals 경로로 매도 검사. + + 매도 규칙은 루프 매도와 동일 함수. 바뀌는 것은 호출 시점(틱)뿐. + """ + if not self._running or not self._tick_sell_enabled(): + return + code = (code or "").strip() + if not code or code not in self.holdings: + return + try: + min_ms = max(0, int(get_env_int("TICK_SELL_MIN_INTERVAL_MS", 50) or 0)) + except Exception: + min_ms = 50 + now = time.time() + last = float(self._tick_sell_last_ts.get(code, 0.0) or 0.0) + if min_ms > 0 and (now - last) * 1000.0 < float(min_ms): + return + self._tick_sell_last_ts[code] = now + if not self._sell_lock.acquire(blocking=False): + return + try: + if code not in self.holdings: + return + sell_signals = self.check_sell_signals() or [] + if sell_signals and get_env_bool("REAL_BALANCE_VERIFY_BEFORE_SELL", True): + try: + self.order_mgr.prefetch_broker_holdings() + except Exception: + pass + for sig in sell_signals: + if (sig.get("code") or "") == code: + self._submit_sell(sig) + break + except Exception as ex: + self.logger.debug("틱매도 예외 %s: %s", code, ex) + finally: + self._sell_lock.release() # ------------------------------------------------------------------ # 스캔 루프 sleep (env 핫리로드 — 재시작 없이 반영) @@ -173,11 +266,13 @@ class BaseStrategy(ABC, threading.Thread): """threading.Thread.run() 오버라이드 — 전략 메인 루프.""" self._running = True self.logger.info("🚀 전략 쓰레드 시작 [%s]", self.strategy_id) + self._register_tick_sell_listener() try: self._run_loop() except Exception as e: self.logger.exception("전략 루프 예외: %s", e) finally: + self._unregister_tick_sell_listener() self.logger.info("⏹ 전략 쓰레드 종료 [%s]", self.strategy_id) # ------------------------------------------------------------------ @@ -221,19 +316,31 @@ class BaseStrategy(ABC, threading.Thread): # 보유 목록 = DB 진실 + _runtime 오버레이 (poll 체결·재시작 정합) self._sync_holdings_from_db() + # 일일익절 B안 — 매수루프 비어도 hit 후 보유 리스크 정리 + guard = getattr(self, "daily_profit_halt", None) + if guard is not None: + try: + guard.maybe_trim_open_risk(self.strategy_id) + except Exception as ex: + self.logger.debug("일일익절 리스크버짓 예외: %s", ex) + # ── [1] 매도 먼저 ──────────────────────────────── - sell_signals = self.check_sell_signals() - if sell_signals and get_env_bool("REAL_BALANCE_VERIFY_BEFORE_SELL", True): - self.order_mgr.prefetch_broker_holdings() - for sig in sell_signals: - self._submit_sell(sig) + with self._sell_lock: + sell_signals = self.check_sell_signals() + if sell_signals and get_env_bool("REAL_BALANCE_VERIFY_BEFORE_SELL", True): + self.order_mgr.prefetch_broker_holdings() + for sig in sell_signals: + self._submit_sell(sig) # ── [2] 후보 구독 동기화 (공유 WS) ──────────────── candidates = self._load_candidates() + # 중분 편입 시가 애매 가드용 — 후보 ENTER 시각(초) 기록 + self._note_candidate_enters(candidates) cand_codes = [c.get("code") for c in candidates if c.get("code")] hold_codes = list(self.holdings.keys()) # KIS 최소 구독 모드: 후보=키움 WS, KIS=영구+보유 (WSManager.sync_targets_split) - self.ws.sync_targets_split(self.strategy_id, cand_codes, hold_codes) + # US_MOMENTUM 등은 _sync_ws_for_loop 오버라이드로 해외 WS 만 사용 + self._sync_ws_for_loop(cand_codes, hold_codes) # ── [2b] 미체결 지정가 만료 취소 ─────────────────── self.manage_pending_orders() @@ -243,6 +350,17 @@ class BaseStrategy(ABC, threading.Thread): active_cnt = len(self.holdings) if candidates and active_cnt < max_stocks and self.check_buy_allowed(): self._scan_and_buy(candidates, max_stocks, active_cnt) + elif candidates and active_cnt >= max_stocks: + # 보유만석이면 _scan_and_buy 미진입 → 매수체크 로그가 안 나와 "멈춘 것"처럼 보임 + now_m = time.time() + last_m = float(getattr(self, "_last_full_skip_log_ts", 0) or 0) + if now_m - last_m >= 60.0: + self._last_full_skip_log_ts = now_m + self.logger.info( + "🔍 [매수체크 스킵] 보유만석 %d/%d codes=%s", + active_cnt, max_stocks, + ",".join(list(self.holdings.keys())[:12]), + ) # 고점·세션저점 등 런타임 오버레이 저장 (다음 루프 DB sync 시 max merge) self._capture_runtime_overlay() @@ -256,6 +374,18 @@ class BaseStrategy(ABC, threading.Thread): self.logger.error("루프 예외: %s", e) time.sleep(5) + def _sync_ws_for_loop(self, cand_codes: List[str], hold_codes: List[str]) -> None: + """후보·보유 WS 구독 동기화 — 해외 전략은 오버라이드. + + ``ls_condition``: + - LS US3 = 틱·현재가 (히스토리와 한 묶음) + - 키움 = 갭보정·분봉 (기존 잘 되는 경로) + """ + ls_feed = str(getattr(self, "universe_source", "") or "") == "ls_condition" + self.ws.sync_targets_split( + self.strategy_id, cand_codes, hold_codes, ls_feed=ls_feed, + ) + def manage_pending_orders(self) -> None: """미체결 ATR 지정가 만료 시 취소 — 서브클래스에서 구현.""" return None @@ -387,10 +517,22 @@ class BaseStrategy(ABC, threading.Thread): except Exception as ex: self.logger.debug("일일익절 가드 예외(매수 계속): %s", ex) - self.logger.info( - "🔍 [매수체크] 후보 %d (보유 %d/%d)", - len(candidates), active_cnt, max_stocks, - ) + _codes = [ + str(c.get("code") or c.get("stk_cd") or "").strip() + for c in (candidates or []) + ] + _codes = [c for c in _codes if c] + if _codes and str(getattr(self, "strategy_id", "")).upper().startswith("US_"): + self.logger.info( + "🔍 [매수체크] 후보 %d (보유 %d/%d) codes=%s", + len(candidates), active_cnt, max_stocks, + ",".join(_codes[:12]), + ) + else: + self.logger.info( + "🔍 [매수체크] 후보 %d (보유 %d/%d)", + len(candidates), active_cnt, max_stocks, + ) for c in candidates: if not self._running: return @@ -430,6 +572,45 @@ class BaseStrategy(ABC, threading.Thread): return # 1루프당 1매수 (포지션 과집중 방지) time.sleep(self._scan_sleep("buy_fail")) + def _note_candidate_enters(self, candidates: List[Dict]) -> None: + """후보 집합 변화 → ENTER/EXIT 시각 갱신 (중분 시가 애매 가드).""" + from datetime import datetime + + now = datetime.now() + codes = set() + for c in candidates or []: + code = str(c.get("code") or c.get("stk_cd") or "").strip() + if code: + codes.add(code) + if not hasattr(self, "_cand_enter_dt") or self._cand_enter_dt is None: + self._cand_enter_dt = {} + for gone in list(self._cand_enter_dt.keys()): + if gone not in codes: + self._cand_enter_dt.pop(gone, None) + for code in codes: + if code not in self._cand_enter_dt: + self._cand_enter_dt[code] = now + + def _defer_mid_enroll_entry( + self, + code: str, + entry_bar_key: Any, + tf_min: int = 1, + params: Optional[Dict] = None, + ) -> Optional[str]: + """중분 편입 + 같은 진입봉이면 사유 문자열, 아니면 None.""" + from kis_trader.engine.mid_enroll_entry_gate import gate_reason_mid_enroll + + enroll = None + if hasattr(self, "_cand_enter_dt"): + enroll = (self._cand_enter_dt or {}).get(str(code).strip()) + return gate_reason_mid_enroll( + str(entry_bar_key or ""), + enroll, + tf_min=int(tf_min or 1), + params=params, + ) + # ------------------------------------------------------------------ # OrderManager 호출 래퍼 # ------------------------------------------------------------------ @@ -553,7 +734,13 @@ class BaseStrategy(ABC, threading.Thread): return start <= hhmm_now <= end def check_buy_allowed(self) -> bool: - """신규 매수 허용 시간 — ``{SID}_TIME_END`` / ``TIME_END`` 기준 (매수 종료).""" + """신규 매수 허용 시간 — ``{SID}_TIME_END`` / ``TIME_END`` 기준 (매수 종료). + + EOD(``{SID}_EOD_HM``) 시각 이후에는 신규매수 금지. + 벽시계 비교라 익일 장중(EOD 전)에는 자동으로 다시 허용된다. + 전략에 ``eod_enabled`` 가 없거나 false 면 EOD 매수차단 없음 + (예: 해외모멘텀 기본 ``US_MOMENTUM_EOD_ENABLED=false``). + """ if get_env_bool("FORCE_MARKET_OPEN", False): return True if not self.check_market_status(): @@ -561,7 +748,25 @@ class BaseStrategy(ABC, threading.Thread): now = dt.now() hhmm_now = now.hour * 100 + now.minute start, buy_end = self._buy_time_bounds() - return start <= hhmm_now <= buy_end + if not (start <= hhmm_now <= buy_end): + return False + # EOD 이후 신규매수 차단 — SCALP 15:25 청산 직후 재매수(003470) 재발 방지 + # 해외모멘텀은 check_buy_allowed 오버라이드 + eod 기본 OFF → 국장 EOD에 안 걸림 + if is_live_eod_now( + bool(getattr(self, "eod_enabled", False)), + str(getattr(self, "eod_hm", "15:20") or "15:20"), + now, + default_hm="15:20", + ): + return False + # LS 복구 중 신규매수 게이트 (기본 OFF — LS_WS_BLOCK_BUY_WHILE_RECOVERING) + try: + from kis_trader.engine.ls_feed_gate import ls_feed_blocks_new_buy + if ls_feed_blocks_new_buy(): + return False + except Exception: + pass + return True def _max_stocks(self) -> int: """전략별 동시 보유 한도. @@ -747,17 +952,21 @@ class BaseStrategy(ABC, threading.Thread): 1) universe_source == "ranking" → VolumeRankManager 2) universe_source == "condition" → ConditionSearchManager (KIS REST) 3) universe_source == "kiwoom_condition" → KiwoomConditionSearchManager (키움 WS) + 4) universe_source == "ls_condition" → LsConditionSearchManager (LS AFR) ⚡ 운영 스위치는 **{SID}_UNIVERSE_SOURCE 하나** 만 바꾸면 됨. - condition + CONDITION_{SID}_NAME/SEQ → KIS 조건 (REST 폴링) - kiwoom_condition + CONDITION_{SID}_NAME → 키움 조건 (WS 실시간, seq 자동) + - ls_condition + CONDITION_{SID}_NAME/LS_NAME → LS 동명 조건 (AFR, 시세는 키움/한투) - ranking → 거래량/거래대금 순위 (키움 seq 를 고정하려면 CONDITION_{SID}_KIWOOM_SEQ 선택 설정) """ key = f"{self.strategy_id}_UNIVERSE_SOURCE" default = self.DEFAULT_UNIVERSE_SOURCES.get(self.strategy_id, "ranking") current_src = (get_env_from_db(key, default) or default).strip().lower() - if current_src not in ("ranking", "condition", "kiwoom_condition"): + if current_src not in ( + "ranking", "condition", "kiwoom_condition", "ls_condition", + ): current_src = default if current_src != self.universe_source: self.logger.info( @@ -767,15 +976,20 @@ class BaseStrategy(ABC, threading.Thread): self.universe_source = current_src # 소스명 → 매니저 매핑. primary(선택 소스) 먼저, 나머지는 폴백 순. + # ※ ls_condition 선택 시 키움/KIS 로 자동 폴백하지 않음 (의도 스위치 존중). mgr_by_src = { "ranking": self.ranking_mgr, "condition": self.condition_mgr, "kiwoom_condition": self.kiwoom_condition_mgr, + "ls_condition": self.ls_condition_mgr, } - order = [self.universe_source] + [ - s for s in ("condition", "kiwoom_condition", "ranking") - if s != self.universe_source - ] + if self.universe_source == "ls_condition": + order = ["ls_condition"] + else: + order = [self.universe_source] + [ + s for s in ("condition", "kiwoom_condition", "ranking") + if s != self.universe_source + ] candidates: List[Dict] = [] for tag in order: @@ -796,7 +1010,10 @@ class BaseStrategy(ABC, threading.Thread): except Exception as e: self.logger.debug("%s 유니버스 로드 실패: %s", tag, e) - # 두 매니저 모두 본 전략 설정 없음 → 레거시 DB 경로 + # 매니저 모두 본 전략 설정 없음 → 레거시 DB 경로 + # (ls_condition 은 DB 폴백도 하지 않음 — 빈 후보) + if self.universe_source == "ls_condition": + return self._post_filter_candidates([]) try: candidates = self.db.get_target_candidates() or [] except Exception as e: @@ -840,15 +1057,25 @@ class BaseStrategy(ABC, threading.Thread): ) candidates = candidates[:cap] - # 3) 백테 유니버스 슬롯 정합 — target_candidates_history 스냅샷 ∩ 실시간 후보 + # 3) 백테 유니버스 슬롯 정합 — history 스냅샷 ∩ 실시간 후보 + # ls_condition → ls_candidates_history / 그 외 → target_candidates_history from ..utils.live_portfolio_common import ( filter_candidates_by_history_universe, live_universe_slot_align_enabled, + resolve_live_universe_history_source, ) if live_universe_slot_align_enabled(sid): before = len(candidates) + univ_src = str(getattr(self, "universe_source", "") or "") + hist_src = resolve_live_universe_history_source( + sid, universe_source=univ_src, + ) candidates, dropped = filter_candidates_by_history_universe( - candidates, self.db, sid, + candidates, + self.db, + sid, + universe_source=univ_src, + history_source=hist_src, ) if dropped > 0: now_ts = time.time() @@ -856,8 +1083,9 @@ class BaseStrategy(ABC, threading.Thread): if now_ts - last >= 120: self._universe_slot_log_ts = now_ts self.logger.info( - "🔍 [유니버스슬롯] %s 후보 %d→%d (history 교집합, 제외 %d)", - sid, before, len(candidates), dropped, + "🔍 [유니버스슬롯] %s 후보 %d→%d " + "(history=%s 교집합, 제외 %d)", + sid, before, len(candidates), hist_src, dropped, ) return candidates diff --git a/kis_trader/strategies/breakout.py b/kis_trader/strategies/breakout.py index 99d5f43..087aa43 100644 --- a/kis_trader/strategies/breakout.py +++ b/kis_trader/strategies/breakout.py @@ -1102,15 +1102,17 @@ def breakout_scan_buy_at_bar( else: confirmed = candles[:i] - use_ticks = breakout_backtest_use_tick_db(params) and minute_ticks is not None - if use_ticks and minute_ticks: - r, m, sig, ep, et = breakout_scan_buy_intrabar_from_ticks( - confirmed, minute_ticks, forming, params, day_open=day_open, - ) - if sig: - return r, m, sig, ep, et - if not breakout_backtest_tick_fallback_ohlc(params): + want_ticks = breakout_backtest_use_tick_db(params) + if want_ticks: + # 절대규칙: 틱 진입 모드에서 봉 high OHLC 폴백으로 신호/체결 변조 금지 + if minute_ticks: + r, m, sig, ep, et = breakout_scan_buy_intrabar_from_ticks( + confirmed, minute_ticks, forming, params, day_open=day_open, + ) + if sig: + return r, m, sig, ep, et return r, m, None, 0.0, "" + return ("탈락-틱없음", "intrabar ticks empty", None, 0.0, "") probe = float(forming.get("high") or forming.get("close") or 0) ema_params = _breakout_params_with_ema_closes( @@ -1124,7 +1126,7 @@ def breakout_scan_buy_at_bar( ep = breakout_intrabar_entry_price(forming, sig, params) et = str(forming.get("candle_time") or "") if sig: - sig["backtest_entry_source"] = "ohlc_high" if use_ticks else "ohlc_intrabar" + sig["backtest_entry_source"] = "ohlc_intrabar" return None, None, sig, ep, et sub = candles[: i + 1] @@ -1616,7 +1618,7 @@ class BreakoutStrategy(BaseStrategy): return True def _live_current_price(self, code: str) -> float: - """WS 현재가 → 틱 링버퍼 폴백.""" + """WS 현재가 → 틱 링버퍼 → 확정봉 종가 폴백 (저유동 0틱).""" wsd = self.ws.get_price(code) if wsd: try: @@ -1633,6 +1635,15 @@ class BreakoutStrategy(BaseStrategy): return p2 except Exception: pass + # 키움 갭보정으로 봉은 있는데 체결 틱이 없는 저유동 — 마지막 확정 종가 + try: + bars = self.ws.get_candles(code, self.candle_tf, n=1) or [] + if bars: + p3 = float(bars[-1].get("close") or 0) + if p3 > 0: + return p3 + except Exception: + pass return 0.0 def check_buy(self, code: str, name: str) -> Optional[Dict]: @@ -1645,14 +1656,29 @@ class BreakoutStrategy(BaseStrategy): need_n = max(need_n, self.ema_slow_period + 5) confirmed = self.ws.get_candles(code, self.candle_tf, n=need_n + 5) if len(confirmed) < need_n - 1: + # force 연타 금지 — 시세불가·특수코드는 fail_max 후에도 REST 폭주 + force_sec = max(30, get_env_int("BREAKOUT_CANDLE_GAP_FORCE_SEC", 120)) + now_g = time.time() + if not hasattr(self, "_candle_gap_force_ts"): + self._candle_gap_force_ts = {} + last_g = float(self._candle_gap_force_ts.get(code, 0) or 0) + do_force = (now_g - last_g) >= float(force_sec) + if do_force: + self._candle_gap_force_ts[code] = now_g try: - self.ws.fill_gap([code], force=True) + self.ws.fill_gap([code], force=do_force) except Exception: pass - self.logger.info( - "🔍 [캔들부족] %s(%s) need>=%d have=%d", - name, code, need_n - 1, len(confirmed), - ) + log_sec = max(15, get_env_int("BREAKOUT_CANDLE_SHORT_LOG_SEC", 60)) + if not hasattr(self, "_candle_short_log_ts"): + self._candle_short_log_ts = {} + last_l = float(self._candle_short_log_ts.get(code, 0) or 0) + if now_g - last_l >= float(log_sec): + self._candle_short_log_ts[code] = now_g + self.logger.info( + "🔍 [캔들부족] %s(%s) need>=%d have=%d", + name, code, need_n - 1, len(confirmed), + ) return None params = { @@ -1702,16 +1728,14 @@ class BreakoutStrategy(BaseStrategy): if mode in _INTRABAR_ENTRY_MODES: curr_price = self._live_current_price(code) if curr_price <= 0: - # 저유동 B안: 체결 틱 없음 — 정상 스킵. 기본 debug (SCAN_REJECT_LOG_VERBOSE 시 60s 1회 info) - if get_env_bool("SCAN_REJECT_LOG_VERBOSE", False): - if not hasattr(self, "_no_price_log"): - self._no_price_log = {} - last = self._no_price_log.get(code, 0) - if time.time() - last >= 60: - self._no_price_log[code] = time.time() - self.logger.info("🔍 [가격없음] %s(%s) B안", name, code) - else: - self.logger.debug("🔍 [가격없음] %s(%s) B안", name, code) + # 저유동 B안: 체결 틱 없음 — 60초 1회 INFO (debug 만이면 탈락 이유 안 보임) + if not hasattr(self, "_no_price_log"): + self._no_price_log = {} + last = self._no_price_log.get(code, 0) + gap = 15.0 if get_env_bool("SCAN_REJECT_LOG_VERBOSE", False) else 60.0 + if time.time() - last >= gap: + self._no_price_log[code] = time.time() + self.logger.info("🔍 [탈락-가격없음] %s(%s) B안 WS시세 없음", name, code) return None forming = None @@ -1756,8 +1780,23 @@ class BreakoutStrategy(BaseStrategy): return None align_on = get_env_bool("BREAKOUT_LIVE_BACKTEST_ALIGN", True) entry_open = float(signal.get("entry_price", 0) or 0) + entry_src = "ohlc_open" + _ebk = str(signal.get("entry_bar_key") or "")[:12] + _defer = self._defer_mid_enroll_entry( + code, _ebk, int(self.candle_tf or 1), params, + ) + if _defer: + self.logger.info("🔍 [%s] %s(%s)", _defer, name, code) + return None if align_on and entry_open > 0: - curr_price = entry_open + from kis_trader.engine.tail_tick_replay import live_align_entry_price + curr_price, entry_src = live_align_entry_price( + self.ws, + code, + entry_open, + entry_bar_key=_ebk, + tf_min=int(self.candle_tf or 1), + ) else: curr_price = float(signal.get("close") or 0.0) p = self._live_current_price(code) @@ -1797,11 +1836,20 @@ class BreakoutStrategy(BaseStrategy): target_price = curr_price * (1 + self.take_profit_pct) mode_tag = "B" if mode in _INTRABAR_ENTRY_MODES else "A" - self.logger.info( - "🚀 [BREAKOUT-%s] %s(%s) price=%.0f qty=%d 저항=%.0f volX=%.1f prevChg=%.2f%%", - mode_tag, name, code, curr_price, qty, - signal["resistance"], signal["vol_ratio"], signal["prev_chg"], - ) + # A=align: entry_src 는 계산가 출처. B=intrabar: 현재가 경로라 ohlc_open 표기 안 함 + if mode in _INTRABAR_ENTRY_MODES: + self.logger.info( + "🚀 [BREAKOUT-%s] %s(%s) price=%.0f qty=%d 저항=%.0f volX=%.1f prevChg=%.2f%%", + mode_tag, name, code, curr_price, qty, + signal["resistance"], signal["vol_ratio"], signal["prev_chg"], + ) + else: + self.logger.info( + "🚀 [BREAKOUT-%s] %s(%s) price=%.0f qty=%d 저항=%.0f volX=%.1f prevChg=%.2f%% entry_src=%s", + mode_tag, name, code, curr_price, qty, + signal["resistance"], signal["vol_ratio"], signal["prev_chg"], + entry_src, + ) return { "code": code, "name": name, diff --git a/kis_trader/strategies/momentum.py b/kis_trader/strategies/momentum.py index 0dbf108..5ffe739 100644 --- a/kis_trader/strategies/momentum.py +++ b/kis_trader/strategies/momentum.py @@ -149,10 +149,28 @@ class MomentumStrategy(BaseStrategy): if not sig: return None + _defer = self._defer_mid_enroll_entry( + code, + sig.get("entry_bar_key"), + int(self.candle_tf or 1), + self._engine_params, + ) + if _defer: + self.logger.info("🔍 [%s] %s(%s)", _defer, name, code) + return None + align_on = get_env_bool("MOMENTUM_LIVE_BACKTEST_ALIGN", True) entry_open = float(sig.get("entry_price", 0) or 0) + entry_src = "ohlc_open" if align_on and entry_open > 0: - curr_price = entry_open + from kis_trader.engine.tail_tick_replay import live_align_entry_price + curr_price, entry_src = live_align_entry_price( + self.ws, + code, + entry_open, + entry_bar_key=str(sig.get("entry_bar_key") or "")[:12], + tf_min=int(self.candle_tf or 1), + ) else: latest = candles[-1] curr_price = float(latest["close"]) @@ -166,6 +184,10 @@ class MomentumStrategy(BaseStrategy): pass if curr_price <= 0 or curr_price < self.min_price: return None + # entry_src: ws_ticks | ohlc_open — 수량/손절 계산가 출처 (시장가 체결가와 별개) + if entry_src: + sig = dict(sig) + sig["entry_src"] = entry_src hard_cap = get_env_int("MOMENTUM_MAX_BUY_AMOUNT", 0) or get_env_int( "MAX_BUY_AMOUNT_PER_STOCK", 0, @@ -185,8 +207,9 @@ class MomentumStrategy(BaseStrategy): target_price = curr_price * (1 + eff_tp) self.logger.info( - "🎯 [MOMENTUM 시그널] %s(%s) price=%.0f qty=%d RSI=%.1f", + "🎯 [MOMENTUM 시그널] %s(%s) price=%.0f qty=%d RSI=%.1f entry_src=%s", name, code, curr_price, qty, sig.get("rsi", 0), + str(sig.get("entry_src") or entry_src), ) return { "code": code, diff --git a/kis_trader/strategies/range_break.py b/kis_trader/strategies/range_break.py index dfc0ca2..551dbe3 100644 --- a/kis_trader/strategies/range_break.py +++ b/kis_trader/strategies/range_break.py @@ -111,6 +111,14 @@ class RangeBreakStrategy(BaseStrategy): if not sig: return None + _ebk = str(sig.get("entry_bar_key") or "")[:12] + _defer = self._defer_mid_enroll_entry( + code, _ebk, int(getattr(self, "candle_tf", 1) or 1), params, + ) + if _defer: + self.logger.info("🔍 [%s] %s(%s)", _defer, name, code) + return None + align_on = get_env_bool("RANGE_BREAK_LIVE_BACKTEST_ALIGN", True) entry_open = float(sig.get("entry_price", 0) or 0) if align_on and entry_open > 0: diff --git a/kis_trader/strategies/scalping.py b/kis_trader/strategies/scalping.py index d4b9742..98b1984 100644 --- a/kis_trader/strategies/scalping.py +++ b/kis_trader/strategies/scalping.py @@ -81,12 +81,15 @@ class ScalpingStrategy(BaseStrategy): "require_reversal_candle": get_env_bool( "SCALP_REQUIRE_REVERSAL_CANDLE", True, ), - # True: 백테스트와 동일 — 신호봉(직전 확정봉) 조건 충족 시 현재봉에서 진입 - "live_backtest_align": get_env_bool( - "SCALP_LIVE_BACKTEST_ALIGN", True, + # True: 백테스트와 동일 — 신호봉(T−1) 충족 시 진입봉(T) 시가/첫 틱 + # DB 빈문자("") 는 get_env_bool 이 False 로 읽히므로 defaults 우선 + "live_backtest_align": bool(_d.get("live_backtest_align", True)), + "live_signal_lookback_bars": int( + _d.get("live_signal_lookback_bars", 1) or 1, ), - "live_signal_lookback_bars": get_env_int( - "SCALP_LIVE_SIGNAL_LOOKBACK_BARS", 1, + # 형성 중 봉(T)을 진입봉으로 — 확정봉만 쓰면 1봉 지연 (모멘텀과 동일) + "live_align_use_forming_bar": bool( + _d.get("live_align_use_forming_bar", True), ), # 일일 진입 횟수 (reversal 기본 3회) "max_daily": get_env_int( @@ -127,12 +130,47 @@ class ScalpingStrategy(BaseStrategy): if get_env_bool("FORCE_BUY_TEST", False): return self._force_buy_test(code, name) - candles_raw = self.ws.get_candles(code, self.candle_tf, n=50) - if len(candles_raw) < 5: + candles_raw = list(self.ws.get_candles(code, self.candle_tf, n=50) or []) + # ALIGN: 형성 중 봉(T)을 진입봉으로 붙여 BT(portfolio next open/첫 틱)와 동일 시점 + params = self._scan_engine_params or {} + use_forming = bool(params.get("live_align_use_forming_bar", True)) + if params.get("live_backtest_align", True) and use_forming: try: - self.ws.fill_gap([code], force=True) + cur = self.ws.get_current_candle(code, self.candle_tf) + except Exception: + cur = None + if cur and float(cur.get("open", 0) or 0) > 0: + ct = str(cur.get("candle_time") or "")[:12] + last_ct = "" + if candles_raw: + last_ct = str(candles_raw[-1].get("candle_time") or "")[:12] + if ct and ct != last_ct: + cur_d = dict(cur) + cur_d["is_confirmed"] = 0 + candles_raw.append(cur_d) + if len(candles_raw) < 5: + force_sec = max(30, get_env_int("SCALP_CANDLE_GAP_FORCE_SEC", 120)) + now_g = time.time() + if not hasattr(self, "_candle_gap_force_ts"): + self._candle_gap_force_ts = {} + last_g = float(self._candle_gap_force_ts.get(code, 0) or 0) + do_force = (now_g - last_g) >= float(force_sec) + if do_force: + self._candle_gap_force_ts[code] = now_g + try: + self.ws.fill_gap([code], force=do_force) except Exception: pass + log_sec = max(15, get_env_int("SCALP_CANDLE_SHORT_LOG_SEC", 60)) + if not hasattr(self, "_candle_short_log_ts"): + self._candle_short_log_ts = {} + last_l = float(self._candle_short_log_ts.get(code, 0) or 0) + if now_g - last_l >= float(log_sec): + self._candle_short_log_ts[code] = now_g + self.logger.info( + "🔍 [캔들부족] %s(%s) need>=5 have=%d", + name, code, len(candles_raw), + ) return None candles = [self._norm_candle(c) for c in candles_raw] @@ -156,7 +194,6 @@ class ScalpingStrategy(BaseStrategy): daily_cnt = 0 state = {"last_exit_dt": last_exit_dt, "daily_cnt": daily_cnt} - params = self._scan_engine_params or {} # SCALP 는 reversal 단일 모드 (momentum 은 MomentumStrategy 로 분리됨) reject, msg, sig = se.check_buy_signal_live(candles, params, state) if reject: @@ -165,19 +202,39 @@ class ScalpingStrategy(BaseStrategy): if not sig: return None - latest = candles[-1] - curr_price = float(latest["close"]) - if curr_price < self.min_price: + # 중분 편입 → 같은 진입봉 시가 매수 보류 (다음 분부터) + _defer = self._defer_mid_enroll_entry( + code, sig.get("entry_bar_key"), int(self.candle_tf or 1), params, + ) + if _defer: + self.logger.info("🔍 [%s] %s(%s)", _defer, name, code) return None - # 현재가 보정 (WS → 없으면 REST) - wsd = self.ws.get_price(code) - if wsd: - try: - curr_price = abs(float(str(wsd.get("stck_prpr", curr_price)).replace(",", ""))) or curr_price - except Exception: - pass - if curr_price <= 0: + # 진입 계산가: align 시 T봉 첫 틱(RAM) → 없으면 시가. 폴백만 WS 현재가 + align_on = bool(params.get("live_backtest_align", True)) + entry_open = float(sig.get("entry_price", 0) or 0) + entry_src = "ohlc_open" + if align_on and entry_open > 0: + from kis_trader.engine.tail_tick_replay import live_align_entry_price + curr_price, entry_src = live_align_entry_price( + self.ws, + code, + entry_open, + entry_bar_key=str(sig.get("entry_bar_key") or "")[:12], + tf_min=int(self.candle_tf or 1), + ) + else: + latest = candles[-1] + curr_price = float(latest["close"]) + wsd = self.ws.get_price(code) + if wsd: + try: + curr_price = abs( + float(str(wsd.get("stck_prpr", curr_price)).replace(",", "")) + ) or curr_price + except Exception: + pass + if curr_price <= 0 or curr_price < self.min_price: return None hard_cap = get_env_int("SCALP_MAX_BUY_AMOUNT", 0) \ @@ -199,8 +256,8 @@ class ScalpingStrategy(BaseStrategy): target_price = curr_price * (1 + eff_tp) self.logger.info( - "🎯 [SCALP-REVERSAL 시그널] %s(%s) price=%.0f qty=%d RSI=%.1f", - name, code, curr_price, qty, sig.get("rsi", 0), + "🎯 [SCALP-REVERSAL 시그널] %s(%s) price=%.0f qty=%d RSI=%.1f entry_src=%s", + name, code, curr_price, qty, sig.get("rsi", 0), entry_src, ) return { "code": code, diff --git a/kis_trader/strategies/tail_catch.py b/kis_trader/strategies/tail_catch.py index a9fb82d..e11cb42 100644 --- a/kis_trader/strategies/tail_catch.py +++ b/kis_trader/strategies/tail_catch.py @@ -277,11 +277,26 @@ class TailCatchStrategy(BaseStrategy): }, } - # align — 다음 3분봉 시가 시장가 + # align — 다음 3분봉: RAM 첫 틱 → 없으면 시가 (시장가 계산용) align_on = get_env_bool("SHORT_LIVE_BACKTEST_ALIGN", True) entry_open = float(sig.get("entry_price", 0) or 0) + entry_src = "ohlc_open" + _ebk = str(sig.get("entry_bar_key") or "")[:12] + _defer = self._defer_mid_enroll_entry( + code, _ebk, int(self.candle_tf or 3), + ) + if _defer: + self.logger.info("🔍 [%s] %s(%s)", _defer, name, code) + return None if align_on and entry_open > 0: - curr_price = entry_open + from kis_trader.engine.tail_tick_replay import live_align_entry_price + curr_price, entry_src = live_align_entry_price( + self.ws, + code, + entry_open, + entry_bar_key=_ebk, + tf_min=int(self.candle_tf or 3), + ) else: curr_price = float(candles[-1]["close"]) wsd = self.ws.get_price(code) @@ -328,10 +343,11 @@ class TailCatchStrategy(BaseStrategy): atr_entry = curr_price * 0.01 self.logger.info( - "🎯 [SHORT 시그널] %s(%s) price=%.0f qty=%d pat=%s tail=%.2f rec=%.0f%% RSI=%.1f", + "🎯 [SHORT 시그널] %s(%s) price=%.0f qty=%d pat=%s tail=%.2f rec=%.0f%% RSI=%.1f entry_src=%s", name, code, curr_price, qty, sig.get("pattern", "hammer"), sig.get("tail_ratio", 0), sig.get("recovery_pos", 0) * 100, sig.get("rsi_val", 0), + entry_src, ) return { "code": code, diff --git a/kis_trader/strategies/us_momentum.py b/kis_trader/strategies/us_momentum.py new file mode 100644 index 0000000..1686e12 --- /dev/null +++ b/kis_trader/strategies/us_momentum.py @@ -0,0 +1,1123 @@ +""" +kis_trader/strategies/us_momentum.py — 해외 모멘텀 실매 (US_MOMENTUM) +================================================================ +국내 MomentumStrategy 엔진을 재사용하되: + +- 유니버스: permanent_subscriptions (market=US) 고정 — HTS 없음 +- 세션(루프·매도): 기본 22:00~06:30 — ``US_MOMENTUM_SESSION_START`` / ``SELL_TIME_END`` +- 매수창: 기본 22:30~05:00 — ``US_MOMENTUM_TIME_START`` / ``TIME_END`` (국장 TIME_END 와 동일 개념) +- 봉: 1분봉만 매수체크 (3분은 국내와 같이 1m 롤업으로 충분, 엔진 미사용) +- 주문: KIS 해외주식 주문(지정가). US_MOMENTUM_DRY_RUN=true 이면 paper 테이블만. + DRY_RUN=false 이면 OrderManager 해외 경로 + (orders + active_trades + trade_history + Mattermost). + 종목별 TRIGGER/청산: us_momentum_stock_config (없으면 전역 US_MOMENTUM_*). + +env (코드 기본값 · DB 등록 권장): + STRATEGY_US_MOMENTUM_ENABLED=true + US_MOMENTUM_SESSION_START=2200 + US_MOMENTUM_TIME_START=2230 + US_MOMENTUM_TIME_END=500 + US_MOMENTUM_SELL_TIME_END=630 + US_MOMENTUM_BUY_WAIT_LOG_SEC=60 + US_MOMENTUM_DRY_RUN=true + US_MOMENTUM_MAX_STOCKS / US_MOMENTUM_SLOT_MONEY / US_MOMENTUM_FEE_RATE ... + ※ US_MOMENTUM_SLOT_MONEY 는 해외 가격과 동일 단위(USD). 슬롯을 채울 주수 = floor(slot/price), + 주문 직전 inquire-psamount(ord_psbl_qty) 로만 상한 (1주 강제·실패 쿨다운 땜빵 금지). + US_MOMENTUM_MAX_ORDER_QTY=0 # 선택 하드캡(0=없음). 평소 슬롯+매수가능으로 결정 + US_MOMENTUM_LOOP_SLEEP_MIN/MAX # 스캔 루프 (해외는 REST 없음 → 국내보다 짧게) +""" +from __future__ import annotations + +import random +import time +from datetime import datetime as dt +from typing import Dict, List, Optional + +from ..database import paper_store +from ..engine import momentum_engine as me +from ..utils.env import get_env_bool, get_env_float, get_env_from_db, get_env_int +from ..utils.session_hm import hm_in_trading_window +from .momentum import MomentumStrategy + + +class UsMomentumStrategy(MomentumStrategy): + """해외 고정 유니버스 모멘텀 — 시세는 overseas WS, 신호는 momentum_engine.""" + + strategy_id = "US_MOMENTUM" + # 해외 스캔은 REST 없음 — 국내 momentum(1~3s)보다 빠르게 돌려 로그/타점 반응 맞춤 + # (탈락 sleep 기본은 국내 SCAN_REJECT 0.02~0.05 와 동일 — reload 캐시) + loop_min_sleep = 0.15 + loop_max_sleep = 0.40 + + def __init__(self, *args, **kwargs): + # MomentumStrategy.__init__ 가 reload_config() 를 먼저 호출하므로 + # 해외 전용 필드는 super() 이전에 준비. + self.overseas_ws = None + self._cand_exch: Dict[str, str] = {} + self._paper_ensured = False + self._us_reload_ts = 0.0 + self._us_trades_today: Optional[List[Dict]] = None + self._us_trades_today_ts: float = 0.0 + self._psamount_cache: Dict[tuple, tuple] = {} + self._us_candle_cache: Dict[str, List[Dict]] = {} + # 탈락 sleep 등은 reload_config TTL 캐시 (핫패스 get_env 폭주 방지) + self._us_sleep: Dict[str, tuple] = {} + self._us_live_min_candles: int = 30 + self._us_force_buy_test: bool = False + self._us_trades_cache_sec: float = 60.0 + super().__init__(*args, **kwargs) + + def _us_candles(self, code: str, n: int) -> List[Dict]: + """RAM(공유 agg) → 전략캐시 → DB ws_candles 폴백. ws_ticks 조회 금지.""" + cu = str(code or "").strip().upper() + candles_raw: List[Dict] = [] + try: + candles_raw = list(self.ws.get_candles(code, self.candle_tf, n=n) or []) + except Exception: + candles_raw = [] + if len(candles_raw) >= 6: + self._us_candle_cache[cu] = candles_raw + return candles_raw + cached = list((self._us_candle_cache or {}).get(cu) or []) + if len(cached) >= 6: + return cached[-n:] if n > 0 else cached + try: + db_rows = list( + self.db.get_ws_candles(code, self.candle_tf, limit=n, confirmed_only=True) or [] + ) + if len(db_rows) > len(candles_raw): + self._us_candle_cache[cu] = db_rows + return db_rows + except Exception: + pass + return candles_raw + + def _us_last_price(self, code: str, fallback: float) -> float: + """해외 WS 캐시 우선, 없으면 국내 ws 캐시/봉종가.""" + for src in (getattr(self, "overseas_ws", None), self.ws): + if src is None or not hasattr(src, "get_price"): + continue + try: + wsd = src.get_price(code) + except Exception: + wsd = None + if not wsd: + continue + try: + raw = wsd.get("stck_prpr") if isinstance(wsd, dict) else wsd + p = abs(float(str(raw).replace(",", ""))) + if p > 0: + return p + except Exception: + continue + return float(fallback or 0.0) + + def _log_buy_reject( + self, + reject: str, + name: str, + code: str, + msg: str = "", + *, + price: float = 0.0, + ) -> None: + """국내 MOMENTUM/SHORT 과 동일 포맷 + 현재가. + + 해외는 name==ticker 인 경우가 많아 ``QQQM(QQQM)`` 중복을 피함. + """ + nm = (name or "").strip() or code + if nm.upper() == str(code).upper(): + head = code + else: + head = "%s(%s)" % (nm, code) + if price and price > 0: + self.logger.info( + "🔍 [%s] %s: %s | price=%.4f", + reject, head, msg or "", price, + ) + else: + self.logger.info("🔍 [%s] %s: %s", reject, head, msg or "") + + def reload_config(self) -> None: + # 매 루프 full reload 는 DB/파싱 비용 → 해외 스캔 지연의 한 축. TTL 내 스킵. + now = time.time() + interval = float(get_env_float("US_MOMENTUM_RELOAD_INTERVAL_SEC", 15.0) or 15.0) + if ( + self._engine_params + and self._us_reload_ts > 0 + and interval > 0 + and (now - self._us_reload_ts) < interval + ): + return + super().reload_config() + base = dict(self._engine_params or {}) + # 국내 MOMENTUM_* DB 값을 가져오되, 해외 전용 축만 덮어씀 + base["_session_wrap_midnight"] = True + base["_orderbook_filter_enabled"] = False + base["_program_filter_enabled"] = False + # HTS SCAN 없음 — TRIGGER 에서 일봉 HTS 중복축 생략 (KR MOMENTUM_SKIP_HTS DB 와 별개) + base["skip_hts_scan_dupes"] = True + base["market"] = "US" + _costs = None + try: + from ..engine.us_momentum_env_keys import us_momentum_trading_cost_rates + _costs = us_momentum_trading_cost_rates() + except Exception: + _costs = {"fee_rate": 0.0025, "sell_tax": 0.0000206, "fx_fee_rate": 0.0005} + base["fee_rate"] = float(_costs["fee_rate"]) + base["sell_tax"] = float(_costs["sell_tax"]) + base["fx_fee_rate"] = float(_costs["fx_fee_rate"]) + base["min_price"] = float(get_env_float("US_MOMENTUM_MIN_PRICE", 1.0)) + # 슬롯·한도 (없으면 국내 모멘텀 값 유지). ※ USD (해외 가격과 동일 단위) + sm = get_env_int("US_MOMENTUM_SLOT_MONEY", 0) + if sm > 0: + base["slot_money"] = sm + self.slot_money = sm + self.min_price = float(base.get("min_price", 1.0)) + self.eod_enabled = get_env_bool("US_MOMENTUM_EOD_ENABLED", False) + self.eod_hm = get_env_from_db("US_MOMENTUM_EOD_HM", "05:00") + self._engine_params = base + self._dry_run = get_env_bool("US_MOMENTUM_DRY_RUN", True) + try: + from ..engine.us_momentum_env import overlay_us_momentum_engine_params + base2 = overlay_us_momentum_engine_params(base) + try: + from ..engine.us_momentum_env_keys import us_momentum_trading_cost_rates + _c2 = us_momentum_trading_cost_rates() + base2["fee_rate"] = float(_c2["fee_rate"]) + base2["sell_tax"] = float(_c2["sell_tax"]) + base2["fx_fee_rate"] = float(_c2["fx_fee_rate"]) + except Exception: + base2["fee_rate"] = float(get_env_float("US_MOMENTUM_FEE_RATE", 0.0025)) + base2["sell_tax"] = float(get_env_float("US_MOMENTUM_SELL_TAX", 0.0000206)) + base2["fx_fee_rate"] = float(get_env_float("US_MOMENTUM_FX_FEE_RATE", 0.0005)) + self._engine_params = base2 + self.min_price = float(base2.get("min_price", 1.0)) + self.stop_loss_pct = -abs(float(base2.get("sl_pct", 0.015))) + self.take_profit_pct = abs(float(base2.get("tp_pct", 0.025))) + self.tp_max_pct = abs(float(base2.get("tp_max_pct", 0.02))) + if int(base2.get("slot_money") or 0) > 0: + self.slot_money = int(base2["slot_money"]) + self.max_daily = int(base2.get("max_daily", self.max_daily)) + except Exception as e: + self.logger.debug("US overlay 스킵: %s", e) + try: + from .us_momentum_stock_cfg import ( + ensure_us_momentum_stock_config_table, + seed_us_momentum_stock_from_permanent, + ) + ensure_us_momentum_stock_config_table(self.db) + # 첫 reload 때만 시드 (빈 행) + if not getattr(self, "_us_stock_seeded", False): + seed_us_momentum_stock_from_permanent(self.db) + self._us_stock_seeded = True + except Exception as e: + self.logger.debug("us stock_cfg seed 스킵: %s", e) + if not getattr(self, "_paper_ensured", False): + try: + paper_store.ensure_paper_tables(self.db) + self._paper_ensured = True + except Exception as e: + self.logger.debug("paper 테이블 ensure 스킵: %s", e) + # 국내 SCAN_REJECT(0.02~0.05) 에 맞춤 — 해외 REST 없음 + self._us_sleep = { + "loop": ( + float(get_env_float("US_MOMENTUM_LOOP_SLEEP_MIN", self.loop_min_sleep)), + float(get_env_float("US_MOMENTUM_LOOP_SLEEP_MAX", self.loop_max_sleep)), + ), + "reject": ( + float(get_env_float("US_MOMENTUM_SCAN_REJECT_SLEEP_MIN", 0.02)), + float(get_env_float("US_MOMENTUM_SCAN_REJECT_SLEEP_MAX", 0.05)), + ), + "buy_ok": ( + float(get_env_float("US_MOMENTUM_SCAN_BUY_OK_SLEEP_MIN", 0.5)), + float(get_env_float("US_MOMENTUM_SCAN_BUY_OK_SLEEP_MAX", 1.0)), + ), + "buy_fail": ( + float(get_env_float("US_MOMENTUM_SCAN_BUY_FAIL_SLEEP_MIN", 0.3)), + float(get_env_float("US_MOMENTUM_SCAN_BUY_FAIL_SLEEP_MAX", 0.6)), + ), + } + self._us_live_min_candles = int( + get_env_int("US_MOMENTUM_LIVE_MIN_CANDLES", 30) or 30 + ) + self._us_force_buy_test = bool(get_env_bool("FORCE_BUY_TEST", False)) + # 강제매수 1회 제한 (종목별) — 루프 연타로 주문 폭주 방지 + if not hasattr(self, "_us_force_buy_done"): + self._us_force_buy_done = set() + self._us_force_buy_code = ( + str(get_env_from_db("FORCE_BUY_TEST_CODE", "") or "").strip().upper() + ) + self._us_force_buy_qty = max( + 1, int(get_env_int("US_MOMENTUM_FORCE_BUY_QTY", 1) or 1) + ) + self._us_trades_cache_sec = float( + get_env_float("US_MOMENTUM_TRADES_CACHE_SEC", 60.0) or 60.0 + ) + self._us_reload_ts = now + + def _scan_sleep(self, kind: str) -> float: + """해외: REST 없는 스캔 — 국내 STRATEGY_LOOP(1~3s)보다 짧은 기본값. + + sleep 구간은 reload_config 캐시만 사용 (종목마다 get_env 금지). + """ + cached = (self._us_sleep or {}).get(kind) + if cached: + lo, hi = float(cached[0]), float(cached[1]) + elif kind == "loop": + lo, hi = float(self.loop_min_sleep), float(self.loop_max_sleep) + elif kind == "reject": + lo, hi = 0.02, 0.05 + elif kind == "buy_ok": + lo, hi = 0.5, 1.0 + else: + lo, hi = 0.3, 0.6 + lo = max(0.0, float(lo)) + hi = max(lo, float(hi)) + return random.uniform(lo, hi) + + def _session_time_bounds(self): + # 매도·루프 세션: 프리마켓 포함 (기본 22:00~06:30). 매수 TIME_START(2230)와 분리. + start = get_env_int("US_MOMENTUM_SESSION_START", 0) or 2200 + sell_end = get_env_int("US_MOMENTUM_SELL_TIME_END", 0) or 630 + return start, sell_end + + def _buy_time_bounds(self): + start = get_env_int("US_MOMENTUM_TIME_START", 0) or 2230 + buy_end = get_env_int("US_MOMENTUM_TIME_END", 0) or 500 + return start, buy_end + + def _is_us_session_window(self) -> bool: + """해외 WS 와 동일: 월~금 세션시작~ / 화~토 새벽 ~매도종료.""" + now = dt.now() + wd = now.weekday() + hhmm = now.hour * 100 + now.minute + start, sell_end = self._session_time_bounds() + # 요일: 저녁(월~금) / 새벽(화~토) — hm 윈도우와 맞춤 + if start > sell_end: + # wrap: evening or early morning + if hhmm >= start: + return 0 <= wd <= 4 + if hhmm < sell_end: + return 1 <= wd <= 5 + return False + return hm_in_trading_window(hhmm, start, sell_end, wrap_midnight=False) and (0 <= wd <= 4) + + def check_market_status(self) -> bool: + """세션 열림 = 보유·매도·루프 가동 (매수 TIME_START 와 무관).""" + if get_env_bool("FORCE_MARKET_OPEN", False): + return True + return self._is_us_session_window() + + def _log_us_buy_wait(self, reason: str = "") -> None: + """국장 매수체크처럼 — 세션 중·매수창 전이면 주기적으로 대기 로그.""" + interval = float(get_env_float("US_MOMENTUM_BUY_WAIT_LOG_SEC", 60.0) or 60.0) + now = time.time() + last = float(getattr(self, "_us_buy_wait_log_ts", 0) or 0) + if interval > 0 and (now - last) < interval: + return + self._us_buy_wait_log_ts = now + hhmm = dt.now().hour * 100 + dt.now().minute + b0, b1 = self._buy_time_bounds() + s0, s1 = self._session_time_bounds() + try: + cands = self._load_candidates() or [] + codes = ",".join( + str(c.get("code") or "").strip() for c in cands if c.get("code") + )[:80] + except Exception: + codes = "" + self.logger.info( + "🔍 [매수대기] US_MOMENTUM now=%04d session=%04d~%04d buy=%04d~%04d " + "hold=%d codes=%s %s", + hhmm, s0, s1, b0, b1, len(self.holdings), codes or "-", + ("| " + reason) if reason else "", + ) + + def check_buy_allowed(self) -> bool: + """해외 매수창 + (옵션) US EOD 이후 차단. + + 국장 SCALP/MOMENTUM EOD(15:xx) 와 무관. + ``US_MOMENTUM_EOD_ENABLED`` 기본 false → 평소 EOD 매수차단 없음. + true 일 때만 ``US_MOMENTUM_EOD_HM``(기본 05:00) 이후 당일 세션 신규매수 금지. + """ + if get_env_bool("FORCE_MARKET_OPEN", False): + return True + if not self.check_market_status(): + return False + now = dt.now() + hhmm_now = now.hour * 100 + now.minute + start, buy_end = self._buy_time_bounds() + ok = hm_in_trading_window(hhmm_now, start, buy_end, wrap_midnight=True) + if not ok: + self._log_us_buy_wait("매수창 전/후") + return False + # 해외 전용 EOD만 적용 (국장 15:25 와 분리) + from .base import is_live_eod_now + if is_live_eod_now( + bool(getattr(self, "eod_enabled", False)), + str(getattr(self, "eod_hm", "05:00") or "05:00"), + now, + default_hm="05:00", + ): + self._log_us_buy_wait("US EOD 이후 신규매수 차단") + return False + return True + + def _load_candidates(self) -> List[Dict]: + """영구구독 US 고정 유니버스.""" + out: List[Dict] = [] + try: + from permanent_subs import codes_by_market + rows = codes_by_market(self.db, "US", enabled_only=True) + for r in rows: + code = str(r.get("code") or "").strip().upper() + if not code: + continue + out.append({ + "code": code, + "name": code, + "exchange": str(r.get("exchange") or "NASD"), + "symbol": str(r.get("symbol") or code).upper(), + "scalp_on": True, + "score": 0.0, + }) + except Exception as e: + self.logger.warning("US 영구구독 유니버스 로드 실패: %s", e) + return out + + def _post_filter_candidates(self, candidates: List[Dict]) -> List[Dict]: + # ETF/영문 티커 제외 필터·HTS 슬롯 정렬 스킵 (고정 유니버스) + return list(candidates or []) + + def _sync_ws_for_loop(self, cand_codes: List[str], hold_codes: List[str]) -> None: + # 해외 틱/봉은 overseas WS(permanent) 담당 — 키움·국내 KIS 에 알파 티커 넣지 않음 + try: + self.ws.sync_targets_split(self.strategy_id, [], []) + except Exception: + pass + + def _scan_and_buy(self, candidates: List[Dict], max_stocks: int, active_cnt: int) -> None: + """후보의 exchange 를 캐시 후 Base 스캔 (시그널→해외주문에 AMEX 등 전달).""" + exch: Dict[str, str] = {} + for c in (candidates or []): + ccode = str(c.get("code") or "").strip().upper() + if not ccode: + continue + exch[ccode] = ( + str(c.get("exchange") or "NASD").strip().upper() or "NASD" + ) + self._cand_exch = exch + # 일일 체결: 스캔마다 DATE 풀스캔 금지 — TTL 캐시(기본 60s) + return super()._scan_and_buy(candidates, max_stocks, active_cnt) + + def _us_client(self): + """해외 주문·매수가능 조회용 클라이언트. + + 전략 ``self.client`` 는 시세 전용(항상 실키 market_client). + 해외 매매/psamount 는 ``order_mgr.client``(KIS_MOCK 따름 — 모의면 모의)를 써야 한다. + 시세 클라이언트로 주문하면 HTS/모의에 돈이 있어도 실전 계좌 기준으로 0/거절이 난다. + """ + om = getattr(self, "order_mgr", None) or getattr(self, "order_manager", None) + if om is not None: + trade = getattr(om, "client", None) + if trade is not None: + return trade + return getattr(self, "kis", None) or getattr(self, "client", None) + + def _us_cap_qty_by_psamount( + self, + code: str, + qty: int, + price: float, + exchange: str, + ) -> int: + """슬롯 주수를 브로커 매수가능수량(inquire-psamount)으로만 상한. + + 지정가(슬리피지 반영) 기준 — 주문과 동일 가격으로 조회해야 APBK0952 를 예방. + """ + if qty < 1 or price <= 0: + return 0 + client = self._us_client() + if client is None or not hasattr(client, "inquire_overseas_psamount"): + return qty + slip = abs(float(get_env_float("KIS_OVRS_BUY_LIMIT_SLIPPAGE_PCT", 0.3))) + limit_px = price * (1.0 + slip / 100.0) if slip > 0 else price + cache_ttl = float(get_env_float("US_MOMENTUM_PSAMOUNT_CACHE_SEC", 10.0) or 10.0) + key = (str(code).upper(), str(exchange).upper(), round(float(limit_px), 2)) + now = time.time() + hit = (self._psamount_cache or {}).get(key) + if hit and cache_ttl > 0 and (now - float(hit[0])) < cache_ttl: + max_q = int(hit[1]) + else: + info = client.inquire_overseas_psamount( + code, limit_px, exchange=exchange, + ) or {} + max_q = int( + info.get("ord_psbl_qty") + or info.get("max_ord_psbl_qty") + or 0 + ) + self._psamount_cache[key] = (now, max_q) + frcr = info.get("ord_psbl_frcr_amt") + self.logger.info( + "💵 [US_MOMENTUM 매수가능] %s excg=%s limit=%.4f " + "ord_psbl_qty=%d frcr=%s slot_qty=%d", + code, exchange, limit_px, max_q, frcr, qty, + ) + if max_q < 1: + return 0 + return min(int(qty), int(max_q)) + + def _force_buy_test(self, code: str, name: str) -> Optional[Dict]: + """해외 강제매수 테스트 — 패턴 스킵, 현재가·1주(기본)로 시그널. + + - FORCE_BUY_TEST_CODE 있으면 해당 종목만 (권장: TSLA — ETP 이슈 분리) + - 종목당 1회만 시그널 (주문 성공/실패와 무관, 연타 방지) + - 국내 MomentumStrategy._force_buy_test 의 KR REST/슬롯 수량 경로 사용 금지 + """ + cu = str(code or "").strip().upper() + only = str(getattr(self, "_us_force_buy_code", "") or "").strip().upper() + if only and cu != only: + return None + done = getattr(self, "_us_force_buy_done", None) + if done is None: + self._us_force_buy_done = set() + done = self._us_force_buy_done + if cu in done: + return None + + # WS 틱 캐시 → 없으면 최근 1분봉 종가 (overseas_ws 미주입 시에도 주문 경로 검증 가능) + px = self._us_last_price(code, 0.0) + if px <= 0: + try: + bars = self._us_candles(code, 3) + if bars: + px = float((bars[-1] or {}).get("close", 0) or 0) + except Exception: + px = 0.0 + if px <= 0: + # 연타 WARNING 스팸 방지 (종목당 30초 1회) + now_ts = time.time() + last_w = float(getattr(self, "_us_force_nopx_ts", 0) or 0) + if now_ts - last_w >= 30.0: + self._us_force_nopx_ts = now_ts + self.logger.warning( + "🧪 [FORCE_BUY_TEST] %s 현재가 없음 — 스킵 (overseas_ws=%s)", + cu, bool(getattr(self, "overseas_ws", None)), + ) + return None + qty = max(1, int(getattr(self, "_us_force_buy_qty", 1) or 1)) + max_q = get_env_int("US_MOMENTUM_MAX_ORDER_QTY", 0) + if max_q > 0: + qty = min(qty, int(max_q)) + + exchange = ( + (self._cand_exch or {}).get(cu) + or get_env_from_db("KIS_OVRS_DEFAULT_EXCG", "NASD") + or "NASD" + ) + exchange = str(exchange).strip().upper() or "NASD" + if not self._dry_run: + capped = self._us_cap_qty_by_psamount(code, qty, px, exchange) + if capped < 1: + done.add(cu) + self.logger.warning( + "🧪 [FORCE_BUY_TEST] %s psamount=0 — 주문불가 (1회 마킹)", cu + ) + return None + qty = min(qty, int(capped)) + + done.add(cu) + eff_tp = me.resolve_effective_tp_pct(self.take_profit_pct, self.tp_max_pct) + self.logger.warning( + "🧪 [FORCE_BUY_TEST] US_MOMENTUM %s(%s) qty=%d @%.4f excg=%s dry=%s " + "(패턴스킵·종목1회)", + name, cu, qty, px, exchange, self._dry_run, + ) + return { + "code": code, + "name": name, + "price": px, + "qty": qty, + "exchange": exchange, + "stop_price": px * (1 + self.stop_loss_pct), + "target_price": px * (1 + eff_tp), + "atr_entry": 0.0, + "size_class": "", + "entry_features": {"force_buy_test": True, "dry_run": self._dry_run}, + "dry_run": self._dry_run, + } + + def check_buy(self, code: str, name: str) -> Optional[Dict]: + """국내 check_buy 재사용 + 키움 갭보정/전일시가 REST 스킵.""" + try: + if self._us_force_buy_test: + return self._force_buy_test(code, name) + + cu = str(code or "").strip().upper() + min_need = int(self._us_live_min_candles or 30) + candles_raw = self._us_candles(code, min_need) + use_forming = bool((self._engine_params or {}).get("live_align_use_forming_bar", True)) + if (self._engine_params or {}).get("live_backtest_align", True) and use_forming: + try: + cur = self.ws.get_current_candle(code, self.candle_tf) + except Exception: + cur = None + if cur and float(cur.get("open", 0) or 0) > 0: + ct = str(cur.get("candle_time") or "")[:12] + last_ct = "" + if candles_raw: + last_ct = str(candles_raw[-1].get("candle_time") or "")[:12] + if ct and ct != last_ct: + cur_d = dict(cur) + cur_d["is_confirmed"] = 0 + candles_raw.append(cur_d) + if len(candles_raw) < 6: + self._log_buy_reject( + "탈락-봉부족", name, code, + "candles=%d (해외 WS/DB 대기)" % len(candles_raw), + ) + return None + candles = [self._norm_candle(c) for c in candles_raw] + # 탈락 로그용 현재가 (봉종가 → 해외 WS) + px_log = self._us_last_price( + code, float((candles[-1] or {}).get("close", 0) or 0), + ) + + today = dt.now().strftime("%Y%m%d") + last_exit_dt = None + if code in self.recently_sold: + try: + last_exit_dt = dt.fromtimestamp(self.recently_sold[code]) + if last_exit_dt.strftime("%Y%m%d") != today: + last_exit_dt = None + elif bool((self._engine_params or {}).get("cooldown_use_candle_floor", True)): + last_exit_dt = last_exit_dt.replace(second=0, microsecond=0) + except Exception: + pass + try: + today_ymd = dt.now().strftime("%Y%m%d") + if self._dry_run: + daily_cnt = paper_store.count_paper_trades_today( + self.db, + strategy_id=self.strategy_id, + code=code, + ymd=today_ymd, + ) + else: + now_ts = time.time() + ttl = float(getattr(self, "_us_trades_cache_sec", 60.0) or 60.0) + if ( + self._us_trades_today is None + or (now_ts - float(self._us_trades_today_ts or 0)) >= ttl + ): + self._us_trades_today = list( + self.db.get_trades_by_date(today_ymd) or [] + ) + self._us_trades_today_ts = now_ts + daily_cnt = len([ + t for t in self._us_trades_today + if t.get("code") == code + and str(t.get("strategy", "")).upper().startswith("US_MOMENTUM") + ]) + except Exception: + daily_cnt = 0 + state = {"last_exit_dt": last_exit_dt, "daily_cnt": daily_cnt} + + params = dict(self._engine_params or {}) + try: + from .us_momentum_stock_cfg import apply_us_momentum_stock_overlay + params = apply_us_momentum_stock_overlay(self.db, code, params) + except Exception as _ov_e: + self.logger.debug("stock overlay 스킵 %s: %s", code, _ov_e) + # 종목 행 slot_money 있으면 수량 계산에 반영 + if int(params.get("slot_money") or 0) > 0: + params["slot_money"] = int(params["slot_money"]) + else: + params["slot_money"] = self.slot_money + # 호가/휩쏘 WS 훅 제거 (해외 없음) + reject, msg, sig = me.check_buy_signal_momentum_live(candles, params, state) + if reject: + # 국내: 🔍 [탈락-…] 이름 코드: 사유 — 해외는 현재가 추가 + self._log_buy_reject(reject, name, code, msg or "", price=px_log) + return None + if not sig: + # 엔진 silent (쿨다운·일한도 등) — 국내도 무로그이나 US 는 사유 가시화 + self._log_buy_reject( + "탈락-무신호", name, code, + "쿨다운/일일한도/세션", + price=px_log, + ) + return None + + _ebk = str(sig.get("entry_bar_key") or "")[:12] + _defer = self._defer_mid_enroll_entry( + code, _ebk, int(getattr(self, "candle_tf", 1) or 1), params, + ) + if _defer: + self._log_buy_reject(_defer, name, code, "", price=px_log) + return None + + # 국장과 동일: align ON이면 T 첫틱(RAM)→시가 — last로 덮지 않음 (실매↔백테 정합) + align_on = bool(params.get("live_backtest_align", True)) + entry_open = float(sig.get("entry_price", 0) or 0) + if align_on and entry_open > 0: + from kis_trader.engine.tail_tick_replay import live_align_entry_price + curr_price, _entry_src = live_align_entry_price( + self.ws, + code, + entry_open, + entry_bar_key=_ebk, + tf_min=int(getattr(self, "candle_tf", 1) or 1), + ) + else: + curr_price = float((candles[-1] or {}).get("close", 0) or 0) + curr_price = self._us_last_price(code, curr_price) + if curr_price <= 0 or curr_price < self.min_price: + self._log_buy_reject( + "탈락-최소가격", name, code, + "%.4f < min=%.4f" % (curr_price, self.min_price), + price=curr_price, + ) + return None + + exchange = ( + params.get("_us_exchange") + or (self._cand_exch or {}).get(cu) + or get_env_from_db("KIS_OVRS_DEFAULT_EXCG", "NASD") + or "NASD" + ) + exchange = str(exchange).strip().upper() or "NASD" + + # 슬롯(USD): 종목 행 → 전역 + slot_for_qty = float(params.get("slot_money") or self.slot_money or 0) + hard_cap = get_env_int("US_MOMENTUM_MAX_BUY_AMOUNT", 0) + # _resolve_buy_qty_live 는 self.slot_money 사용 → 임시 교체 + _prev_slot = self.slot_money + try: + if slot_for_qty > 0: + self.slot_money = int(slot_for_qty) + qty, rej = self._resolve_buy_qty_live(curr_price, hard_cap=hard_cap) + finally: + self.slot_money = _prev_slot + if rej: + self.logger.info( + "🔍 [탈락-%s] %s(%s) price=%.4f", + rej, name, code, curr_price, + ) + return None + max_q = get_env_int("US_MOMENTUM_MAX_ORDER_QTY", 0) + if max_q > 0 and qty > max_q: + self.logger.info( + "ℹ️ [US_MOMENTUM qty hardcap] %s raw_qty=%d → %d (MAX_ORDER_QTY)", + code, qty, max_q, + ) + qty = int(max_q) + if not self._dry_run: + # 실주문만 psamount (paper 는 브로커 조회 불필요) + capped = self._us_cap_qty_by_psamount(code, qty, curr_price, exchange) + if capped < 1: + self._log_buy_reject( + "탈락-주문가능0", name, code, + "inquire-psamount ord_psbl_qty=0 (슬롯=%d)" % qty, + price=curr_price, + ) + return None + if capped < qty: + self.logger.info( + "ℹ️ [US_MOMENTUM 슬롯→가능] %s slot_qty=%d → psamount=%d", + code, qty, capped, + ) + qty = capped + if qty < 1: + self._log_buy_reject( + "탈락-수량0", name, code, "qty<1", price=curr_price, + ) + return None + + sl_ratio = -abs(float(params.get("sl_pct", abs(self.stop_loss_pct)))) + tp_ratio = abs(float(params.get("tp_pct", self.take_profit_pct))) + tp_max = abs(float(params.get("tp_max_pct", self.tp_max_pct))) + eff_tp = me.resolve_effective_tp_pct(tp_ratio, tp_max) + stop_price = curr_price * (1 + sl_ratio) + target_price = curr_price * (1 + eff_tp) + + self.logger.info( + "🎯 [US_MOMENTUM 시그널%s] %s(%s) price=%.4f qty=%d excg=%s " + "slot_usd=%s pattern=%s RSI=%.1f", + "·DRY" if self._dry_run else "", + name, code, curr_price, qty, exchange, + getattr(self, "slot_money", "?"), + sig.get("pattern", "?"), + float(sig.get("rsi", 0) or 0), + ) + return { + "code": code, + "name": name, + "price": curr_price, + "qty": qty, + "exchange": exchange, + "stop_price": stop_price, + "target_price": target_price, + "atr_entry": 0.0, + "size_class": "", + "entry_features": {"rsi": sig.get("rsi", 0), "dry_run": self._dry_run}, + "dry_run": self._dry_run, + } + except Exception as e: + self.logger.info("🔍 [탈락-예외] %s %s: %s", name, code, e) + return None + + def _sync_holdings_from_db(self, *, log_restore: bool = False) -> None: + """DRY_RUN: active_trades_paper 만. 실매 테이블과 교차 금지. + + 주의: Base 는 strategy_id ``US_MOMENTUM`` → prefix ``US`` 로 LIKE 조회하는데 + paper 는 strategy 정확 일치로만 로드한다. + ※ init 시점엔 reload_config 전이라 self._dry_run 이 없을 수 있음 → env 직접 조회. + """ + dry = get_env_bool("US_MOMENTUM_DRY_RUN", True) + self._dry_run = dry + if not dry: + return super()._sync_holdings_from_db(log_restore=log_restore) + try: + rows = paper_store.get_active_trades_paper( + self.db, strategy_id=self.strategy_id + ) + new_holdings: Dict[str, dict] = {} + for code, t in rows.items(): + avg_bp = float(t.get("avg_buy_price") or t.get("buy_price") or 0) + db_max = float(t.get("max_price") or 0) + db_sess = float(t.get("session_low") or avg_bp or 0) + max_p, sess_low = self._merge_runtime_overlay(code, avg_bp, db_max, db_sess) + holding = { + "buy_price": avg_bp, + "qty": int(t.get("current_qty") or t.get("qty") or 0), + "stop_price": float(t.get("stop_price") or 0), + "target_price": float(t.get("target_price") or 0), + "max_price": max_p, + "session_low": sess_low, + "atr_entry": float(t.get("atr_at_entry") or t.get("atr_entry") or 0), + "buy_time": t.get("buy_date") or "", + "name": t.get("name") or code, + "size_class": t.get("size_class") or "", + "paper": True, + } + self._apply_runtime_extra_fields(code, holding) + if holding["qty"] > 0 and avg_bp > 0: + new_holdings[code] = holding + for gone in set(self.holdings.keys()) - set(new_holdings.keys()): + self._runtime.pop(gone, None) + self.holdings.clear() + self.holdings.update(new_holdings) + self._after_holdings_sync() + if log_restore and self.holdings: + self.logger.info( + "📂 [PAPER] holdings 복원 %d종 [%s]", + len(self.holdings), self.strategy_id, + ) + except Exception as e: + self.logger.error("paper holdings sync 실패: %s", e) + + + def check_sell_signals(self): + """국내 매도 엔진 + 종목별 stock_cfg 오버레이 + 해외 WS 가격.""" + if not self.holdings: + return [] + from .base import is_live_eod_now + from .us_momentum_stock_cfg import apply_us_momentum_stock_overlay + + signals = [] + now = dt.now() + is_eod = is_live_eod_now( + getattr(self, "eod_enabled", False), + getattr(self, "eod_hm", "05:00"), + now, + default_hm="05:00", + ) + base = dict(self._engine_params or me.get_momentum_defaults_from_db()) + + for code, holding in list(self.holdings.items()): + try: + name = holding.get("name", code) + buy_price = float(holding.get("buy_price", 0)) + qty = int(holding.get("qty", 0)) + stop = float(holding.get("stop_price", 0)) + target = float(holding.get("target_price", 0)) + max_price = float(holding.get("max_price", buy_price)) + if qty <= 0 or buy_price <= 0: + continue + + current_price = self._us_last_price(code, 0.0) + if current_price <= 0: + continue + if current_price > max_price: + max_price = current_price + holding["max_price"] = max_price + + params = apply_us_momentum_stock_overlay(self.db, code, base) + profit_pct = (current_price - buy_price) / buy_price if buy_price > 0 else 0 + position = { + "entry_price": buy_price, + "entry_time": holding.get("buy_time", ""), + "qty": qty, + "stop": stop, + "target": target, + "max_price": max_price, + } + candle = { + "high": max_price, + "low": current_price, + "close": current_price, + "candle_time": now.strftime("%Y%m%d%H%M"), + } + res = me.check_sell_signal_momentum_live( + position, candle, params, is_eod=is_eod, + ) + if not res: + continue + reason, exit_price = res + signals.append({ + "code": code, + "name": name, + "current_price": current_price, + "price": exit_price, + "qty": qty, + "buy_price": buy_price, + "profit_pct": profit_pct, + "reason": reason, + "exchange": holding.get("exchange") or "", + "market": "US", + }) + except Exception as e: + self.logger.error("US 매도 시그널 체크 오류(%s): %s", code, e) + return signals + + def _submit_buy(self, signal: Dict): + """DRY=paper / 실주문=OrderManager 해외 경로 (DB+MM).""" + if signal.get("dry_run") or self._dry_run: + code = str(signal.get("code") or "") + name = str(signal.get("name") or code) + price = float(signal.get("price") or 0) + qty = int(signal.get("qty") or 0) + paper_ord = paper_store.open_paper_buy( + self.db, + strategy_id=self.strategy_id, + code=code, + name=name, + price=price, + qty=qty, + stop_price=float(signal.get("stop_price") or 0), + target_price=float(signal.get("target_price") or 0), + atr_entry=float(signal.get("atr_entry") or 0), + size_class=str(signal.get("size_class") or ""), + entry_features=signal.get("entry_features"), + ) + ok = bool(paper_ord) + if ok: + now_str = dt.now().strftime("%Y-%m-%d %H:%M:%S") + self.holdings[code] = { + "buy_price": price, + "qty": qty, + "stop_price": float(signal.get("stop_price") or 0), + "target_price": float(signal.get("target_price") or 0), + "max_price": price, + "session_low": price, + "atr_entry": float(signal.get("atr_entry") or 0), + "buy_time": now_str, + "name": name, + "size_class": str(signal.get("size_class") or ""), + "paper": True, + } + self._capture_runtime_overlay() + self.logger.info( + "📝 [US_MOMENTUM PAPER BUY] %s qty=%s @%.4f ord=%s", + code, qty, price, paper_ord, + ) + + class _Dry: + success = ok + filled_qty = qty if ok else 0 + filled_avg_price = price if ok else 0.0 + reason = "paper_ok" if ok else "paper_fail" + ord_no = paper_ord + + return _Dry() + + from ..execution.order_manager import OrderRequest + + code = str(signal.get("code") or "").strip().upper() + name = str(signal.get("name") or code) + price = float(signal.get("price") or 0) + qty = int(signal.get("qty") or 0) + exchange = str( + signal.get("exchange") + or get_env_from_db("KIS_OVRS_DEFAULT_EXCG", "NASD") + or "NASD" + ).strip().upper() + om = getattr(self, "order_mgr", None) or getattr(self, "order_manager", None) + if om is None: + self.logger.error("⚠️ US_MOMENTUM OrderManager 없음 (%s)", code) + + class _NoOm: + success = False + filled_qty = 0 + filled_avg_price = 0.0 + reason = "no_order_mgr" + ord_no = None + + return _NoOm() + + req = OrderRequest( + strategy_id=self.strategy_id, + code=code, + name=name, + side="BUY", + qty=qty, + price_ref=price, + stop_price=float(signal.get("stop_price") or 0), + target_price=float(signal.get("target_price") or 0), + atr_entry=float(signal.get("atr_entry") or 0), + size_class=str(signal.get("size_class") or "") or None, + entry_features=signal.get("entry_features"), + market="US", + exchange=exchange, + currency="USD", + ) + result = om.place(req) + if result and result.success: + now_str = dt.now().strftime("%Y-%m-%d %H:%M:%S") + fill_px = float(result.filled_avg_price or price) + fill_qty = int(result.filled_qty or qty) + self.holdings[code] = { + "buy_price": fill_px, + "qty": fill_qty, + "stop_price": float(signal.get("stop_price") or 0), + "target_price": float(signal.get("target_price") or 0), + "max_price": fill_px, + "session_low": fill_px, + "atr_entry": float(signal.get("atr_entry") or 0), + "buy_time": now_str, + "name": name, + "size_class": str(signal.get("size_class") or ""), + "exchange": exchange, + "ord_no": result.ord_no, + "paper": False, + } + self._capture_runtime_overlay() + try: + self._psamount_cache.clear() + except Exception: + pass + self.logger.info( + "🧾 [US_MOMENTUM OM BUY] %s qty=%s @%.4f odno=%s excg=%s", + code, fill_qty, fill_px, result.ord_no, exchange, + ) + else: + try: + self._psamount_cache.clear() + except Exception: + pass + reason = getattr(result, "reason", "") if result else "no_result" + self.logger.warning( + "⚠️ [US_MOMENTUM OM BUY 실패] %s reason=%s", code, reason, + ) + return result + + def _submit_sell(self, signal: Dict): + if self._dry_run: + code = str(signal.get("code") or "") + name = str(signal.get("name") or code) + qty = int(signal.get("qty") or 0) + px = float(signal.get("current_price") or signal.get("price") or 0) + buy_px = float(signal.get("buy_price") or 0) + reason = str(signal.get("reason") or "paper") + ok = paper_store.open_paper_sell( + self.db, + strategy_id=self.strategy_id, + code=code, + name=name, + qty=qty, + sell_price=px, + sell_reason=reason, + buy_price=buy_px, + ) + if ok: + self.recently_sold[code] = time.time() + self._drop_local_position(code) + + class _DrySell: + success = ok + filled_qty = qty if ok else 0 + filled_avg_price = px if ok else 0.0 + reason = "paper_ok" if ok else "paper_fail" + + return _DrySell() + + from ..execution.order_manager import OrderRequest + + code = str(signal.get("code") or "").strip().upper() + qty = int(signal.get("qty") or 0) + px = float(signal.get("current_price") or signal.get("price") or 0) + exchange = str( + signal.get("exchange") + or (self.holdings.get(code) or {}).get("exchange") + or get_env_from_db("KIS_OVRS_DEFAULT_EXCG", "NASD") + or "NASD" + ).strip().upper() + om = getattr(self, "order_mgr", None) or getattr(self, "order_manager", None) + if om is None: + self.logger.error("⚠️ US_MOMENTUM OrderManager 없음 (매도 %s)", code) + + class _NoOmSell: + success = False + filled_qty = 0 + filled_avg_price = 0.0 + reason = "no_order_mgr" + + return _NoOmSell() + + buy_px = float( + (self.holdings.get(code) or {}).get("buy_price") + or signal.get("buy_price") + or 0 + ) + hold_name = str( + (self.holdings.get(code) or {}).get("name") + or signal.get("name") + or code + ) + req = OrderRequest( + strategy_id=self.strategy_id, + code=code, + name=hold_name, + side="SELL", + qty=qty, + price_ref=px, + reason=str(signal.get("reason") or "overseas"), + buy_price=buy_px, + profit_pct=float(signal.get("profit_pct") or 0), + market="US", + exchange=exchange, + currency="USD", + ) + result = om.place(req) + if result and result.success: + self.recently_sold[code] = time.time() + self._drop_local_position(code) + self.logger.info( + "🧾 [US_MOMENTUM OM SELL] %s qty=%s @%.4f odno=%s reason=%s", + code, qty, px, result.ord_no, signal.get("reason"), + ) + else: + reason = getattr(result, "reason", "") if result else "no_result" + # 영구형 거절 쿨다운 중엔 초단위 WARNING 도배 방지 + if "cooldown" in str(reason or "").lower(): + self.logger.debug( + "⏳ [US_MOMENTUM OM SELL 쿨다운] %s reason=%s", code, reason, + ) + else: + self.logger.warning( + "⚠️ [US_MOMENTUM OM SELL 실패] %s reason=%s", code, reason, + ) + return result diff --git a/kis_trader/strategies/us_momentum_stock_cfg.py b/kis_trader/strategies/us_momentum_stock_cfg.py new file mode 100644 index 0000000..8113d5f --- /dev/null +++ b/kis_trader/strategies/us_momentum_stock_cfg.py @@ -0,0 +1,378 @@ +""" +kis_trader/strategies/us_momentum_stock_cfg.py +============================================== +해외 모멘텀 종목별 파라미터 — ``us_momentum_stock_config`` (박스엔진/DBBAND 패턴). + +- 유니버스는 계속 ``permanent_subscriptions`` (market=US). +- 종목 행이 있으면 TRIGGER/청산 축만 덮어씀. 없으면 전역 ``US_MOMENTUM_*``. +- 포트 한도(TOTAL_BUDGET/MAX_STOCKS)·세션 공통은 전역 유지. +""" +from __future__ import annotations + +import logging +from typing import Any, Dict, List, Optional + +logger = logging.getLogger("kis_trader.us_momentum_stock_cfg") + +# 엔진 params 키 ↔ 테이블 컬럼 (UI % 숫자로 저장하는 축은 *_pct) +STOCK_ENGINE_FLOAT_PCT = ( + # DB에 퍼센트 숫자(1.5)로 저장 → 엔진 비율(0.015) + ("sl_pct", "sl_pct"), + ("tp_pct", "tp_pct"), + ("tp_max_pct", "tp_max_pct"), + ("shoulder_min_high", "shoulder_min_high_pct"), + ("shoulder_cut_pct", "shoulder_cut_pct"), + ("trail_pct", "trail_pct"), + ("trail_arm_pct", "trail_arm_pct"), +) +STOCK_ENGINE_FLOAT = ( + ("mom_rsi_min", "rsi_min"), + ("mom_rsi_max", "rsi_max"), + ("mom_vol_mult", "vol_mult"), + ("pullback_min_pct", "pullback_min_pct"), + ("pullback_max_pct", "pullback_max_pct"), + ("setup_vol_max_mult", "setup_vol_max_mult"), + ("high_chase_thr", "high_chase_thr"), + ("max_daily_chg", "max_daily_chg"), + ("min_price", "min_price"), +) +STOCK_ENGINE_INT = ( + ("mom_vol_win", "vol_win"), + ("chase_lookback_min", "chase_lookback_min"), + ("pullback_lookback_min", "pullback_lookback_min"), + ("setup_bear_bars_min", "setup_bear_bars_min"), + ("max_hold_bars", "max_hold_bars"), + ("max_daily", "max_daily"), + ("ema_fast_period", "ema_fast_period"), + ("ema_slow_period", "ema_slow_period"), + ("slot_money", "slot_money"), + ("cooldown_sec", "cooldown_sec"), # → cooldown_min +) +STOCK_ENGINE_BOOL = ( + ("use_defense_filters", "use_defense_filters"), + ("use_high_chase_filter", "use_high_chase_filter"), + ("use_daily_range_filter", "use_daily_range_filter"), + ("use_ema_filter", "use_ema_filter"), + ("use_rsi_max_filter", "use_rsi_max_filter"), + ("pattern_breakout", "pattern_breakout"), + ("pattern_pullback", "pattern_pullback"), +) + +_DDL = """ +CREATE TABLE IF NOT EXISTS us_momentum_stock_config ( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + code VARCHAR(32) NOT NULL, + exchange VARCHAR(16) NOT NULL DEFAULT 'NASD', + symbol VARCHAR(32) NOT NULL DEFAULT '', + name VARCHAR(64) DEFAULT '', + stock_group VARCHAR(16) NOT NULL DEFAULT 'STOCK', + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + sl_pct DOUBLE NULL, + tp_pct DOUBLE NULL, + tp_max_pct DOUBLE NULL, + shoulder_min_high_pct DOUBLE NULL, + shoulder_cut_pct DOUBLE NULL, + trail_pct DOUBLE NULL, + trail_arm_pct DOUBLE NULL, + ratchet_tiers VARCHAR(255) NULL, + max_hold_bars INT NULL, + cooldown_sec INT NULL, + max_daily INT NULL, + slot_money DOUBLE NULL, + rsi_min DOUBLE NULL, + rsi_max DOUBLE NULL, + vol_mult DOUBLE NULL, + vol_win INT NULL, + chase_lookback_min INT NULL, + pullback_lookback_min INT NULL, + pullback_min_pct DOUBLE NULL, + pullback_max_pct DOUBLE NULL, + setup_vol_max_mult DOUBLE NULL, + setup_bear_bars_min INT NULL, + high_chase_thr DOUBLE NULL, + max_daily_chg DOUBLE NULL, + min_price DOUBLE NULL, + ema_fast_period INT NULL, + ema_slow_period INT NULL, + use_defense_filters TINYINT NULL, + use_high_chase_filter TINYINT NULL, + use_daily_range_filter TINYINT NULL, + use_ema_filter TINYINT NULL, + use_rsi_max_filter TINYINT NULL, + pattern_breakout TINYINT NULL, + pattern_pullback TINYINT NULL, + UNIQUE KEY uk_usmom_code (code), + KEY idx_usmom_group (stock_group) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 + COMMENT='US_MOMENTUM 종목별 TRIGGER/청산 (NULL=전역 US_MOMENTUM_* 폴백)' +""" + + +def _trade_db_core(db: Any): + return getattr(db, "raw", db) + + +def ensure_us_momentum_stock_config_table(db: Any) -> None: + raw = _trade_db_core(db) + raw.conn.execute(_DDL.strip()) + try: + raw.conn.commit() + except Exception: + pass + + +def _pct_to_ratio(x: float) -> float: + """UI/테이블 % (1.5) → 엔진 비율 (0.015). 이미 소수면 그대로.""" + ax = abs(float(x)) + if ax == 0: + return 0.0 + return ax if ax < 0.5 else ax / 100.0 + + +def get_us_momentum_stock_row(db: Any, code: str) -> Optional[Dict[str, Any]]: + ensure_us_momentum_stock_config_table(db) + cu = str(code or "").strip().upper() + if not cu: + return None + raw = _trade_db_core(db) + try: + row = raw.conn.execute( + "SELECT * FROM us_momentum_stock_config WHERE code=%s", + (cu,), + ).fetchone() + return dict(row) if row else None + except Exception as e: + logger.debug("get_us_momentum_stock_row 실패 %s: %s", cu, e) + return None + + +def list_us_momentum_stock_rows(db: Any) -> List[Dict[str, Any]]: + ensure_us_momentum_stock_config_table(db) + raw = _trade_db_core(db) + try: + rows = raw.conn.execute( + "SELECT * FROM us_momentum_stock_config ORDER BY stock_group, code" + ).fetchall() + return [dict(r) for r in (rows or [])] + except Exception as e: + logger.warning("list_us_momentum_stock_rows 실패: %s", e) + return [] + + +def apply_us_momentum_stock_overlay( + db: Any, + code: str, + base_params: Dict[str, Any], +) -> Dict[str, Any]: + """전역 엔진 params 위에 종목 행(NULL 아닌 컬럼만) 덮어씀.""" + out = dict(base_params or {}) + row = get_us_momentum_stock_row(db, code) + if not row: + return out + out["_us_stock_cfg"] = True + out["_us_stock_group"] = str(row.get("stock_group") or "STOCK") + if row.get("exchange"): + out["_us_exchange"] = str(row["exchange"]).strip().upper() + + for eng, col in STOCK_ENGINE_FLOAT_PCT: + v = row.get(col) + if v is None or v == "": + continue + try: + out[eng] = _pct_to_ratio(float(v)) + except (TypeError, ValueError): + pass + + for eng, col in STOCK_ENGINE_FLOAT: + v = row.get(col) + if v is None or v == "": + continue + try: + out[eng] = float(v) + except (TypeError, ValueError): + pass + + for eng, col in STOCK_ENGINE_INT: + v = row.get(col) + if v is None or v == "": + continue + try: + if eng == "cooldown_sec": + out["cooldown_min"] = float(v) / 60.0 + else: + out[eng] = int(float(v)) + except (TypeError, ValueError): + pass + + for eng, col in STOCK_ENGINE_BOOL: + v = row.get(col) + if v is None or v == "": + continue + try: + out[eng] = bool(int(v)) + except (TypeError, ValueError): + out[eng] = bool(v) + + rt = row.get("ratchet_tiers") + if rt is not None and str(rt).strip() != "": + out["ratchet_tiers"] = str(rt).strip() + + return out + + +def upsert_us_momentum_stock_config( + db: Any, + code: str, + *, + exchange: str = "NASD", + symbol: str = "", + name: str = "", + stock_group: str = "STOCK", + fields: Optional[Dict[str, Any]] = None, +) -> bool: + """종목 행 UPSERT. fields 의 키=테이블 컬럼명, None 은 NULL(전역 폴백).""" + ensure_us_momentum_stock_config_table(db) + cu = str(code or "").strip().upper() + if not cu: + return False + sym = str(symbol or cu).strip().upper() or cu + exch = str(exchange or "NASD").strip().upper() or "NASD" + grp = str(stock_group or "STOCK").strip().upper() or "STOCK" + if grp not in ("ETF", "STOCK", "OTHER"): + grp = "STOCK" + fields = dict(fields or {}) + raw = _trade_db_core(db) + # 기존 행 — Optuna 부분 apply 시 미전달 컬럼을 NULL 로 지우지 않음 + existing = get_us_momentum_stock_row(db, cu) or {} + cols = [ + "code", "exchange", "symbol", "name", "stock_group", + "sl_pct", "tp_pct", "tp_max_pct", + "shoulder_min_high_pct", "shoulder_cut_pct", + "trail_pct", "trail_arm_pct", "ratchet_tiers", + "max_hold_bars", "cooldown_sec", "max_daily", "slot_money", + "rsi_min", "rsi_max", "vol_mult", "vol_win", + "chase_lookback_min", "pullback_lookback_min", + "pullback_min_pct", "pullback_max_pct", + "setup_vol_max_mult", "setup_bear_bars_min", + "high_chase_thr", "max_daily_chg", "min_price", + "ema_fast_period", "ema_slow_period", + "use_defense_filters", "use_high_chase_filter", + "use_daily_range_filter", "use_ema_filter", "use_rsi_max_filter", + "pattern_breakout", "pattern_pullback", + ] + vals: Dict[str, Any] = { + "code": cu, + "exchange": exch, + "symbol": sym, + "name": str(name or cu), + "stock_group": grp, + } + for c in cols: + if c in ("code", "exchange", "symbol", "name", "stock_group"): + continue + if c in fields: + vals[c] = fields[c] + elif c in existing: + vals[c] = existing.get(c) + else: + vals[c] = None + + placeholders = ", ".join(["%s"] * len(cols)) + col_sql = ", ".join(cols) + updates = ", ".join( + f"{c}=VALUES({c})" for c in cols if c != "code" + ) + try: + raw.conn.execute( + f"INSERT INTO us_momentum_stock_config ({col_sql}) VALUES ({placeholders}) " + f"ON DUPLICATE KEY UPDATE {updates}", + tuple(vals.get(c) for c in cols), + ) + raw.conn.commit() + return True + except Exception as e: + logger.error("upsert_us_momentum_stock_config 실패 %s: %s", cu, e) + return False + + +def delete_us_momentum_stock_config(db: Any, code: str) -> bool: + ensure_us_momentum_stock_config_table(db) + cu = str(code or "").strip().upper() + if not cu: + return False + raw = _trade_db_core(db) + try: + raw.conn.execute( + "DELETE FROM us_momentum_stock_config WHERE code=%s", (cu,), + ) + raw.conn.commit() + return True + except Exception as e: + logger.warning("delete_us_momentum_stock_config 실패 %s: %s", cu, e) + return False + + +def seed_us_momentum_stock_from_permanent(db: Any) -> int: + """permanent US 활성 종목 중 행 없는 것만 STOCK/ETF 추정으로 빈 행 추가. 반환=신규 수.""" + ensure_us_momentum_stock_config_table(db) + try: + from permanent_subs import codes_by_market + us_list = codes_by_market(db, "US", enabled_only=True) or [] + except Exception as e: + logger.debug("seed permanent 조회 실패: %s", e) + return 0 + n = 0 + etf_hint = {"QQQ", "QQQM", "SPY", "SPYM", "IVV", "VOO", "DIA", "IWM", "TQQQ", "SQQQ"} + for row in us_list: + code = str(row.get("code") or row.get("symbol") or "").strip().upper() + if not code: + continue + if get_us_momentum_stock_row(db, code): + continue + grp = "ETF" if code in etf_hint or code.endswith("M") and len(code) <= 5 else "STOCK" + # QQQM/SPYM 명시 + if code in ("QQQM", "SPYM", "QQQ", "SPY"): + grp = "ETF" + ok = upsert_us_momentum_stock_config( + db, + code, + exchange=str(row.get("exchange") or "NASD"), + symbol=str(row.get("symbol") or code), + name=str(row.get("note") or row.get("name") or code), + stock_group=grp, + fields={}, # 전부 NULL → 전역 폴백 + ) + if ok: + n += 1 + return n + + +def row_to_ui_dict(row: Dict[str, Any]) -> Dict[str, Any]: + """웹 폼용 — NULL 유지(빈칸=전역).""" + if not row: + return {} + out = { + "code": row.get("code"), + "exchange": row.get("exchange"), + "symbol": row.get("symbol"), + "name": row.get("name"), + "stock_group": row.get("stock_group") or "STOCK", + } + for k in ( + "sl_pct", "tp_pct", "tp_max_pct", + "shoulder_min_high_pct", "shoulder_cut_pct", + "trail_pct", "trail_arm_pct", "ratchet_tiers", + "max_hold_bars", "cooldown_sec", "max_daily", "slot_money", + "rsi_min", "rsi_max", "vol_mult", "vol_win", + "chase_lookback_min", "pullback_lookback_min", + "pullback_min_pct", "pullback_max_pct", + "setup_vol_max_mult", "setup_bear_bars_min", + "high_chase_thr", "max_daily_chg", "min_price", + "ema_fast_period", "ema_slow_period", + "use_defense_filters", "use_high_chase_filter", + "use_daily_range_filter", "use_ema_filter", "use_rsi_max_filter", + "pattern_breakout", "pattern_pullback", + ): + out[k] = row.get(k) + return out diff --git a/kis_trader/utils/api_reject_log.py b/kis_trader/utils/api_reject_log.py new file mode 100644 index 0000000..3d6f923 --- /dev/null +++ b/kis_trader/utils/api_reject_log.py @@ -0,0 +1,242 @@ +"""API 거절/주문 예외 → JSONL 백로그 + (선택) 주문 재시도 쿨다운. + +실제 주문·토큰 발급과 무관. 실패 사건만 파일에 남겨 나중에 고치기 쉽게 한다. +동일 fingerprint 는 짧은 간격으로 파일에 도배하지 않는다. +영구형 거절(모의 미제공 등)은 주문 API 재호출만 N초 건너뛴다(완전 중단 아님). +""" + +from __future__ import annotations + +import hashlib +import json +import logging +import os +import threading +import time +from datetime import datetime, timezone +from typing import Any, Dict, Optional, Tuple + +from kis_trader.utils.env import get_env_bool, get_env_float, get_env_from_db, get_env_int + +logger = logging.getLogger("kis_trader.api_reject_log") + +_lock = threading.Lock() +# fingerprint → last_file_write_ts +_last_file_ts: Dict[str, float] = {} +# fingerprint → cooldown_until_ts (주문 API 스킵) +_order_cooldown_until: Dict[str, float] = {} + +_SCRIPT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) + + +def _default_log_path() -> str: + rel = ( + get_env_from_db("KIS_API_REJECT_LOG_PATH", "logs/kis_api_rejects.jsonl") + or "logs/kis_api_rejects.jsonl" + ).strip() + if os.path.isabs(rel): + return rel + return os.path.join(_SCRIPT_ROOT, rel) + + +def _norm(s: Any) -> str: + return " ".join(str(s or "").strip().split()) + + +def make_fingerprint( + *, + kind: str, + side: str = "", + code: str = "", + msg_cd: str = "", + msg1: str = "", + path: str = "", + http: Any = "", +) -> str: + raw = "|".join( + [ + _norm(kind).lower(), + _norm(side).upper(), + _norm(code).upper(), + _norm(msg_cd), + _norm(msg1)[:120], + _norm(path), + _norm(http), + ] + ) + return hashlib.sha1(raw.encode("utf-8")).hexdigest()[:16] + + +def _is_permanent_reject( + *, + msg_cd: str = "", + msg1: str = "", + http: Any = None, +) -> bool: + """1시간 주문 쿨다운 대상인지.""" + cd = _norm(msg_cd) + msg = _norm(msg1) + cds = ( + get_env_from_db("KIS_API_REJECT_COOLDOWN_MSG_CD", "90000000") + or "90000000" + ) + for part in cds.replace(";", ",").split(","): + p = part.strip() + if p and (cd == p or cd.endswith(p)): + return True + subs = ( + get_env_from_db( + "KIS_API_REJECT_COOLDOWN_MSG_SUBSTR", + "해당업무가 제공되지 않습니다,모의투자에서는", + ) + or "해당업무가 제공되지 않습니다,모의투자에서는" + ) + for part in subs.replace(";", ",").split(","): + p = part.strip() + if p and p in msg: + return True + try: + http_i = int(http) if http is not None and str(http).strip() != "" else 0 + except Exception: + http_i = 0 + if http_i <= 0 and cd.upper().startswith("HTTP_"): + try: + http_i = int(cd.split("_", 1)[1]) + except Exception: + http_i = 0 + http_min = int(get_env_int("KIS_API_REJECT_COOLDOWN_HTTP_MIN", 500) or 500) + if http_min > 0 and http_i >= http_min: + return True + return False + + +def order_cooldown_remaining( + *, + side: str, + code: str, + strategy_id: str = "", +) -> float: + """남아 있는 주문 쿨다운 초. 0 이면 호출 가능.""" + if not get_env_bool("KIS_API_REJECT_ORDER_COOLDOWN_ENABLED", True): + return 0.0 + fp = make_fingerprint( + kind="order_cooldown", + side=side, + code=code, + msg_cd=strategy_id, + msg1="", + path="order", + ) + with _lock: + until = float(_order_cooldown_until.get(fp) or 0.0) + rem = until - time.time() + return rem if rem > 0 else 0.0 + + +def mark_order_cooldown( + *, + side: str, + code: str, + strategy_id: str = "", + msg_cd: str = "", + msg1: str = "", + http: Any = None, +) -> Optional[float]: + """영구형 거절이면 주문 쿨다운 설정. 설정됐으면 until_ts, 아니면 None.""" + if not get_env_bool("KIS_API_REJECT_ORDER_COOLDOWN_ENABLED", True): + return None + if not _is_permanent_reject(msg_cd=msg_cd, msg1=msg1, http=http): + return None + sec = float(get_env_float("KIS_API_REJECT_ORDER_COOLDOWN_SEC", 3600.0) or 3600.0) + sec = max(60.0, min(sec, 86400.0)) + fp = make_fingerprint( + kind="order_cooldown", + side=side, + code=code, + msg_cd=strategy_id, + msg1="", + path="order", + ) + until = time.time() + sec + with _lock: + _order_cooldown_until[fp] = until + return until + + +def record_api_reject( + *, + kind: str, + side: str = "", + code: str = "", + strategy_id: str = "", + msg_cd: str = "", + msg1: str = "", + rt_cd: str = "", + http: Any = None, + path: str = "", + extra: Optional[Dict[str, Any]] = None, + force: bool = False, +) -> Tuple[bool, str]: + """ + JSONL 1줄 append. 성공 시 (True, fingerprint). + 파일 dedupe 로 스킵하면 (False, fingerprint). + """ + if not get_env_bool("KIS_API_REJECT_LOG_ENABLED", True): + return False, "" + fp = make_fingerprint( + kind=kind, + side=side, + code=code, + msg_cd=msg_cd, + msg1=msg1, + path=path, + http=http, + ) + dedup = float(get_env_float("KIS_API_REJECT_LOG_DEDUP_SEC", 180.0) or 180.0) + dedup = max(0.0, min(dedup, 86400.0)) + now = time.time() + with _lock: + last = float(_last_file_ts.get(fp) or 0.0) + if not force and dedup > 0 and (now - last) < dedup: + return False, fp + _last_file_ts[fp] = now + + row = { + "ts": datetime.now(timezone.utc).astimezone().isoformat(timespec="seconds"), + "kind": _norm(kind), + "strategy_id": _norm(strategy_id), + "side": _norm(side).upper(), + "code": _norm(code).upper(), + "msg_cd": _norm(msg_cd), + "msg1": _norm(msg1)[:300], + "rt_cd": _norm(rt_cd), + "http": http if http is not None else "", + "path": _norm(path), + "fingerprint": fp, + } + if extra and isinstance(extra, dict): + # 비밀키 유입 방지 — 얕은 복사 + 문자열 길이 제한 + safe_extra = {} + for k, v in list(extra.items())[:20]: + sk = str(k)[:40] + if any(x in sk.lower() for x in ("secret", "token", "appkey", "password")): + continue + safe_extra[sk] = _norm(v)[:200] if not isinstance(v, (int, float, bool)) else v + if safe_extra: + row["extra"] = safe_extra + + path_out = _default_log_path() + try: + os.makedirs(os.path.dirname(path_out) or ".", exist_ok=True) + line = json.dumps(row, ensure_ascii=False) + "\n" + with open(path_out, "a", encoding="utf-8") as f: + f.write(line) + f.flush() + try: + os.fsync(f.fileno()) + except Exception: + pass + return True, fp + except Exception as e: + logger.warning("api_reject JSONL 기록 실패: %s", e) + return False, fp diff --git a/kis_trader/utils/kis_ws_session_windows.py b/kis_trader/utils/kis_ws_session_windows.py new file mode 100644 index 0000000..f3d24e2 --- /dev/null +++ b/kis_trader/utils/kis_ws_session_windows.py @@ -0,0 +1,149 @@ +""" +KIS WebSocket approval 세션 시간 분할 (국내 ↔ 해외) +==================================================== +KIS 정책: approval_key : WebSocket 세션 = 1 : 1 +국내 H0STCNT0 / 해외 HDFSCNT0 는 동일 실전 URL(ops:21000)을 쓰므로 +**동시에 두 소켓을 열면** 뒤쪽(보통 해외)이 즉시 끊긴다. + +운용: + - 국내 hold 창: 국내 WS만 연결 (기본 07:00~20:00 — 장 전후·틱 적재 여유) + - 해외 hold 창: 해외 WS만 연결 (기본 21:00~06:00 — 미국장 전후 틱 적재 여유) + - 그 사이 갭(20:00~21:00, 06:00~07:00): 양쪽 모두 close (세션 비움·핸드오버) + - approval REST 재발급: 기존 6h 금지 · 24h 유효 · 응급 하드캡 유지 + (이 모듈은 재발급하지 않음 — 소켓 close/open 만) + +env (DB 등록): + KIS_WS_KR_HOLD_START_HM / KIS_WS_KR_HOLD_END_HM (기본 700 / 2000) + KIS_WS_US_HOLD_START_HM / KIS_WS_US_HOLD_END_HM (기본 2100 / 600) + KIS_WS_SESSION_GUARD_SEC — 연결 중 창 이탈 시 close 주기 +""" +from __future__ import annotations + +import datetime as _dt +from typing import Optional, Tuple + +from .env import get_env_float, get_env_int +from .session_hm import hm_in_trading_window + + +def kr_ws_hold_bounds() -> Tuple[int, int]: + """국내 WS 세션 점유 HHMM (당일 구간). 기본 0700~2000.""" + start = int(get_env_int("KIS_WS_KR_HOLD_START_HM", 700) or 700) + end = int(get_env_int("KIS_WS_KR_HOLD_END_HM", 2000) or 2000) + if start <= 0: + start = 700 + if end <= 0: + end = 2000 + return start, end + + +def us_ws_hold_bounds() -> Tuple[int, int]: + """해외 WS 세션 점유 HHMM (자정 넘김). 기본 2100~0600.""" + start = int(get_env_int("KIS_WS_US_HOLD_START_HM", 2100) or 2100) + end = int(get_env_int("KIS_WS_US_HOLD_END_HM", 600) or 600) + if start <= 0: + start = 2100 + if end <= 0: + end = 600 + return start, end + + +def session_guard_interval_sec() -> float: + """연결 유지 중 hold 창 이탈 감시 주기(초).""" + return max(5.0, float(get_env_float("KIS_WS_SESSION_GUARD_SEC", 15.0) or 15.0)) + + +def _hm_now(now: Optional[_dt.datetime] = None) -> int: + n = now or _dt.datetime.now() + return int(n.hour * 100 + n.minute) + + +def in_kr_ws_hold_window(now: Optional[_dt.datetime] = None) -> bool: + """True = 국내 WS 가 approval 세션을 점유해도 되는 시간 (월~금).""" + n = now or _dt.datetime.now() + if n.weekday() >= 5: + return False + start, end = kr_ws_hold_bounds() + return hm_in_trading_window(_hm_now(n), start, end, wrap_midnight=False) + + +def in_us_ws_hold_window(now: Optional[_dt.datetime] = None) -> bool: + """ + True = 해외 WS 가 approval 세션을 점유해도 되는 시간. + - start~23:59: 월~금 + - 00:00~end: 화~토 (미국장 새벽 마감) + """ + n = now or _dt.datetime.now() + wd = n.weekday() + hm = _hm_now(n) + start, end = us_ws_hold_bounds() + # 자정 넘김: start > end + if start > end: + if hm >= start: + return 0 <= wd <= 4 + if hm < end: + return 1 <= wd <= 5 + return False + # 비정상(같은날 구간) — 월~금만 + if n.weekday() >= 5: + return False + return hm_in_trading_window(hm, start, end, wrap_midnight=False) + + +def seconds_until_kr_ws_open(now: Optional[_dt.datetime] = None) -> float: + """다음 국내 hold 시작까지 초 (최소 60). hold 중이면 짧은 쿨다운.""" + n = now or _dt.datetime.now() + if in_kr_ws_hold_window(n): + return max(30.0, float(get_env_float("KIS_WS_INSTANT_DROP_COOLDOWN_SEC", 90.0) or 90.0)) + start, _end = kr_ws_hold_bounds() + sh, sm = divmod(int(start), 100) + hm = _hm_now(n) + target = n.replace(hour=sh, minute=sm, second=0, microsecond=0) + if n.weekday() >= 5: + # 토→월(+2), 일→월(+1) + days = (0 - n.weekday()) % 7 + if days == 0: + days = 7 + target += _dt.timedelta(days=days) + elif hm >= start: + target += _dt.timedelta(days=1) + while target.weekday() >= 5: + target += _dt.timedelta(days=1) + return max(60.0, (target - n).total_seconds()) + + +def seconds_until_us_ws_open(now: Optional[_dt.datetime] = None) -> float: + """다음 해외 hold 시작까지 초 (최소 60). hold 중이면 짧은 쿨다운.""" + n = now or _dt.datetime.now() + if in_us_ws_hold_window(n): + return max(30.0, float(get_env_float("KIS_WS_INSTANT_DROP_COOLDOWN_SEC", 90.0) or 90.0)) + start, end = us_ws_hold_bounds() + sh, sm = divmod(int(start), 100) + hm = _hm_now(n) + target = n.replace(hour=sh, minute=sm, second=0, microsecond=0) + if start > end: + # 주간 갭(end~start): 오늘 밤 start (단, 토요일이면 월) + if end <= hm < start: + if n.weekday() >= 5: + days = (0 - n.weekday()) % 7 + if days == 0: + days = 7 + target += _dt.timedelta(days=days) + elif hm >= start: + # 금요 밤 hold 가능 구간인데 hold False = 이상 → 다음 평일 + # 토요 밤: 다음 월 + target += _dt.timedelta(days=1) + while target.weekday() >= 5: + target += _dt.timedelta(days=1) + else: + # hm < end, hold 아님 (예: 일요일 새벽) → 오늘(일) 밤 스킵 → 월 start + if n.weekday() == 6: + target += _dt.timedelta(days=1) + while target.weekday() >= 5: + target += _dt.timedelta(days=1) + else: + if hm >= start or n.weekday() >= 5: + target += _dt.timedelta(days=1) + while target.weekday() >= 5: + target += _dt.timedelta(days=1) + return max(60.0, (target - n).total_seconds()) diff --git a/kis_trader/utils/live_portfolio_common.py b/kis_trader/utils/live_portfolio_common.py index ecdc5f3..60882d8 100644 --- a/kis_trader/utils/live_portfolio_common.py +++ b/kis_trader/utils/live_portfolio_common.py @@ -46,6 +46,41 @@ def live_universe_slot_align_enabled(strategy_id: str) -> bool: return _env_flag("LIVE_UNIVERSE_SLOT_ALIGN", True) +def resolve_live_universe_history_source( + strategy_id: str, + *, + universe_source: Optional[str] = None, +) -> str: + """실매 슬롯 정합이 읽을 이력 테이블. + + - ``ls_condition`` 유니버스 → ``ls_candidates_history`` + - 그 외 → ``target_candidates_history`` (키움/KIS) + 키움 이력과 LS 실후보를 교집합하면 전원 탈락(20→0) 한다. + """ + sid = (strategy_id or "").upper() + # 전략·전역 명시 오버라이드 + for key in ( + f"{sid}_LIVE_UNIVERSE_HISTORY_SOURCE", + "LIVE_UNIVERSE_HISTORY_SOURCE", + ): + raw = get_env_from_db(key, "") + if raw not in (None, "", "None"): + s = str(raw).strip().lower() + if s in ("ls", "ls_condition", "ls_afr"): + return "ls" + if s in ("kiwoom", "target", "kis", "condition"): + return "kiwoom" + + src = str(universe_source or "").strip().lower() + if not src: + src = str( + get_env_from_db(f"{sid}_UNIVERSE_SOURCE", "") or "" + ).strip().lower() + if src in ("ls_condition", "ls", "ls_afr"): + return "ls" + return "kiwoom" + + def live_portfolio_budget_align_enabled(strategy_id: str) -> bool: sid = (strategy_id or "").upper() per_key = f"{sid}_LIVE_PORTFOLIO_BUDGET_ALIGN" @@ -113,19 +148,39 @@ def history_universe_codes_at( db: Any, strategy_id: str, when: Optional[dt] = None, + *, + history_source: str = "kiwoom", + universe_source: Optional[str] = None, ) -> Optional[Set[str]]: """ - ``target_candidates_history`` — ``at_time`` 이전 최신 스냅샷 종목 집합. + 이력 스냅샷 — ``at_time`` 이전 최신 event_time 종목 집합. + - kiwoom → ``target_candidates_history`` + - ls → ``ls_candidates_history`` 스냅샷 없으면 ``None`` (필터 생략 = 실시간 후보 유지). """ when = when or dt.now() at_time = when.strftime("%Y-%m-%d %H:%M:%S") sid = (strategy_id or "").upper() + src = str(history_source or "").strip().lower() + if universe_source is not None: + src = resolve_live_universe_history_source( + sid, universe_source=universe_source, + ) + elif src in ("", "auto"): + src = resolve_live_universe_history_source(sid, universe_source=None) + if src not in ("ls", "kiwoom"): + src = "kiwoom" getter = getattr(db, "get_universe_at", None) if getter is None: return None try: - rows = getter(strategy_id=sid, at_time=at_time) or [] + # TradeDBExt 는 history_source 지원. FakeDB 등 구시그니처는 무시. + try: + rows = getter( + strategy_id=sid, at_time=at_time, history_source=src, + ) or [] + except TypeError: + rows = getter(strategy_id=sid, at_time=at_time) or [] except Exception: return None if not rows: @@ -144,11 +199,24 @@ def filter_candidates_by_history_universe( strategy_id: str, *, when: Optional[dt] = None, + history_source: Optional[str] = None, + universe_source: Optional[str] = None, ) -> Tuple[List[Dict], int]: """실시간 후보 ∩ history 스냅샷. (filtered, dropped_count).""" if not candidates: return [], 0 - allowed = history_universe_codes_at(db, strategy_id, when) + hs = history_source + if hs is None: + hs = resolve_live_universe_history_source( + strategy_id, universe_source=universe_source, + ) + allowed = history_universe_codes_at( + db, + strategy_id, + when, + history_source=hs or "kiwoom", + universe_source=None, + ) if allowed is None: return candidates, 0 out: List[Dict] = [] diff --git a/kis_trader/utils/non_stock.py b/kis_trader/utils/non_stock.py index e46e1ea..111a113 100644 --- a/kis_trader/utils/non_stock.py +++ b/kis_trader/utils/non_stock.py @@ -50,7 +50,14 @@ def _pref_digit_suffixes() -> FrozenSet[str]: def is_preferred_code(code: str) -> bool: - """종목코드만으로 우선주 여부 (name 없어도 판단).""" + """종목코드만으로 우선주·특수코드 여부 (name 없어도 판단). + + KRX 단축코드: + - 끝자리 5/7/9 → 구형 우선주 + - 끝자리 알파벳 → 신형 우선주 + - 코드 중 알파벳 (예: 0039P0, 0030R0) → 신형 우선주·특수종목 + (끝자리만 보면 보통주 0 으로 오인 → 캔들/시세 0 폭주) + """ c = (code or "").strip() if len(c) < 1: return False @@ -58,7 +65,12 @@ def is_preferred_code(code: str) -> bool: if last in _pref_digit_suffixes(): return True # K,L,M… 알파벳 끝 = 신형 우선주 코드 - if get_env_bool("NON_STOCK_EXCLUDE_ALPHA_SUFFIX", True) and last.isalpha(): + if not get_env_bool("NON_STOCK_EXCLUDE_ALPHA_SUFFIX", True): + return False + if last.isalpha(): + return True + # 중간 알파벳 (0039P0 등) — 동일 토글. 끄려면 NON_STOCK_EXCLUDE_ALPHA_SUFFIX=false + if any(ch.isalpha() for ch in c): return True return False @@ -112,6 +124,9 @@ def is_non_stock(name: str, code: str) -> bool: nm = name.upper() if "스팩" in name or "SPAC" in nm: return True + # 리츠·부동산펀드 (시세 TR 키 이슈·봇 매매 비대상) + if "리츠" in name or "REIT" in nm: + return True # 우선주 표기 (우 / 우B / 우C …) if name.endswith("우") or "우B" in name or "우C" in name or name.endswith("(전환)"): return True diff --git a/kis_trader/utils/session_hm.py b/kis_trader/utils/session_hm.py new file mode 100644 index 0000000..8c637fe --- /dev/null +++ b/kis_trader/utils/session_hm.py @@ -0,0 +1,26 @@ +""" +세션 HHMM 판별 — 국내(당일 구간) / 해외(자정 넘김 RTH) 공통. + +국내 기본: start <= hm < end (예: 900~1430) +해외 야간: wrap_midnight 이고 start > end 이면 hm>=start or hm bool: + """True = 매매 허용 시각.""" + try: + h = int(hm) + s = int(start_hm) + e = int(end_hm) + except (TypeError, ValueError): + return False + if wrap_midnight and s > e: + return h >= s or h < e + return s <= h < e diff --git a/kis_trader/utils/strategy_ids.py b/kis_trader/utils/strategy_ids.py index 309d442..53c0d5e 100644 --- a/kis_trader/utils/strategy_ids.py +++ b/kis_trader/utils/strategy_ids.py @@ -10,10 +10,12 @@ from __future__ import annotations from typing import List, Optional # kis_trader/main.py 에 등록되는 전략 ID (실거래 분석·보유탭 공통) +# US_MOMENTUM 은 MOMENTUM 접두 접힘 방지용 — canonical 에서 먼저 매칭 KIS_TRADER_STRATEGY_IDS: List[str] = [ "SCALP", "SHORT", "MOMENTUM", + "US_MOMENTUM", "UPDOW", "BREAKOUT", "RANGE_BREAK", @@ -55,6 +57,9 @@ def canonical_strategy_id(strategy: Optional[str]) -> str: return "MANUAL" if s == "MANUAL": return "MANUAL" + # 해외 모멘텀 — startswith("MOMENTUM") 에 잡히지 않도록 먼저 처리 + if s == "US_MOMENTUM" or s.startswith("US_MOMENTUM"): + return "US_MOMENTUM" if s.startswith("SCALP"): return "SCALP" if s.startswith("SHORT") or s.startswith("TAIL"): @@ -84,6 +89,8 @@ def strategy_prefix_for_filter(strategy: Optional[str]) -> str: return "" if s_upper == "MANUAL": return "MANUAL" + if s_upper == "US_MOMENTUM" or s_upper.startswith("US_MOMENTUM"): + return "US_MOMENTUM" if s_upper.startswith("SCALP"): return "SCALP" if s_upper.startswith("SHORT") or s_upper.startswith("TAIL"): diff --git a/kis_trader/utils/universe_source.py b/kis_trader/utils/universe_source.py index 0a78388..6de0da6 100644 --- a/kis_trader/utils/universe_source.py +++ b/kis_trader/utils/universe_source.py @@ -4,7 +4,8 @@ kis_trader/utils/universe_source.py — {SID}_UNIVERSE_SOURCE 단일 해석 매니저 폴링·history·전략 후보 로드가 같은 규칙을 쓰도록 공통 helper. 운영 스위치는 env **하나**: - ``{STRATEGY_ID}_UNIVERSE_SOURCE`` → ``ranking`` | ``condition`` | ``kiwoom_condition`` + ``{STRATEGY_ID}_UNIVERSE_SOURCE`` → + ``ranking`` | ``condition`` | ``kiwoom_condition`` | ``ls_condition`` 비활성 전략(``STRATEGY_{SID}_ENABLED=false``)은 main 이 매니저에 등록하지 않으므로 별도 UNIVERSE_SOURCE 설정 불필요. @@ -16,7 +17,7 @@ from typing import FrozenSet from .env import get_env_from_db VALID_UNIVERSE_SOURCES: FrozenSet[str] = frozenset( - {"ranking", "condition", "kiwoom_condition"} + {"ranking", "condition", "kiwoom_condition", "ls_condition"} ) # BaseStrategy.DEFAULT_UNIVERSE_SOURCES · main._DEFAULT_SOURCE 와 동기화 diff --git a/kis_trader/utils/usd_krw_fx.py b/kis_trader/utils/usd_krw_fx.py new file mode 100644 index 0000000..b83f840 --- /dev/null +++ b/kis_trader/utils/usd_krw_fx.py @@ -0,0 +1,410 @@ +""" +kis_trader/utils/usd_krw_fx.py — USD→KRW 일자별 환율 (표시용) +================================================================ +해외 탭 UI에서 달러 금액 옆 원 환산용. +출처 기본: Frankfurter(ECB 기준가, 키 불필요). SafeRequest 로 429 재시도. + +※ 매매 체결 환율·증권사 적용환율이 아님. 표시·참고 전용. +""" +from __future__ import annotations + +import json +import logging +import threading +from datetime import datetime, timedelta +from pathlib import Path +from typing import Any, Dict, Iterable, List, Optional, Set + +from kis_trader.utils.env import get_env_float, get_env_from_db, get_env_int +from kis_trader.utils.request_handler import SafeRequest + +logger = logging.getLogger(__name__) + +_cache_lock = threading.Lock() +_mem_rates: Dict[str, float] = {} + + +def _api_base() -> str: + # 공개 ECB 기준가 API — 키 불필요. DB/Env 로 교체 가능. + return ( + get_env_from_db("FX_USD_KRW_API_BASE", "https://api.frankfurter.app") or "" + ).strip().rstrip("/") + + +def _cache_dir() -> Path: + raw = ( + get_env_from_db("FX_USD_KRW_CACHE_DIR", "data/fx_usd_krw") or "data/fx_usd_krw" + ).strip() + p = Path(raw) + if not p.is_absolute(): + # 레포 루트 기준 + root = Path(__file__).resolve().parents[2] + p = root / p + try: + p.mkdir(parents=True, exist_ok=True) + except Exception: + pass + return p + + +def _fallback_rate() -> float: + # API 실패 시 마지막 수단(표시만). 하드코딩 금지 → env. + return float(get_env_float("FX_USD_KRW_FALLBACK", 1400.0)) + + +def _http_enabled() -> bool: + """외부(Frankfurter 등) HTTP 조회. 기본 OFF — 캐시·폴백만 (UI 지연 방지).""" + raw = str(get_env_from_db("FX_USD_KRW_HTTP_ENABLED", "0") or "0").strip().lower() + return raw in ("1", "true", "yes", "y", "on") + + +def get_display_usd_krw_rate(ymd: str = "") -> float: + """표시용 USD→KRW. 메모리→디스크→폴백만. HTTP 절대 호출 없음. + + 영구구독/해외탭 병기용. 매매 체결환율 아님. + """ + y = _norm_ymd(ymd) or datetime.now().strftime("%Y-%m-%d") + with _cache_lock: + if y in _mem_rates and _mem_rates[y] > 0: + return float(_mem_rates[y]) + disk = _read_disk(y) + if disk is not None and disk > 0: + with _cache_lock: + _mem_rates[y] = disk + return float(disk) + try: + dt = datetime.strptime(y, "%Y-%m-%d").date() + except ValueError: + return _fallback_rate() + max_back = int(get_env_int("FX_USD_KRW_LOOKBACK_DAYS", 5)) + for i in range(1, max_back + 1): + prev = (dt - timedelta(days=i)).isoformat() + with _cache_lock: + if prev in _mem_rates and _mem_rates[prev] > 0: + return float(_mem_rates[prev]) + disk_prev = _read_disk(prev) + if disk_prev is not None and disk_prev > 0: + with _cache_lock: + _mem_rates[prev] = disk_prev + _mem_rates[y] = disk_prev + return float(disk_prev) + return _fallback_rate() + + +def _norm_ymd(raw: Any) -> str: + s = str(raw or "").strip() + if not s: + return "" + s = s.replace("/", "-").replace(".", "-") + if len(s) >= 10 and s[4] == "-" and s[7] == "-": + return s[:10] + digits = "".join(ch for ch in s if ch.isdigit()) + if len(digits) >= 8: + return f"{digits[:4]}-{digits[4:6]}-{digits[6:8]}" + return "" + + +def _trade_fx_ymd(t: Dict[str, Any]) -> str: + """청산일 우선, 없으면 매수일 — '그날의 환율'.""" + for k in ( + "sell_date", + "sell_time", + "exit_time", + "exit_date", + "buy_date", + "buy_time", + "entry_time", + "entry_date", + ): + ymd = _norm_ymd(t.get(k)) + if ymd: + return ymd + return "" + + +class UsdKrwFxClient(SafeRequest): + """Frankfurter 등 USD/KRW 일자별 조회 (표시용).""" + + def __init__(self) -> None: + timeout = float(get_env_float("FX_USD_KRW_TIMEOUT_SEC", 12.0)) + min_iv = float(get_env_float("FX_USD_KRW_MIN_INTERVAL_SEC", 0.2)) + retries = int(get_env_int("FX_USD_KRW_MAX_RETRIES", 2)) + super().__init__( + min_interval_sec=min_iv, + max_retries=retries, + timeout_sec=timeout, + ) + + def fetch_rate(self, ymd: str) -> Optional[float]: + """성공 시 환율. 네트워크/HTTP 실패는 None. 휴일 후퇴는 get_usd_krw_rate 에서만.""" + got = self.fetch_rate_detail(ymd) + return got[0] if got else None + + def fetch_rate_detail(self, ymd: str) -> Optional[tuple]: + """(rate, source_date) 또는 None. HTTP 4xx(데이터없음) vs 네트워크 실패 구분용 status도 로그.""" + ymd = _norm_ymd(ymd) + if not ymd: + return None + base = _api_base() + if not base: + return None + url = f"{base}/{ymd}" + try: + resp = self.get(url, params={"from": "USD", "to": "KRW"}, timeout=self.timeout_sec) + if resp is None or getattr(resp, "status_code", None) is None: + return None + if resp.status_code == 404: + return None # 호출측 lookback + if resp.status_code != 200: + logger.warning("FX USD/KRW HTTP %s date=%s", resp.status_code, ymd) + return None + data = resp.json() + rates = data.get("rates") or {} + krw = rates.get("KRW") + if krw is None: + return None + src = _norm_ymd(data.get("date")) or ymd + return (float(krw), src) + except Exception as e: + logger.warning("FX USD/KRW fetch fail date=%s: %s", ymd, e) + return None + + +def norm_fx_ymd(raw: Any) -> str: + """공개: YYYY-MM-DD 정규화 (API 쿼리용).""" + return _norm_ymd(raw) + + +def _read_disk(ymd: str) -> Optional[float]: + path = _cache_dir() / f"{ymd}.json" + if not path.is_file(): + return None + try: + data = json.loads(path.read_text(encoding="utf-8")) + v = data.get("rate") + return float(v) if v is not None else None + except Exception: + return None + + +def _write_disk(ymd: str, rate: float, source_date: str = "") -> None: + path = _cache_dir() / f"{ymd}.json" + try: + path.write_text( + json.dumps( + { + "ymd": ymd, + "rate": rate, + "source_date": source_date or ymd, + "pair": "USD/KRW", + }, + ensure_ascii=False, + ), + encoding="utf-8", + ) + except Exception as e: + logger.debug("FX cache write fail %s: %s", path, e) + + +def get_usd_krw_rate(ymd: str, *, client: Optional[UsdKrwFxClient] = None) -> Optional[float]: + """단일 일자 USD→KRW. Frankfurter 가 주말이면 직전 영업일 환율을 그 날짜 키로 캐시.""" + ymd = _norm_ymd(ymd) + if not ymd: + return None + with _cache_lock: + if ymd in _mem_rates: + return _mem_rates[ymd] + disk = _read_disk(ymd) + if disk is not None and disk > 0: + with _cache_lock: + _mem_rates[ymd] = disk + return disk + # 외부 HTTP 기본 OFF — UI/영구구독이 네트워크에 묶이지 않게 + if not _http_enabled(): + try: + dt0 = datetime.strptime(ymd, "%Y-%m-%d").date() + except ValueError: + return None + max_back0 = int(get_env_int("FX_USD_KRW_LOOKBACK_DAYS", 5)) + for i in range(1, max_back0 + 1): + prev0 = (dt0 - timedelta(days=i)).isoformat() + with _cache_lock: + if prev0 in _mem_rates and _mem_rates[prev0] > 0: + rate0 = _mem_rates[prev0] + _mem_rates[ymd] = rate0 + return rate0 + disk0 = _read_disk(prev0) + if disk0 is not None and disk0 > 0: + with _cache_lock: + _mem_rates[prev0] = disk0 + _mem_rates[ymd] = disk0 + return disk0 + return None + cli = client or UsdKrwFxClient() + detail = cli.fetch_rate_detail(ymd) + if detail is not None: + rate, src = detail + if rate > 0: + _write_disk(ymd, rate, source_date=src) + with _cache_lock: + _mem_rates[ymd] = rate + return rate + # 요청일 조회가 완전 실패(타임아웃 등)하면 lookback 으로 오염 캐시하지 않음. + # 주말·미래만: 디스크/메모리에 있는 직전일 재사용. 추가 HTTP lookback 은 + # FX_USD_KRW_HTTP_LOOKBACK=1 일 때만 (기본 OFF — 타임아웃 폭주·오캐시 방지). + use_http_lb = str(get_env_from_db("FX_USD_KRW_HTTP_LOOKBACK", "0") or "0").strip().lower() in ( + "1", "true", "yes", "y", "on", + ) + max_back = int(get_env_int("FX_USD_KRW_LOOKBACK_DAYS", 5)) + try: + dt = datetime.strptime(ymd, "%Y-%m-%d").date() + except ValueError: + return None + for i in range(1, max_back + 1): + prev = (dt - timedelta(days=i)).isoformat() + with _cache_lock: + if prev in _mem_rates and _mem_rates[prev] > 0: + rate = _mem_rates[prev] + _write_disk(ymd, rate, source_date=prev) + _mem_rates[ymd] = rate + return rate + disk_prev = _read_disk(prev) + if disk_prev is not None and disk_prev > 0: + with _cache_lock: + _mem_rates[prev] = disk_prev + _mem_rates[ymd] = disk_prev + _write_disk(ymd, disk_prev, source_date=prev) + return disk_prev + if not use_http_lb: + continue + detail = cli.fetch_rate_detail(prev) + if detail is None: + continue + rate, src = detail + if rate > 0: + _write_disk(prev, rate, source_date=src) + _write_disk(ymd, rate, source_date=src) + with _cache_lock: + _mem_rates[prev] = rate + _mem_rates[ymd] = rate + return rate + return None + + +def get_usd_krw_rates(dates: Iterable[str]) -> Dict[str, float]: + """여러 일자 → {YYYY-MM-DD: rate}. 실패일은 fallback 사용하지 않고 생략.""" + out: Dict[str, float] = {} + uniq: List[str] = [] + seen: Set[str] = set() + for d in dates: + y = _norm_ymd(d) + if not y or y in seen: + continue + seen.add(y) + uniq.append(y) + if not uniq: + return out + cli = UsdKrwFxClient() + for y in uniq: + r = get_usd_krw_rate(y, client=cli) + if r is not None and r > 0: + out[y] = round(float(r), 4) + return out + + +def enrich_payload_with_usd_krw_fx(payload: Dict[str, Any]) -> Dict[str, Any]: + """ + 백테/실거래/페이퍼 JSON 에 currency·fx_rates·거래별 fx_rate/pnl_krw 부착. + 기존 숫자(USD)는 변경하지 않음 — 표시용 필드만 추가. + """ + if not isinstance(payload, dict): + return payload + trades = payload.get("trades") or [] + if not isinstance(trades, list): + trades = [] + need: List[str] = [] + for t in trades: + if isinstance(t, dict): + y = _trade_fx_ymd(t) + if y: + need.append(y) + # 요약용: end / 마지막 청산일 + params = payload.get("params") if isinstance(payload.get("params"), dict) else {} + summary = payload.get("summary") if isinstance(payload.get("summary"), dict) else {} + for k in ("end", "start"): + y = _norm_ymd(params.get(k) if params else None) + if y: + need.append(y) + rates = get_usd_krw_rates(need) + fb = _fallback_rate() + total_pnl_krw = 0.0 + used_fallback = False + for t in trades: + if not isinstance(t, dict): + continue + y = _trade_fx_ymd(t) + rate = rates.get(y) if y else None + if rate is None or rate <= 0: + rate = fb + used_fallback = True + t["fx_ymd"] = y or None + t["fx_rate"] = round(float(rate), 4) + try: + pnl = float(t.get("pnl") if t.get("pnl") is not None else (t.get("realized_pnl") or t.get("unrealized_pnl") or 0)) + except (TypeError, ValueError): + pnl = 0.0 + pnl_krw = round(pnl * float(rate)) + t["pnl_krw"] = pnl_krw + if not t.get("is_open"): + total_pnl_krw += pnl_krw + # 가격 원 환산(참고) + for src, dst in ( + ("buy_price", "buy_price_krw"), + ("avg_price", "avg_price_krw"), + ("entry", "entry_krw"), + ("sell_price", "sell_price_krw"), + ("exit_price", "exit_price_krw"), + ("exit", "exit_krw"), + ): + if t.get(src) is None: + continue + try: + t[dst] = round(float(t.get(src)) * float(rate)) + except (TypeError, ValueError): + pass + + payload["currency"] = "USD" + payload["fx_pair"] = "USD/KRW" + payload["fx_rates"] = rates + payload["fx_source"] = ( + "frankfurter" if (_http_enabled() and _api_base()) else "cache_or_fallback" + ) + payload["fx_fallback_used"] = used_fallback + if summary is not None: + try: + usd_pnl = float(summary.get("total_pnl") or 0) + except (TypeError, ValueError): + usd_pnl = 0.0 + # 거래별 합이 있으면 그걸 우선(당일 환율 반영) + if trades: + summary["total_pnl_krw"] = int(round(total_pnl_krw)) + else: + end_y = _norm_ymd(params.get("end") if params else None) + er = rates.get(end_y) if end_y else None + if er is None or er <= 0: + er = fb + used_fallback = True + summary["total_pnl_krw"] = int(round(usd_pnl * float(er))) + try: + mdd = float(summary.get("max_drawdown") or 0) + except (TypeError, ValueError): + mdd = 0.0 + end_y = _norm_ymd(params.get("end") if params else None) or (max(rates.keys()) if rates else "") + er = rates.get(end_y) if end_y else None + if er is None or er <= 0: + er = fb + summary["max_drawdown_krw"] = int(round(mdd * float(er))) + summary["fx_rate_end"] = round(float(er), 4) if er else None + payload["summary"] = summary + payload["fx_fallback_used"] = used_fallback or bool(payload.get("fx_fallback_used")) + return payload diff --git a/kis_trader/web/live_config_schema.py b/kis_trader/web/live_config_schema.py index d5944fa..183d9f4 100644 --- a/kis_trader/web/live_config_schema.py +++ b/kis_trader/web/live_config_schema.py @@ -212,6 +212,10 @@ def build_live_config_groups() -> List[GroupDef]: ), _f("PROGRAM_FILTER_ENABLED", "프로그램 필터(TRIGGER) — 실매 탈락", "bool", default=True), _f("WHIPSAW_FILTER_ENABLED", "휩쏘 필터(글로벌)", "bool", default=True), + _f("WHIPSAW_SUBBAR_SEC", "휩쏘 미니봉(초)", "int", default=30, + hint="틱을 N초 봉으로 묶음 · 실매 기본 30 · Optuna 꼬리 TPE 탐색"), + _f("WHIPSAW_LOOKBACK_SEC", "휩쏘 룩백(초)", "int", default=90, + hint="신호 직전 몇 초를 볼지 · 실매 기본 90"), _f("WHIPSAW_DIP_PCT", "휩쏘 하락폭(분율, 0.003=0.3%)", "float", default=0.003), _f("WHIPSAW_RECOVERY_TOL_PCT", "휩쏘 회복 허용(분율, 0.001=0.1%)", "float", default=0.001), ], @@ -312,6 +316,37 @@ def build_live_config_groups() -> List[GroupDef]: ], }) + # 유니버스 소스 — ranking | condition | kiwoom_condition | ls_condition + _univ_choices = [ + {"value": "kiwoom_condition", "label": "키움 조건(WS)"}, + {"value": "ls_condition", "label": "LS 조건(AFR)"}, + {"value": "condition", "label": "한투 조건(REST)"}, + {"value": "ranking", "label": "거래량순위"}, + ] + univ_fields: List[FieldDef] = [] + for sid in LIVE_STRATEGY_IDS: + lbl = LIVE_STRATEGY_LABELS.get(sid, sid) + univ_fields.append( + _f( + f"{sid}_UNIVERSE_SOURCE", + f"{lbl} 유니버스", + "select", + default="kiwoom_condition", + choices=_univ_choices, + hint=( + "ls_condition=LS 동명 AFR · 시세는 키움/한투 유지 · " + "매니저 최초 기동은 봇 재시작 필요할 수 있음 · " + "키움으로 자동 폴백 안 함" + ), + ), + ) + groups.append({ + "id": "universe_source", + "title": "유니버스 소스", + "hint": "{SID}_UNIVERSE_SOURCE · 기본 키움 · LS는 opt-in", + "fields": univ_fields, + }) + # 전략별 운용한도 budget_fields: List[FieldDef] = [] @@ -382,18 +417,33 @@ def build_live_config_groups() -> List[GroupDef]: default=False, hint="목표 무관 수동 잠금 · 비우면 마스터 상속 · OFF=정상", ), + _f( + _sid_key(sid, "DAILY_PROFIT_RISK_BUDGET_ENABLED"), + f"{lbl} 리스크버짓(B)", + "bool", + default=False, + hint="ON=일일익절 hit 후 보유최악손절합>cushion 이면 전량정리 · 기본 OFF · 마스터 없음", + ), + _f( + _sid_key(sid, "DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC"), + f"{lbl} 리스크버짓 쿨다운(초)", + "int", + default=300, + hint="같은 날 재평가 최소 간격 · 0=당일 1회만", + ), ]) groups.append({ "id": "daily_profit_strategy", "title": "일일 익절 — 전략별 (서브)", "hint": ( "전략별 손익만 따로 감시. 비어 있으면 마스터 값 상속. " - "손익 감시 ON이면 목표 달성 시 해당 전략 신규매수 자동 차단" + "손익 감시 ON이면 목표 달성 시 해당 전략 신규매수 자동 차단. " + "리스크버짓(B)은 전략별만(기본 OFF)." ), "fields": dp_fields, }) - # 전략별 휩쏘 ON/OFF (간단) + # 전략별 휩쏘 ON/OFF + 꼬리 초·% (Optuna TPE 축과 동일 키) ws_fields: List[FieldDef] = [] for sid in LIVE_STRATEGY_IDS: if sid == "SCALP": @@ -403,9 +453,23 @@ def build_live_config_groups() -> List[GroupDef]: ws_fields.append( _f(f"{pfx}_WHIPSAW_FILTER_ENABLED", f"{lbl} 휩쏘 필터", "bool"), ) + ws_fields.extend([ + _f("TAIL_WHIPSAW_SUBBAR_SEC", "꼬리 휩쏘 미니봉(초)", "int", default=30, + hint="비우면 글로벌 WHIPSAW_SUBBAR_SEC · Optuna 꼬리 TPE 축"), + _f("TAIL_WHIPSAW_LOOKBACK_SEC", "꼬리 휩쏘 룩백(초)", "int", default=90, + hint="비우면 글로벌 WHIPSAW_LOOKBACK_SEC"), + _f("TAIL_WHIPSAW_DIP_PCT", "꼬리 휩쏘 하락폭(분율)", "float", default=0.003, + hint="0.003=0.3% · 비우면 글로벌"), + _f("TAIL_WHIPSAW_RECOVERY_TOL_PCT", "꼬리 휩쏘 회복허용(분율)", "float", default=0.001, + hint="0.001=0.1% · 비우면 글로벌"), + ]) groups.append({ "id": "whipsaw_strategy", - "title": "휩쏘 — 전략별 ON/OFF", + "title": "휩쏘 — 전략별 ON/OFF · 꼬리 초/%", + "hint": ( + "ON/OFF와 초·%는 별개. 꼬리 Optuna --mode tpe 가 이 축을 탐색. " + "실매 현재값(enabled=false, 30초, 90초, 0.003, 0.001)이 그리드에 포함됨." + ), "fields": ws_fields, }) @@ -422,40 +486,46 @@ def build_live_config_groups() -> List[GroupDef]: hint="STRICT_FILL_VERIFY ON 일 때만 백테/파람서치에 적용 · 전 전략 공통 · 0=순수 백테 · 0.2=0.2%"), _f("BACKTEST_VOL_FILL_CAP_PCT", "백테 체결량 상한(진입봉 거래량×%)", "float", default=0.0, hint="STRICT_FILL_VERIFY ON 일 때만 · 전 전략 공통 · 0=무제한 · 소형주 IOC 미체결 근사"), - _f("TAIL_BACKTEST_TICK_FALLBACK_OHLC", "꼬리 OHLC 폴백", "bool", default=False, - hint="OFF=틱 없는 구간 체결 스킵(실매 정합) · ON=3분봉 OHLC 추측(유령거래)"), + _f("TAIL_BACKTEST_TICK_FALLBACK_OHLC", "⚠ 꼬리 OHLC 폴백 (정합위험·금지)", "bool", default=False, + danger=True, + hint="절대금지: 틱 모드에서 OHLC로 체결·고점 변조. 엔진은 틱 청산 ON 시 무시. Optuna/파람 강제 OFF"), _f("TAIL_BACKTEST_USE_TICK_EXIT", "꼬리 틱 청산", "bool", default=True, hint="ON=ws_ticks 시간순 청산(실매 폴링 정합) · OFF=OHLC intrabar"), _f("TAIL_BACKTEST_POLL_MS", "꼬리 틱청산 폴링(ms)", "int", default=100, hint="실매 STRATEGY_LOOP_SLEEP≈0.1초 정합 · 하한 50ms"), - _f("MOMENTUM_BACKTEST_TICK_FALLBACK_OHLC", "모멘텀 OHLC 폴백", "bool", default=False, - hint="OFF 권장 — 틱 없으면 청산/진입 스킵"), + _f("MOMENTUM_BACKTEST_TICK_FALLBACK_OHLC", "⚠ 모멘텀 OHLC 폴백 (정합위험·금지)", "bool", default=False, + danger=True, + hint="절대금지 — 틱 청산 ON 시 엔진 무시 · Optuna 강제 OFF"), _f("MOMENTUM_BACKTEST_POLL_MS", "모멘텀 틱청산 폴링(ms)", "int", default=100, hint="실매 STRATEGY_LOOP_SLEEP≈0.1초 정합 · 틱 사이 청산 검사 간격 · 하한 50ms"), _f("BREAKOUT_BACKTEST_USE_TICK_EXIT", "돌파 틱 청산", "bool", default=True, hint="ON=ws_ticks 시간순 청산 · OFF=OHLC intrabar"), - _f("BREAKOUT_BACKTEST_TICK_FALLBACK_OHLC", "돌파 OHLC 폴백", "bool", default=False, - hint="OFF 권장 — B안 틱 없으면 high 폴백 안 함"), + _f("BREAKOUT_BACKTEST_TICK_FALLBACK_OHLC", "⚠ 돌파 OHLC 폴백 (정합위험·금지)", "bool", default=False, + danger=True, + hint="절대금지 — 틱 진입 ON 시 봉 high 폴백 안 함"), _f("BREAKOUT_BACKTEST_POLL_MS", "돌파 틱청산 폴링(ms)", "int", default=100, hint="실매 폴링 정합 · 하한 50ms"), _f("SCALP_BACKTEST_USE_TICK_EXIT", "스캘핑 틱 청산", "bool", default=True, hint="ON=ws_ticks 시간순 청산(실매 폴링 정합) · OFF=OHLC intrabar"), _f("SCALP_BACKTEST_USE_TICK_ENTRY", "스캘핑 틱 진입", "bool", default=True, hint="ON=예약 체결 시 해당 분 첫 틱가 · OFF=분봉 시가"), - _f("SCALP_BACKTEST_TICK_FALLBACK_OHLC", "스캘핑 OHLC 폴백", "bool", default=False, - hint="OFF 권장 — 틱 없으면 청산 스킵"), + _f("SCALP_BACKTEST_TICK_FALLBACK_OHLC", "⚠ 스캘핑 OHLC 폴백 (정합위험·금지)", "bool", default=False, + danger=True, + hint="절대금지 — 틱 청산 ON 시 엔진 무시"), _f("SCALP_BACKTEST_POLL_MS", "스캘핑 틱청산 폴링(ms)", "int", default=100, hint="실매 STRATEGY_LOOP_SLEEP≈0.1초 정합 · 하한 50ms"), _f("RANGE_BREAK_BACKTEST_USE_TICK_EXIT", "박스돌파 틱 청산", "bool", default=True, hint="ON=ws_ticks 시간순 청산 · OFF=OHLC intrabar"), - _f("RANGE_BREAK_BACKTEST_TICK_FALLBACK_OHLC", "박스돌파 OHLC 폴백", "bool", default=False, - hint="OFF 권장 — 틱 없으면 청산 스킵"), + _f("RANGE_BREAK_BACKTEST_TICK_FALLBACK_OHLC", "⚠ 박스돌파 OHLC 폴백 (정합위험·금지)", "bool", default=False, + danger=True, + hint="절대금지 — 틱 청산 ON 시 엔진 무시"), _f("RANGE_BREAK_BACKTEST_POLL_MS", "박스돌파 틱청산 폴링(ms)", "int", default=100, hint="실매 폴링 정합 · 하한 50ms"), _f("DBBAND_BACKTEST_USE_TICK_EXIT", "더블BB 틱 청산", "bool", default=True, hint="ON=ws_ticks 시간순 청산 · OFF=봉 OHLC 1회"), - _f("DBBAND_BACKTEST_TICK_FALLBACK_OHLC", "더블BB OHLC 폴백", "bool", default=False, - hint="OFF 권장 — 틱 없으면 청산 스킵"), + _f("DBBAND_BACKTEST_TICK_FALLBACK_OHLC", "⚠ 더블BB OHLC 폴백 (정합위험·금지)", "bool", default=False, + danger=True, + hint="절대금지 — 틱 청산 ON 시 엔진 무시"), _f("DBBAND_BACKTEST_POLL_MS", "더블BB 틱청산 폴링(ms)", "int", default=100, hint="실매 폴링 정합 · 하한 50ms"), _f("TAIL_PARAM_SEARCH_MIN_START", "꼬리 파라서치 최소 시작일", "str", default="2026-07-07", @@ -495,6 +565,32 @@ def build_live_config_groups() -> List[GroupDef]: default=1, hint="SELL_LIMIT_CANCEL_BEFORE_MARKET_RETRY=ON 일 때 ODNO 재조회 대기", ), + _f( + "SELL_LIMIT_CANCEL_FAIL_BALANCE_CONFIRM", + "취소실패+잔고0→매도확정", + "bool", + default=True, + hint=( + "ON=익절지정가 취소 실패·ODNO 미확인이어도 브로커 0주면 " + "지정가 체결로 finalize(유령금지) · OFF=PENDING만" + ), + ), + _f( + "GHOST_PURGE_BLOCK_WHILE_PENDING_SELL", + "PENDING매도 시 유령정리 금지", + "bool", + default=True, + hint=( + "ON=미확정 매도 ODNO 있으면 ghost_purge 대신 체결재조회/잔고확정 청산" + ), + ), + _f( + "DAILY_CCLD_TR_ID", + "일별체결조회 TR_ID", + "str", + default="", + hint="비우면 모의 VTTC0081R / 실전 TTTC0081R (레거시 *8001R 사용 금지)", + ), ], }) @@ -540,9 +636,32 @@ def build_live_config_groups() -> List[GroupDef]: _f("STRATEGY_LOOP_SLEEP_MIN", "루프 끝 sleep 최소(초)", "float", default=0.1, hint="한 바퀴 끝 대기 · WS 구독 캐시 폴링 · 0.1=실매 반응 빠르게"), _f("STRATEGY_LOOP_SLEEP_MAX", "루프 끝 sleep 최대(초)", "float", default=0.1), + _f("TICK_SELL_ENABLED", "틱매도(공통)", "bool", default=False, + hint="ON=WS 현재가 갱신마다 매도검사(백테 틱청산에 근접) · OFF=루프(~0.1초)만 · " + "전략별 *_TICK_SELL_ENABLED 가 비어있지 않으면 그쪽 우선 · 기본 OFF"), + _f("TICK_SELL_MIN_INTERVAL_MS", "틱매도 최소간격(ms)", "int", default=50, + hint="같은 종목 연속 틱 폭주 시 매도검사 하한 · 백테 poll≈50~100ms 정합"), ], }) + # 전략별 틱매도 스위치 (비어 있으면 공통 TICK_SELL_ENABLED) + tick_sell_fields: List[FieldDef] = [] + for sid in LIVE_STRATEGY_IDS: + lbl = LIVE_STRATEGY_LABELS.get(sid, sid) + tick_sell_fields.append( + _f(f"{sid}_TICK_SELL_ENABLED", f"{lbl} 틱매도", "bool", default=False, + hint="비우면 공통 TICK_SELL_ENABLED · true/false 명시 시 전략만 덮어씀 · 기본 false"), + ) + groups.append({ + "id": "tick_sell_by_strategy", + "title": "전략별 틱매도 (선택)", + "hint": ( + "매도 규칙은 기존 check_sell_signals 그대로 · 호출 시점만 WS 틱. " + "실매↔백테 청산 타이밍 정합용 · 기본 OFF 권장(검증 후 ON)." + ), + "fields": tick_sell_fields, + }) + # 전략별 후보 하드캡 (WS 100 구독 한도 안전 + 매수체크 회전율) cand_fields: List[FieldDef] = [] for sid in LIVE_STRATEGY_IDS: @@ -717,6 +836,12 @@ def build_live_config_groups() -> List[GroupDef]: hint="활성 전략 중 가장 이른 EOD − N분 1회 · EOD 청산 전 active_trades 반영"), _f("ORPHAN_RECONCILE_PRE_EOD_LEAD_MIN", "Pre-EOD 선행(분)", "int", default=7, hint="예: BREAKOUT EOD 15:15 → 15:08 실행 · REST 잔고 1회/일"), + _f("ORPHAN_SKIP_AFTER_SELL_HISTORY", "청산히스토리 있으면 재등록금지", "bool", default=True, + hint="ON=매수 이후 장마감청산 등 히스토리 있으면 고아복구로 active 다시 안 넣음"), + _f("ORPHAN_SKIP_SELL_REASONS", "재등록금지 청산사유", "str", default="장마감청산,eod", + hint="쉼표 구분 키워드. 비우면 매수 이후 모든 청산 히스토리 금지"), + _f("ORPHAN_PURGE_ACTIVE_AFTER_SELL_HISTORY", "청산후 유령 active 정리", "bool", default=True, + hint="ON=active에 남았는데 매수 이후 청산 히스토리면 DB 행 삭제"), _f("GHOST_PURGE_ON_RECONCILE", "고아복구 시 유령잔고 삭제", "bool", default=True, hint="ON=브로커 0주인데 active_trades 남은 종목 삭제(수동보호 제외) · Pre/Post EOD 동일 잔고조회에서 처리"), _f( diff --git a/kis_trader/ws/kis_ws.py b/kis_trader/ws/kis_ws.py index c3be380..29246b8 100644 --- a/kis_trader/ws/kis_ws.py +++ b/kis_trader/ws/kis_ws.py @@ -137,6 +137,9 @@ class KISWebSocketPriceCache: # { code: {"data": dict, "ts": float} } self._cache: Dict[str, Dict] = {} self._cache_lock = threading.Lock() + # 현재가 갱신 리스너 — BaseStrategy 틱매도 등 (캐시 lock 밖에서 호출) + self._price_listeners: list = [] + self._price_listener_lock = threading.Lock() # ── 구독 목록 ────────────────────────────────────────────── self._subscribed: Set[str] = set() @@ -156,6 +159,9 @@ class KISWebSocketPriceCache: # ── approval_key (REST 토큰과 별개, WebSocket 전용 인증) ─── self._approval_key: Optional[str] = None self._approval_key_ts: float = 0.0 + # invalid approval 연속 횟수(연결당 1회 집계) — N회면 6h 우회 응급 재발급 + self._invalid_approval_streak: int = 0 + self._invalid_approval_handled_this_conn: bool = False # ── 재연결 관리 ──────────────────────────────────────────── self._reconnect_count = 0 @@ -164,6 +170,8 @@ class KISWebSocketPriceCache: self._last_connect_time: float = 0.0 # 마지막 연결 성공 시각 (안정 연결 판단용) self._last_subscribe_error: str = "" # H0STCNT0 JSON rt_cd≠0 (즉시 끊김 원인 추적) self._subscribe_resend_lock = threading.Lock() + # approval 세션 시간분할 — KR hold 이탈 시 능동 close (해외 WS 양보) + self._session_guard_thread: Optional[threading.Thread] = None # ── CandleAggregator (스캘핑봇 연동 시 외부에서 주입) ───── # attach_candle_aggregator(agg) 로 연결, None이면 봉 집계 비활성 @@ -255,6 +263,10 @@ class KISWebSocketPriceCache: target=self._run_ws_loop, daemon=True, name="KIS-WS-H0STCNT0" ) self._ws_thread.start() + self._session_guard_thread = threading.Thread( + target=self._session_guard_loop, daemon=True, name="KIS-WS-KR-Guard" + ) + self._session_guard_thread.start() logger.info( "✅ KIS WebSocket 수신 스레드 시작 (H0STCNT0 | url=%s)", self._ws_url ) @@ -357,6 +369,32 @@ class KISWebSocketPriceCache: self._send_sub_msg(code, subscribe=False) logger.info("📡 WebSocket 구독 해제: %s", code) + def add_price_listener(self, callback) -> None: + """현재가 갱신 콜백 등록. callback(code, price, data_dict).""" + if callback is None: + return + with self._price_listener_lock: + if callback not in self._price_listeners: + self._price_listeners.append(callback) + + def remove_price_listener(self, callback) -> None: + if callback is None: + return + with self._price_listener_lock: + try: + self._price_listeners.remove(callback) + except ValueError: + pass + + def _emit_price_listeners(self, code: str, price: float, data: Dict) -> None: + with self._price_listener_lock: + listeners = list(self._price_listeners) + for cb in listeners: + try: + cb(code, price, data) + except Exception as ex: + logger.debug("price_listener 예외 %s: %s", code, ex) + def get_price(self, code: str, max_age_sec: float = 5.0) -> Optional[Dict]: """ WebSocket 캐시에서 실시간 가격 + 당일 시고저를 꺼냅니다. @@ -454,10 +492,16 @@ class KISWebSocketPriceCache: ) return " | ".join(parts) - def _get_approval_key(self, *, force_refresh: bool = False) -> Optional[str]: + def _get_approval_key( + self, + *, + force_refresh: bool = False, + bypass_min_reissue: bool = False, + ) -> Optional[str]: """ WebSocket 전용 approval_key — kis_approval_manager 파일 캐시 (국내·해외 공유). KIS 정책: 24h 유효, 6h 이내 REST 재발급 금지, 재연결 시 동일 키 재사용. + bypass_min_reissue: invalid approval 응급 시에만 True. """ try: from kis_approval_manager import KISApprovalManager @@ -471,12 +515,98 @@ class KISWebSocketPriceCache: self.app_secret, self._base_url, force_refresh=force_refresh, + bypass_min_reissue=bypass_min_reissue, ) if key: self._approval_key = key self._approval_key_ts = mgr.issued_ts or time.time() return key + def _emergency_reissue_approval(self, reason: str) -> Optional[str]: + """ + 서버가 캐시 approval 을 거부할 때 6h 가드 우회 REST 재발급. + 기본 ON (KIS_WS_INVALID_APPROVAL_BYPASS_6H). 남용 금지 — invalid 연속만. + """ + if not get_env_bool("KIS_WS_INVALID_APPROVAL_BYPASS_6H", True): + logger.warning( + "🔑 invalid approval 응급 재발급 OFF (KIS_WS_INVALID_APPROVAL_BYPASS_6H=false)" + ) + return None + try: + from kis_approval_manager import KISApprovalManager + except ImportError as exc: + logger.error("kis_approval_manager import 실패: %s", exc) + return None + mgr = KISApprovalManager.instance(self.is_mock) + key = mgr.emergency_reissue( + self.app_key, + self.app_secret, + self._base_url, + reason=reason, + ) + if key: + self._approval_key = key + self._approval_key_ts = mgr.issued_ts or time.time() + self._invalid_approval_streak = 0 + logger.info( + "✅ invalid approval 응급 재발급 완료 (앞8자: %s…)", + key[:8], + ) + return key + + def _handle_invalid_approval(self, err_line: str) -> None: + """ + H0STCNT0 invalid approval — 파일 동기화 후, 연속 N회면 응급 REST 재발급. + 연결당 1회만 처리 (종목별 구독 거부 폭주 방지). + """ + logger.warning("⚠️ H0STCNT0 구독 거부: %s", err_line) + if self._invalid_approval_handled_this_conn: + return + self._invalid_approval_handled_this_conn = True + self._invalid_approval_streak += 1 + + old_key = (self._approval_key or "")[:8] + try: + from kis_approval_manager import KISApprovalManager + mgr = KISApprovalManager.instance(self.is_mock) + reloaded = mgr.reload_from_file() + if reloaded and reloaded != (self._approval_key or ""): + self._approval_key = reloaded + self._approval_key_ts = mgr.issued_ts or self._approval_key_ts + logger.info( + "🔑 invalid approval → 파일에 다른 키 발견 (앞8자: %s…→%s…) 재접속 대기", + old_key, + reloaded[:8], + ) + return + if reloaded: + logger.info( + "🔑 invalid approval → 파일 동일 키 (앞8자: %s…, streak=%d)", + reloaded[:8], + self._invalid_approval_streak, + ) + except Exception as exc: + logger.debug("invalid approval 파일 동기화 실패: %s", exc) + + need_n = max(1, int(get_env_int("KIS_WS_INVALID_APPROVAL_REISSUE_AFTER", 2))) + if self._invalid_approval_streak < need_n: + logger.warning( + "🔑 invalid approval streak %d/%d — 다음 끊김 후 재시도 " + "(동일 키면 응급 재발급)", + self._invalid_approval_streak, + need_n, + ) + return + + new_key = self._emergency_reissue_approval( + reason=f"invalid approval streak={self._invalid_approval_streak} {err_line}", + ) + if new_key and self._ws: + try: + self._ws.close() + except Exception: + pass + def _build_sub_payload(self, code: str, subscribe: bool) -> str: """구독(tr_type=1) / 해제(tr_type=2) JSON 메시지 생성.""" return json.dumps({ @@ -544,24 +674,13 @@ class KISWebSocketPriceCache: if rt == "1" and "ALREADY IN SUBSCRIBE" in msg.upper(): logger.debug("H0STCNT0 구독 중복(무해): %s", err_line) elif "INVALID APPROVAL" in msg.upper(): - logger.warning("⚠️ H0STCNT0 구독 거부: %s", err_line) - try: - from kis_approval_manager import KISApprovalManager - mgr = KISApprovalManager.instance(self.is_mock) - reloaded = mgr.reload_from_file() - if reloaded: - self._approval_key = reloaded - self._approval_key_ts = mgr.issued_ts or self._approval_key_ts - logger.info( - "🔑 invalid approval → 파일 캐시 동기화 (앞8자: %s…, " - "6h 미경과 REST 재발급 없음)", - reloaded[:8], - ) - except Exception: - pass + self._handle_invalid_approval(err_line) else: logger.warning("⚠️ H0STCNT0 구독 거부: %s", err_line) else: + # 구독 성공 → invalid streak 리셋 + if self._invalid_approval_streak: + self._invalid_approval_streak = 0 logger.debug( "H0STCNT0 구독 OK: %s", tr_key or msg or "SUCCESS", @@ -615,6 +734,7 @@ class KISWebSocketPriceCache: with self._cache_lock: self._cache[code] = {"data": data_compat, "ts": time.time()} + self._emit_price_listeners(code, float(price), data_compat) # 체결시간·체결량·누적량 (MCP: CNTG_VOL=12, ACML_VOL=13) tick_time = fields[self.IDX_TIME].strip() if len(fields) > self.IDX_TIME else "" @@ -661,51 +781,61 @@ class KISWebSocketPriceCache: def _is_market_hours(self) -> bool: """ - KIS WebSocket 서비스 시간 여부. - - 실전투자: 08:25~ (장전 호가 포함) - - 모의투자: 09:00~ (모의 WS 서버가 09:00 이전 연결 즉시 거부) - False 반환 시 재연결 시도 없이 다음 장 시작까지 대기. + 국내 WS 가 approval 세션을 점유해도 되는 시간 (KR hold). + - env: KIS_WS_KR_HOLD_START_HM~END (기본 0700~2000, 장 전후·틱 적재 여유) + - 모의: 서버가 09:00 이전 거부 → hold 안이어도 09:00 미만이면 False + - 해외 hold 창과 겹치지 않게 설정 (갭에서 양쪽 close) """ import datetime as _dt + from kis_trader.utils.kis_ws_session_windows import in_kr_ws_hold_window now = _dt.datetime.now() - if now.weekday() >= 5: # 토·일 + if not in_kr_ws_hold_window(now): return False - # 모의투자는 09:00, 실전투자는 08:25 부터 서버 응답 - open_h, open_m = (9, 0) if self.is_mock else (8, 25) - return _dt.time(open_h, open_m) <= now.time() <= _dt.time(16, 5) + if self.is_mock and now.time() < _dt.time(9, 0): + return False + return True def _seconds_until_market_open(self) -> float: - """다음 장 시작까지 남은 초. 최소 60초 반환. - - 실전투자: 08:25 기준 - - 모의투자: 09:00 기준 - """ - import datetime as _dt - now = _dt.datetime.now() - open_h, open_m = (9, 0) if self.is_mock else (8, 25) - open_t = _dt.time(open_h, open_m) - close_t = _dt.time(16, 5) - target = now.replace(hour=open_h, minute=open_m, second=0, microsecond=0) - if now.weekday() >= 5: - target += _dt.timedelta(days=1) - elif now.time() >= close_t: - target += _dt.timedelta(days=1) - elif now.time() >= open_t: - # 장중 — '다음 장 시작'이 아니라 호출부에서 cooldown 사용 - return max( - 30.0, - float(get_env_float("KIS_WS_INSTANT_DROP_COOLDOWN_SEC", 90.0)), - ) - # 주말 건너뛰기 - while target.weekday() >= 5: - target += _dt.timedelta(days=1) - return max(60.0, (target - now).total_seconds()) + """다음 국내 KR hold 시작까지 초.""" + from kis_trader.utils.kis_ws_session_windows import seconds_until_kr_ws_open + return float(seconds_until_kr_ws_open()) + + def _force_close_socket(self, reason: str) -> None: + """run_forever 점유 중에도 세션 양보 — approval 1:1 준수.""" + ws = self._ws + if ws is None: + return + try: + logger.info("🔌 [국내WS] 세션 양보 close (%s)", reason) + ws.close() + except Exception as exc: + logger.debug("국내WS force close 예외: %s", exc) + + def _session_guard_loop(self) -> None: + """KR hold 이탈·해외 hold 진입 시 국내 소켓 능동 종료.""" + from kis_trader.utils.kis_ws_session_windows import ( + in_us_ws_hold_window, + session_guard_interval_sec, + ) + while self._running: + try: + time.sleep(session_guard_interval_sec()) + except Exception: + time.sleep(15.0) + if not self._running: + break + if not self._connected: + continue + if not self._is_market_hours(): + why = "해외hold" if in_us_ws_hold_window() else "KR hold외/장외" + self._force_close_socket("%s → approval 세션 비움" % why) def _run_ws_loop(self) -> None: """ 재연결 정책을 포함한 WebSocket 메인 루프. run_forever() 가 반환(연결 끊김)되면 지수 백오프 후 재연결 시도. KIS 정책: 1시간 내 MAX_RECONNECTS_PER_HOUR 회 초과 시 강제 대기. - 장외 시간(16:05~08:25, 주말): 재연결 없이 다음 장까지 대기. + KR hold 외(기본 20:00~07:00·주말·해외창): 재연결 없이 대기 + 소켓 close. """ # 즉시 끊김 감지 — env 로 조정 (기본: 3초 이내 × 3회) INSTANT_DROP_SEC = float(get_env_float("KIS_WS_INSTANT_DROP_SEC", 3.0)) @@ -716,11 +846,14 @@ class KISWebSocketPriceCache: while self._running: now = time.time() - # ── 장외 시간이면 다음 장 시작까지 대기 ───────────────────── + # ── KR hold 외 → 소켓 양보 후 다음 국내 창까지 대기 ──────── if not self._is_market_hours(): + if self._connected: + self._force_close_socket("KR hold 외 — 루프 대기 전 양보") wait_sec = self._seconds_until_market_open() logger.info( - "🌙 장외 시간 — WebSocket 재연결 중지, 다음 장 시작까지 %.0f분 대기", + "🌙 국내 WS hold 외 — 재연결 중지, 다음 KR hold까지 %.0f분 대기 " + "(approval 세션 양보·재발급 없음)", wait_sec / 60, ) # 재연결 카운터·백오프 초기화 (장 시작 시 깨끗하게 재접속) @@ -742,6 +875,13 @@ class KISWebSocketPriceCache: reason = self._instant_drop_reason_text( _instant_drop_streak, _last_conn_duration, ) + # invalid approval 루프면 쿨다운 전에 6h 우회 응급 재발급 + if "INVALID APPROVAL" in (self._last_subscribe_error or "").upper(): + need_n = max(1, int(get_env_int("KIS_WS_INVALID_APPROVAL_REISSUE_AFTER", 2))) + if self._invalid_approval_streak >= need_n: + self._emergency_reissue_approval( + reason=f"instant_drop×{_instant_drop_streak} {reason}", + ) if not self._is_market_hours(): logger.warning( "⚠️ KIS WebSocket 연속 즉시 끊김 %d회 — %s " @@ -751,8 +891,8 @@ class KISWebSocketPriceCache: else: logger.warning( "⚠️ KIS WebSocket 연속 즉시 끊김 %d회 — %s " - "→ %.0f초 쿨다운 후 **기존 approval_key** 로 재접속 " - "(6h 이내 REST 재발급 금지, 구독 간격 적용)", + "→ %.0f초 쿨다운 후 재접속 " + "(invalid면 응급 재발급 후 신규 approval_key 사용)", _instant_drop_streak, reason, wait_sec, ) self._reconnect_count = 0 @@ -890,6 +1030,8 @@ class KISWebSocketPriceCache: self._reconnect_delay = self.RECONNECT_BASE_DELAY_SEC self._last_connect_time = time.time() self._last_subscribe_error = "" + # 연결당 invalid approval 1회 처리 플래그 리셋 + self._invalid_approval_handled_this_conn = False logger.info( "✅ KIS WebSocket 연결 성공 (H0STCNT0 | url=%s | approval_age=%.0f분)", @@ -1030,11 +1172,20 @@ class CandleAggregator: self._peak_provider: Optional[Any] = None # 키움 WS 틱 체결량(FID 15) → 분봉 volume 합산. 미등록 종목은 KIS 누적거래량 델타. self._incremental_vol_codes: Set[str] = set() + # 핫패스(락 안)에서 get_env 금지 — env 스냅샷 cold(수 초)가 락을 잡으면 + # 전 전략 get_candles 가 멈춘다. db_writer 가 주기 갱신. + self._freeze_on_confirm_cached: bool = bool( + get_env_bool("WS_CANDLE_FREEZE_ON_CONFIRM", True) + ) + self._flags_refresh_ts: float = 0.0 if self.db is not None: self._start_db_writer() - logger.info("✅ CandleAggregator 초기화 완료 (timeframes=%s, db=%s)", - self.timeframes, "활성" if self.db else "비활성(RAM 전용)") + logger.info( + "✅ CandleAggregator 초기화 완료 (timeframes=%s, db=%s)", + self.timeframes, + "활성" if self.db else "비활성(RAM 전용)", + ) def set_peak_provider(self, provider) -> None: """보유 종목의 트레일링 고점 조회 — 봉 확정 시 ws_candles.holding_peak 저장용.""" @@ -1114,6 +1265,8 @@ class CandleAggregator: if now - last_stale_check >= stale_check_interval: last_stale_check = now + # 락 밖: env 핫플래그 갱신 (on_tick 경로에서 get_env 금지) + self._refresh_runtime_flags() try: self.flush_stale_current_candles() except Exception as e: @@ -1124,10 +1277,24 @@ class CandleAggregator: self._flush_batch(batch) logger.info("CandleDBWriter 스레드 종료") - @staticmethod - def _ws_candle_freeze_on_confirm() -> bool: - """확정봉(is_confirmed=1) OHLCV 동결 — docs/정합성.md. 기본 true.""" - return get_env_bool("WS_CANDLE_FREEZE_ON_CONFIRM", True) + def _refresh_runtime_flags(self) -> None: + """락 밖에서만 호출. freeze 핫패스 플래그 캐시 갱신.""" + try: + self._freeze_on_confirm_cached = bool( + get_env_bool("WS_CANDLE_FREEZE_ON_CONFIRM", True) + ) + self._flags_refresh_ts = time.time() + except Exception: + pass + + def _ws_candle_freeze_on_confirm(self) -> bool: + """확정봉 OHLCV 동결 — docs/정합성.md. 기본 true. + + ⚠ on_tick/_confirm 은 candle_agg._lock 보유 중 호출됨. + 여기서 get_env_* 하면 ENV 캐시 만료 시 DB 스냅샷(수 초)이 락을 잡아 + 전 전략 매수루프가 멈춘다 → 캐시만 반환. + """ + return bool(getattr(self, "_freeze_on_confirm_cached", True)) def _load_confirmed_ohlcv_from_db( self, code: str, tf: int, candle_times: list, @@ -1177,6 +1344,7 @@ class CandleAggregator: if freeze: dup = """ ON DUPLICATE KEY UPDATE + market=IF(VALUES(market) IS NULL OR VALUES(market)='', market, VALUES(market)), `open`=IF(is_confirmed=1, `open`, VALUES(`open`)), high=IF(is_confirmed=1, high, GREATEST(high, VALUES(high))), low=IF(is_confirmed=1, low, VALUES(low)), @@ -1193,6 +1361,7 @@ class CandleAggregator: else: dup = """ ON DUPLICATE KEY UPDATE + market=IF(VALUES(market) IS NULL OR VALUES(market)='', market, VALUES(market)), `open`=VALUES(`open`), high=GREATEST(high, VALUES(high)), low=VALUES(low), close=VALUES(close), volume=VALUES(volume), rsi_2=VALUES(rsi_2), rsi_3=VALUES(rsi_3), rsi_5=VALUES(rsi_5), @@ -1202,17 +1371,17 @@ class CandleAggregator: """ return f""" INSERT INTO ws_candles - (code, timeframe, candle_time, `open`, high, low, close, + (code, market, timeframe, candle_time, `open`, high, low, close, volume, rsi_2, rsi_3, rsi_5, is_confirmed, source, holding_peak, updated_at) VALUES - (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) + (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) {dup} """ def _flush_batch(self, batch: list) -> None: """ 배치 리스트를 DB에 한 번의 executemany 로 INSERT. - 각 item: {code, tf, candle_time, open, high, low, close, volume, + 각 item: {code, market, tf, candle_time, open, high, low, close, volume, is_confirmed, source, rsi_2, rsi_3, rsi_5} """ if not self.db or not batch: @@ -1224,6 +1393,7 @@ class CandleAggregator: for item in batch: rows.append(( item["code"], + str(item.get("market") or "KR").upper()[:8], item["tf"], item["candle_time"], item["open"], @@ -1341,19 +1511,32 @@ class CandleAggregator: # 핵심: 틱 수신 처리 # ------------------------------------------------------------------ - def on_tick(self, code: str, price: float, volume: int, tick_time: str) -> None: + def on_tick( + self, + code: str, + price: float, + volume: int, + tick_time: str, + *, + market: str = "KR", + timeframes: Optional[list] = None, + ) -> None: """ KISWebSocketPriceCache._parse_realtime_msg 에서 틱마다 호출됨. - 모든 timeframe 에 대해 봉 갱신/확정 처리. + 기본: 등록된 모든 timeframe 봉 갱신. + timeframes: 해외 WS 등에서 1분만 넘길 때 (국내 호출부는 None 유지). + market: KR(국내) | US(해외 HDFSCNT0) — ws_candles.market 기록용. """ if price <= 0: return + mk = (market or "KR").strip().upper()[:8] or "KR" + tfs = list(timeframes) if timeframes is not None else self.timeframes with self._lock: - for tf in self.timeframes: - self._process_tick(code, price, volume, tick_time, tf) + for tf in tfs: + self._process_tick(code, price, volume, tick_time, tf, market=mk) def _process_tick(self, code: str, price: float, volume: int, - tick_time: str, tf: int) -> None: + tick_time: str, tf: int, *, market: str = "KR") -> None: """ 단일 timeframe 에 대한 틱 처리 (lock 내부에서 호출). @@ -1372,10 +1555,12 @@ class CandleAggregator: "close": price, "volume": int(volume) if inc else 0, "_acml_base": None if inc else int(volume), + "market": market, } return cur = self._current[key] + cur["market"] = market or cur.get("market") or "KR" if new_ctime != cur["candle_time"]: # ── 봉 확정 (다음 틱 도착 → 정상 롤오버) ──────────────── @@ -1394,6 +1579,7 @@ class CandleAggregator: "close": price, "volume": int(volume) if inc else 0, "_acml_base": None if inc else int(volume), + "market": market, } else: # 같은 봉: OHLCV 갱신 (RAM만, DB 쓰기 없음) @@ -1444,6 +1630,9 @@ class CandleAggregator: if freeze or new_vol < old_vol: confirmed_candle = dict(old) confirmed_candle["is_confirmed"] = 1 + confirmed_candle["market"] = str( + cur.get("market") or old.get("market") or "KR" + ).upper()[:8] if hp is not None: confirmed_candle["holding_peak"] = max( float(confirmed_candle.get("holding_peak") or 0), float(hp), @@ -1461,6 +1650,7 @@ class CandleAggregator: ] confirmed_candle = { "code": code, + "market": str(cur.get("market") or old.get("market") or "KR").upper()[:8], "tf": tf, "candle_time": ctime, "open": float(old.get("open") or cur["open"]), @@ -1490,6 +1680,7 @@ class CandleAggregator: rsi2, rsi3, rsi5 = self._compute_rsi_set(closes) confirmed_candle = { "code": code, + "market": str(cur.get("market") or "KR").upper()[:8], "tf": tf, "candle_time": ctime, "open": cur["open"], @@ -1966,6 +2157,33 @@ from datetime import datetime as _datetime, timedelta as _timedelta _kiwoom_token_lock = _threading.Lock() _kiwoom_managers: Dict[str, "KiwoomTokenManager"] = {} # 싱글톤 풀 +# ka10080 전역 동시호출 상한 — 키움 유량=5. 워커 N개여도 이 세마포어로 직렬화. +_ka10080_sem: Optional[_threading.Semaphore] = None +_ka10080_sem_lock = _threading.Lock() +_ka10080_sem_n: int = 0 + + +def _ka10080_semaphore() -> _threading.Semaphore: + """키움 ka10080 동시 요청 수 제한 (유량=5 미만으로 유지).""" + global _ka10080_sem, _ka10080_sem_n + n = max(1, min(int(get_env_int("KIWOOM_KA10080_MAX_INFLIGHT", 2)), 4)) + with _ka10080_sem_lock: + if _ka10080_sem is None or _ka10080_sem_n != n: + _ka10080_sem = _threading.Semaphore(n) + _ka10080_sem_n = n + return _ka10080_sem + + +def _ka10080_is_rate_limit(http_st: int, rc: Any, msg: str) -> bool: + if int(http_st or 0) == 429: + return True + try: + if int(rc) == 5: + return True + except Exception: + pass + m = str(msg or "") + return ("1700" in m) or ("허용된 요청" in m) or ("유량" in m) class KiwoomTokenManager: @@ -2025,6 +2243,21 @@ class KiwoomTokenManager: self._mode_str, token[:8], self._expiry.strftime("%Y-%m-%d %H:%M:%S"), ) + def invalidate(self, reason: str = "") -> None: + """서버가 토큰을 거부했을 때 로컬 캐시를 비운다 (만료 전 재사용 금지). + + WS LOGIN rc=805004 등 — expires_dt 전이라도 서버 측 무효면 + 같은 토큰을 재전송하면 재연결만 소모하고 영구 비활성으로 간다. + """ + with self._lock: + self._token = None + self._expiry = None + if reason: + logger.warning( + "♻️ 키움 토큰 캐시 무효화 [%s]: %s", + self._mode_str, reason, + ) + def get_token(self) -> Optional[str]: """ 유효한 토큰 반환. 만료 시에만 재발급. @@ -2040,6 +2273,11 @@ class KiwoomTokenManager: return self._token +def _kiwoom_token_cache_key(kiwoom_key: str, is_mock: bool) -> str: + domain = "mockapi.kiwoom.com" if is_mock else "api.kiwoom.com" + return f"{domain}:{str(kiwoom_key or '')[:8]}" + + def _get_kiwoom_token_cached( kiwoom_key: str, kiwoom_secret: str, @@ -2049,8 +2287,7 @@ def _get_kiwoom_token_cached( KiwoomTokenManager 싱글톤 풀에서 인스턴스를 꺼내 토큰 반환. 동일 키 조합은 같은 인스턴스를 재사용 → au10001 rate limit 방지. """ - domain = "mockapi.kiwoom.com" if is_mock else "api.kiwoom.com" - cache_key = f"{domain}:{kiwoom_key[:8]}" + cache_key = _kiwoom_token_cache_key(kiwoom_key, is_mock) with _kiwoom_token_lock: if cache_key not in _kiwoom_managers: @@ -2062,6 +2299,20 @@ def _get_kiwoom_token_cached( return mgr.get_token() +def _invalidate_kiwoom_token_cached( + kiwoom_key: str, + kiwoom_secret: str, + is_mock: bool, + reason: str = "", +) -> None: + """LOGIN/REST 토큰 거부 시 싱글톤 캐시 무효화 — 다음 get_token 이 재발급.""" + cache_key = _kiwoom_token_cache_key(kiwoom_key, is_mock) + with _kiwoom_token_lock: + mgr = _kiwoom_managers.get(cache_key) + if mgr is not None: + mgr.invalidate(reason or "token rejected") + + def _get_kiwoom_creds(db) -> tuple: """ DB env_config 최신 행에서 키움 앱키/시크릿 반환. @@ -2108,18 +2359,13 @@ def get_kiwoom_candles_df( 키움 REST API (ka10080 — 주식분봉차트조회) 로 분봉 조회. fill_gap_from_rest() 호환 DataFrame 반환. - Args: - code : 종목코드 (6자리) - tf_min : 봉 단위 분 (1 / 3 / 5 / 10 / 15 / 30 / 45 / 60) - kiwoom_key : 키움 앱키 - kiwoom_secret: 키움 앱시크릿 - is_mock : True = 모의투자 도메인 사용 - n : 최대 수집 봉 수 (기본 120, 60분봉 기준 약 17 영업일) + ★ 유량 한도: 키움 ka10080 ``유량=5`` (return_code=5 / msg 1700). + 예전: rc 무시 + records=[] → "REST 빈 응답" 오인 → 갭보정 force 재큐 폭주. + 지금: 전역 세마포어(기본 동시 2) + rc=5 백오프 재시도. Returns: - pd.DataFrame — 컬럼: time(YYYYMMDDHHMM), open, high, low, close, volume - 오래된→최신 순 (fill_gap_from_rest 기대 순서) - 빈 DataFrame (오류 시) + pd.DataFrame — time/open/high/low/close/volume, 오래된→최신 순 + 빈 DataFrame (오류·진짜 무데이터) """ try: import pandas as pd @@ -2127,42 +2373,89 @@ def get_kiwoom_candles_df( logger.error("pandas 미설치 → 키움 갭보정 불가") return None # type: ignore[return-value] - domain = "mockapi.kiwoom.com" if is_mock else "api.kiwoom.com" - - # ── 1. 키움 OAuth 토큰 (캐시 우선 — 23시간 재사용, au10001 rate limit 방지) ── + domain = "mockapi.kiwoom.com" if is_mock else "api.kiwoom.com" token = _get_kiwoom_token_cached(kiwoom_key, kiwoom_secret, is_mock) if not token: return pd.DataFrame() - # ── 2. ka10080 분봉 차트 조회 (페이지네이션) ────────────────────── - # 키움은 최신→과거 순으로 반환, 한 페이지에 최대 900봉 base_url = f"https://{domain}/api/dostk/chart" - headers = { + headers = { "content-type": "application/json;charset=UTF-8", - "appkey": kiwoom_key, - "appsecret": kiwoom_secret, + "appkey": kiwoom_key, + "appsecret": kiwoom_secret, "authorization": f"Bearer {token}", - "api-id": "ka10080", - "cont-yn": "N", - "next-key": "", + "api-id": "ka10080", + "cont-yn": "N", + "next-key": "", } body = { - "stk_cd": code, - "tic_scope": str(tf_min), # "1" / "3" / "15" / "60" etc. - "upd_stkpc_tp": "1", # 수정주가 반영 + "stk_cd": code, + "tic_scope": str(tf_min), + "upd_stkpc_tp": "1", } + rate_retries = max(1, int(get_env_int("KIWOOM_KA10080_RATE_RETRIES", 5))) + rate_base = float(get_env_float("KIWOOM_KA10080_RATE_RETRY_BASE_SEC", 1.2)) + page_sleep = float(get_env_float("KIWOOM_KA10080_PAGE_SLEEP_SEC", 0.35)) + sem = _ka10080_semaphore() + rows: list = [] while len(rows) < n: - try: - resp = requests.post(base_url, json=body, headers=headers, timeout=15) - data = resp.json() - except Exception as e: - logger.warning("⚠️ 키움 ka10080 조회 실패 (%s %dM): %s", code, tf_min, e) - break + data = None + resp = None + for attempt in range(rate_retries): + sem.acquire() + try: + resp = requests.post(base_url, json=body, headers=headers, timeout=15) + http_st = int(resp.status_code) + try: + data = resp.json() if resp.content else {} + except Exception: + data = {} + except Exception as e: + logger.warning("⚠️ 키움 ka10080 조회 실패 (%s %dM): %s", code, tf_min, e) + return pd.DataFrame() + finally: + sem.release() - records = data.get("stk_min_pole_chart_qry") or [] + rc_raw = (data or {}).get("return_code", 0) + msg = str((data or {}).get("return_msg") or "").strip() + if _ka10080_is_rate_limit(http_st, rc_raw, msg): + if attempt + 1 < rate_retries: + wait = rate_base * (attempt + 1) + random.uniform(0.2, 0.8) + logger.warning( + "⚠️ 키움 ka10080 유량초과 (%s %dM) rc=%s — %.1fs 후 재시도 %d/%d " + "(유량=5 · 빈응답 오인 금지)", + code, tf_min, rc_raw, wait, attempt + 2, rate_retries, + ) + time.sleep(wait) + continue + logger.error( + "🚨 키움 ka10080 유량초과 재시도 소진 (%s %dM) rc=%s msg=%s", + code, tf_min, rc_raw, msg[:120], + ) + return pd.DataFrame() + + try: + rc_i = int(rc_raw) + except Exception: + rc_i = 0 + if rc_i != 0: + logger.warning( + "⚠️ 키움 ka10080 API오류 (%s %dM) rc=%s msg=%s", + code, tf_min, rc_raw, msg[:120], + ) + return pd.DataFrame() + break # 성공(rc=0) — 페이지 처리 + else: + return pd.DataFrame() + + records = (data or {}).get("stk_min_pole_chart_qry") or [] if not records: + logger.info( + "키움 ka10080 반환 행 없음 (%s %dM) rc=0 msg=%s", + code, tf_min, str((data or {}).get("return_msg") or "")[:80], + ) break for rec in records: @@ -2171,12 +2464,11 @@ def get_kiwoom_candles_df( continue try: rows.append({ - # cntr_tm = YYYYMMDDHHMMSS → 12자리로 잘라 YYYYMMDDHHMM - "time": raw_dt[:12], - "open": abs(float(rec.get("open_pric", 0) or 0)), - "high": abs(float(rec.get("high_pric", 0) or 0)), - "low": abs(float(rec.get("low_pric", 0) or 0)), - "close": abs(float(rec.get("cur_prc", 0) or 0)), + "time": raw_dt[:12], + "open": abs(float(rec.get("open_pric", 0) or 0)), + "high": abs(float(rec.get("high_pric", 0) or 0)), + "low": abs(float(rec.get("low_pric", 0) or 0)), + "close": abs(float(rec.get("cur_prc", 0) or 0)), "volume": abs(int(float(rec.get("trde_qty", 0) or 0))), }) except (ValueError, TypeError): @@ -2184,20 +2476,18 @@ def get_kiwoom_candles_df( if len(rows) >= n: break - # 연속 조회 여부 확인 (응답 헤더) - cont_yn = str(resp.headers.get("cont-yn", "N")).upper() - next_key = str(resp.headers.get("next-key", "")).strip() + cont_yn = str((resp.headers if resp is not None else {}).get("cont-yn", "N")).upper() + next_key = str((resp.headers if resp is not None else {}).get("next-key", "")).strip() if cont_yn != "Y" or not next_key or len(rows) >= n: break - headers["cont-yn"] = cont_yn + headers["cont-yn"] = cont_yn headers["next-key"] = next_key - time.sleep(0.35) # 키움 API 레이트리밋 + if page_sleep > 0: + time.sleep(page_sleep) if not rows: - logger.debug("키움 ka10080 반환 행 없음 (%s %dM)", code, tf_min) return pd.DataFrame() - # 키움은 최신→과거 순 → fill_gap_from_rest 는 오래된→최신 순 필요 → 역순 df = pd.DataFrame(rows[:n][::-1]) logger.info("✅ 키움 %dM 갭보정 데이터: %s %d봉", tf_min, code, len(df)) return df diff --git a/kis_trader/ws/kis_ws_overseas.py b/kis_trader/ws/kis_ws_overseas.py index 64f383a..7591736 100644 --- a/kis_trader/ws/kis_ws_overseas.py +++ b/kis_trader/ws/kis_ws_overseas.py @@ -6,10 +6,11 @@ kis_trader/ws/kis_ws_overseas.py — KIS 해외주식 실시간(지연)체결가 → 국내 라이브 매매 경로(실거래)에 일절 영향 없음 (회귀 위험 0). 왜 분리했나 (구조 결정): - - 기존 KISWebSocketPriceCache 의 _is_market_hours() 는 국장(08:25~16:05 KST)만 True → - 그 외 시간엔 다음 국장까지 슬립. 그러나 미국장은 한국 '밤'(대략 22:30~06:00, 서머타임 - 여부에 따라 ±1h)이라 같은 루프로는 야간에 push 를 못 받음. - - 따라서 야간(미국장) 가동 전용 루프를 가진 별도 클래스로 구현. + - 기존 KISWebSocketPriceCache 의 _is_market_hours() 는 국장만 True → + 그 외 시간엔 다음 국장까지 슬립. 미국장은 한국 밤이라 야간 전용 루프 필요. + - ★ approval_key : WS 세션 = 1:1 (국내·해외 동일 ops:21000). + → KR hold / US hold 시간분할로 소켓을 번갈아 점유. 동시 연결 금지. + → REST 재발급은 하지 않음 (공유 캐시 6h/24h 정책 유지). KIS 공식 스펙: TR_ID : HDFSCNT0 (해외주식 실시간지연체결가) @@ -37,7 +38,7 @@ import requests logger = logging.getLogger("KISWebSocketOverseas") try: - from kis_trader.utils.env import get_env_from_db, get_env_bool, get_env_int + from kis_trader.utils.env import get_env_from_db, get_env_bool, get_env_int, get_env_float except ImportError: # 단독 실행 fallback def get_env_from_db(key, default=""): # type: ignore[misc] return default @@ -48,6 +49,9 @@ except ImportError: # 단독 실행 fallback def get_env_int(key, default): # type: ignore[misc] return default + def get_env_float(key, default): # type: ignore[misc] + return default + class KISOverseasWebSocket: """ @@ -125,6 +129,11 @@ class KISOverseasWebSocket: self._candle_agg: Optional[Any] = None self._tick_recorder: Optional[Any] = None + # 틱마다 get_env 금지 — 기동/주기 갱신 + self._save_us_ticks_db: bool = bool(get_env_bool("WS_TICK_SAVE_US_ENABLED", True)) + self._save_us_ticks_ts: float = 0.0 + # approval 세션 시간분할 — US hold 이탈 시 능동 close (국내 WS 양보) + self._session_guard_thread: Optional[threading.Thread] = None try: import websocket as _ws_lib @@ -208,9 +217,8 @@ class KISOverseasWebSocket: if self._running: return True if force_cleanup: - # 원래 동작: 재기동 시 메모리 approval 비우고 재발급 (국내 공유 매니저 미사용) - self._approval_key = None - self._approval_key_ts = 0.0 + # 가격 캐시만 리셋. approval 은 국내와 공유 파일 재사용 + # (재기동마다 REST 재발급하면 국내 H0STCNT0 키가 서버에서 무효화됨) with self._cache_lock: self._cache.clear() if not self._get_approval_key(): @@ -221,6 +229,10 @@ class KISOverseasWebSocket: target=self._run_ws_loop, daemon=True, name="KIS-WS-HDFSCNT0" ) self._ws_thread.start() + self._session_guard_thread = threading.Thread( + target=self._session_guard_loop, daemon=True, name="KIS-WS-US-Guard" + ) + self._session_guard_thread.start() logger.info("✅ KIS 해외 WebSocket 수신 스레드 시작 (HDFSCNT0 | url=%s)", self._ws_url) return True @@ -239,28 +251,35 @@ class KISOverseasWebSocket: # ================================================================== # 내부: approval_key / 구독 메시지 / 파싱 # ================================================================== - def _get_approval_key(self) -> Optional[str]: - """해외 전용 REST approval 발급 (국내 공유 매니저·정합성 freeze 와 무관).""" - now = time.time() - if self._approval_key and (now - self._approval_key_ts) < self.APPROVAL_KEY_CACHE_SEC: - return self._approval_key + def _get_approval_key(self, *, force_refresh: bool = False) -> Optional[str]: + """ + 국내 WS 와 동일 KISApprovalManager 파일 캐시 공유. + 해외 단독 REST 재발급은 국내 approval 을 서버에서 무효화 → invalid approval 루프. + """ try: - url = f"{self._base_url}/oauth2/Approval" - body = { - "grant_type": "client_credentials", - "appkey": self.app_key, - "secretkey": self.app_secret, - } - r = requests.post(url, json=body, timeout=10) - key = r.json().get("approval_key") - if key: - self._approval_key = key - self._approval_key_ts = now - logger.info("✅ 해외 WS approval_key 발급 완료 (앞8자: %s…)", key[:8]) - return key - logger.error("❌ 해외 WS approval_key 발급 실패: %s", r.text[:200]) - except Exception as e: - logger.error("❌ 해외 WS approval_key 요청 예외: %s", e) + from kis_approval_manager import KISApprovalManager + except ImportError as exc: + logger.error("kis_approval_manager import 실패: %s", exc) + return None + prev = self._approval_key + mgr = KISApprovalManager.instance(False) + key = mgr.get_approval_key( + self.app_key, + self.app_secret, + self._base_url, + force_refresh=force_refresh, + ) + if key: + self._approval_key = key + self._approval_key_ts = mgr.issued_ts or time.time() + if key != prev: + logger.info( + "✅ 해외 WS approval_key 공유캐시 사용 (앞8자: %s…, age=%.0f분)", + key[:8], + mgr.age_sec() / 60.0, + ) + return key + logger.error("❌ 해외 WS approval_key 확보 실패") return None def _build_sub_payload(self, tr_key: str, subscribe: bool) -> str: @@ -294,13 +313,20 @@ class KISOverseasWebSocket: except Exception: pass return - # 구독 응답(JSON) 무시 + # 구독 응답(JSON) — rt_cd 는 INFO (즉시 끊김 원인 추적; DEBUG면 실운영에서 실명) if raw.startswith("{"): try: j = json.loads(raw) if j.get("header", {}).get("tr_id") == "HDFSCNT0": - b = j.get("body", {}) - logger.debug("HDFSCNT0 구독 응답: rt_cd=%s msg=%s", b.get("rt_cd"), b.get("msg1")) + b = j.get("body", {}) or {} + rt = str(b.get("rt_cd") or "") + msg1 = str(b.get("msg1") or b.get("msg_cd") or "") + if rt and rt != "0": + logger.warning( + "⚠️ HDFSCNT0 구독 거부 rt_cd=%s msg=%s", rt, msg1 + ) + else: + logger.info("HDFSCNT0 구독 응답: rt_cd=%s msg=%s", rt, msg1) except Exception: pass return @@ -345,64 +371,106 @@ class KISOverseasWebSocket: except ValueError: tick_vol = 0 if self._candle_agg is not None: - self._candle_agg.on_tick(code, price, tick_vol, khms) + # 해외 체결 → ws_candles.market=US. TF는 1분만 (국내 1/3/15/60 전부 X) + self._candle_agg.on_tick( + code, price, tick_vol, khms, + market="US", + timeframes=[1], + ) if self._tick_recorder is not None: - try: - self._tick_recorder.on_tick(code, price, tick_vol, khms, source="kis_us") - except Exception as ex: - logger.debug("HDFSCNT0→TickRecorder 실패 %s: %s", code, ex) + # 60초마다 플래그만 갱신 (틱 핫패스 get_env 금지) + now_ts = time.time() + if now_ts - float(getattr(self, "_save_us_ticks_ts", 0) or 0) >= 60.0: + self._save_us_ticks_db = bool( + get_env_bool("WS_TICK_SAVE_US_ENABLED", True) + ) + self._save_us_ticks_ts = now_ts + if not getattr(self, "_save_us_ticks_db", False): + pass + else: + try: + # 국내 기본값(KR)로 덮이지 않게 US 메타 명시 (Optuna·필터용) + tr_key = "" + with self._sym_lock: + tr_key = str(self._symbols.get(code) or "") + excd = tr_key[1:4] if len(tr_key) >= 4 else "NAS" + ex_name = {"NAS": "NASD", "NYS": "NYSE", "AMS": "AMEX"}.get(excd, "NASD") + self._tick_recorder.on_tick( + code, price, tick_vol, khms, + market="US", + exchange=ex_name, + currency="USD", + source="kis_us", + ) + except Exception as ex: + logger.debug("HDFSCNT0→TickRecorder 실패 %s: %s", code, ex) logger.debug("HDFSCNT0 수신: %s → %s", code, price) except (ValueError, IndexError) as e: logger.debug("HDFSCNT0 파싱 오류: %s | raw=%s", e, raw[:80]) # ================================================================== - # 미국장 시간대 게이팅 + # 미국장 WS hold 게이팅 (국내와 approval 세션 시간분할) # ================================================================== def _is_us_market_window(self) -> bool: - """ - 미국 정규장(+프리/애프터 여유)을 한국시간 기준으로 넉넉히 커버. - 서머타임(EDT)·표준시(EST) 모두 포함하도록 22:00~06:30(KST) 윈도우 사용. - - 22:00~23:59: 월~금(미국장 당일 개장) - - 00:00~06:30: 화~토(미국장 익일 새벽 마감) - """ - now = _dt.datetime.now() - wd = now.weekday() # 월=0 … 일=6 - t = now.time() - if _dt.time(22, 0) <= t <= _dt.time(23, 59, 59): - return 0 <= wd <= 4 # 월~금 밤 - if _dt.time(0, 0) <= t <= _dt.time(6, 30): - return 1 <= wd <= 5 # 화~토 새벽 - return False + """해외 WS 가 approval 세션을 점유해도 되는 시간 (US hold, 여유 버퍼 env).""" + from kis_trader.utils.kis_ws_session_windows import in_us_ws_hold_window + return bool(in_us_ws_hold_window()) def _seconds_until_us_open(self) -> float: - """다음 미국장 윈도우(22:00 KST)까지 남은 초 (최소 60).""" - now = _dt.datetime.now() - target = now.replace(hour=22, minute=0, second=0, microsecond=0) - if now.time() > _dt.time(6, 30): - if now.time() >= _dt.time(22, 0): - target += _dt.timedelta(days=1) - else: - target = now.replace(hour=22, minute=0, second=0, microsecond=0) - # 금요일 밤~토요일 새벽 이후 주말은 다음 월요일로 - while target.weekday() >= 5: # 토·일 시작은 건너뜀 - target += _dt.timedelta(days=1) - return max(60.0, (target - now).total_seconds()) + """다음 해외 hold 시작까지 초.""" + from kis_trader.utils.kis_ws_session_windows import seconds_until_us_ws_open + return float(seconds_until_us_ws_open()) + + def _force_close_socket(self, reason: str) -> None: + ws = self._ws + if ws is None: + return + try: + logger.info("🔌 [해외WS] 세션 양보 close (%s)", reason) + ws.close() + except Exception as exc: + logger.debug("해외WS force close 예외: %s", exc) + + def _session_guard_loop(self) -> None: + """US hold 이탈·국내 hold 진입 시 해외 소켓 능동 종료.""" + from kis_trader.utils.kis_ws_session_windows import ( + in_kr_ws_hold_window, + session_guard_interval_sec, + ) + while self._running: + try: + time.sleep(session_guard_interval_sec()) + except Exception: + time.sleep(15.0) + if not self._running: + break + if not self._connected: + continue + if not self._is_us_market_window(): + why = "국내hold" if in_kr_ws_hold_window() else "US hold외" + self._force_close_socket("%s → approval 세션 비움" % why) # ================================================================== # WebSocket 메인 루프 # ================================================================== def _run_ws_loop(self) -> None: - INSTANT_DROP_SEC = 3.0 - INSTANT_DROP_MAX = 3 + INSTANT_DROP_SEC = float(get_env_float("KIS_WS_INSTANT_DROP_SEC", 3.0) or 3.0) + INSTANT_DROP_MAX = int(get_env_int("KIS_WS_INSTANT_DROP_MAX", 3) or 3) _instant_streak = 0 while self._running: now = time.time() if not self._is_us_market_window(): + if self._connected: + self._force_close_socket("US hold 외 — 루프 대기 전 양보") wait_sec = self._seconds_until_us_open() - logger.info("🌙 미국장 외 — 해외 WS 대기 (다음 윈도우까지 %.0f분)", wait_sec / 60) + logger.info( + "🌙 미국장 WS hold 외 — 해외 WS 대기 (다음 hold까지 %.0f분, " + "approval 재발급 없음)", + wait_sec / 60, + ) self._reconnect_count = 0 self._reconnect_times = [] self._reconnect_delay = self.RECONNECT_BASE_DELAY_SEC @@ -415,12 +483,20 @@ class KISOverseasWebSocket: continue if _instant_streak >= INSTANT_DROP_MAX: - wait_sec = self._seconds_until_us_open() - logger.warning("⚠️ 해외 WS 연속 즉시 끊김 %d회 → %.0f분 대기", _instant_streak, wait_sec / 60) + # hold 안이면 짧은 쿨다운만 (다음 개장까지 1300분 sleep 금지 — 로그·실대기 일치) + wait_sec = max( + 30.0, + float(get_env_float("KIS_WS_INSTANT_DROP_COOLDOWN_SEC", 90.0) or 90.0), + ) + logger.warning( + "⚠️ 해외 WS 연속 즉시 끊김 %d회 → %.0f초 쿨다운 " + "(국내 WS가 세션 점유 중이면 국내 양보 후 재시도)", + _instant_streak, wait_sec, + ) self._reconnect_count = 0 self._reconnect_times = [] _instant_streak = 0 - time.sleep(min(300, wait_sec)) + time.sleep(wait_sec) continue if (self._last_connect_time > 0 @@ -441,15 +517,31 @@ class KISOverseasWebSocket: self._running = False break - if not self._get_approval_key(): + # 캐시 approval 재사용만 (force_refresh 금지 — 국내 세션 무효화 방지) + if not self._get_approval_key(force_refresh=False): time.sleep(self._reconnect_delay) self._reconnect_delay = min(self._reconnect_delay * 2, self.RECONNECT_MAX_DELAY_SEC) continue + # 국내가 아직 붙잡고 있으면 짧게 양보 대기 (재발급 없음) + try: + from kis_trader.utils.kis_ws_session_windows import in_kr_ws_hold_window + if in_kr_ws_hold_window(): + logger.info("⏳ 국내 KR hold 중 — 해외 접속 보류") + time.sleep(30.0) + continue + except Exception: + pass + self._reconnect_count += 1 if self._reconnect_count > 1: self._reconnect_times.append(time.time()) - time.sleep(self._reconnect_delay) + # 끊긴 직후 서버 세션 해제 대기 (국내와 동일 사상) + sess_wait = max( + 0.0, + float(get_env_float("KIS_WS_RECONNECT_SESSION_WAIT_SEC", 2.0) or 2.0), + ) + time.sleep(max(self._reconnect_delay, sess_wait)) self._reconnect_delay = min(self._reconnect_delay * 2, self.RECONNECT_MAX_DELAY_SEC) _conn_start = time.time() diff --git a/kis_trader/ws/kiwoom_ws.py b/kis_trader/ws/kiwoom_ws.py index 5f3ae31..6d340ff 100644 --- a/kis_trader/ws/kiwoom_ws.py +++ b/kis_trader/ws/kiwoom_ws.py @@ -160,6 +160,8 @@ class KiwoomWebSocketPriceCache: # 메모리 캐시 — KIS WS 와 동일 포맷 (data + ts) self._cache: Dict[str, Dict] = {} self._cache_lock = threading.Lock() + self._price_listeners: list = [] + self._price_listener_lock = threading.Lock() self._orderbook_cache = OrderbookCache() if OrderbookCache else None self._program_cache = ProgramCache() if ProgramCache else None @@ -461,6 +463,32 @@ class KiwoomWebSocketPriceCache: return None return self._program_cache.get(code, max_age_sec=max_age_sec) + def add_price_listener(self, callback) -> None: + """현재가 갱신 콜백 등록. callback(code, price, data_dict).""" + if callback is None: + return + with self._price_listener_lock: + if callback not in self._price_listeners: + self._price_listeners.append(callback) + + def remove_price_listener(self, callback) -> None: + if callback is None: + return + with self._price_listener_lock: + try: + self._price_listeners.remove(callback) + except ValueError: + pass + + def _emit_price_listeners(self, code: str, price: float, data: Dict) -> None: + with self._price_listener_lock: + listeners = list(self._price_listeners) + for cb in listeners: + try: + cb(code, price, data) + except Exception as ex: + logger.debug("price_listener 예외 %s: %s", code, ex) + def get_price(self, code: str, max_age_sec: float = 5.0) -> Optional[Dict]: """KIS WS ``get_price`` 와 동일 포맷 반환. @@ -593,6 +621,9 @@ class KiwoomWebSocketPriceCache: rm = msg.get("return_msg", "") if rc == 0: self._authenticated = True + # 안정 LOGIN 성공 → 재연결 카운터 리셋 (주말 Bye 후 소모분 복구) + self._reconnect_count = 0 + self._reconnect_delay = self.RECONNECT_BASE_DELAY_SEC logger.info("✅ 키움 WS LOGIN OK") # 디바운스 타이머 취소 — LOGIN 직후 일괄 REG 와 이중 전송 방지 with self._reg_timer_lock: @@ -612,6 +643,11 @@ class KiwoomWebSocketPriceCache: self._fire_login_callbacks(ws) else: logger.warning("❌ 키움 WS LOGIN 실패 rc=%s msg=%s", rc, rm) + # 805004 등 서버 토큰 거부 → 캐시 만료 전이라도 무효화 후 재발급 + if self._is_token_rejected_login(rc, rm): + self._invalidate_token_cache( + "LOGIN rc=%s msg=%s" % (rc, rm), + ) try: ws.close() except Exception: @@ -695,6 +731,7 @@ class KiwoomWebSocketPriceCache: } with self._cache_lock: self._cache[code] = {"data": data_compat, "ts": time.time()} + self._emit_price_listeners(code, float(price), data_compat) # tick_time / tick_vol — CandleAggregator·TickRecorder 공용 (보유-only도 recorder 수집) tt_raw = str(values.get(self.FID_TICK_TIME, "") or "").strip() @@ -804,6 +841,27 @@ class KiwoomWebSocketPriceCache: return None return _get_kiwoom_token_cached(self.app_key, self.app_secret, self.is_mock) + @staticmethod + def _is_token_rejected_login(rc: Any, rm: Any) -> bool: + """WS LOGIN 응답이 '토큰 무효'인지 — 캐시 invalidate 대상.""" + try: + if int(rc) == 805004: + return True + except Exception: + pass + m = str(rm or "") + return ("Token이 유효하지 않습니다" in m) or ("토큰이 유효하지 않습니다" in m) + + def _invalidate_token_cache(self, reason: str) -> None: + try: + from .kis_ws import _invalidate_kiwoom_token_cached + except ImportError: + logger.warning("kis_ws._invalidate_kiwoom_token_cached import 실패") + return + _invalidate_kiwoom_token_cached( + self.app_key, self.app_secret, self.is_mock, reason=reason, + ) + # ------------------------------------------------------------------ # 내부: 재연결 백오프 (KIS WS 와 동일 정책) # ------------------------------------------------------------------ @@ -825,10 +883,27 @@ class KiwoomWebSocketPriceCache: time.sleep(max(60.0, wait)) return - # 총 한도 초과 → 비활성 + # 총 한도 초과 — 기본은 긴 쿨다운 후 카운터 리셋 (주말 토큰거부 연타로 + # 월요일까지 영구 OFF 되면 SCALP/MOMENTUM 조건식 REAL 이 끊김). + # 응급으로만 KIWOOM_WS_HARD_DISABLE_ON_MAX_RECONNECT=true. if self._reconnect_count >= self.MAX_RECONNECT_ATTEMPTS: - logger.warning("⛔ 키움 WS 총 재연결 한도 초과 → 자동 비활성") - self._running = False + if get_env_bool("KIWOOM_WS_HARD_DISABLE_ON_MAX_RECONNECT", False): + logger.warning("⛔ 키움 WS 총 재연결 한도 초과 → 자동 비활성") + self._running = False + return + cool = float(get_env_float("KIWOOM_WS_MAX_RECONNECT_COOLDOWN_SEC", 1800.0)) + cool = max(60.0, min(cool, 86400.0)) + logger.warning( + "⚠️ 키움 WS 총 재연결 한도(#%d) → %.0fs 쿨다운 후 카운터 리셋 " + "(영구 OFF 안 함 · HARD_DISABLE=true 시만 비활성)", + self._reconnect_count, cool, + ) + # 쿨다운 전 토큰 캐시 비우기 — 죽은 토큰 재전송 루프 차단 + self._invalidate_token_cache("max reconnect cooldown") + time.sleep(cool) + self._reconnect_count = 0 + self._reconnect_delay = self.RECONNECT_BASE_DELAY_SEC + self._reconnect_times.clear() return delay = min(self._reconnect_delay, self.RECONNECT_MAX_DELAY_SEC) diff --git a/kis_trader/ws/ls_ws.py b/kis_trader/ws/ls_ws.py new file mode 100644 index 0000000..7a52a5e --- /dev/null +++ b/kis_trader/ws/ls_ws.py @@ -0,0 +1,1201 @@ +""" +kis_trader/ws/ls_ws.py — LS증권 WebSocket 시세 캐시 (그림자 검증용) +================================================================== + +목적 +---- +실매 시세(KIS/키움)와 **병렬**로 LS 실키 WS 를 붙여 +가격·틱·1분봉을 **별도 테이블**에 쌓고 갭을 비교한다. +**매매 의사결정에는 기본 사용하지 않는다** (읽기·적재 전용). +``LS_WS_BLOCK_BUY_WHILE_RECOVERING=true`` 일 때만 복구 중 매수 게이트에 참여. + +안정성 (B/A/C/D) +---------------- +- B: 모든 WS send 는 ``_send_lock`` + **timeout** 직렬화. REG 는 워커 큐. +- A: ``LS_WS_TR_MODE=us3``(기본) → 통합 ``US3`` + ``U``+패딩. + ``s3k3`` → ``S3_``/``K3_`` (실험용). +- C: 생존 = **프로토콜 ping**(기본 20s). 앱 JSON 하트비트는 보내지 않음(스펙 없음). + 틱 silence 강제재연결은 **정규장 세션(JIF/벽시계)에서만** + 연속 실패 백오프. + ``JIF``(장운영정보) 구독으로 장상태 참고. +- D: 재연결·REG 복구 중 ``is_recovering()`` — 매수 게이트는 env 로 선택. + +토글: ``LS_WS_VALIDATION_ENABLED`` (기본 false) +""" +from __future__ import annotations + +import json +import logging +import queue +import threading +import time +from collections import defaultdict, deque +from datetime import datetime +from typing import Any, Callable, Dict, List, Optional, Set, Tuple + +import requests + +logger = logging.getLogger("LSWebSocket") + +try: + from kis_trader.utils.env import get_env_bool, get_env_float, get_env_from_db, get_env_int +except ImportError: + def get_env_bool(key, default=False): # type: ignore[misc] + return default + + def get_env_int(key, default=0): # type: ignore[misc] + return int(default) + + def get_env_float(key, default=0.0): # type: ignore[misc] + return float(default) + + def get_env_from_db(key, default=""): # type: ignore[misc] + return default + +LS_REST_BASE = "https://openapi.ls-sec.co.kr:8080" +LS_WS_REAL = "wss://openapi.ls-sec.co.kr:9443/websocket" +LS_WS_MOCK = "wss://openapi.ls-sec.co.kr:29443/websocket" + +# JIF jstatus — 정규장 체결이 기대되는 상태 (스펙: 21=장시작) +_JIF_STATUS_EXPECT_TICKS = frozenset({"21"}) + +TickRecorder = Callable[[str, Dict[str, Any]], None] +CandleFlusher = Callable[[str, Dict[str, Any]], None] +OrderbookRecorder = Callable[[str, Dict[str, Any]], None] +ViRecorder = Callable[[str, Dict[str, Any]], None] + +# 매수 게이트·진단용 — start() 시 등록, stop() 시 해제 +_active_ls_ws: Optional["LSWebSocketPriceCache"] = None +_active_lock = threading.Lock() + + +def get_active_ls_ws() -> Optional["LSWebSocketPriceCache"]: + with _active_lock: + return _active_ls_ws + + +def domestic_unified_tr_key(shcode: str, width: int = 10) -> str: + code = (shcode or "").strip() + raw = f"U{code}" if (len(code) == 6 and code.isdigit()) else ( + code if code.startswith("U") else f"U{code}" + ) + return raw if len(raw) >= width else raw.ljust(width) + + +def overseas_tr_key(exchcd: str, symbol: str, width: int = 18) -> str: + raw = f"{exchcd}{symbol}" + return raw if len(raw) >= width else raw.ljust(width) + + +def fetch_ls_access_token(app_key: str, app_secret: str, timeout: float = 15.0) -> str: + url = f"{LS_REST_BASE}/oauth2/token" + resp = requests.post( + url, + headers={"Content-Type": "application/x-www-form-urlencoded"}, + data={ + "grant_type": "client_credentials", + "appkey": app_key, + "appsecretkey": app_secret, + "scope": "oob", + }, + timeout=timeout, + ) + if resp.status_code >= 400: + raise RuntimeError(f"LS token HTTP {resp.status_code}: {resp.text[:300]}") + body = resp.json() + token = body.get("access_token") or body.get("accesstoken") + if not token: + raise RuntimeError(f"LS token empty: {body}") + return str(token) + + +class LSWebSocketPriceCache: + """LS WS 가격 캐시 — get_price 포맷을 KIS/키움과 맞춤 (stck_prpr, _age_ms).""" + + def __init__( + self, + app_key: str, + app_secret: str, + *, + is_mock: bool = False, + also_hoga: bool = False, + ) -> None: + try: + import websocket # websocket-client + except ImportError as e: + raise RuntimeError("websocket-client 필요") from e + self._websocket = websocket + self.app_key = app_key + self.app_secret = app_secret + self.is_mock = bool(is_mock) + self.also_hoga = bool(also_hoga) + self.ws_url = LS_WS_MOCK if self.is_mock else LS_WS_REAL + + self._token: str = "" + self._token_at: float = 0.0 + self._ws: Any = None + self._thread: Optional[threading.Thread] = None + self._reg_thread: Optional[threading.Thread] = None + self._watch_thread: Optional[threading.Thread] = None + self._running = False + self._opened = threading.Event() + + self._sub_lock = threading.Lock() + self._send_lock = threading.Lock() # SSL write 직렬화 (BAD_LENGTH 레이스 방지) + self._subscribed: Set[str] = set() # 6자리 KR 코드 (소켓 실구독) + # code → {"permanent","condition","default",...} — 해제는 owner 전부일 때만 + self._sub_owners: Dict[str, Set[str]] = {} + self._us_subscribed: Set[str] = set() # 티커 + self._us_sub_owners: Dict[str, Set[str]] = {} + self._cache_lock = threading.Lock() + self._cache: Dict[str, Dict[str, Any]] = {} + self._market_cache: Dict[str, str] = {} # code → K|Q|E + + self._reg_q: queue.Queue = queue.Queue() + self._recovering = False + self._recovering_lock = threading.Lock() + self._last_tick_mono: float = 0.0 + self._opened_mono: float = 0.0 + self._watchdog_empty_streak: int = 0 + + # JIF 장운영정보 (앱 하트비트 아님 — 세션 판정용) + self._jif_lock = threading.Lock() + self._jangubun: str = "" + self._jstatus: str = "" + self._jif_mono: float = 0.0 + + # 1분봉 롤업 (code → bucket) + 확정봉 RAM (전략 get_candles 호환) + self._candle_lock = threading.Lock() + self._candles: Dict[str, Dict[str, Any]] = {} + # (code, tf_min) → 확정봉 deque (candle_time 스키마) + self._confirmed: Dict[Tuple[str, int], deque] = defaultdict( + lambda: deque(maxlen=max(50, get_env_int("LS_WS_CONFIRMED_MAX", 500))) + ) + self._tick_recorder: Optional[TickRecorder] = None + self._candle_flusher: Optional[CandleFlusher] = None + self._orderbook_recorder: Optional[OrderbookRecorder] = None + self._vi_recorder: Optional[ViRecorder] = None + self._orderbook_cache: Any = None + self._ob_last_save_mono: Dict[str, float] = {} + # BaseStrategy 틱매도 등 — KIS/키움과 동일 시그니처 + self._price_listeners: List[Callable] = [] + # code → last VI-active monotonic (해제·만료 시 discard) + self._vi_lock = threading.Lock() + self._vi_active_mono: Dict[str, float] = {} + try: + from kis_trader.ws.orderbook_cache import OrderbookCache + + self._orderbook_cache = OrderbookCache() + except Exception as e: + logger.debug("LS OrderbookCache 미사용: %s", e) + + # ── public API (키움/KIS 와 동일 취지) ────────────────────────────── + def attach_tick_recorder(self, fn: TickRecorder) -> None: + self._tick_recorder = fn + + def attach_candle_flusher(self, fn: CandleFlusher) -> None: + self._candle_flusher = fn + + def attach_orderbook_recorder(self, fn: OrderbookRecorder) -> None: + """LS UH1/H1_/HA_ → DB 등 (실매 호가필터 경로와 분리).""" + self._orderbook_recorder = fn + + def attach_vi_recorder(self, fn: ViRecorder) -> None: + """LS UVI/VI_ 발동·해제 → ls_ws_vi 등.""" + self._vi_recorder = fn + + def is_in_vi(self, code: str) -> bool: + """종목이 VI 발동 중인지 (해제 누락 대비 stale 만료).""" + c = self._normalize_kr_code(code) + if not c: + return False + stale = max(30, int(get_env_int("LS_WS_VI_STALE_SEC", 180) or 180)) + now = time.monotonic() + with self._vi_lock: + mono = self._vi_active_mono.get(c) + if mono is None: + return False + if now - mono > stale: + self._vi_active_mono.pop(c, None) + return False + return True + + def get_orderbook_snapshot(self, code: str, max_age_sec: float = 3.0): + """키움 ``get_orderbook_snapshot`` 호환 — LS RAM 호가.""" + if self._orderbook_cache is None: + return None + return self._orderbook_cache.get(code, max_age_sec=max_age_sec) + + def is_recovering(self) -> bool: + with self._recovering_lock: + return bool(self._recovering) + + def blocks_new_buy(self) -> bool: + """복구 중 신규매수 차단 — env ON 일 때만 True.""" + if not get_env_bool("LS_WS_BLOCK_BUY_WHILE_RECOVERING", False): + return False + return self.is_recovering() or not self.is_connected() + + def start(self) -> bool: + global _active_ls_ws + if self._thread and self._thread.is_alive(): + return True + try: + self._token = fetch_ls_access_token(self.app_key, self.app_secret) + self._token_at = time.time() + except Exception as e: + logger.error("LS 토큰 발급 실패: %s", e) + return False + self._running = True + self._opened.clear() + self._last_tick_mono = time.monotonic() + self._set_recovering(True) + self._thread = threading.Thread( + target=self._run_forever, name="LS-WS", daemon=True + ) + self._reg_thread = threading.Thread( + target=self._reg_worker, name="LS-WS-REG", daemon=True + ) + self._watch_thread = threading.Thread( + target=self._watchdog_loop, name="LS-WS-Watch", daemon=True + ) + self._thread.start() + self._reg_thread.start() + self._watch_thread.start() + if not self._opened.wait(timeout=15.0): + logger.error("LS WS OPEN timeout") + self.stop() + return False + with _active_lock: + _active_ls_ws = self + logger.info( + "✅ LS WS 연결 (%s mock=%s tr_mode=%s ping=%ss)", + self.ws_url, + self.is_mock, + self._tr_mode(), + int(get_env_int("LS_WS_PING_INTERVAL_SEC", 20) or 0), + ) + return True + + def stop(self) -> None: + global _active_ls_ws + self._running = False + self._set_recovering(False) + try: + self._reg_q.put_nowait(None) # poison + except Exception: + pass + if self._ws is not None: + try: + self._ws.close() + except Exception: + pass + with _active_lock: + if _active_ls_ws is self: + _active_ls_ws = None + + def is_connected(self) -> bool: + return self._opened.is_set() and self._running + + def subscribe(self, code: str, owner: str = "default") -> None: + """시세 구독. ``owner`` 가 남아 있으면 중복 REG 안 함. + + owner 예: ``permanent``(영구구독), ``condition``(LS 조건 이력), ``default``. + """ + code = (code or "").strip() + if not code: + return + own = (owner or "default").strip() or "default" + if code.isdigit() and len(code) == 6: + need_reg = False + with self._sub_lock: + ow = self._sub_owners.setdefault(code, set()) + if own in ow and code in self._subscribed: + return + ow.add(own) + if code not in self._subscribed: + self._subscribed.add(code) + need_reg = True + if need_reg: + self._enqueue_kr_reg(code) + else: + need_reg = False + with self._sub_lock: + ow = self._us_sub_owners.setdefault(code, set()) + if own in ow and code in self._us_subscribed: + return + ow.add(own) + if code not in self._us_subscribed: + self._us_subscribed.add(code) + need_reg = True + if need_reg: + self._enqueue_send("3", "GSC", overseas_tr_key("82", code)) + + def unsubscribe(self, code: str, owner: str = "default") -> None: + """owner 제거. 다른 owner 가 남으면 소켓 구독 유지.""" + code = (code or "").strip() + if not code: + return + own = (owner or "default").strip() or "default" + if code.isdigit() and len(code) == 6: + drop_socket = False + with self._sub_lock: + ow = self._sub_owners.get(code) + if ow is not None: + ow.discard(own) + if ow: + return + self._sub_owners.pop(code, None) + if code not in self._subscribed: + return + self._subscribed.discard(code) + drop_socket = True + if not drop_socket: + return + tr_cd, tr_key, hoga_cd, hoga_key = self._kr_tr_pair(code) + self._enqueue_send("4", tr_cd, tr_key) + if self.also_hoga: + self._enqueue_send("4", hoga_cd, hoga_key) + if get_env_bool("LS_WS_UVI_ENABLED", True): + vi_cd, vi_key = self._vi_tr_pair(code) + self._enqueue_send("4", vi_cd, vi_key) + if self._orderbook_cache is not None: + self._orderbook_cache.remove(code) + with self._vi_lock: + self._vi_active_mono.pop(code, None) + else: + drop_socket = False + with self._sub_lock: + ow = self._us_sub_owners.get(code) + if ow is not None: + ow.discard(own) + if ow: + return + self._us_sub_owners.pop(code, None) + if code not in self._us_subscribed: + return + self._us_subscribed.discard(code) + drop_socket = True + if drop_socket: + self._enqueue_send("4", "GSC", overseas_tr_key("82", code)) + + def sync_owner_codes(self, owner: str, codes: Set[str]) -> None: + """특정 owner 구독 집합을 ``codes`` 로 맞춤 (diff subscribe/unsubscribe).""" + own = (owner or "default").strip() or "default" + desired = {(c or "").strip() for c in (codes or set()) if (c or "").strip()} + with self._sub_lock: + cur: Set[str] = set() + for c, ow in self._sub_owners.items(): + if own in ow: + cur.add(c) + for c, ow in self._us_sub_owners.items(): + if own in ow: + cur.add(c) + add = sorted(desired - cur) + drop = sorted(cur - desired) + if add or drop or own == "condition": + logger.info( + "LS WS owner=%s sync +%d -%d desired=%d (socket_KR≈확인은 OPEN/워치독)", + own, len(add), len(drop), len(desired), + ) + for c in add: + self.subscribe(c, owner=own) + for c in drop: + self.unsubscribe(c, owner=own) + + def get_price(self, code: str, max_age_sec: float = 10.0) -> Optional[Dict[str, Any]]: + with self._cache_lock: + d = self._cache.get(code) + if not d: + return None + age = time.time() - float(d.get("_ts", 0)) + if age > max_age_sec: + return None + out = dict(d) + out["_age_ms"] = int(age * 1000) + return out + + def add_price_listener(self, callback) -> None: + if callback is None: + return + if callback not in self._price_listeners: + self._price_listeners.append(callback) + + def remove_price_listener(self, callback) -> None: + if callback is None: + return + try: + self._price_listeners.remove(callback) + except ValueError: + pass + + def _notify_price_listeners(self, code: str, price: float, data: Dict[str, Any]) -> None: + for cb in list(self._price_listeners): + try: + cb(code, price, data) + except Exception: + pass + + @staticmethod + def _forming_to_strategy_bar(cur: Dict[str, Any]) -> Dict[str, Any]: + """LS forming/flush dict → CandleAggregator 호환.""" + from kis_trader.network.ls_chart import ls_datetime_to_candle_time + + dt_s = str(cur.get("datetime") or "") + ct = ls_datetime_to_candle_time(dt_s) + return { + "candle_time": ct, + "open": float(cur.get("open") or 0), + "high": float(cur.get("high") or 0), + "low": float(cur.get("low") or 0), + "close": float(cur.get("close") or 0), + "volume": float(cur.get("volume") or 0), + "tick_count": int(cur.get("tick_count") or 0), + "is_confirmed": 0, + "source": "ls", + "rsi_2": None, + "rsi_3": None, + "rsi_5": None, + } + + @staticmethod + def _calc_rsi(closes: list, period: int) -> Optional[float]: + if len(closes) < period + 1: + return None + recent = closes[-(period + 1):] + gains, losses = [], [] + for i in range(1, len(recent)): + delta = recent[i] - recent[i - 1] + gains.append(max(delta, 0)) + losses.append(max(-delta, 0)) + avg_gain = sum(gains) / period if period > 0 else 0 + avg_loss = sum(losses) / period if period > 0 else 0 + if avg_loss == 0: + return 100.0 + rs = avg_gain / avg_loss + return round(100 - (100 / (1 + rs)), 2) + + def _attach_rsi(self, bars: List[Dict[str, Any]]) -> List[Dict[str, Any]]: + closes = [float(b.get("close") or 0) for b in bars] + out = [] + for i, b in enumerate(bars): + row = dict(b) + sub = closes[: i + 1] + row["rsi_2"] = self._calc_rsi(sub, 2) + row["rsi_3"] = self._calc_rsi(sub, 3) + row["rsi_5"] = self._calc_rsi(sub, 5) + out.append(row) + return out + + def _push_confirmed(self, code: str, bar: Dict[str, Any]) -> None: + """확정봉 RAM 적재 (동일 candle_time 이면 갱신).""" + tf = max(1, int(bar.get("tf_min") or get_env_int("LS_WS_CANDLE_TF_MIN", 1))) + ct = str(bar.get("candle_time") or "")[:12] + if len(ct) < 12: + return + key = (code, tf) + with self._candle_lock: + buf = self._confirmed[key] + if buf and str(buf[-1].get("candle_time") or "")[:12] == ct: + buf[-1] = dict(bar) + buf[-1]["is_confirmed"] = 1 + else: + row = dict(bar) + row["is_confirmed"] = 1 + buf.append(row) + + def get_candles(self, code: str, tf: int, n: int = 50) -> list: + """최근 n개 확정 봉 (오래된→최신). RAM → DB 폴백.""" + tf_i = max(1, int(tf or 1)) + lim = max(1, int(n or 50)) + with self._candle_lock: + buf = list(self._confirmed.get((code, tf_i), [])) + if len(buf) >= lim: + return self._attach_rsi(buf[-lim:]) + # DB 폴백으로 보강 + try: + from database import TradeDB + + db_bars = TradeDB().get_ls_ws_candles(code, tf_min=tf_i, limit=lim) + except Exception: + db_bars = [] + if not db_bars and not buf: + return [] + # RAM 우선 merge by candle_time + by_ct: Dict[str, Dict[str, Any]] = {} + for b in db_bars: + ct = str(b.get("candle_time") or "")[:12] + if ct: + by_ct[ct] = dict(b) + for b in buf: + ct = str(b.get("candle_time") or "")[:12] + if ct: + by_ct[ct] = dict(b) + merged = [by_ct[k] for k in sorted(by_ct.keys())] + return self._attach_rsi(merged[-lim:]) + + def get_current_candle(self, code: str, tf: int) -> Optional[dict]: + """진행 중 봉 (is_confirmed=0).""" + tf_i = max(1, int(tf or 1)) + want_tf = max(1, get_env_int("LS_WS_CANDLE_TF_MIN", 1)) + if tf_i != want_tf: + # 1분 롤업만 유지 — 다른 TF 요청은 None (키움 롤업과 동일 제약) + return None + with self._candle_lock: + cur = self._candles.get(code) + if not cur: + return None + return self._forming_to_strategy_bar(cur) + + def fill_gap_from_rest( + self, + code: str, + *, + qrycnt: Optional[int] = None, + upsert_db: bool = True, + ) -> int: + """ + t8412 분봉 → RAM 확정봉 + ls_ws_candles upsert. + 반환: 반영한 봉 수. 실패/비활성 시 0. + """ + from kis_trader.network.ls_chart import ( + candle_time_to_ls_datetime, + fetch_ls_minute_chart_df, + ) + + code = (code or "").strip() + if not code: + return 0 + df = fetch_ls_minute_chart_df(code, ncnt=1, qrycnt=qrycnt) + if df is None or df.empty: + return 0 + tf = max(1, get_env_int("LS_WS_CANDLE_TF_MIN", 1)) + n_ok = 0 + db = None + if upsert_db: + try: + from database import TradeDB + + db = TradeDB() + except Exception as e: + logger.debug("LS gap DB 연결 실패: %s", e) + db = None + for _, row in df.iterrows(): + ct = str(row.get("time") or "")[:12] + if len(ct) < 12: + continue + bar = { + "candle_time": ct, + "open": float(row["open"]), + "high": float(row["high"]), + "low": float(row["low"]), + "close": float(row["close"]), + "volume": float(row.get("volume") or 0), + "tick_count": 0, + "is_confirmed": 1, + "source": "ls_t8412", + "tf_min": tf, + } + self._push_confirmed(code, bar) + if db is not None: + try: + db.upsert_ls_ws_candle( + code=code, + candle={ + "datetime": candle_time_to_ls_datetime(ct), + "tf_min": tf, + "open": bar["open"], + "high": bar["high"], + "low": bar["low"], + "close": bar["close"], + "volume": bar["volume"], + "tick_count": 0, + }, + ) + except Exception as e: + logger.debug("LS gap upsert %s %s: %s", code, ct, e) + n_ok += 1 + if n_ok: + logger.info("📥 [LS갭] %s t8412 → %d봉 (RAM+DB)", code, n_ok) + return n_ok + + # ── TR / 시장 ───────────────────────────────────────────────────── + def _tr_mode(self) -> str: + # 기본 us3: 당일 실측 전 틱이 US3. s3k3 전환 후 틱 0+watchdog 폭주 확인됨. + v = (get_env_from_db("LS_WS_TR_MODE", "us3") or "us3").strip().lower() + if v in ("s3k3", "s3", "k3", "split"): + return "s3k3" + return "us3" + + def _lookup_market(self, code: str) -> str: + """stock_meta.market: K=KOSPI, Q=KOSDAQ, E=ETF. 없으면 ''.""" + if code in self._market_cache: + return self._market_cache[code] + m = "" + try: + from database import TradeDB + db = TradeDB() + row = db.conn.execute( + "SELECT market FROM stock_meta WHERE code=%s LIMIT 1", + (code,), + ).fetchone() + if row: + m = str(row.get("market") or "").strip().upper()[:1] + except Exception as e: + logger.debug("LS stock_meta 조회 실패 %s: %s", code, e) + self._market_cache[code] = m + return m + + def _kr_tr_pair(self, code: str) -> Tuple[str, str, str, str]: + """(체결 tr_cd, tr_key, 호가 tr_cd, 호가 tr_key).""" + if self._tr_mode() == "us3": + k = domestic_unified_tr_key(code) + return "US3", k, "UH1", k + m = self._lookup_market(code) + if m == "K" or m == "E": + return "S3_", code, "H1_", code + if m == "Q": + return "K3_", code, "HA_", code + # 메타 없음: 통합 US3 폴백 (잘못된 S3_/K3_ 보다 안전) + k = domestic_unified_tr_key(code) + return "US3", k, "UH1", k + + def _vi_tr_pair(self, code: str) -> Tuple[str, str]: + """(VI tr_cd, tr_key) — us3→UVI+U패딩, s3k3→VI_+6자리.""" + if self._tr_mode() == "us3": + return "UVI", domestic_unified_tr_key(code) + return "VI_", code + + def _enqueue_kr_reg(self, code: str) -> None: + tr_cd, tr_key, hoga_cd, hoga_key = self._kr_tr_pair(code) + self._enqueue_send("3", tr_cd, tr_key) + if self.also_hoga: + self._enqueue_send("3", hoga_cd, hoga_key) + if get_env_bool("LS_WS_UVI_ENABLED", True): + vi_cd, vi_key = self._vi_tr_pair(code) + self._enqueue_send("3", vi_cd, vi_key) + + def _enqueue_send(self, tr_type: str, tr_cd: str, tr_key: str) -> None: + try: + self._reg_q.put_nowait(("send", tr_type, tr_cd, tr_key)) + except Exception as e: + logger.debug("LS REG 큐 put 실패: %s", e) + + def _enqueue_replay(self) -> None: + try: + self._reg_q.put_nowait(("replay", None, None, None)) + except Exception as e: + logger.debug("LS REG replay 큐 실패: %s", e) + + def _set_recovering(self, on: bool) -> None: + with self._recovering_lock: + self._recovering = bool(on) + + # ── internals ───────────────────────────────────────────────────── + def _ensure_token(self) -> str: + # LS 토큰: 신청일~익일 07시. 12h 지나면 재발급. + if self._token and (time.time() - self._token_at) < 12 * 3600: + return self._token + self._token = fetch_ls_access_token(self.app_key, self.app_secret) + self._token_at = time.time() + return self._token + + def _send_raw(self, payload: dict) -> None: + if self._ws is None or not self._opened.is_set(): + return + timeout = max(0.5, float(get_env_float("LS_WS_SEND_LOCK_TIMEOUT_SEC", 3.0) or 3.0)) + acquired = self._send_lock.acquire(timeout=timeout) + if not acquired: + logger.warning( + "LS WS send lock timeout %.1fs → close (half-open 블로킹 방지)", + timeout, + ) + try: + if self._ws is not None: + self._ws.close() + except Exception as e: + logger.debug("LS send-lock timeout close: %s", e) + return + try: + try: + self._ws.send(json.dumps(payload, ensure_ascii=False)) + except Exception as e: + logger.debug("LS WS send 실패: %s", e) + try: + if self._ws is not None: + self._ws.close() + except Exception as e2: + logger.debug("LS send 실패 후 close: %s", e2) + finally: + self._send_lock.release() + + def _send_typed(self, tr_type: str, tr_cd: str, tr_key: str) -> None: + self._send_raw({ + "header": {"token": self._ensure_token(), "tr_type": str(tr_type)}, + "body": {"tr_cd": tr_cd, "tr_key": tr_key}, + }) + + def _session_expects_trade_ticks(self) -> bool: + """틱 silence 강제재연결을 허용할 세션인가 (VI·점심·장외 오탐 방지). + + - ``LS_WS_WATCHDOG_SESSION_GATE=false`` 이면 항상 True(레거시). + - JIF ``jstatus=21``(장시작) 이면 True. + - JIF 미수신 시 벽시계 정규장 창(기본 09:00~15:25) 폴백. + """ + if not get_env_bool("LS_WS_WATCHDOG_SESSION_GATE", True): + return True + with self._jif_lock: + st = str(self._jstatus or "").strip() + got_jif = bool(self._jif_mono > 0) + if got_jif: + return st in _JIF_STATUS_EXPECT_TICKS + now = datetime.now() + if now.weekday() >= 5: + return False + hhmm = now.hour * 100 + now.minute + start = int(get_env_int("LS_WS_WATCHDOG_SESSION_START_HM", 900) or 900) + end = int(get_env_int("LS_WS_WATCHDOG_SESSION_END_HM", 1525) or 1525) + return start <= hhmm <= end + + def _on_jif(self, body: Dict[str, Any]) -> None: + jangubun = str(body.get("jangubun") or "").strip() + jstatus = str(body.get("jstatus") or "").strip() + with self._jif_lock: + self._jangubun = jangubun + self._jstatus = jstatus + self._jif_mono = time.monotonic() + logger.info("LS JIF 장운영 jangubun=%s jstatus=%s", jangubun, jstatus) + + def _normalize_kr_code(self, raw: str) -> str: + code = str(raw or "").strip() + if code.startswith("U") and len(code) >= 7 and code[1:7].isdigit(): + return code[1:7] + if code.isdigit() and len(code) == 6: + return code + # ex_shcode 등 + digits = "".join(ch for ch in code if ch.isdigit()) + if len(digits) >= 6: + return digits[-6:] + return code + + def _on_hoga(self, tr_cd: str, body: Dict[str, Any]) -> None: + """UH1(통합호가) 등 — RAM 갱신 + (옵션) ls_ws_orderbook 스로틀 저장.""" + if self._orderbook_cache is None: + return + code = self._normalize_kr_code( + str(body.get("shcode") or body.get("ex_shcode") or "") + ) + if not (code.isdigit() and len(code) == 6): + return + src_map = {"UH1": "ls_uh1", "H1_": "ls_h1", "HA_": "ls_ha", "NH1": "ls_nh1"} + source = src_map.get(tr_cd, f"ls_{tr_cd.lower()}") + try: + snap = self._orderbook_cache.update_from_ls_hoga(code, body, source=source) + except Exception as e: + logger.debug("LS 호가 파싱 실패 %s: %s", code, e) + return + if not self._orderbook_recorder: + return + if not get_env_bool("LS_WS_ORDERBOOK_SAVE", True): + return + gap_ms = max(0, int(get_env_int("LS_WS_ORDERBOOK_SAVE_MS", 1000) or 1000)) + now_m = time.monotonic() + last = self._ob_last_save_mono.get(code, 0.0) + if gap_ms > 0 and (now_m - last) * 1000.0 < gap_ms: + return + self._ob_last_save_mono[code] = now_m + try: + self._orderbook_recorder(code, snap.to_storage_dict()) + except Exception as e: + logger.debug("LS orderbook recorder: %s", e) + + @staticmethod + def _vi_gubun_active(g: str) -> bool: + return str(g or "").strip() in ("1", "2", "3") + + def _all_kr_in_vi(self) -> bool: + """구독 중인 KR 이 1개 이상이고 전부 VI 활성인가.""" + with self._sub_lock: + kr = [c for c in self._subscribed if c.isdigit() and len(c) == 6] + if not kr: + return False + return all(self.is_in_vi(c) for c in kr) + + def _on_vi(self, tr_cd: str, body: Dict[str, Any]) -> None: + """UVI/VI_ — RAM VI 상태 + ls_ws_vi 이벤트 적재.""" + code = self._normalize_kr_code( + str(body.get("shcode") or body.get("ref_shcode") or body.get("ex_shcode") or "") + ) + if not (code.isdigit() and len(code) == 6): + return + + krx_g = str(body.get("krx_vi_gubun") or "").strip() + nxt_g = str(body.get("nxt_vi_gubun") or "").strip() + plain_g = str(body.get("vi_gubun") or "").strip() + if tr_cd == "UVI": + active = self._vi_gubun_active(krx_g) or self._vi_gubun_active(nxt_g) + # 저장용 대표 구분: KRX 우선, 없으면 NXT + vi_g = krx_g if krx_g != "" else (nxt_g if nxt_g != "" else "0") + if active and not self._vi_gubun_active(vi_g): + vi_g = nxt_g if self._vi_gubun_active(nxt_g) else krx_g + event_time = str(body.get("krx_time") or body.get("nxt_time") or "").strip() + try: + svi = float(body.get("krx_svi_recprice") or body.get("nxt_svi_recprice") or 0) or None + except (TypeError, ValueError): + svi = None + try: + dvi = float(body.get("krx_dvi_recprice") or body.get("nxt_dvi_recprice") or 0) or None + except (TypeError, ValueError): + dvi = None + try: + trg = float(body.get("krx_vi_trgprice") or body.get("nxt_vi_trgprice") or 0) or None + except (TypeError, ValueError): + trg = None + else: + active = self._vi_gubun_active(plain_g) + vi_g = plain_g or "0" + event_time = str(body.get("time") or "").strip() + try: + svi = float(body.get("svi_recprice") or 0) or None + except (TypeError, ValueError): + svi = None + try: + dvi = float(body.get("dvi_recprice") or 0) or None + except (TypeError, ValueError): + dvi = None + try: + trg = float(body.get("vi_trgprice") or 0) or None + except (TypeError, ValueError): + trg = None + krx_g = plain_g or None + nxt_g = None + + now_m = time.monotonic() + with self._vi_lock: + if active: + self._vi_active_mono[code] = now_m + else: + self._vi_active_mono.pop(code, None) + + logger.info( + "LS VI %s code=%s gubun=%s krx=%s nxt=%s active=%s", + tr_cd, code, vi_g, krx_g or "-", nxt_g or "-", active, + ) + + if not self._vi_recorder or not get_env_bool("LS_WS_VI_SAVE", True): + return + payload = { + "ts": datetime.now(), + "event_time": event_time, + "vi_gubun": vi_g, + "krx_vi_gubun": krx_g, + "nxt_vi_gubun": nxt_g, + "svi_recprice": svi, + "dvi_recprice": dvi, + "vi_trgprice": trg, + "tr_cd": tr_cd, + "exchname": str(body.get("exchname") or ""), + "active": active, + } + try: + self._vi_recorder(code, payload) + except Exception as e: + logger.debug("LS VI recorder: %s", e) + + def _reg_worker(self) -> None: + """OPEN 콜백에서 sleep 하지 않고, 여기서 gap 두고 REG/UNREG.""" + while self._running: + try: + item = self._reg_q.get(timeout=0.5) + except queue.Empty: + continue + if item is None: + break + kind = item[0] + gap_ms = max(20, int(get_env_int("LS_WS_REG_GAP_MS", 80) or 80)) + if kind == "replay": + delay_ms = max(0, int(get_env_int("LS_WS_OPEN_REG_DELAY_MS", 500) or 0)) + if delay_ms > 0: + time.sleep(delay_ms / 1000.0) + with self._sub_lock: + kr = list(self._subscribed) + us = list(self._us_subscribed) + n_ok = 0 + # JIF 장운영 — 스펙 예: tr_key=0 (앱 하트비트 아님) + if get_env_bool("LS_WS_JIF_ENABLED", True): + jif_key = (get_env_from_db("LS_WS_JIF_TR_KEY", "0") or "0").strip() or "0" + self._send_typed("3", "JIF", jif_key) + n_ok += 1 + time.sleep(gap_ms / 1000.0) + # replay 는 직접 전송 (큐 재투입 폭주 방지) + for code in kr: + if not self._running or not self._opened.is_set(): + break + tr_cd, tr_key, hoga_cd, hoga_key = self._kr_tr_pair(code) + self._send_typed("3", tr_cd, tr_key) + n_ok += 1 + if self.also_hoga: + self._send_typed("3", hoga_cd, hoga_key) + n_ok += 1 + if get_env_bool("LS_WS_UVI_ENABLED", True): + vi_cd, vi_key = self._vi_tr_pair(code) + self._send_typed("3", vi_cd, vi_key) + n_ok += 1 + time.sleep(gap_ms / 1000.0) + for sym in us: + if not self._running or not self._opened.is_set(): + break + self._send_typed("3", "GSC", overseas_tr_key("82", sym)) + n_ok += 1 + time.sleep(gap_ms / 1000.0) + ping_iv = int(get_env_int("LS_WS_PING_INTERVAL_SEC", 20) or 0) + logger.info( + "LS WS OPEN — 구독 복구 KR=%d US=%d sends≈%d (delay=%dms gap=%dms ping=%s)", + len(kr), + len(us), + n_ok, + delay_ms, + gap_ms, + "off" if ping_iv <= 0 else f"{ping_iv}s", + ) + self._set_recovering(False) + continue + # send + _, tr_type, tr_cd, tr_key = item + if self._opened.is_set(): + self._send_typed(str(tr_type), str(tr_cd), str(tr_key)) + time.sleep(gap_ms / 1000.0) + + def _watchdog_loop(self) -> None: + """정규장에서만: 구독 전체 틱 N초 없음 → 강제 close. + + 생존 1순위는 프로토콜 ping. 앱 JSON 하트비트는 보내지 않음. + 장외·동시호가·마감·JIF 비정규 상태에서는 틱 silence로 끊지 않음. + """ + while self._running: + time.sleep(max(1, int(get_env_int("LS_WS_WATCHDOG_POLL_SEC", 5) or 5))) + if not get_env_bool("LS_WS_WATCHDOG_ENABLED", True): + continue + if not self._opened.is_set(): + continue + with self._sub_lock: + n_sub = len(self._subscribed) + len(self._us_subscribed) + if n_sub <= 0: + continue + if not self._session_expects_trade_ticks(): + continue + # 구독 KR 전부가 VI 중이면 틱 공백이 정상 → 강제재연결 금지 + if get_env_bool("LS_WS_WATCHDOG_SKIP_WHEN_VI", True) and self._all_kr_in_vi(): + continue + silence = max(15, int(get_env_int("LS_WS_WATCHDOG_SILENCE_SEC", 45) or 45)) + grace = max(5, int(get_env_int("LS_WS_WATCHDOG_OPEN_GRACE_SEC", 30) or 30)) + empty_after = max(1, int(get_env_int("LS_WS_WATCHDOG_EMPTY_BACKOFF_AFTER", 3) or 3)) + empty_mult = max(2, int(get_env_int("LS_WS_WATCHDOG_EMPTY_BACKOFF_MULT", 4) or 4)) + if self._watchdog_empty_streak >= empty_after: + silence = silence * empty_mult + now = time.monotonic() + if now - self._opened_mono < grace: + continue + if now - self._last_tick_mono < silence: + continue + if self.is_recovering(): + continue + self._watchdog_empty_streak += 1 + with self._jif_lock: + jst = self._jstatus or "-" + logger.warning( + "LS WS watchdog: %ds 틱 없음 (subs=%d streak=%d silence=%ds jstatus=%s) → 강제 재연결", + int(now - self._last_tick_mono), + n_sub, + self._watchdog_empty_streak, + silence, + jst, + ) + self._set_recovering(True) + try: + if self._ws is not None: + self._ws.close() + except Exception as e: + logger.debug("LS watchdog close: %s", e) + + def _run_forever(self) -> None: + backoff = 1.0 + while self._running: + try: + self._opened.clear() + self._set_recovering(True) + self._ws = self._websocket.WebSocketApp( + self.ws_url, + on_open=self._on_open, + on_message=self._on_message, + on_error=self._on_error, + on_close=self._on_close, + ) + # 헬퍼/문서와 동일: 프로토콜 ping 기본 ON(20). + # BAD_LENGTH 완화는 send lock + REG 워커(콜백 비서면)로 처리. + ping_iv = int(get_env_int("LS_WS_PING_INTERVAL_SEC", 20) or 0) + ping_to = int(get_env_int("LS_WS_PING_TIMEOUT_SEC", 10) or 10) + run_kw: Dict[str, Any] = {} + if ping_iv > 0: + run_kw["ping_interval"] = ping_iv + run_kw["ping_timeout"] = max(1, ping_to) + self._ws.run_forever(**run_kw) + except Exception as e: + logger.warning("LS WS run 예외: %s", e) + self._opened.clear() + self._set_recovering(True) + if not self._running: + break + time.sleep(min(backoff, 60.0)) + backoff = min(backoff * 2, 60.0) + try: + self._ensure_token() + except Exception as e: + logger.warning("LS 토큰 재발급 실패: %s", e) + + def _on_open(self, _ws: Any) -> None: + # 콜백에서 sleep/REG 연타 금지 → 워커에 replay 위임 + self._opened_mono = time.monotonic() + self._last_tick_mono = time.monotonic() + self._opened.set() + self._set_recovering(True) + self._enqueue_replay() + + def _on_close(self, _ws: Any, status: Any, msg: Any) -> None: + self._opened.clear() + self._set_recovering(True) + logger.warning("LS WS CLOSE status=%s msg=%s", status, msg) + + def _on_error(self, _ws: Any, err: Any) -> None: + logger.warning("LS WS ERROR %s", err) + + def _on_message(self, _ws: Any, message: Any) -> None: + try: + data = json.loads(message) if isinstance(message, str) else message + except Exception: + return + header = data.get("header") or {} + body = data.get("body") or {} + if not isinstance(body, dict) or not body: + return + tr_cd = str(header.get("tr_cd") or "") + if tr_cd == "JIF": + self._on_jif(body) + return + if tr_cd in ("UH1", "H1_", "HA_", "NH1"): + self._on_hoga(tr_cd, body) + return + if tr_cd in ("UVI", "VI_", "NVI", "DVI"): + self._on_vi(tr_cd, body) + return + code = str(body.get("shcode") or body.get("symbol") or "").strip() + if not code: + return + # U005930 → 005930 + if code.startswith("U") and len(code) >= 7 and code[1:7].isdigit(): + code = code[1:7] + price_raw = body.get("price") + try: + price = float(price_raw) + except (TypeError, ValueError): + return + if price <= 0: + return + now = time.time() + self._last_tick_mono = time.monotonic() + self._watchdog_empty_streak = 0 + chetime = str(body.get("chetime") or body.get("kortm") or body.get("trdtm") or "") + cvol = body.get("cvolume") or body.get("trdq") or 0 + totq = body.get("volume") or body.get("totq") or 0 + try: + cvol_f = float(cvol or 0) + except (TypeError, ValueError): + cvol_f = 0.0 + try: + tot_f = float(totq or 0) + except (TypeError, ValueError): + tot_f = 0.0 + + # KIS 캐시 호환 필드 + row = { + "stck_prpr": str(int(price) if price >= 1000 else price), + "prdy_ctrt": str(body.get("drate") or body.get("rate") or ""), + "acml_vol": str(tot_f), + "cntg_vol": str(cvol_f), + "stck_oprc": str(body.get("open") or ""), + "stck_hgpr": str(body.get("high") or ""), + "stck_lwpr": str(body.get("low") or ""), + "chetime": chetime, + "_ts": now, + "_src": "ls", + "_tr_cd": tr_cd, + "_price_f": price, + } + with self._cache_lock: + self._cache[code] = row + + self._notify_price_listeners(code, price, row) + + if self._tick_recorder and get_env_bool("LS_WS_TICK_SAVE", True): + try: + self._tick_recorder( + code, + { + "ts": datetime.now(), + "price": price, + "volume": cvol_f, + "tot_volume": tot_f, + "chetime": chetime, + "tr_cd": tr_cd, + }, + ) + except Exception as e: + logger.debug("LS tick recorder: %s", e) + + if get_env_bool("LS_WS_CANDLE_SAVE", True): + self._roll_candle(code, price, cvol_f, now) + + def _roll_candle(self, code: str, price: float, cvol: float, now: float) -> None: + tf = max(1, get_env_int("LS_WS_CANDLE_TF_MIN", 1)) + dt = datetime.fromtimestamp(now) + # 분 버킷 + minute = (dt.minute // tf) * tf + bucket = dt.replace(minute=minute, second=0, microsecond=0) + key = bucket.strftime("%Y-%m-%d %H:%M:00") + flushed = None + with self._candle_lock: + cur = self._candles.get(code) + if cur and cur.get("datetime") != key: + flushed = dict(cur) + cur = None + if cur is None: + cur = { + "datetime": key, + "tf_min": tf, + "open": price, + "high": price, + "low": price, + "close": price, + "volume": max(0.0, cvol), + "tick_count": 1, + } + self._candles[code] = cur + else: + cur["high"] = max(float(cur["high"]), price) + cur["low"] = min(float(cur["low"]), price) + cur["close"] = price + cur["volume"] = float(cur.get("volume") or 0) + max(0.0, cvol) + cur["tick_count"] = int(cur.get("tick_count") or 0) + 1 + if flushed: + # 확정봉 RAM (전략 get_candles) + try: + bar = self._forming_to_strategy_bar(flushed) + bar["is_confirmed"] = 1 + bar["tf_min"] = int(flushed.get("tf_min") or tf) + self._push_confirmed(code, bar) + except Exception as e: + logger.debug("LS confirmed push: %s", e) + if self._candle_flusher: + try: + self._candle_flusher(code, flushed) + except Exception as e: + logger.debug("LS candle flush: %s", e) diff --git a/kis_trader/ws/orderbook_cache.py b/kis_trader/ws/orderbook_cache.py index b5fba8b..d4b98de 100644 --- a/kis_trader/ws/orderbook_cache.py +++ b/kis_trader/ws/orderbook_cache.py @@ -163,6 +163,81 @@ def parse_kiwoom_0d_values(code: str, values: Dict[str, Any]) -> OrderbookSnapsh ) +def _ls_level_qty(body: Dict[str, Any], side: str, i: int) -> int: + """LS UH1/H1_/HA_ 잔량 — 통합(UH1)은 krx+nxt+unt 합산, 단일시장은 offerremN.""" + # H1_/HA_: offerrem1 / bidrem1 + plain = _abs_int(body.get(f"{side}rem{i}")) + if plain > 0: + return plain + # UH1: krx_offerrem1 + nxt_ + unt_ + return ( + _abs_int(body.get(f"krx_{side}rem{i}")) + + _abs_int(body.get(f"nxt_{side}rem{i}")) + + _abs_int(body.get(f"unt_{side}rem{i}")) + ) + + +def _ls_total_qty(body: Dict[str, Any], side: str) -> int: + """totofferrem / totoffer — UH1 은 krx_tot* + nxt_ + unt_ 합산.""" + plain = _abs_int(body.get(f"tot{side}rem")) + if plain > 0: + return plain + return ( + _abs_int(body.get(f"krx_tot{side}rem")) + + _abs_int(body.get(f"nxt_tot{side}rem")) + + _abs_int(body.get(f"unt_tot{side}rem")) + ) + + +def parse_ls_hoga_body( + code: str, + body: Dict[str, Any], + *, + source: str = "ls_uh1", +) -> OrderbookSnapshot: + """LS 호가잔량 body (UH1/H1_/HA_) → ``OrderbookSnapshot``. + + - 가격: ``offerhoN``(매도)·``bidhoN``(매수) 1~10 + - 잔량: 단일 ``offerremN`` 또는 통합 ``krx_/nxt_/unt_`` 합 + """ + asks: List[OrderbookLevel] = [] + bids: List[OrderbookLevel] = [] + for i in range(1, 11): + ask_px = _abs_int(body.get(f"offerho{i}")) + bid_px = _abs_int(body.get(f"bidho{i}")) + ask_qty = _ls_level_qty(body, "offer", i) + bid_qty = _ls_level_qty(body, "bid", i) + if ask_px > 0: + asks.append(OrderbookLevel(price=ask_px, qty=ask_qty)) + if bid_px > 0: + bids.append(OrderbookLevel(price=bid_px, qty=bid_qty)) + total_ask = _ls_total_qty(body, "offer") + total_bid = _ls_total_qty(body, "bid") + if total_bid <= 0 and bids: + total_bid = sum(b.qty for b in bids) + if total_ask <= 0 and asks: + total_ask = sum(a.qty for a in asks) + + hotime = str(body.get("hotime") or "").strip() + # hotime 보통 HHMMSS — 당일 날짜 붙여 snap_time + snap_time = "" + if len(hotime) >= 6 and hotime[:6].isdigit(): + from datetime import datetime as _dt + + snap_time = _dt.now().strftime("%Y%m%d") + hotime[:6] + + return OrderbookSnapshot( + code=str(code).strip(), + asks=asks, + bids=bids, + total_bid_qty=total_bid, + total_ask_qty=total_ask, + ts=time.time(), + source=str(source or "ls_uh1"), + snap_time=snap_time, + ) + + class OrderbookCache: """스레드 세이프 종목별 호가 캐시.""" @@ -176,6 +251,18 @@ class OrderbookCache: self._data[snap.code] = snap return snap + def update_from_ls_hoga( + self, + code: str, + body: Dict[str, Any], + *, + source: str = "ls_uh1", + ) -> OrderbookSnapshot: + snap = parse_ls_hoga_body(code, body, source=source) + with self._lock: + self._data[snap.code] = snap + return snap + def get(self, code: str, max_age_sec: float = 3.0) -> Optional[OrderbookSnapshot]: c = str(code or "").strip() if not c: diff --git a/kis_trader/ws/tick_recorder.py b/kis_trader/ws/tick_recorder.py index 5d9beb3..7b13f7f 100644 --- a/kis_trader/ws/tick_recorder.py +++ b/kis_trader/ws/tick_recorder.py @@ -5,6 +5,8 @@ kis_trader/ws/tick_recorder.py — 실시간 체결 틱 RAM 링버퍼 + ws_ticks [트랙 2] 제한 큐 → 백그라운드 스레드 배치 INSERT (journalctl 파싱 아님) 해외 확장: market / exchange / currency / session 컬럼 (국내 기본 KR/KRX/KRW). +- 국내 → ``ws_ticks`` (메인 TradeDB 커넥션) +- 해외 US → ``ws_ticks_us`` (전용 raw 커넥션 — 앱 TradeDB 락과 분리) """ from __future__ import annotations @@ -27,7 +29,8 @@ class TickRecorder: - ``set_record_codes()`` 로 후보(또는 구독) 종목만 필터. - RAM: 종목당 최대 N틱 (링버퍼). - - DB: BATCH_SIZE / FLUSH_SEC 마다 ws_ticks append INSERT. + - DB: BATCH_SIZE / FLUSH_SEC 마다 append INSERT + (KR→ws_ticks, US→ws_ticks_us). """ def __init__(self, db=None) -> None: @@ -49,12 +52,14 @@ class TickRecorder: self._writer_thread: Optional[threading.Thread] = None self._last_cleanup_ts = 0.0 self._drops = 0 + # 해외 틱 전용 DB 커넥션 (메인 TradeDB._lock 과 분리) + self._us_write_conn: Any = None if self._enabled and self.db is not None: self._ensure_table() self._start_writer() logger.info( - "✅ TickRecorder 활성 (buf=%d/종목, batch=%d, flush=%.1fs, keep=%dd)", + "✅ TickRecorder 활성 (buf=%d/종목, batch=%d, flush=%.1fs, keep=%dd, us→ws_ticks_us)", self._buffer_max, self._batch_size, self._flush_sec, self._keep_days, ) elif self._enabled and self.db is None: @@ -94,15 +99,21 @@ class TickRecorder: code = (code or "").strip() if not code: return - with self._lock: - filt = self._record_codes - if filt is not None and code not in filt: - return + mkt = (market or self._default_market).upper()[:8] + # 국내: WS_TICK_RECORD_SCOPE(candidates 등) 필터 적용. + # 해외(US): 영구구독이 국내 후보 집합에 없어 필터에 걸리면 + # 봉(ws_candles)은 쌓이는데 틱(ws_ticks_us)만 끊기는 사고가 남. + # → US 는 필터 우회 (저장 ON/OFF 는 해외 WS 의 WS_TICK_SAVE_US_ENABLED). + if mkt != "US": + with self._lock: + filt = self._record_codes + if filt is not None and code not in filt: + return tick_time_full = self._normalize_tick_time(tick_time) recv_ts = dt.datetime.now().strftime("%Y-%m-%d %H:%M:%S") item = { - "market": (market or self._default_market).upper()[:8], + "market": mkt, "exchange": (exchange or self._default_exchange)[:16] if (exchange or self._default_exchange) else None, "code": code[:32], "tick_time": tick_time_full, @@ -181,8 +192,18 @@ class TickRecorder: try: if hasattr(self.db, "ensure_ws_ticks_table"): self.db.ensure_ws_ticks_table() + if hasattr(self.db, "ensure_ws_ticks_us_table"): + self.db.ensure_ws_ticks_us_table() except Exception as e: - logger.warning("ws_ticks 테이블 확인 실패: %s", e) + logger.warning("ws_ticks/_us 테이블 확인 실패: %s", e) + # 해외 INSERT 전용 커넥션 (메인 전략 SELECT 와 파이썬 락 비공유) + try: + if hasattr(self.db, "new_raw_connection"): + self._us_write_conn = self.db.new_raw_connection() + logger.info("✅ TickRecorder US writer 전용 커넥션 (ws_ticks_us)") + except Exception as e: + self._us_write_conn = None + logger.warning("US 전용 커넥션 실패 — 메인 DB로 폴백: %s", e) def _start_writer(self) -> None: self._writer_thread = threading.Thread( @@ -224,12 +245,26 @@ class TickRecorder: def _flush_batch(self, batch: List[dict]) -> None: if not batch or not self.db: return + us_batch = [x for x in batch if str(x.get("market") or "").upper() == "US"] + kr_batch = [x for x in batch if str(x.get("market") or "").upper() != "US"] try: - if hasattr(self.db, "insert_ws_ticks_batch"): - self.db.insert_ws_ticks_batch(batch) - logger.debug("💾 [틱배치] %d건 → ws_ticks", len(batch)) + if kr_batch and hasattr(self.db, "insert_ws_ticks_batch"): + self.db.insert_ws_ticks_batch(kr_batch) + logger.debug("💾 [틱배치] %d건 → ws_ticks", len(kr_batch)) except Exception as e: - logger.warning("ws_ticks 배치 INSERT 실패 (%d건): %s", len(batch), e) + logger.warning("ws_ticks 배치 INSERT 실패 (%d건): %s", len(kr_batch), e) + try: + if us_batch and hasattr(self.db, "insert_ws_ticks_us_batch"): + self.db.insert_ws_ticks_us_batch( + us_batch, conn=self._us_write_conn, + ) + logger.debug("💾 [틱배치] %d건 → ws_ticks_us", len(us_batch)) + elif us_batch and hasattr(self.db, "insert_ws_ticks_batch"): + # 구버전 DB 헬퍼 폴백 (분리 전) + self.db.insert_ws_ticks_batch(us_batch) + logger.debug("💾 [틱배치] %d건 → ws_ticks(폴백 US)", len(us_batch)) + except Exception as e: + logger.warning("ws_ticks_us 배치 INSERT 실패 (%d건): %s", len(us_batch), e) def _maybe_cleanup_old(self) -> None: if self._keep_days <= 0: @@ -239,4 +274,8 @@ class TickRecorder: self.db.cleanup_old_ws_ticks(keep_days=self._keep_days) except Exception as e: logger.debug("ws_ticks 정리 실패: %s", e) - + try: + if hasattr(self.db, "cleanup_old_ws_ticks_us"): + self.db.cleanup_old_ws_ticks_us(keep_days=self._keep_days) + except Exception as e: + logger.debug("ws_ticks_us 정리 실패: %s", e) diff --git a/logs/kis_api_rejects.jsonl b/logs/kis_api_rejects.jsonl new file mode 100644 index 0000000..eaa11c6 --- /dev/null +++ b/logs/kis_api_rejects.jsonl @@ -0,0 +1,1308 @@ +{"ts": "2026-07-24T00:56:40+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-24T00:58:28+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-24T00:58:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3596}} +{"ts": "2026-07-24T01:01:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3415}} +{"ts": "2026-07-24T01:04:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3235}} +{"ts": "2026-07-24T01:07:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3054}} +{"ts": "2026-07-24T01:10:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2873}} +{"ts": "2026-07-24T01:13:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2692}} +{"ts": "2026-07-24T01:16:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2511}} +{"ts": "2026-07-24T01:19:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2331}} +{"ts": "2026-07-24T01:20:00+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-24T01:20:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3599}} +{"ts": "2026-07-24T01:22:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2151}} +{"ts": "2026-07-24T01:23:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3418}} +{"ts": "2026-07-24T01:25:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1970}} +{"ts": "2026-07-24T01:26:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3238}} +{"ts": "2026-07-24T01:28:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1790}} +{"ts": "2026-07-24T01:29:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3057}} +{"ts": "2026-07-24T01:31:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1610}} +{"ts": "2026-07-24T01:32:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2876}} +{"ts": "2026-07-24T01:34:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1427}} +{"ts": "2026-07-24T01:35:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2695}} +{"ts": "2026-07-24T01:37:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1247}} +{"ts": "2026-07-24T01:38:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2514}} +{"ts": "2026-07-24T01:40:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1066}} +{"ts": "2026-07-24T01:41:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2333}} +{"ts": "2026-07-24T01:43:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 886}} +{"ts": "2026-07-24T01:44:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2153}} +{"ts": "2026-07-24T01:46:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 705}} +{"ts": "2026-07-24T01:47:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1972}} +{"ts": "2026-07-24T01:49:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 525}} +{"ts": "2026-07-24T01:50:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1792}} +{"ts": "2026-07-24T01:52:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 344}} +{"ts": "2026-07-24T01:53:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1611}} +{"ts": "2026-07-24T01:55:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 164}} +{"ts": "2026-07-24T01:56:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1430}} +{"ts": "2026-07-24T01:58:30+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-24T01:58:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3586}} +{"ts": "2026-07-24T01:59:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1249}} +{"ts": "2026-07-24T02:01:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3405}} +{"ts": "2026-07-24T02:02:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1069}} +{"ts": "2026-07-24T02:04:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3225}} +{"ts": "2026-07-24T02:05:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 889}} +{"ts": "2026-07-24T02:07:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3044}} +{"ts": "2026-07-24T02:08:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 708}} +{"ts": "2026-07-24T02:10:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2864}} +{"ts": "2026-07-24T02:11:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 527}} +{"ts": "2026-07-24T02:13:47+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2683}} +{"ts": "2026-07-24T02:14:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 347}} +{"ts": "2026-07-24T02:16:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2501}} +{"ts": "2026-07-24T02:17:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 167}} +{"ts": "2026-07-24T02:19:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2321}} +{"ts": "2026-07-24T02:20:02+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-24T02:20:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3588}} +{"ts": "2026-07-24T02:22:50+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2140}} +{"ts": "2026-07-24T02:23:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3408}} +{"ts": "2026-07-24T02:25:50+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1960}} +{"ts": "2026-07-24T02:26:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3228}} +{"ts": "2026-07-24T02:28:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1778}} +{"ts": "2026-07-24T02:29:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3048}} +{"ts": "2026-07-24T02:31:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1598}} +{"ts": "2026-07-24T02:32:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2868}} +{"ts": "2026-07-24T02:34:53+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1417}} +{"ts": "2026-07-24T02:35:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2687}} +{"ts": "2026-07-24T02:37:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1236}} +{"ts": "2026-07-24T02:38:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2506}} +{"ts": "2026-07-24T02:40:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1055}} +{"ts": "2026-07-24T02:41:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2326}} +{"ts": "2026-07-24T02:43:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 875}} +{"ts": "2026-07-24T02:44:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2146}} +{"ts": "2026-07-24T02:46:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 694}} +{"ts": "2026-07-24T02:47:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1964}} +{"ts": "2026-07-24T02:49:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 514}} +{"ts": "2026-07-24T02:50:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1784}} +{"ts": "2026-07-24T02:52:57+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 333}} +{"ts": "2026-07-24T02:53:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1603}} +{"ts": "2026-07-24T02:55:57+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 153}} +{"ts": "2026-07-24T02:56:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1422}} +{"ts": "2026-07-24T02:58:32+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-24T02:58:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3574}} +{"ts": "2026-07-24T02:59:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1242}} +{"ts": "2026-07-24T03:01:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3393}} +{"ts": "2026-07-24T03:02:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1062}} +{"ts": "2026-07-24T03:04:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3213}} +{"ts": "2026-07-24T03:05:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 881}} +{"ts": "2026-07-24T03:08:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3032}} +{"ts": "2026-07-24T03:08:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 701}} +{"ts": "2026-07-24T03:11:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2852}} +{"ts": "2026-07-24T03:11:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 520}} +{"ts": "2026-07-24T03:14:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2672}} +{"ts": "2026-07-24T03:14:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 340}} +{"ts": "2026-07-24T03:17:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2491}} +{"ts": "2026-07-24T03:17:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 159}} +{"ts": "2026-07-24T03:20:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2311}} +{"ts": "2026-07-24T03:20:03+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-24T03:20:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3579}} +{"ts": "2026-07-24T03:23:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2130}} +{"ts": "2026-07-24T03:23:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3399}} +{"ts": "2026-07-24T03:26:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1949}} +{"ts": "2026-07-24T03:26:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3219}} +{"ts": "2026-07-24T03:29:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1769}} +{"ts": "2026-07-24T03:29:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3037}} +{"ts": "2026-07-24T03:32:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1589}} +{"ts": "2026-07-24T03:32:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2857}} +{"ts": "2026-07-24T03:35:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1409}} +{"ts": "2026-07-24T03:35:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2677}} +{"ts": "2026-07-24T03:38:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1228}} +{"ts": "2026-07-24T03:38:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2496}} +{"ts": "2026-07-24T03:41:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1047}} +{"ts": "2026-07-24T03:41:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2316}} +{"ts": "2026-07-24T03:44:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 866}} +{"ts": "2026-07-24T03:44:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2136}} +{"ts": "2026-07-24T03:47:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 686}} +{"ts": "2026-07-24T03:47:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1956}} +{"ts": "2026-07-24T03:50:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 505}} +{"ts": "2026-07-24T03:50:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1775}} +{"ts": "2026-07-24T03:53:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 325}} +{"ts": "2026-07-24T03:53:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1595}} +{"ts": "2026-07-24T03:56:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 144}} +{"ts": "2026-07-24T03:56:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1415}} +{"ts": "2026-07-24T03:58:34+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-24T03:59:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3566}} +{"ts": "2026-07-24T03:59:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1234}} +{"ts": "2026-07-24T04:02:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3385}} +{"ts": "2026-07-24T04:02:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1054}} +{"ts": "2026-07-24T04:05:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3204}} +{"ts": "2026-07-24T04:05:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 873}} +{"ts": "2026-07-24T04:08:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3023}} +{"ts": "2026-07-24T04:08:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 693}} +{"ts": "2026-07-24T04:11:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2843}} +{"ts": "2026-07-24T04:11:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 512}} +{"ts": "2026-07-24T04:14:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2663}} +{"ts": "2026-07-24T04:14:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 332}} +{"ts": "2026-07-24T04:17:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2482}} +{"ts": "2026-07-24T04:17:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 151}} +{"ts": "2026-07-24T04:20:04+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-24T04:20:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2302}} +{"ts": "2026-07-24T04:20:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3572}} +{"ts": "2026-07-24T04:23:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2121}} +{"ts": "2026-07-24T04:23:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3392}} +{"ts": "2026-07-24T04:26:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1941}} +{"ts": "2026-07-24T04:26:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3211}} +{"ts": "2026-07-24T04:29:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1760}} +{"ts": "2026-07-24T04:29:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3031}} +{"ts": "2026-07-24T04:32:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1580}} +{"ts": "2026-07-24T04:32:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2851}} +{"ts": "2026-07-24T04:35:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1399}} +{"ts": "2026-07-24T04:35:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2669}} +{"ts": "2026-07-24T04:38:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1219}} +{"ts": "2026-07-24T04:38:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2489}} +{"ts": "2026-07-24T04:41:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1038}} +{"ts": "2026-07-24T04:41:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2308}} +{"ts": "2026-07-24T04:44:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 858}} +{"ts": "2026-07-24T04:44:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2127}} +{"ts": "2026-07-24T04:47:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 677}} +{"ts": "2026-07-24T04:47:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1947}} +{"ts": "2026-07-24T04:50:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 497}} +{"ts": "2026-07-24T04:50:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1767}} +{"ts": "2026-07-24T04:53:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 317}} +{"ts": "2026-07-24T04:53:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1587}} +{"ts": "2026-07-24T04:56:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 136}} +{"ts": "2026-07-24T04:56:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1406}} +{"ts": "2026-07-24T04:58:35+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-24T04:59:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3557}} +{"ts": "2026-07-24T04:59:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1225}} +{"ts": "2026-07-24T05:02:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3377}} +{"ts": "2026-07-24T05:02:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1045}} +{"ts": "2026-07-24T05:05:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3197}} +{"ts": "2026-07-24T05:05:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 865}} +{"ts": "2026-07-24T05:08:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3015}} +{"ts": "2026-07-24T05:08:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 685}} +{"ts": "2026-07-24T05:11:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2835}} +{"ts": "2026-07-24T05:11:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 503}} +{"ts": "2026-07-24T05:14:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2653}} +{"ts": "2026-07-24T05:14:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 322}} +{"ts": "2026-07-24T05:17:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2472}} +{"ts": "2026-07-24T05:17:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 141}} +{"ts": "2026-07-24T05:20:06+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-24T05:20:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2292}} +{"ts": "2026-07-24T05:20:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3564}} +{"ts": "2026-07-24T05:23:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2107}} +{"ts": "2026-07-24T05:23:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3382}} +{"ts": "2026-07-24T05:26:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1927}} +{"ts": "2026-07-24T05:26:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3202}} +{"ts": "2026-07-24T05:29:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1747}} +{"ts": "2026-07-24T05:29:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3020}} +{"ts": "2026-07-24T05:32:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1566}} +{"ts": "2026-07-24T05:32:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2840}} +{"ts": "2026-07-24T05:35:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1385}} +{"ts": "2026-07-24T05:35:47+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2659}} +{"ts": "2026-07-24T05:38:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1204}} +{"ts": "2026-07-24T05:38:47+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2479}} +{"ts": "2026-07-24T05:41:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1024}} +{"ts": "2026-07-24T05:41:48+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2298}} +{"ts": "2026-07-24T05:44:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 844}} +{"ts": "2026-07-24T05:44:48+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2117}} +{"ts": "2026-07-24T05:47:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 663}} +{"ts": "2026-07-24T05:47:48+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1937}} +{"ts": "2026-07-24T05:50:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 483}} +{"ts": "2026-07-24T05:50:50+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1756}} +{"ts": "2026-07-24T05:53:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 302}} +{"ts": "2026-07-24T05:53:50+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1576}} +{"ts": "2026-07-24T05:56:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 122}} +{"ts": "2026-07-24T05:56:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1394}} +{"ts": "2026-07-24T05:58:37+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-24T05:59:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3544}} +{"ts": "2026-07-24T05:59:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1214}} +{"ts": "2026-07-24T09:06:16+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "086890", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "87f9d6ad7f2df9c4", "extra": {"mock": true}} +{"ts": "2026-07-24T09:19:12+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "000520", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "9e2c8e2152735502", "extra": {"mock": true}} +{"ts": "2026-07-24T15:30:38+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "003470", "msg_cd": "40580000", "msg1": "모의투자 장종료 입니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "9d66aa59a592ad03", "extra": {"mock": true}} +{"ts": "2026-07-25T00:58:02+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T00:58:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3596}} +{"ts": "2026-07-25T01:01:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3415}} +{"ts": "2026-07-25T01:04:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3234}} +{"ts": "2026-07-25T01:07:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3052}} +{"ts": "2026-07-25T01:10:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2870}} +{"ts": "2026-07-25T01:13:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2688}} +{"ts": "2026-07-25T01:16:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2505}} +{"ts": "2026-07-25T01:19:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2321}} +{"ts": "2026-07-25T01:22:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2139}} +{"ts": "2026-07-25T01:25:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1958}} +{"ts": "2026-07-25T01:26:03+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T01:26:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3596}} +{"ts": "2026-07-25T01:27:01+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T01:27:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3596}} +{"ts": "2026-07-25T01:28:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1778}} +{"ts": "2026-07-25T01:29:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3410}} +{"ts": "2026-07-25T01:30:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3414}} +{"ts": "2026-07-25T01:31:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1596}} +{"ts": "2026-07-25T01:32:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3228}} +{"ts": "2026-07-25T01:33:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3231}} +{"ts": "2026-07-25T01:34:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1416}} +{"ts": "2026-07-25T01:35:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3044}} +{"ts": "2026-07-25T01:36:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3049}} +{"ts": "2026-07-25T01:37:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1236}} +{"ts": "2026-07-25T01:38:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2861}} +{"ts": "2026-07-25T01:39:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2866}} +{"ts": "2026-07-25T01:40:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1053}} +{"ts": "2026-07-25T01:41:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2681}} +{"ts": "2026-07-25T01:42:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2684}} +{"ts": "2026-07-25T01:43:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 870}} +{"ts": "2026-07-25T01:44:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2498}} +{"ts": "2026-07-25T01:45:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2500}} +{"ts": "2026-07-25T01:46:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 688}} +{"ts": "2026-07-25T01:47:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2315}} +{"ts": "2026-07-25T01:48:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2320}} +{"ts": "2026-07-25T01:49:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 505}} +{"ts": "2026-07-25T01:50:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2135}} +{"ts": "2026-07-25T01:51:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2138}} +{"ts": "2026-07-25T01:52:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 321}} +{"ts": "2026-07-25T01:53:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1954}} +{"ts": "2026-07-25T01:54:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1955}} +{"ts": "2026-07-25T01:55:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 139}} +{"ts": "2026-07-25T01:56:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1772}} +{"ts": "2026-07-25T01:57:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1773}} +{"ts": "2026-07-25T01:58:03+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T01:58:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3556}} +{"ts": "2026-07-25T01:59:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1588}} +{"ts": "2026-07-25T02:00:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1592}} +{"ts": "2026-07-25T02:01:47+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3375}} +{"ts": "2026-07-25T02:02:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1404}} +{"ts": "2026-07-25T02:03:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1409}} +{"ts": "2026-07-25T02:04:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3193}} +{"ts": "2026-07-25T02:05:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1223}} +{"ts": "2026-07-25T02:06:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1226}} +{"ts": "2026-07-25T02:07:53+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3009}} +{"ts": "2026-07-25T02:08:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1041}} +{"ts": "2026-07-25T02:09:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1044}} +{"ts": "2026-07-25T02:10:57+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2825}} +{"ts": "2026-07-25T02:11:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 859}} +{"ts": "2026-07-25T02:12:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 861}} +{"ts": "2026-07-25T02:14:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2641}} +{"ts": "2026-07-25T02:14:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 678}} +{"ts": "2026-07-25T02:15:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 678}} +{"ts": "2026-07-25T02:17:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2460}} +{"ts": "2026-07-25T02:17:48+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 495}} +{"ts": "2026-07-25T02:18:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 496}} +{"ts": "2026-07-25T02:20:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2277}} +{"ts": "2026-07-25T02:20:51+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 311}} +{"ts": "2026-07-25T02:21:47+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 314}} +{"ts": "2026-07-25T02:23:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2096}} +{"ts": "2026-07-25T02:23:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 128}} +{"ts": "2026-07-25T02:24:50+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 131}} +{"ts": "2026-07-25T02:26:05+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T02:26:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1913}} +{"ts": "2026-07-25T02:26:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3547}} +{"ts": "2026-07-25T02:27:04+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T02:27:53+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3550}} +{"ts": "2026-07-25T02:29:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1732}} +{"ts": "2026-07-25T02:29:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3366}} +{"ts": "2026-07-25T02:30:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3368}} +{"ts": "2026-07-25T02:32:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1551}} +{"ts": "2026-07-25T02:33:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3184}} +{"ts": "2026-07-25T02:33:57+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3186}} +{"ts": "2026-07-25T02:35:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1368}} +{"ts": "2026-07-25T02:36:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3003}} +{"ts": "2026-07-25T02:36:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3005}} +{"ts": "2026-07-25T02:38:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1186}} +{"ts": "2026-07-25T02:39:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2819}} +{"ts": "2026-07-25T02:40:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2822}} +{"ts": "2026-07-25T02:41:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1003}} +{"ts": "2026-07-25T02:42:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2638}} +{"ts": "2026-07-25T02:43:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2640}} +{"ts": "2026-07-25T02:44:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 820}} +{"ts": "2026-07-25T02:45:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2458}} +{"ts": "2026-07-25T02:46:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2458}} +{"ts": "2026-07-25T02:47:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 638}} +{"ts": "2026-07-25T02:48:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2273}} +{"ts": "2026-07-25T02:49:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2276}} +{"ts": "2026-07-25T02:50:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 457}} +{"ts": "2026-07-25T02:51:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2092}} +{"ts": "2026-07-25T02:52:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2095}} +{"ts": "2026-07-25T02:53:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 275}} +{"ts": "2026-07-25T02:54:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1909}} +{"ts": "2026-07-25T02:55:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1910}} +{"ts": "2026-07-25T02:56:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 90}} +{"ts": "2026-07-25T02:57:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1728}} +{"ts": "2026-07-25T02:58:06+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T02:58:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1728}} +{"ts": "2026-07-25T02:59:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3514}} +{"ts": "2026-07-25T03:00:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1541}} +{"ts": "2026-07-25T03:01:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1545}} +{"ts": "2026-07-25T03:02:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3332}} +{"ts": "2026-07-25T03:03:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1359}} +{"ts": "2026-07-25T03:04:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1359}} +{"ts": "2026-07-25T03:05:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3152}} +{"ts": "2026-07-25T03:06:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1175}} +{"ts": "2026-07-25T03:07:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1175}} +{"ts": "2026-07-25T03:08:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2970}} +{"ts": "2026-07-25T03:09:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 991}} +{"ts": "2026-07-25T03:10:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 994}} +{"ts": "2026-07-25T03:11:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2788}} +{"ts": "2026-07-25T03:12:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 804}} +{"ts": "2026-07-25T03:13:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 810}} +{"ts": "2026-07-25T03:14:39+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2607}} +{"ts": "2026-07-25T03:15:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 623}} +{"ts": "2026-07-25T03:16:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 630}} +{"ts": "2026-07-25T03:17:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2425}} +{"ts": "2026-07-25T03:18:47+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 437}} +{"ts": "2026-07-25T03:19:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 447}} +{"ts": "2026-07-25T03:20:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2245}} +{"ts": "2026-07-25T03:21:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 250}} +{"ts": "2026-07-25T03:22:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 266}} +{"ts": "2026-07-25T03:23:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2064}} +{"ts": "2026-07-25T03:24:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 66}} +{"ts": "2026-07-25T03:25:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 85}} +{"ts": "2026-07-25T03:26:09+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T03:26:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1877}} +{"ts": "2026-07-25T03:27:12+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T03:27:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3490}} +{"ts": "2026-07-25T03:28:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3509}} +{"ts": "2026-07-25T03:29:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1692}} +{"ts": "2026-07-25T03:30:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3309}} +{"ts": "2026-07-25T03:31:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3322}} +{"ts": "2026-07-25T03:32:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1508}} +{"ts": "2026-07-25T03:34:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3125}} +{"ts": "2026-07-25T03:34:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3139}} +{"ts": "2026-07-25T03:36:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1321}} +{"ts": "2026-07-25T03:37:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2939}} +{"ts": "2026-07-25T03:37:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2955}} +{"ts": "2026-07-25T03:39:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1138}} +{"ts": "2026-07-25T03:40:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2753}} +{"ts": "2026-07-25T03:40:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2775}} +{"ts": "2026-07-25T03:42:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 954}} +{"ts": "2026-07-25T03:43:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2572}} +{"ts": "2026-07-25T03:43:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2592}} +{"ts": "2026-07-25T03:45:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 773}} +{"ts": "2026-07-25T03:46:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2388}} +{"ts": "2026-07-25T03:47:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2411}} +{"ts": "2026-07-25T03:48:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 589}} +{"ts": "2026-07-25T03:49:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2200}} +{"ts": "2026-07-25T03:50:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2226}} +{"ts": "2026-07-25T03:51:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 407}} +{"ts": "2026-07-25T03:52:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2020}} +{"ts": "2026-07-25T03:53:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2044}} +{"ts": "2026-07-25T03:54:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 225}} +{"ts": "2026-07-25T03:55:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1835}} +{"ts": "2026-07-25T03:56:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1864}} +{"ts": "2026-07-25T03:57:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 42}} +{"ts": "2026-07-25T03:58:09+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T03:58:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1648}} +{"ts": "2026-07-25T03:59:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1682}} +{"ts": "2026-07-25T04:00:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3461}} +{"ts": "2026-07-25T04:01:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1463}} +{"ts": "2026-07-25T04:02:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1498}} +{"ts": "2026-07-25T04:03:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3278}} +{"ts": "2026-07-25T04:04:48+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1280}} +{"ts": "2026-07-25T04:05:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1317}} +{"ts": "2026-07-25T04:06:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3097}} +{"ts": "2026-07-25T04:07:50+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1098}} +{"ts": "2026-07-25T04:08:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1134}} +{"ts": "2026-07-25T04:09:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2916}} +{"ts": "2026-07-25T04:10:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 916}} +{"ts": "2026-07-25T04:11:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 954}} +{"ts": "2026-07-25T04:12:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2733}} +{"ts": "2026-07-25T04:13:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 730}} +{"ts": "2026-07-25T04:14:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 772}} +{"ts": "2026-07-25T04:15:39+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2550}} +{"ts": "2026-07-25T04:16:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 550}} +{"ts": "2026-07-25T04:17:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 586}} +{"ts": "2026-07-25T04:18:39+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2370}} +{"ts": "2026-07-25T04:20:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 366}} +{"ts": "2026-07-25T04:20:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 401}} +{"ts": "2026-07-25T04:21:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2187}} +{"ts": "2026-07-25T04:23:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 183}} +{"ts": "2026-07-25T04:23:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 216}} +{"ts": "2026-07-25T04:24:50+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1999}} +{"ts": "2026-07-25T04:26:13+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T04:26:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3596}} +{"ts": "2026-07-25T04:26:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 35}} +{"ts": "2026-07-25T04:27:15+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T04:27:57+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1811}} +{"ts": "2026-07-25T04:29:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3415}} +{"ts": "2026-07-25T04:29:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3452}} +{"ts": "2026-07-25T04:31:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1625}} +{"ts": "2026-07-25T04:32:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3229}} +{"ts": "2026-07-25T04:32:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3272}} +{"ts": "2026-07-25T04:34:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1440}} +{"ts": "2026-07-25T04:35:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3042}} +{"ts": "2026-07-25T04:35:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3089}} +{"ts": "2026-07-25T04:37:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1255}} +{"ts": "2026-07-25T04:38:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2860}} +{"ts": "2026-07-25T04:38:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2909}} +{"ts": "2026-07-25T04:40:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1074}} +{"ts": "2026-07-25T04:41:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2676}} +{"ts": "2026-07-25T04:41:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2726}} +{"ts": "2026-07-25T04:43:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 893}} +{"ts": "2026-07-25T04:44:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2492}} +{"ts": "2026-07-25T04:44:53+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2542}} +{"ts": "2026-07-25T04:46:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 713}} +{"ts": "2026-07-25T04:47:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2309}} +{"ts": "2026-07-25T04:47:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2358}} +{"ts": "2026-07-25T04:49:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 530}} +{"ts": "2026-07-25T04:50:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2127}} +{"ts": "2026-07-25T04:51:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2174}} +{"ts": "2026-07-25T04:52:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 344}} +{"ts": "2026-07-25T04:53:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1947}} +{"ts": "2026-07-25T04:54:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1987}} +{"ts": "2026-07-25T04:55:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 160}} +{"ts": "2026-07-25T04:56:48+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1764}} +{"ts": "2026-07-25T04:57:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1804}} +{"ts": "2026-07-25T04:58:12+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T04:58:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3581}} +{"ts": "2026-07-25T04:59:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1581}} +{"ts": "2026-07-25T05:00:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1624}} +{"ts": "2026-07-25T05:01:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3400}} +{"ts": "2026-07-25T05:02:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1400}} +{"ts": "2026-07-25T05:03:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1444}} +{"ts": "2026-07-25T05:04:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3218}} +{"ts": "2026-07-25T05:05:53+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1219}} +{"ts": "2026-07-25T05:06:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1264}} +{"ts": "2026-07-25T05:07:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3038}} +{"ts": "2026-07-25T05:08:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1039}} +{"ts": "2026-07-25T05:09:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1082}} +{"ts": "2026-07-25T05:10:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2858}} +{"ts": "2026-07-25T05:11:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 859}} +{"ts": "2026-07-25T05:12:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 902}} +{"ts": "2026-07-25T05:13:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2677}} +{"ts": "2026-07-25T05:14:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 678}} +{"ts": "2026-07-25T05:15:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 722}} +{"ts": "2026-07-25T05:16:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2497}} +{"ts": "2026-07-25T05:17:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 498}} +{"ts": "2026-07-25T05:18:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 540}} +{"ts": "2026-07-25T05:19:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2315}} +{"ts": "2026-07-25T05:20:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 318}} +{"ts": "2026-07-25T05:21:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 360}} +{"ts": "2026-07-25T05:22:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2135}} +{"ts": "2026-07-25T05:23:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 137}} +{"ts": "2026-07-25T05:24:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 179}} +{"ts": "2026-07-25T05:25:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1955}} +{"ts": "2026-07-25T05:26:14+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T05:26:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3558}} +{"ts": "2026-07-25T05:27:17+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T05:27:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3599}} +{"ts": "2026-07-25T05:28:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1773}} +{"ts": "2026-07-25T05:29:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3377}} +{"ts": "2026-07-25T05:30:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3418}} +{"ts": "2026-07-25T05:31:39+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1592}} +{"ts": "2026-07-25T05:32:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3197}} +{"ts": "2026-07-25T05:33:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3238}} +{"ts": "2026-07-25T05:34:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1412}} +{"ts": "2026-07-25T05:35:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3016}} +{"ts": "2026-07-25T05:36:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3058}} +{"ts": "2026-07-25T05:37:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1231}} +{"ts": "2026-07-25T05:38:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2835}} +{"ts": "2026-07-25T05:39:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2877}} +{"ts": "2026-07-25T05:40:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1051}} +{"ts": "2026-07-25T05:41:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2655}} +{"ts": "2026-07-25T05:42:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2696}} +{"ts": "2026-07-25T05:43:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 870}} +{"ts": "2026-07-25T05:44:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2474}} +{"ts": "2026-07-25T05:45:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2516}} +{"ts": "2026-07-25T05:46:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 689}} +{"ts": "2026-07-25T05:47:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2294}} +{"ts": "2026-07-25T05:48:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2336}} +{"ts": "2026-07-25T05:49:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 509}} +{"ts": "2026-07-25T05:51:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2113}} +{"ts": "2026-07-25T05:51:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2154}} +{"ts": "2026-07-25T05:52:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 328}} +{"ts": "2026-07-25T05:54:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1932}} +{"ts": "2026-07-25T05:54:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1973}} +{"ts": "2026-07-25T05:55:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 147}} +{"ts": "2026-07-25T05:57:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1752}} +{"ts": "2026-07-25T05:57:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1792}} +{"ts": "2026-07-25T05:58:14+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-25T05:58:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3568}} +{"ts": "2026-07-25T06:00:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1571}} +{"ts": "2026-07-27T13:11:53+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "460940", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "4fe9f2bcf101c55c", "extra": {"mock": true}} +{"ts": "2026-07-28T00:20:01+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T00:20:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3598}} +{"ts": "2026-07-28T00:23:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3418}} +{"ts": "2026-07-28T00:26:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3238}} +{"ts": "2026-07-28T00:29:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3057}} +{"ts": "2026-07-28T00:32:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2877}} +{"ts": "2026-07-28T00:35:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2696}} +{"ts": "2026-07-28T00:38:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2515}} +{"ts": "2026-07-28T00:41:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2335}} +{"ts": "2026-07-28T00:44:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2155}} +{"ts": "2026-07-28T00:47:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1974}} +{"ts": "2026-07-28T00:50:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1794}} +{"ts": "2026-07-28T00:53:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1614}} +{"ts": "2026-07-28T00:56:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1434}} +{"ts": "2026-07-28T00:59:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1253}} +{"ts": "2026-07-28T01:02:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1072}} +{"ts": "2026-07-28T01:05:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 892}} +{"ts": "2026-07-28T01:08:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 711}} +{"ts": "2026-07-28T01:11:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 531}} +{"ts": "2026-07-28T01:14:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 350}} +{"ts": "2026-07-28T01:17:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 170}} +{"ts": "2026-07-28T01:20:03+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T01:20:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3591}} +{"ts": "2026-07-28T01:23:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3410}} +{"ts": "2026-07-28T01:26:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3229}} +{"ts": "2026-07-28T01:29:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3049}} +{"ts": "2026-07-28T01:32:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2868}} +{"ts": "2026-07-28T01:35:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2688}} +{"ts": "2026-07-28T01:38:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2507}} +{"ts": "2026-07-28T01:41:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2327}} +{"ts": "2026-07-28T01:44:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2146}} +{"ts": "2026-07-28T01:47:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1966}} +{"ts": "2026-07-28T01:50:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1786}} +{"ts": "2026-07-28T01:53:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1605}} +{"ts": "2026-07-28T01:56:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1425}} +{"ts": "2026-07-28T01:59:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1244}} +{"ts": "2026-07-28T02:02:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1063}} +{"ts": "2026-07-28T02:05:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 882}} +{"ts": "2026-07-28T02:08:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 701}} +{"ts": "2026-07-28T02:09:01+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T02:09:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3598}} +{"ts": "2026-07-28T02:11:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 521}} +{"ts": "2026-07-28T02:12:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3418}} +{"ts": "2026-07-28T02:14:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 341}} +{"ts": "2026-07-28T02:15:00+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T02:15:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3598}} +{"ts": "2026-07-28T02:15:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3238}} +{"ts": "2026-07-28T02:17:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 160}} +{"ts": "2026-07-28T02:18:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3418}} +{"ts": "2026-07-28T02:18:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3057}} +{"ts": "2026-07-28T02:20:04+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T02:20:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3581}} +{"ts": "2026-07-28T02:21:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3238}} +{"ts": "2026-07-28T02:21:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2877}} +{"ts": "2026-07-28T02:23:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3400}} +{"ts": "2026-07-28T02:24:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3058}} +{"ts": "2026-07-28T02:24:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2697}} +{"ts": "2026-07-28T02:26:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3220}} +{"ts": "2026-07-28T02:27:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2877}} +{"ts": "2026-07-28T02:27:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2516}} +{"ts": "2026-07-28T02:29:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3040}} +{"ts": "2026-07-28T02:30:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2696}} +{"ts": "2026-07-28T02:30:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2336}} +{"ts": "2026-07-28T02:30:49+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T02:30:49+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T02:30:50+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T02:30:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3596}} +{"ts": "2026-07-28T02:30:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3596}} +{"ts": "2026-07-28T02:30:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3598}} +{"ts": "2026-07-28T02:33:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3416}} +{"ts": "2026-07-28T02:33:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3416}} +{"ts": "2026-07-28T02:33:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3417}} +{"ts": "2026-07-28T02:36:53+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3235}} +{"ts": "2026-07-28T02:36:53+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3235}} +{"ts": "2026-07-28T02:36:53+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3237}} +{"ts": "2026-07-28T02:39:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3054}} +{"ts": "2026-07-28T02:39:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3055}} +{"ts": "2026-07-28T02:39:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3056}} +{"ts": "2026-07-28T02:42:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2874}} +{"ts": "2026-07-28T02:42:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2875}} +{"ts": "2026-07-28T02:42:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2876}} +{"ts": "2026-07-28T02:45:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2694}} +{"ts": "2026-07-28T02:45:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2694}} +{"ts": "2026-07-28T02:45:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2696}} +{"ts": "2026-07-28T02:48:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2513}} +{"ts": "2026-07-28T02:48:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2513}} +{"ts": "2026-07-28T02:48:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2515}} +{"ts": "2026-07-28T02:51:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2332}} +{"ts": "2026-07-28T02:51:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2333}} +{"ts": "2026-07-28T02:51:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2334}} +{"ts": "2026-07-28T02:54:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2152}} +{"ts": "2026-07-28T02:54:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2152}} +{"ts": "2026-07-28T02:54:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2154}} +{"ts": "2026-07-28T02:57:57+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1971}} +{"ts": "2026-07-28T02:57:57+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1972}} +{"ts": "2026-07-28T02:57:57+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1973}} +{"ts": "2026-07-28T03:00:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1789}} +{"ts": "2026-07-28T03:00:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1789}} +{"ts": "2026-07-28T03:00:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1791}} +{"ts": "2026-07-28T03:03:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1609}} +{"ts": "2026-07-28T03:03:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1609}} +{"ts": "2026-07-28T03:03:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1611}} +{"ts": "2026-07-28T03:06:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1429}} +{"ts": "2026-07-28T03:06:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1429}} +{"ts": "2026-07-28T03:06:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1431}} +{"ts": "2026-07-28T03:09:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1249}} +{"ts": "2026-07-28T03:09:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1249}} +{"ts": "2026-07-28T03:09:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1250}} +{"ts": "2026-07-28T03:13:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1068}} +{"ts": "2026-07-28T03:13:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1069}} +{"ts": "2026-07-28T03:13:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1070}} +{"ts": "2026-07-28T03:16:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 888}} +{"ts": "2026-07-28T03:16:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 888}} +{"ts": "2026-07-28T03:16:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 889}} +{"ts": "2026-07-28T03:19:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 708}} +{"ts": "2026-07-28T03:19:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 708}} +{"ts": "2026-07-28T03:19:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 709}} +{"ts": "2026-07-28T03:22:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 527}} +{"ts": "2026-07-28T03:22:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 527}} +{"ts": "2026-07-28T03:22:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 528}} +{"ts": "2026-07-28T03:25:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 346}} +{"ts": "2026-07-28T03:25:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 346}} +{"ts": "2026-07-28T03:25:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 347}} +{"ts": "2026-07-28T03:28:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 165}} +{"ts": "2026-07-28T03:28:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 165}} +{"ts": "2026-07-28T03:28:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 167}} +{"ts": "2026-07-28T03:30:50+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T03:30:51+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T03:30:52+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T03:31:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3586}} +{"ts": "2026-07-28T03:31:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3587}} +{"ts": "2026-07-28T03:31:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3588}} +{"ts": "2026-07-28T03:34:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3405}} +{"ts": "2026-07-28T03:34:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3406}} +{"ts": "2026-07-28T03:34:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3407}} +{"ts": "2026-07-28T03:37:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3224}} +{"ts": "2026-07-28T03:37:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3225}} +{"ts": "2026-07-28T03:37:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3226}} +{"ts": "2026-07-28T03:40:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3043}} +{"ts": "2026-07-28T03:40:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3045}} +{"ts": "2026-07-28T03:40:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3046}} +{"ts": "2026-07-28T03:43:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2863}} +{"ts": "2026-07-28T03:43:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2864}} +{"ts": "2026-07-28T03:43:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2865}} +{"ts": "2026-07-28T03:46:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2682}} +{"ts": "2026-07-28T03:46:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2683}} +{"ts": "2026-07-28T03:46:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2685}} +{"ts": "2026-07-28T03:49:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2502}} +{"ts": "2026-07-28T03:49:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2503}} +{"ts": "2026-07-28T03:49:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2504}} +{"ts": "2026-07-28T03:52:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2321}} +{"ts": "2026-07-28T03:52:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2322}} +{"ts": "2026-07-28T03:52:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2324}} +{"ts": "2026-07-28T03:55:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2140}} +{"ts": "2026-07-28T03:55:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2142}} +{"ts": "2026-07-28T03:55:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2143}} +{"ts": "2026-07-28T03:58:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1960}} +{"ts": "2026-07-28T03:58:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1961}} +{"ts": "2026-07-28T03:58:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1962}} +{"ts": "2026-07-28T04:01:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1779}} +{"ts": "2026-07-28T04:01:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1780}} +{"ts": "2026-07-28T04:01:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1781}} +{"ts": "2026-07-28T04:04:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1598}} +{"ts": "2026-07-28T04:04:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1600}} +{"ts": "2026-07-28T04:04:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1601}} +{"ts": "2026-07-28T04:07:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1417}} +{"ts": "2026-07-28T04:07:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1418}} +{"ts": "2026-07-28T04:07:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1419}} +{"ts": "2026-07-28T04:10:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1236}} +{"ts": "2026-07-28T04:10:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1238}} +{"ts": "2026-07-28T04:10:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1239}} +{"ts": "2026-07-28T04:13:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1056}} +{"ts": "2026-07-28T04:13:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1058}} +{"ts": "2026-07-28T04:13:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1059}} +{"ts": "2026-07-28T04:16:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 876}} +{"ts": "2026-07-28T04:16:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 877}} +{"ts": "2026-07-28T04:16:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 879}} +{"ts": "2026-07-28T04:19:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 695}} +{"ts": "2026-07-28T04:19:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 696}} +{"ts": "2026-07-28T04:19:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 698}} +{"ts": "2026-07-28T04:22:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 514}} +{"ts": "2026-07-28T04:22:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 515}} +{"ts": "2026-07-28T04:22:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 517}} +{"ts": "2026-07-28T04:25:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 333}} +{"ts": "2026-07-28T04:25:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 334}} +{"ts": "2026-07-28T04:25:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 336}} +{"ts": "2026-07-28T04:28:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 153}} +{"ts": "2026-07-28T04:28:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 154}} +{"ts": "2026-07-28T04:28:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 156}} +{"ts": "2026-07-28T04:30:52+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T04:30:53+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T04:30:54+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T04:31:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3575}} +{"ts": "2026-07-28T04:31:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3576}} +{"ts": "2026-07-28T04:31:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3576}} +{"ts": "2026-07-28T04:34:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3395}} +{"ts": "2026-07-28T04:34:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3396}} +{"ts": "2026-07-28T04:34:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3396}} +{"ts": "2026-07-28T04:37:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3214}} +{"ts": "2026-07-28T04:37:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3215}} +{"ts": "2026-07-28T04:37:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3215}} +{"ts": "2026-07-28T04:40:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3034}} +{"ts": "2026-07-28T04:40:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3035}} +{"ts": "2026-07-28T04:40:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3035}} +{"ts": "2026-07-28T04:43:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2853}} +{"ts": "2026-07-28T04:43:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2854}} +{"ts": "2026-07-28T04:43:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2854}} +{"ts": "2026-07-28T04:46:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2672}} +{"ts": "2026-07-28T04:46:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2674}} +{"ts": "2026-07-28T04:46:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2674}} +{"ts": "2026-07-28T04:49:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2491}} +{"ts": "2026-07-28T04:49:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2493}} +{"ts": "2026-07-28T04:49:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2493}} +{"ts": "2026-07-28T04:52:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2311}} +{"ts": "2026-07-28T04:52:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2313}} +{"ts": "2026-07-28T04:52:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2313}} +{"ts": "2026-07-28T04:55:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2131}} +{"ts": "2026-07-28T04:55:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2132}} +{"ts": "2026-07-28T04:55:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2132}} +{"ts": "2026-07-28T04:58:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1950}} +{"ts": "2026-07-28T04:58:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1951}} +{"ts": "2026-07-28T04:58:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1951}} +{"ts": "2026-07-28T05:01:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1768}} +{"ts": "2026-07-28T05:01:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1770}} +{"ts": "2026-07-28T05:01:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1770}} +{"ts": "2026-07-28T05:04:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1587}} +{"ts": "2026-07-28T05:04:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1589}} +{"ts": "2026-07-28T05:04:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1589}} +{"ts": "2026-07-28T05:07:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1406}} +{"ts": "2026-07-28T05:07:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1407}} +{"ts": "2026-07-28T05:07:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1408}} +{"ts": "2026-07-28T05:10:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1226}} +{"ts": "2026-07-28T05:10:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1227}} +{"ts": "2026-07-28T05:10:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1227}} +{"ts": "2026-07-28T05:13:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1045}} +{"ts": "2026-07-28T05:13:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1047}} +{"ts": "2026-07-28T05:13:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1047}} +{"ts": "2026-07-28T05:16:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 865}} +{"ts": "2026-07-28T05:16:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 866}} +{"ts": "2026-07-28T05:16:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 867}} +{"ts": "2026-07-28T05:19:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 684}} +{"ts": "2026-07-28T05:19:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 686}} +{"ts": "2026-07-28T05:19:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 686}} +{"ts": "2026-07-28T05:22:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 504}} +{"ts": "2026-07-28T05:22:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 506}} +{"ts": "2026-07-28T05:22:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 506}} +{"ts": "2026-07-28T05:25:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 323}} +{"ts": "2026-07-28T05:25:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 324}} +{"ts": "2026-07-28T05:25:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 324}} +{"ts": "2026-07-28T05:28:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 141}} +{"ts": "2026-07-28T05:28:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 143}} +{"ts": "2026-07-28T05:28:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 143}} +{"ts": "2026-07-28T05:30:53+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T05:30:54+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T05:30:55+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-28T05:31:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3562}} +{"ts": "2026-07-28T05:31:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3562}} +{"ts": "2026-07-28T05:31:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3564}} +{"ts": "2026-07-28T05:34:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3380}} +{"ts": "2026-07-28T05:34:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3381}} +{"ts": "2026-07-28T05:34:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3382}} +{"ts": "2026-07-28T05:37:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3200}} +{"ts": "2026-07-28T05:37:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3200}} +{"ts": "2026-07-28T05:37:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3202}} +{"ts": "2026-07-28T05:40:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3020}} +{"ts": "2026-07-28T05:40:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3020}} +{"ts": "2026-07-28T05:40:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3021}} +{"ts": "2026-07-28T05:43:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2839}} +{"ts": "2026-07-28T05:43:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2839}} +{"ts": "2026-07-28T05:43:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2840}} +{"ts": "2026-07-28T05:46:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2658}} +{"ts": "2026-07-28T05:46:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2658}} +{"ts": "2026-07-28T05:46:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2660}} +{"ts": "2026-07-28T05:49:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2478}} +{"ts": "2026-07-28T05:49:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2478}} +{"ts": "2026-07-28T05:49:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2480}} +{"ts": "2026-07-28T05:52:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2297}} +{"ts": "2026-07-28T05:52:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2297}} +{"ts": "2026-07-28T05:52:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2298}} +{"ts": "2026-07-28T05:55:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2115}} +{"ts": "2026-07-28T05:55:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2116}} +{"ts": "2026-07-28T05:55:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2117}} +{"ts": "2026-07-28T05:58:39+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1934}} +{"ts": "2026-07-28T05:58:39+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1934}} +{"ts": "2026-07-28T05:58:39+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1936}} +{"ts": "2026-07-29T00:14:01+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T00:14:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3598}} +{"ts": "2026-07-29T00:17:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3418}} +{"ts": "2026-07-29T00:20:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3238}} +{"ts": "2026-07-29T00:23:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3058}} +{"ts": "2026-07-29T00:26:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2877}} +{"ts": "2026-07-29T00:29:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2697}} +{"ts": "2026-07-29T00:32:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2517}} +{"ts": "2026-07-29T00:35:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2336}} +{"ts": "2026-07-29T00:38:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2156}} +{"ts": "2026-07-29T00:41:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1976}} +{"ts": "2026-07-29T00:44:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1795}} +{"ts": "2026-07-29T00:47:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1614}} +{"ts": "2026-07-29T00:48:40+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T00:48:41+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T00:48:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3597}} +{"ts": "2026-07-29T00:48:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3598}} +{"ts": "2026-07-29T00:51:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3416}} +{"ts": "2026-07-29T00:51:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3417}} +{"ts": "2026-07-29T00:54:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3236}} +{"ts": "2026-07-29T00:54:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3237}} +{"ts": "2026-07-29T00:57:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3056}} +{"ts": "2026-07-29T00:57:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3057}} +{"ts": "2026-07-29T01:00:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2875}} +{"ts": "2026-07-29T01:00:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2877}} +{"ts": "2026-07-29T01:03:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2695}} +{"ts": "2026-07-29T01:03:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2697}} +{"ts": "2026-07-29T01:06:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2515}} +{"ts": "2026-07-29T01:06:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2516}} +{"ts": "2026-07-29T01:09:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2334}} +{"ts": "2026-07-29T01:09:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2335}} +{"ts": "2026-07-29T01:12:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2153}} +{"ts": "2026-07-29T01:12:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2155}} +{"ts": "2026-07-29T01:15:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1973}} +{"ts": "2026-07-29T01:15:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1974}} +{"ts": "2026-07-29T01:18:16+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T01:18:16+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T01:18:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3598}} +{"ts": "2026-07-29T01:18:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3598}} +{"ts": "2026-07-29T01:21:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3418}} +{"ts": "2026-07-29T01:21:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3418}} +{"ts": "2026-07-29T01:24:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3237}} +{"ts": "2026-07-29T01:24:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3237}} +{"ts": "2026-07-29T01:27:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3056}} +{"ts": "2026-07-29T01:27:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3057}} +{"ts": "2026-07-29T01:30:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2876}} +{"ts": "2026-07-29T01:30:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2876}} +{"ts": "2026-07-29T01:33:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2696}} +{"ts": "2026-07-29T01:33:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2696}} +{"ts": "2026-07-29T01:36:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2515}} +{"ts": "2026-07-29T01:36:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2516}} +{"ts": "2026-07-29T01:39:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2335}} +{"ts": "2026-07-29T01:39:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2336}} +{"ts": "2026-07-29T01:42:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2155}} +{"ts": "2026-07-29T01:42:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2155}} +{"ts": "2026-07-29T01:45:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1974}} +{"ts": "2026-07-29T01:45:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1974}} +{"ts": "2026-07-29T01:48:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1793}} +{"ts": "2026-07-29T01:48:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1794}} +{"ts": "2026-07-29T01:51:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1613}} +{"ts": "2026-07-29T01:51:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1613}} +{"ts": "2026-07-29T01:54:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1433}} +{"ts": "2026-07-29T01:54:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1433}} +{"ts": "2026-07-29T01:57:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1252}} +{"ts": "2026-07-29T01:57:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1252}} +{"ts": "2026-07-29T02:00:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1072}} +{"ts": "2026-07-29T02:00:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1072}} +{"ts": "2026-07-29T02:03:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 891}} +{"ts": "2026-07-29T02:03:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 891}} +{"ts": "2026-07-29T02:04:00+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T02:04:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3598}} +{"ts": "2026-07-29T02:06:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 711}} +{"ts": "2026-07-29T02:06:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 711}} +{"ts": "2026-07-29T02:07:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3418}} +{"ts": "2026-07-29T02:09:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 531}} +{"ts": "2026-07-29T02:09:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 531}} +{"ts": "2026-07-29T02:10:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3238}} +{"ts": "2026-07-29T02:12:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 351}} +{"ts": "2026-07-29T02:12:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 351}} +{"ts": "2026-07-29T02:13:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3057}} +{"ts": "2026-07-29T02:15:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 170}} +{"ts": "2026-07-29T02:15:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 170}} +{"ts": "2026-07-29T02:16:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2877}} +{"ts": "2026-07-29T02:18:16+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T02:18:17+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T02:18:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3590}} +{"ts": "2026-07-29T02:18:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3590}} +{"ts": "2026-07-29T02:19:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2696}} +{"ts": "2026-07-29T02:21:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3409}} +{"ts": "2026-07-29T02:21:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3409}} +{"ts": "2026-07-29T02:22:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2516}} +{"ts": "2026-07-29T02:24:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3229}} +{"ts": "2026-07-29T02:24:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3229}} +{"ts": "2026-07-29T02:25:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2336}} +{"ts": "2026-07-29T02:27:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3049}} +{"ts": "2026-07-29T02:27:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3049}} +{"ts": "2026-07-29T02:28:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2155}} +{"ts": "2026-07-29T02:30:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2869}} +{"ts": "2026-07-29T02:30:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2869}} +{"ts": "2026-07-29T02:31:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1974}} +{"ts": "2026-07-29T02:33:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2688}} +{"ts": "2026-07-29T02:33:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2688}} +{"ts": "2026-07-29T02:34:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1793}} +{"ts": "2026-07-29T02:36:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2507}} +{"ts": "2026-07-29T02:36:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2507}} +{"ts": "2026-07-29T02:37:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1612}} +{"ts": "2026-07-29T02:39:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2327}} +{"ts": "2026-07-29T02:39:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2327}} +{"ts": "2026-07-29T02:40:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1431}} +{"ts": "2026-07-29T02:42:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2146}} +{"ts": "2026-07-29T02:42:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2146}} +{"ts": "2026-07-29T02:43:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1250}} +{"ts": "2026-07-29T02:45:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1965}} +{"ts": "2026-07-29T02:45:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1966}} +{"ts": "2026-07-29T02:46:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1069}} +{"ts": "2026-07-29T02:48:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1785}} +{"ts": "2026-07-29T02:48:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1785}} +{"ts": "2026-07-29T02:49:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 888}} +{"ts": "2026-07-29T02:51:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1604}} +{"ts": "2026-07-29T02:51:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1604}} +{"ts": "2026-07-29T02:52:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 708}} +{"ts": "2026-07-29T02:54:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1424}} +{"ts": "2026-07-29T02:54:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1424}} +{"ts": "2026-07-29T02:55:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 527}} +{"ts": "2026-07-29T02:57:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1243}} +{"ts": "2026-07-29T02:57:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1244}} +{"ts": "2026-07-29T02:58:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 346}} +{"ts": "2026-07-29T03:00:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1063}} +{"ts": "2026-07-29T03:00:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1063}} +{"ts": "2026-07-29T03:01:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 165}} +{"ts": "2026-07-29T03:03:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 883}} +{"ts": "2026-07-29T03:03:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 883}} +{"ts": "2026-07-29T03:04:02+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T03:04:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3585}} +{"ts": "2026-07-29T03:06:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 702}} +{"ts": "2026-07-29T03:06:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 702}} +{"ts": "2026-07-29T03:07:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3405}} +{"ts": "2026-07-29T03:09:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 521}} +{"ts": "2026-07-29T03:09:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 522}} +{"ts": "2026-07-29T03:10:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3225}} +{"ts": "2026-07-29T03:12:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 341}} +{"ts": "2026-07-29T03:12:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 341}} +{"ts": "2026-07-29T03:13:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3044}} +{"ts": "2026-07-29T03:15:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 160}} +{"ts": "2026-07-29T03:15:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 160}} +{"ts": "2026-07-29T03:16:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2863}} +{"ts": "2026-07-29T03:18:18+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T03:18:18+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T03:18:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3581}} +{"ts": "2026-07-29T03:18:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3581}} +{"ts": "2026-07-29T03:19:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2683}} +{"ts": "2026-07-29T03:21:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3400}} +{"ts": "2026-07-29T03:21:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3400}} +{"ts": "2026-07-29T03:22:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2502}} +{"ts": "2026-07-29T03:24:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3220}} +{"ts": "2026-07-29T03:24:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3220}} +{"ts": "2026-07-29T03:25:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2322}} +{"ts": "2026-07-29T03:27:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3040}} +{"ts": "2026-07-29T03:27:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3040}} +{"ts": "2026-07-29T03:28:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2141}} +{"ts": "2026-07-29T03:30:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2859}} +{"ts": "2026-07-29T03:30:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2860}} +{"ts": "2026-07-29T03:31:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1960}} +{"ts": "2026-07-29T03:33:39+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2679}} +{"ts": "2026-07-29T03:33:39+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2679}} +{"ts": "2026-07-29T03:34:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1779}} +{"ts": "2026-07-29T03:36:39+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2499}} +{"ts": "2026-07-29T03:36:39+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2499}} +{"ts": "2026-07-29T03:37:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1599}} +{"ts": "2026-07-29T03:39:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2318}} +{"ts": "2026-07-29T03:39:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2318}} +{"ts": "2026-07-29T03:40:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1418}} +{"ts": "2026-07-29T03:42:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2138}} +{"ts": "2026-07-29T03:42:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2138}} +{"ts": "2026-07-29T03:43:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1238}} +{"ts": "2026-07-29T03:45:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1957}} +{"ts": "2026-07-29T03:45:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1958}} +{"ts": "2026-07-29T03:46:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1058}} +{"ts": "2026-07-29T03:48:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1776}} +{"ts": "2026-07-29T03:48:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1777}} +{"ts": "2026-07-29T03:49:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 877}} +{"ts": "2026-07-29T03:51:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1596}} +{"ts": "2026-07-29T03:51:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1596}} +{"ts": "2026-07-29T03:52:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 696}} +{"ts": "2026-07-29T03:54:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1416}} +{"ts": "2026-07-29T03:54:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1416}} +{"ts": "2026-07-29T03:55:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 515}} +{"ts": "2026-07-29T03:57:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1235}} +{"ts": "2026-07-29T03:57:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1235}} +{"ts": "2026-07-29T03:58:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 335}} +{"ts": "2026-07-29T04:00:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1054}} +{"ts": "2026-07-29T04:00:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1055}} +{"ts": "2026-07-29T04:01:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 154}} +{"ts": "2026-07-29T04:03:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 873}} +{"ts": "2026-07-29T04:03:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 874}} +{"ts": "2026-07-29T04:04:03+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T04:04:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3575}} +{"ts": "2026-07-29T04:06:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 693}} +{"ts": "2026-07-29T04:06:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 693}} +{"ts": "2026-07-29T04:07:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3394}} +{"ts": "2026-07-29T04:09:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 512}} +{"ts": "2026-07-29T04:09:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 512}} +{"ts": "2026-07-29T04:10:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3214}} +{"ts": "2026-07-29T04:12:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 331}} +{"ts": "2026-07-29T04:12:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 332}} +{"ts": "2026-07-29T04:13:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3033}} +{"ts": "2026-07-29T04:15:47+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 150}} +{"ts": "2026-07-29T04:15:47+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 151}} +{"ts": "2026-07-29T04:16:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2853}} +{"ts": "2026-07-29T04:18:19+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T04:18:20+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T04:18:48+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3571}} +{"ts": "2026-07-29T04:18:48+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3572}} +{"ts": "2026-07-29T04:19:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2672}} +{"ts": "2026-07-29T04:21:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3389}} +{"ts": "2026-07-29T04:21:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3391}} +{"ts": "2026-07-29T04:22:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2492}} +{"ts": "2026-07-29T04:24:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3209}} +{"ts": "2026-07-29T04:24:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3211}} +{"ts": "2026-07-29T04:25:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2311}} +{"ts": "2026-07-29T04:27:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3029}} +{"ts": "2026-07-29T04:27:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3031}} +{"ts": "2026-07-29T04:28:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2131}} +{"ts": "2026-07-29T04:30:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2843}} +{"ts": "2026-07-29T04:30:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2845}} +{"ts": "2026-07-29T04:31:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1951}} +{"ts": "2026-07-29T04:33:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2663}} +{"ts": "2026-07-29T04:33:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2664}} +{"ts": "2026-07-29T04:34:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1771}} +{"ts": "2026-07-29T04:36:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2483}} +{"ts": "2026-07-29T04:36:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2484}} +{"ts": "2026-07-29T04:37:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1590}} +{"ts": "2026-07-29T04:39:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2302}} +{"ts": "2026-07-29T04:39:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2304}} +{"ts": "2026-07-29T04:40:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1410}} +{"ts": "2026-07-29T04:42:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2122}} +{"ts": "2026-07-29T04:42:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2123}} +{"ts": "2026-07-29T04:43:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1229}} +{"ts": "2026-07-29T04:45:57+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1942}} +{"ts": "2026-07-29T04:45:57+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1943}} +{"ts": "2026-07-29T04:46:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1049}} +{"ts": "2026-07-29T04:48:57+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1761}} +{"ts": "2026-07-29T04:48:57+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1763}} +{"ts": "2026-07-29T04:49:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 868}} +{"ts": "2026-07-29T04:51:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1580}} +{"ts": "2026-07-29T04:51:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1582}} +{"ts": "2026-07-29T04:52:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 688}} +{"ts": "2026-07-29T04:54:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1400}} +{"ts": "2026-07-29T04:54:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1401}} +{"ts": "2026-07-29T04:55:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 507}} +{"ts": "2026-07-29T04:57:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1219}} +{"ts": "2026-07-29T04:57:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1221}} +{"ts": "2026-07-29T04:58:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 327}} +{"ts": "2026-07-29T05:00:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1039}} +{"ts": "2026-07-29T05:00:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1040}} +{"ts": "2026-07-29T05:01:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 147}} +{"ts": "2026-07-29T05:04:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 848}} +{"ts": "2026-07-29T05:04:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 850}} +{"ts": "2026-07-29T05:04:10+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T05:04:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3573}} +{"ts": "2026-07-29T05:07:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 668}} +{"ts": "2026-07-29T05:07:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 669}} +{"ts": "2026-07-29T05:07:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3393}} +{"ts": "2026-07-29T05:10:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 486}} +{"ts": "2026-07-29T05:10:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 488}} +{"ts": "2026-07-29T05:10:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3212}} +{"ts": "2026-07-29T05:13:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 306}} +{"ts": "2026-07-29T05:13:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 307}} +{"ts": "2026-07-29T05:13:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3031}} +{"ts": "2026-07-29T05:16:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 126}} +{"ts": "2026-07-29T05:16:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 127}} +{"ts": "2026-07-29T05:16:39+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2851}} +{"ts": "2026-07-29T05:18:21+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T05:18:21+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-29T05:19:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3547}} +{"ts": "2026-07-29T05:19:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3548}} +{"ts": "2026-07-29T05:19:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2670}} +{"ts": "2026-07-29T05:22:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3367}} +{"ts": "2026-07-29T05:22:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3367}} +{"ts": "2026-07-29T05:22:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2490}} +{"ts": "2026-07-29T05:25:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3186}} +{"ts": "2026-07-29T05:25:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3186}} +{"ts": "2026-07-29T05:25:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2310}} +{"ts": "2026-07-29T05:28:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3006}} +{"ts": "2026-07-29T05:28:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3006}} +{"ts": "2026-07-29T05:28:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2129}} +{"ts": "2026-07-29T05:31:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2824}} +{"ts": "2026-07-29T05:31:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2824}} +{"ts": "2026-07-29T05:31:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1948}} +{"ts": "2026-07-29T05:34:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2644}} +{"ts": "2026-07-29T05:34:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2644}} +{"ts": "2026-07-29T05:34:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1768}} +{"ts": "2026-07-29T05:37:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2462}} +{"ts": "2026-07-29T05:37:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2462}} +{"ts": "2026-07-29T05:37:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1586}} +{"ts": "2026-07-29T05:40:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2282}} +{"ts": "2026-07-29T05:40:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2282}} +{"ts": "2026-07-29T05:40:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1405}} +{"ts": "2026-07-29T05:43:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2101}} +{"ts": "2026-07-29T05:43:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2101}} +{"ts": "2026-07-29T05:43:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1225}} +{"ts": "2026-07-29T05:46:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1920}} +{"ts": "2026-07-29T05:46:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1921}} +{"ts": "2026-07-29T05:46:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1045}} +{"ts": "2026-07-29T05:49:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1739}} +{"ts": "2026-07-29T05:49:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1739}} +{"ts": "2026-07-29T05:49:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 864}} +{"ts": "2026-07-29T05:52:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1559}} +{"ts": "2026-07-29T05:52:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1559}} +{"ts": "2026-07-29T05:52:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 683}} +{"ts": "2026-07-29T05:55:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1378}} +{"ts": "2026-07-29T05:55:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1379}} +{"ts": "2026-07-29T05:55:47+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 502}} +{"ts": "2026-07-29T05:58:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1198}} +{"ts": "2026-07-29T05:58:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1198}} +{"ts": "2026-07-29T05:58:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 321}} +{"ts": "2026-07-29T14:28:51+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "093640", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "414cf0fb72eae898", "extra": {"mock": true}} +{"ts": "2026-07-30T01:47:01+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-30T01:47:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3598}} +{"ts": "2026-07-30T01:50:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3418}} +{"ts": "2026-07-30T01:53:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3237}} +{"ts": "2026-07-30T01:56:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3056}} +{"ts": "2026-07-30T01:59:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2876}} +{"ts": "2026-07-30T02:02:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2695}} +{"ts": "2026-07-30T02:05:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2514}} +{"ts": "2026-07-30T02:08:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2333}} +{"ts": "2026-07-30T02:11:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2153}} +{"ts": "2026-07-30T02:14:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1972}} +{"ts": "2026-07-30T02:17:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1792}} +{"ts": "2026-07-30T02:20:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1611}} +{"ts": "2026-07-30T02:23:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1430}} +{"ts": "2026-07-30T02:26:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1249}} +{"ts": "2026-07-30T02:29:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1068}} +{"ts": "2026-07-30T02:32:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 888}} +{"ts": "2026-07-30T02:35:02+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-30T02:35:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3598}} +{"ts": "2026-07-30T02:35:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 708}} +{"ts": "2026-07-30T02:38:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3418}} +{"ts": "2026-07-30T02:38:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 527}} +{"ts": "2026-07-30T02:41:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3238}} +{"ts": "2026-07-30T02:41:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 346}} +{"ts": "2026-07-30T02:44:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3057}} +{"ts": "2026-07-30T02:44:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 166}} +{"ts": "2026-07-30T02:47:02+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-30T02:47:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2877}} +{"ts": "2026-07-30T02:47:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3587}} +{"ts": "2026-07-30T02:50:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2696}} +{"ts": "2026-07-30T02:50:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3407}} +{"ts": "2026-07-30T02:53:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2516}} +{"ts": "2026-07-30T02:53:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3226}} +{"ts": "2026-07-30T02:56:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2335}} +{"ts": "2026-07-30T02:56:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3046}} +{"ts": "2026-07-30T02:59:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2155}} +{"ts": "2026-07-30T02:59:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2866}} +{"ts": "2026-07-30T03:02:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1974}} +{"ts": "2026-07-30T03:02:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2685}} +{"ts": "2026-07-30T03:05:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1794}} +{"ts": "2026-07-30T03:05:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2504}} +{"ts": "2026-07-30T03:08:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1613}} +{"ts": "2026-07-30T03:08:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2324}} +{"ts": "2026-07-30T03:11:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1432}} +{"ts": "2026-07-30T03:11:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2143}} +{"ts": "2026-07-30T03:14:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1252}} +{"ts": "2026-07-30T03:14:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1963}} +{"ts": "2026-07-30T03:17:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1071}} +{"ts": "2026-07-30T03:17:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1782}} +{"ts": "2026-07-30T03:20:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 890}} +{"ts": "2026-07-30T03:20:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1601}} +{"ts": "2026-07-30T03:23:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 709}} +{"ts": "2026-07-30T03:23:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1421}} +{"ts": "2026-07-30T03:26:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 528}} +{"ts": "2026-07-30T03:26:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1241}} +{"ts": "2026-07-30T03:29:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 348}} +{"ts": "2026-07-30T03:29:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1061}} +{"ts": "2026-07-30T03:32:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 167}} +{"ts": "2026-07-30T03:32:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 881}} +{"ts": "2026-07-30T03:35:03+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-30T03:35:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3587}} +{"ts": "2026-07-30T03:35:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 700}} +{"ts": "2026-07-30T03:38:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3407}} +{"ts": "2026-07-30T03:38:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 520}} +{"ts": "2026-07-30T03:41:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3226}} +{"ts": "2026-07-30T03:41:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 339}} +{"ts": "2026-07-30T03:44:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3046}} +{"ts": "2026-07-30T03:44:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 158}} +{"ts": "2026-07-30T03:47:03+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-30T03:47:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2866}} +{"ts": "2026-07-30T03:47:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3579}} +{"ts": "2026-07-30T03:50:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2685}} +{"ts": "2026-07-30T03:50:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3399}} +{"ts": "2026-07-30T03:53:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2505}} +{"ts": "2026-07-30T03:53:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3218}} +{"ts": "2026-07-30T03:56:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2324}} +{"ts": "2026-07-30T03:56:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3037}} +{"ts": "2026-07-30T03:59:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2143}} +{"ts": "2026-07-30T03:59:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2857}} +{"ts": "2026-07-30T04:02:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1963}} +{"ts": "2026-07-30T04:02:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2676}} +{"ts": "2026-07-30T04:05:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1782}} +{"ts": "2026-07-30T04:05:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2495}} +{"ts": "2026-07-30T04:08:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1601}} +{"ts": "2026-07-30T04:08:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2315}} +{"ts": "2026-07-30T04:11:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1420}} +{"ts": "2026-07-30T04:11:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2134}} +{"ts": "2026-07-30T04:14:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1239}} +{"ts": "2026-07-30T04:14:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1953}} +{"ts": "2026-07-30T04:17:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1059}} +{"ts": "2026-07-30T04:17:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1772}} +{"ts": "2026-07-30T04:20:24+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 878}} +{"ts": "2026-07-30T04:20:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1592}} +{"ts": "2026-07-30T04:21:02+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-30T04:21:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3598}} +{"ts": "2026-07-30T04:23:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 698}} +{"ts": "2026-07-30T04:23:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1411}} +{"ts": "2026-07-30T04:24:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3418}} +{"ts": "2026-07-30T04:26:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 517}} +{"ts": "2026-07-30T04:26:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1231}} +{"ts": "2026-07-30T04:27:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3237}} +{"ts": "2026-07-30T04:29:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 336}} +{"ts": "2026-07-30T04:29:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1050}} +{"ts": "2026-07-30T04:30:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3056}} +{"ts": "2026-07-30T04:32:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 156}} +{"ts": "2026-07-30T04:32:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 870}} +{"ts": "2026-07-30T04:33:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2876}} +{"ts": "2026-07-30T04:35:04+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-30T04:35:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3576}} +{"ts": "2026-07-30T04:35:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 689}} +{"ts": "2026-07-30T04:36:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2696}} +{"ts": "2026-07-30T04:38:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3395}} +{"ts": "2026-07-30T04:38:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 509}} +{"ts": "2026-07-30T04:39:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2515}} +{"ts": "2026-07-30T04:41:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3214}} +{"ts": "2026-07-30T04:41:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 329}} +{"ts": "2026-07-30T04:42:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2335}} +{"ts": "2026-07-30T04:44:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3034}} +{"ts": "2026-07-30T04:44:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 148}} +{"ts": "2026-07-30T04:45:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2154}} +{"ts": "2026-07-30T04:47:04+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-30T04:47:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2854}} +{"ts": "2026-07-30T04:47:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3568}} +{"ts": "2026-07-30T04:48:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1974}} +{"ts": "2026-07-30T04:50:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2673}} +{"ts": "2026-07-30T04:50:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3388}} +{"ts": "2026-07-30T04:51:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1794}} +{"ts": "2026-07-30T04:53:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2493}} +{"ts": "2026-07-30T04:53:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3207}} +{"ts": "2026-07-30T04:54:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1614}} +{"ts": "2026-07-30T04:56:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2312}} +{"ts": "2026-07-30T04:56:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3026}} +{"ts": "2026-07-30T04:57:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1433}} +{"ts": "2026-07-30T04:59:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2131}} +{"ts": "2026-07-30T04:59:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2846}} +{"ts": "2026-07-30T05:00:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1252}} +{"ts": "2026-07-30T05:02:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1950}} +{"ts": "2026-07-30T05:02:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2666}} +{"ts": "2026-07-30T05:03:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1072}} +{"ts": "2026-07-30T05:05:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1769}} +{"ts": "2026-07-30T05:05:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2485}} +{"ts": "2026-07-30T05:06:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 890}} +{"ts": "2026-07-30T05:08:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1589}} +{"ts": "2026-07-30T05:08:39+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2304}} +{"ts": "2026-07-30T05:09:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 710}} +{"ts": "2026-07-30T05:11:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1409}} +{"ts": "2026-07-30T05:11:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2124}} +{"ts": "2026-07-30T05:12:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 529}} +{"ts": "2026-07-30T05:14:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1228}} +{"ts": "2026-07-30T05:14:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1943}} +{"ts": "2026-07-30T05:15:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 349}} +{"ts": "2026-07-30T05:17:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1048}} +{"ts": "2026-07-30T05:17:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1763}} +{"ts": "2026-07-30T05:18:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 169}} +{"ts": "2026-07-30T05:20:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 868}} +{"ts": "2026-07-30T05:20:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1583}} +{"ts": "2026-07-30T05:21:05+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPYM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "41e444bf93130aef", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-30T05:21:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3591}} +{"ts": "2026-07-30T05:23:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 687}} +{"ts": "2026-07-30T05:23:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1402}} +{"ts": "2026-07-30T05:24:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3411}} +{"ts": "2026-07-30T05:26:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 506}} +{"ts": "2026-07-30T05:26:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1221}} +{"ts": "2026-07-30T05:27:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3229}} +{"ts": "2026-07-30T05:29:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 325}} +{"ts": "2026-07-30T05:29:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 1040}} +{"ts": "2026-07-30T05:30:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 3048}} +{"ts": "2026-07-30T05:32:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 145}} +{"ts": "2026-07-30T05:32:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 859}} +{"ts": "2026-07-30T05:33:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2867}} +{"ts": "2026-07-30T05:35:04+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "QQQM", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "2775739c630f6811", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-30T05:35:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3564}} +{"ts": "2026-07-30T05:35:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 678}} +{"ts": "2026-07-30T05:36:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2687}} +{"ts": "2026-07-30T05:38:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3384}} +{"ts": "2026-07-30T05:38:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 497}} +{"ts": "2026-07-30T05:39:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2506}} +{"ts": "2026-07-30T05:41:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3204}} +{"ts": "2026-07-30T05:41:48+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 315}} +{"ts": "2026-07-30T05:42:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2326}} +{"ts": "2026-07-30T05:44:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 3023}} +{"ts": "2026-07-30T05:44:48+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 135}} +{"ts": "2026-07-30T05:45:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 2144}} +{"ts": "2026-07-30T05:47:05+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "SPCX", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "dcc855767f588e72", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-30T05:47:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2843}} +{"ts": "2026-07-30T05:47:48+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3557}} +{"ts": "2026-07-30T05:48:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1963}} +{"ts": "2026-07-30T05:50:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2662}} +{"ts": "2026-07-30T05:50:50+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3375}} +{"ts": "2026-07-30T05:51:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1782}} +{"ts": "2026-07-30T05:53:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2481}} +{"ts": "2026-07-30T05:53:50+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3194}} +{"ts": "2026-07-30T05:54:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1602}} +{"ts": "2026-07-30T05:56:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2300}} +{"ts": "2026-07-30T05:56:51+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 3014}} +{"ts": "2026-07-30T05:57:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPYM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "7ca0a5f6999ae4e8", "extra": {"remain_sec": 1422}} +{"ts": "2026-07-30T05:59:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 2119}} +{"ts": "2026-07-30T05:59:51+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "SPCX", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "c1523c0aa8ef4b36", "extra": {"remain_sec": 2834}} diff --git a/logs/ls_condition_history_nohup.out b/logs/ls_condition_history_nohup.out new file mode 100644 index 0000000..a098d52 --- /dev/null +++ b/logs/ls_condition_history_nohup.out @@ -0,0 +1,29499 @@ +[10:45:35] log → /home/hoon/kis_bot/logs/ls_condition_history_20260727_104535.log +[10:45:35] purge=True run=True names='breakout,tail,momentum,scalp_re' also_ticks=False flush=60s +[10:45:35] [TradeDB] 📌 target_candidates_history 테이블 확인/생성 +[10:45:35] [TradeDB] 📌 ws_price_validation 테이블 확인/생성 +[10:45:35] [TradeDB] 📌 ls_ws_ticks 테이블 확인/생성 +[10:45:35] [TradeDB] 📌 ls_ws_candles 테이블 확인/생성 +[10:45:35] [TradeDB] 📌 ls_ws_orderbook 테이블 확인/생성 +[10:45:35] [TradeDB] 📌 ls_ws_vi 테이블 확인/생성 +[10:45:35] [TradeDB] 📌 ws_price_validation_ls 테이블 확인/생성 +[10:45:35] [TradeDB] 📌 ls_universe_history 테이블 확인/생성 +[10:45:35] [TradeDB] 📌 stock_share_meta 테이블 확인/생성 +[10:45:35] [TradeDB] 📊 DB 테이블 생성/확인 완료 +[10:45:35] [TradeDB] ✅ TradeDB 초기화 완료: MariaDB 192.168.0.141:3306/kis_quant_db +[10:45:35] 🗑️ purge ls_universe_history rows_was=781 → 0 +[10:45:35] [ls_cond_hist] 🗑️ purge ls_universe_history rows_was=781 → 0 +[10:45:35] 🗑️ purge ls_candidates_history rows_was=0 → 0 +[10:45:35] [ls_cond_hist] 🗑️ purge ls_candidates_history rows_was=0 → 0 +[10:45:35] token OK user_id=hjhvkej1 +[10:45:35] [ls_cond_hist] token OK user_id=hjhvkej1 +[10:45:35] REST t1866 page=1 cont='' +[10:45:35] [ls_cond_hist] REST t1866 page=1 cont='' +[10:45:38] REST t1866 HTTP=200 rsp_cd=00000 rsp_msg=조회성공 raw_head={"t1866OutBlock": {"result_count": 4, "cont": "", "contkey": ""}, "t1866OutBlock1": [{"query_index": "hjhvkej10000", "group_name": "나의전략", "query_name": "breakout"}, {"query_index": "hjhvkej10001", "group_name": "나의전략", "query_name": "tail"}, {"query_index": "hjhvkej10002", "group_name": "나의전략", "query_name": "momentum"}, {"query_index": "hjhvkej10003", "group_name": "나의전략", "query_name": "scalp_r +[10:45:38] [ls_cond_hist] REST t1866 HTTP=200 rsp_cd=00000 rsp_msg=조회성공 raw_head={"t1866OutBlock": {"result_count": 4, "cont": "", "contkey": ""}, "t1866OutBlock1": [{"query_index": "hjhvkej10000", "group_name": "나의전략", "query_name": "breakout"}, {"query_index": "hjhvkej10001", "group_name": "나의전략", "query_name": "tail"}, {"query_index": "hjhvkej10002", "group_name": "나의전략", "query_name": "momentum"}, {"query_index": "hjhvkej10003", "group_name": "나의전략", "query_name": "scalp_r +[10:45:38] 서버저장조건 4건 +[10:45:38] [ls_cond_hist] 서버저장조건 4건 +[10:45:38] [0] index=hjhvkej10000 name=breakout group=나의전략 +[10:45:38] [ls_cond_hist] [0] index=hjhvkej10000 name=breakout group=나의전략 +[10:45:38] [1] index=hjhvkej10001 name=tail group=나의전략 +[10:45:38] [ls_cond_hist] [1] index=hjhvkej10001 name=tail group=나의전략 +[10:45:38] [2] index=hjhvkej10002 name=momentum group=나의전략 +[10:45:38] [ls_cond_hist] [2] index=hjhvkej10002 name=momentum group=나의전략 +[10:45:38] [3] index=hjhvkej10003 name=scalp_re group=나의전략 +[10:45:38] [ls_cond_hist] [3] index=hjhvkej10003 name=scalp_re group=나의전략 +[10:45:38] 매핑 name=breakout → sid=BREAKOUT query_index=hjhvkej10000 +[10:45:38] [ls_cond_hist] 매핑 name=breakout → sid=BREAKOUT query_index=hjhvkej10000 +[10:45:38] 매핑 name=tail → sid=SHORT query_index=hjhvkej10001 +[10:45:38] [ls_cond_hist] 매핑 name=tail → sid=SHORT query_index=hjhvkej10001 +[10:45:38] 매핑 name=momentum → sid=MOMENTUM query_index=hjhvkej10002 +[10:45:38] [ls_cond_hist] 매핑 name=momentum → sid=MOMENTUM query_index=hjhvkej10002 +[10:45:38] 매핑 name=scalp_re → sid=SCALP query_index=hjhvkej10003 +[10:45:38] [ls_cond_hist] 매핑 name=scalp_re → sid=SCALP query_index=hjhvkej10003 +[10:45:39] REST t1859 body={"t1859InBlock": {"query_index": "hjhvkej10000"}} +[10:45:39] [ls_cond_hist] REST t1859 body={"t1859InBlock": {"query_index": "hjhvkej10000"}} +[10:45:40] REST t1859 HTTP=200 rsp_cd=00000 rsp_msg= +[10:45:40] [ls_cond_hist] REST t1859 HTTP=200 rsp_cd=00000 rsp_msg= +[10:45:40] t1859 result_count=40 result_time=104540 text= +[10:45:40] [ls_cond_hist] t1859 result_count=40 result_time=104540 text= +[10:45:40] 📸 [BREAKOUT/breakout] snap=40 → ls_candidates_history +40 +[10:45:40] [ls_cond_hist] 📸 [BREAKOUT/breakout] snap=40 → ls_candidates_history +40 +[10:45:41] REST t1859 body={"t1859InBlock": {"query_index": "hjhvkej10001"}} +[10:45:41] [ls_cond_hist] REST t1859 body={"t1859InBlock": {"query_index": "hjhvkej10001"}} +[10:45:41] REST t1859 HTTP=200 rsp_cd=00000 rsp_msg= +[10:45:41] [ls_cond_hist] REST t1859 HTTP=200 rsp_cd=00000 rsp_msg= +[10:45:41] t1859 result_count=21 result_time=104541 text= +[10:45:41] [ls_cond_hist] t1859 result_count=21 result_time=104541 text= +[10:45:41] 📸 [SHORT/tail] snap=21 → ls_candidates_history +21 +[10:45:41] [ls_cond_hist] 📸 [SHORT/tail] snap=21 → ls_candidates_history +21 +[10:45:42] REST t1859 body={"t1859InBlock": {"query_index": "hjhvkej10002"}} +[10:45:42] [ls_cond_hist] REST t1859 body={"t1859InBlock": {"query_index": "hjhvkej10002"}} +[10:45:43] REST t1859 HTTP=200 rsp_cd=00000 rsp_msg= +[10:45:43] [ls_cond_hist] REST t1859 HTTP=200 rsp_cd=00000 rsp_msg= +[10:45:43] t1859 result_count=4 result_time=104543 text= +[10:45:43] [ls_cond_hist] t1859 result_count=4 result_time=104543 text= +[10:45:43] 📸 [MOMENTUM/momentum] snap=4 → ls_candidates_history +4 +[10:45:43] [ls_cond_hist] 📸 [MOMENTUM/momentum] snap=4 → ls_candidates_history +4 +[10:45:44] REST t1859 body={"t1859InBlock": {"query_index": "hjhvkej10003"}} +[10:45:44] [ls_cond_hist] REST t1859 body={"t1859InBlock": {"query_index": "hjhvkej10003"}} +[10:45:44] REST t1859 HTTP=200 rsp_cd=00000 rsp_msg= +[10:45:44] [ls_cond_hist] REST t1859 HTTP=200 rsp_cd=00000 rsp_msg= +[10:45:44] t1859 result_count=64 result_time=104544 text= +[10:45:44] [ls_cond_hist] t1859 result_count=64 result_time=104544 text= +[10:45:44] 📸 [SCALP/scalp_re] snap=64 → ls_candidates_history +64 +[10:45:44] [ls_cond_hist] 📸 [SCALP/scalp_re] snap=64 → ls_candidates_history +64 +[10:45:46] REST t1860 body={"t1860InBlock": {"sSysUserFlag": "U", "sFlag": "E", "sAlertNum": "", "query_index": "hjhvkej10000"}} +[10:45:46] [ls_cond_hist] REST t1860 body={"t1860InBlock": {"sSysUserFlag": "U", "sFlag": "E", "sAlertNum": "", "query_index": "hjhvkej10000"}} +[10:45:46] REST t1860 HTTP=200 rsp_cd=00000 rsp_msg=조회 완료 +[10:45:46] [ls_cond_hist] REST t1860 HTTP=200 rsp_cd=00000 rsp_msg=조회 완료 +[10:45:46] t1860[breakout] {"sSysUserFlag": "U", "sFlag": "E", "sResultFlag": "S", "sTime": "104546", "sAlertNum": "1045460200I", "Msg": "정상처리 되었습니다."} +[10:45:46] [ls_cond_hist] t1860[breakout] {"sSysUserFlag": "U", "sFlag": "E", "sResultFlag": "S", "sTime": "104546", "sAlertNum": "1045460200I", "Msg": "정상처리 되었습니다."} +[10:45:46] ✅ 등록 name=breakout sid=BREAKOUT alert=1045460200I (WS에는 alert만 REG — 이름은 로그/DB용) +[10:45:46] [ls_cond_hist] ✅ 등록 name=breakout sid=BREAKOUT alert=1045460200I (WS에는 alert만 REG — 이름은 로그/DB용) +[10:45:47] REST t1860 body={"t1860InBlock": {"sSysUserFlag": "U", "sFlag": "E", "sAlertNum": "", "query_index": "hjhvkej10001"}} +[10:45:47] [ls_cond_hist] REST t1860 body={"t1860InBlock": {"sSysUserFlag": "U", "sFlag": "E", "sAlertNum": "", "query_index": "hjhvkej10001"}} +[10:45:47] REST t1860 HTTP=200 rsp_cd=00000 rsp_msg=조회 완료 +[10:45:47] [ls_cond_hist] REST t1860 HTTP=200 rsp_cd=00000 rsp_msg=조회 완료 +[10:45:47] t1860[tail] {"sSysUserFlag": "U", "sFlag": "E", "sResultFlag": "S", "sTime": "104547", "sAlertNum": "1045470200I", "Msg": "정상처리 되었습니다."} +[10:45:47] [ls_cond_hist] t1860[tail] {"sSysUserFlag": "U", "sFlag": "E", "sResultFlag": "S", "sTime": "104547", "sAlertNum": "1045470200I", "Msg": "정상처리 되었습니다."} +[10:45:47] ✅ 등록 name=tail sid=SHORT alert=1045470200I (WS에는 alert만 REG — 이름은 로그/DB용) +[10:45:47] [ls_cond_hist] ✅ 등록 name=tail sid=SHORT alert=1045470200I (WS에는 alert만 REG — 이름은 로그/DB용) +[10:45:48] REST t1860 body={"t1860InBlock": {"sSysUserFlag": "U", "sFlag": "E", "sAlertNum": "", "query_index": "hjhvkej10002"}} +[10:45:48] [ls_cond_hist] REST t1860 body={"t1860InBlock": {"sSysUserFlag": "U", "sFlag": "E", "sAlertNum": "", "query_index": "hjhvkej10002"}} +[10:45:49] REST t1860 HTTP=200 rsp_cd=00000 rsp_msg=조회 완료 +[10:45:49] [ls_cond_hist] REST t1860 HTTP=200 rsp_cd=00000 rsp_msg=조회 완료 +[10:45:49] t1860[momentum] {"sSysUserFlag": "U", "sFlag": "E", "sResultFlag": "S", "sTime": "104549", "sAlertNum": "1045480200I", "Msg": "정상처리 되었습니다."} +[10:45:49] [ls_cond_hist] t1860[momentum] {"sSysUserFlag": "U", "sFlag": "E", "sResultFlag": "S", "sTime": "104549", "sAlertNum": "1045480200I", "Msg": "정상처리 되었습니다."} +[10:45:49] ✅ 등록 name=momentum sid=MOMENTUM alert=1045480200I (WS에는 alert만 REG — 이름은 로그/DB용) +[10:45:49] [ls_cond_hist] ✅ 등록 name=momentum sid=MOMENTUM alert=1045480200I (WS에는 alert만 REG — 이름은 로그/DB용) +[10:45:50] REST t1860 body={"t1860InBlock": {"sSysUserFlag": "U", "sFlag": "E", "sAlertNum": "", "query_index": "hjhvkej10003"}} +[10:45:50] [ls_cond_hist] REST t1860 body={"t1860InBlock": {"sSysUserFlag": "U", "sFlag": "E", "sAlertNum": "", "query_index": "hjhvkej10003"}} +[10:45:50] REST t1860 HTTP=200 rsp_cd=00000 rsp_msg=조회 완료 +[10:45:50] [ls_cond_hist] REST t1860 HTTP=200 rsp_cd=00000 rsp_msg=조회 완료 +[10:45:50] t1860[scalp_re] {"sSysUserFlag": "U", "sFlag": "E", "sResultFlag": "S", "sTime": "104550", "sAlertNum": "1045500200I", "Msg": "정상처리 되었습니다."} +[10:45:50] [ls_cond_hist] t1860[scalp_re] {"sSysUserFlag": "U", "sFlag": "E", "sResultFlag": "S", "sTime": "104550", "sAlertNum": "1045500200I", "Msg": "정상처리 되었습니다."} +[10:45:50] ✅ 등록 name=scalp_re sid=SCALP alert=1045500200I (WS에는 alert만 REG — 이름은 로그/DB용) +[10:45:50] [ls_cond_hist] ✅ 등록 name=scalp_re sid=SCALP alert=1045500200I (WS에는 alert만 REG — 이름은 로그/DB용) +[10:45:50] [websocket] Websocket connected +[10:45:50] WS OPEN wss://openapi.ls-sec.co.kr:9443/websocket ping=off +[10:45:50] [ls_cond_hist] WS OPEN wss://openapi.ls-sec.co.kr:9443/websocket ping=off +[10:45:50] AFR REG tr_key='1045460200I' (조건명→alert 매핑 후 키만 전송) +[10:45:50] [ls_cond_hist] AFR REG tr_key='1045460200I' (조건명→alert 매핑 후 키만 전송) +[10:45:50] AFR REG tr_key='1045460200I' (조건명→alert 매핑 후 키만 전송) +[10:45:50] [ls_cond_hist] AFR REG tr_key='1045460200I' (조건명→alert 매핑 후 키만 전송) +[10:45:50] AFR REG tr_key='1045470200I' (조건명→alert 매핑 후 키만 전송) +[10:45:50] [ls_cond_hist] AFR REG tr_key='1045470200I' (조건명→alert 매핑 후 키만 전송) +[10:45:50] AFR REG tr_key='1045470200I' (조건명→alert 매핑 후 키만 전송) +[10:45:50] [ls_cond_hist] AFR REG tr_key='1045470200I' (조건명→alert 매핑 후 키만 전송) +[10:45:51] AFR REG tr_key='1045480200I' (조건명→alert 매핑 후 키만 전송) +[10:45:51] [ls_cond_hist] AFR REG tr_key='1045480200I' (조건명→alert 매핑 후 키만 전송) +[10:45:51] AFR REG tr_key='1045480200I' (조건명→alert 매핑 후 키만 전송) +[10:45:51] [ls_cond_hist] AFR REG tr_key='1045480200I' (조건명→alert 매핑 후 키만 전송) +[10:45:51] AFR REG tr_key='1045500200I' (조건명→alert 매핑 후 키만 전송) +[10:45:51] [ls_cond_hist] AFR REG tr_key='1045500200I' (조건명→alert 매핑 후 키만 전송) +[10:45:51] AFR REG tr_key='1045500200I' (조건명→alert 매핑 후 키만 전송) +[10:45:51] [ls_cond_hist] AFR REG tr_key='1045500200I' (조건명→alert 매핑 후 키만 전송) +[10:45:52] 수집 루프 시작 (Ctrl+C 종료). flush=60s +[10:45:52] [ls_cond_hist] 수집 루프 시작 (Ctrl+C 종료). flush=60s +[10:45:56] AFR 진입 041910 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[10:45:56] [ls_cond_hist] AFR 진입 041910 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[10:45:56] 💾 [SCALP] universe=65 saved=65 +[10:45:56] [ls_cond_hist] 💾 [SCALP] universe=65 saved=65 +[10:46:04] AFR 이탈 244920 sid=SCALP name=scalp_re px=11340 alert=1045500200I +[10:46:04] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11340 alert=1045500200I +[10:46:04] 💾 [SCALP] universe=64 saved=64 +[10:46:04] [ls_cond_hist] 💾 [SCALP] universe=64 saved=64 +[10:46:18] AFR 진입 016250 sid=SCALP name=scalp_re px=11820 alert=1045500200I +[10:46:18] [ls_cond_hist] AFR 진입 016250 sid=SCALP name=scalp_re px=11820 alert=1045500200I +[10:46:18] 💾 [SCALP] universe=65 saved=65 +[10:46:18] [ls_cond_hist] 💾 [SCALP] universe=65 saved=65 +[10:46:25] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[10:46:25] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[10:46:25] 💾 [SCALP] universe=64 saved=64 +[10:46:25] [ls_cond_hist] 💾 [SCALP] universe=64 saved=64 +[10:46:26] AFR 진입 007690 sid=SCALP name=scalp_re px=38700 alert=1045500200I +[10:46:26] [ls_cond_hist] AFR 진입 007690 sid=SCALP name=scalp_re px=38700 alert=1045500200I +[10:46:27] 💾 [SCALP] universe=65 saved=65 +[10:46:27] [ls_cond_hist] 💾 [SCALP] universe=65 saved=65 +[10:46:28] AFR 진입 484870 sid=SCALP name=scalp_re px=19250 alert=1045500200I +[10:46:28] [ls_cond_hist] AFR 진입 484870 sid=SCALP name=scalp_re px=19250 alert=1045500200I +[10:46:28] 💾 [SCALP] universe=66 saved=66 +[10:46:28] [ls_cond_hist] 💾 [SCALP] universe=66 saved=66 +[10:46:28] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[10:46:28] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[10:46:28] 💾 [SCALP] universe=67 saved=67 +[10:46:28] [ls_cond_hist] 💾 [SCALP] universe=67 saved=67 +[10:46:31] AFR 진입 488900 sid=SCALP name=scalp_re px=7730 alert=1045500200I +[10:46:31] [ls_cond_hist] AFR 진입 488900 sid=SCALP name=scalp_re px=7730 alert=1045500200I +[10:46:31] 💾 [SCALP] universe=68 saved=68 +[10:46:31] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:46:34] AFR 이탈 300080 sid=SCALP name=scalp_re px=8100 alert=1045500200I +[10:46:34] [ls_cond_hist] AFR 이탈 300080 sid=SCALP name=scalp_re px=8100 alert=1045500200I +[10:46:34] 💾 [SCALP] universe=67 saved=67 +[10:46:34] [ls_cond_hist] 💾 [SCALP] universe=67 saved=67 +[10:46:40] AFR 이탈 488900 sid=SCALP name=scalp_re px=7710 alert=1045500200I +[10:46:40] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7710 alert=1045500200I +[10:46:40] 💾 [SCALP] universe=66 saved=66 +[10:46:40] [ls_cond_hist] 💾 [SCALP] universe=66 saved=66 +[10:46:40] AFR 진입 143240 sid=SCALP name=scalp_re px=16560 alert=1045500200I +[10:46:40] [ls_cond_hist] AFR 진입 143240 sid=SCALP name=scalp_re px=16560 alert=1045500200I +[10:46:40] 💾 [SCALP] universe=67 saved=67 +[10:46:40] [ls_cond_hist] 💾 [SCALP] universe=67 saved=67 +[10:46:41] AFR 이탈 484870 sid=SCALP name=scalp_re px=19240 alert=1045500200I +[10:46:41] [ls_cond_hist] AFR 이탈 484870 sid=SCALP name=scalp_re px=19240 alert=1045500200I +[10:46:41] 💾 [SCALP] universe=66 saved=66 +[10:46:41] [ls_cond_hist] 💾 [SCALP] universe=66 saved=66 +[10:46:45] AFR 이탈 007690 sid=SCALP name=scalp_re px=38650 alert=1045500200I +[10:46:45] [ls_cond_hist] AFR 이탈 007690 sid=SCALP name=scalp_re px=38650 alert=1045500200I +[10:46:45] 💾 [SCALP] universe=65 saved=65 +[10:46:45] [ls_cond_hist] 💾 [SCALP] universe=65 saved=65 +[10:46:47] AFR 재진입 484870 sid=SCALP name=scalp_re px=19250 alert=1045500200I +[10:46:47] [ls_cond_hist] AFR 재진입 484870 sid=SCALP name=scalp_re px=19250 alert=1045500200I +[10:46:47] 💾 [SCALP] universe=66 saved=66 +[10:46:47] [ls_cond_hist] 💾 [SCALP] universe=66 saved=66 +[10:46:53] AFR 재진입 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[10:46:53] [ls_cond_hist] AFR 재진입 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[10:46:53] 💾 [SCALP] universe=67 saved=67 +[10:46:53] [ls_cond_hist] 💾 [SCALP] universe=67 saved=67 +[10:46:53] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[10:46:53] [ls_cond_hist] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[10:46:53] 💾 [SCALP] universe=66 saved=66 +[10:46:53] [ls_cond_hist] 💾 [SCALP] universe=66 saved=66 +[10:46:54] AFR 재진입 300080 sid=SCALP name=scalp_re px=8080 alert=1045500200I +[10:46:54] [ls_cond_hist] AFR 재진입 300080 sid=SCALP name=scalp_re px=8080 alert=1045500200I +[10:46:55] 💾 [SCALP] universe=67 saved=67 +[10:46:55] [ls_cond_hist] 💾 [SCALP] universe=67 saved=67 +[10:46:58] AFR 진입 458650 sid=SCALP name=scalp_re px=7990 alert=1045500200I +[10:46:58] [ls_cond_hist] AFR 진입 458650 sid=SCALP name=scalp_re px=7990 alert=1045500200I +[10:46:58] 💾 [SCALP] universe=68 saved=68 +[10:46:58] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:47:00] AFR 진입 380550 sid=SCALP name=scalp_re px=7920 alert=1045500200I +[10:47:00] [ls_cond_hist] AFR 진입 380550 sid=SCALP name=scalp_re px=7920 alert=1045500200I +[10:47:00] 💾 [SCALP] universe=69 saved=69 +[10:47:00] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:47:01] AFR 이탈 023350 sid=SCALP name=scalp_re px=4075 alert=1045500200I +[10:47:01] [ls_cond_hist] AFR 이탈 023350 sid=SCALP name=scalp_re px=4075 alert=1045500200I +[10:47:01] 💾 [SCALP] universe=68 saved=68 +[10:47:01] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:47:09] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[10:47:09] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[10:47:10] 💾 [SCALP] universe=67 saved=67 +[10:47:10] [ls_cond_hist] 💾 [SCALP] universe=67 saved=67 +[10:47:10] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[10:47:10] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[10:47:10] 💾 [SCALP] universe=68 saved=68 +[10:47:10] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:47:13] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15250 alert=1045500200I +[10:47:13] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15250 alert=1045500200I +[10:47:13] 💾 [SCALP] universe=67 saved=67 +[10:47:13] [ls_cond_hist] 💾 [SCALP] universe=67 saved=67 +[10:47:16] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[10:47:16] [ls_cond_hist] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[10:47:16] 💾 [SCALP] universe=66 saved=66 +[10:47:16] [ls_cond_hist] 💾 [SCALP] universe=66 saved=66 +[10:47:24] AFR 진입 33626L sid=SCALP name=scalp_re px=6440 alert=1045500200I +[10:47:24] [ls_cond_hist] AFR 진입 33626L sid=SCALP name=scalp_re px=6440 alert=1045500200I +[10:47:25] 💾 [SCALP] universe=67 saved=67 +[10:47:25] [ls_cond_hist] 💾 [SCALP] universe=67 saved=67 +[10:47:26] AFR 이탈 068790 sid=SCALP name=scalp_re px=7350 alert=1045500200I +[10:47:26] [ls_cond_hist] AFR 이탈 068790 sid=SCALP name=scalp_re px=7350 alert=1045500200I +[10:47:26] 💾 [SCALP] universe=66 saved=66 +[10:47:26] [ls_cond_hist] 💾 [SCALP] universe=66 saved=66 +[10:47:29] AFR 진입 071280 sid=SCALP name=scalp_re px=6570 alert=1045500200I +[10:47:29] [ls_cond_hist] AFR 진입 071280 sid=SCALP name=scalp_re px=6570 alert=1045500200I +[10:47:29] 💾 [SCALP] universe=67 saved=67 +[10:47:29] [ls_cond_hist] 💾 [SCALP] universe=67 saved=67 +[10:47:38] AFR 진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[10:47:38] [ls_cond_hist] AFR 진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[10:47:38] 💾 [SCALP] universe=68 saved=68 +[10:47:38] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:47:43] AFR 재진입 007690 sid=SCALP name=scalp_re px=38750 alert=1045500200I +[10:47:43] [ls_cond_hist] AFR 재진입 007690 sid=SCALP name=scalp_re px=38750 alert=1045500200I +[10:47:43] 💾 [SCALP] universe=69 saved=69 +[10:47:43] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:47:49] AFR 재진입 244920 sid=SCALP name=scalp_re px=11350 alert=1045500200I +[10:47:49] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11350 alert=1045500200I +[10:47:49] 💾 [SCALP] universe=70 saved=70 +[10:47:49] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:47:50] AFR 이탈 484870 sid=SCALP name=scalp_re px=19240 alert=1045500200I +[10:47:50] [ls_cond_hist] AFR 이탈 484870 sid=SCALP name=scalp_re px=19240 alert=1045500200I +[10:47:50] 💾 [SCALP] universe=69 saved=69 +[10:47:50] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:47:53] AFR 재진입 488900 sid=SCALP name=scalp_re px=7730 alert=1045500200I +[10:47:53] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7730 alert=1045500200I +[10:47:53] 💾 [SCALP] universe=70 saved=70 +[10:47:53] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:47:57] AFR 이탈 380550 sid=SCALP name=scalp_re px=7960 alert=1045500200I +[10:47:57] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7960 alert=1045500200I +[10:47:57] 💾 [SCALP] universe=69 saved=69 +[10:47:57] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:48:01] AFR 진입 411080 sid=SCALP name=scalp_re px=3840 alert=1045500200I +[10:48:01] [ls_cond_hist] AFR 진입 411080 sid=SCALP name=scalp_re px=3840 alert=1045500200I +[10:48:01] 💾 [SCALP] universe=70 saved=70 +[10:48:01] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:48:05] AFR 진입 465770 sid=SCALP name=scalp_re px=3550 alert=1045500200I +[10:48:05] [ls_cond_hist] AFR 진입 465770 sid=SCALP name=scalp_re px=3550 alert=1045500200I +[10:48:05] 💾 [SCALP] universe=71 saved=71 +[10:48:05] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:48:05] AFR 재진입 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[10:48:05] [ls_cond_hist] AFR 재진입 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[10:48:05] 💾 [SCALP] universe=72 saved=72 +[10:48:05] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:48:08] AFR 이탈 465770 sid=SCALP name=scalp_re px=3525 alert=1045500200I +[10:48:08] [ls_cond_hist] AFR 이탈 465770 sid=SCALP name=scalp_re px=3525 alert=1045500200I +[10:48:09] 💾 [SCALP] universe=71 saved=71 +[10:48:09] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:48:10] AFR 이탈 007690 sid=SCALP name=scalp_re px=38600 alert=1045500200I +[10:48:10] [ls_cond_hist] AFR 이탈 007690 sid=SCALP name=scalp_re px=38600 alert=1045500200I +[10:48:10] 💾 [SCALP] universe=70 saved=70 +[10:48:10] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:48:25] AFR 이탈 244920 sid=SCALP name=scalp_re px=11320 alert=1045500200I +[10:48:25] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11320 alert=1045500200I +[10:48:25] 💾 [SCALP] universe=69 saved=69 +[10:48:25] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:48:46] AFR 진입 060900 sid=SCALP name=scalp_re px=4370 alert=1045500200I +[10:48:46] [ls_cond_hist] AFR 진입 060900 sid=SCALP name=scalp_re px=4370 alert=1045500200I +[10:48:47] 💾 [SCALP] universe=70 saved=70 +[10:48:47] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:49:00] AFR 재진입 484870 sid=SCALP name=scalp_re px=19250 alert=1045500200I +[10:49:00] [ls_cond_hist] AFR 재진입 484870 sid=SCALP name=scalp_re px=19250 alert=1045500200I +[10:49:00] 💾 [SCALP] universe=71 saved=71 +[10:49:00] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:49:10] AFR 이탈 484870 sid=SCALP name=scalp_re px=19240 alert=1045500200I +[10:49:10] [ls_cond_hist] AFR 이탈 484870 sid=SCALP name=scalp_re px=19240 alert=1045500200I +[10:49:10] 💾 [SCALP] universe=70 saved=70 +[10:49:10] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:49:10] AFR 재진입 068790 sid=SCALP name=scalp_re px=7390 alert=1045500200I +[10:49:10] [ls_cond_hist] AFR 재진입 068790 sid=SCALP name=scalp_re px=7390 alert=1045500200I +[10:49:10] 💾 [SCALP] universe=71 saved=71 +[10:49:10] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:49:17] AFR 재진입 465770 sid=SCALP name=scalp_re px=3535 alert=1045500200I +[10:49:17] [ls_cond_hist] AFR 재진입 465770 sid=SCALP name=scalp_re px=3535 alert=1045500200I +[10:49:17] 💾 [SCALP] universe=72 saved=72 +[10:49:17] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:49:24] AFR 재진입 007690 sid=SCALP name=scalp_re px=38700 alert=1045500200I +[10:49:24] [ls_cond_hist] AFR 재진입 007690 sid=SCALP name=scalp_re px=38700 alert=1045500200I +[10:49:24] 💾 [SCALP] universe=73 saved=73 +[10:49:24] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:49:28] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15210 alert=1045500200I +[10:49:28] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15210 alert=1045500200I +[10:49:28] 💾 [SCALP] universe=74 saved=74 +[10:49:28] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:49:34] AFR 진입 093050 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[10:49:34] [ls_cond_hist] AFR 진입 093050 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[10:49:34] 💾 [SCALP] universe=75 saved=75 +[10:49:34] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[10:49:56] AFR 진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[10:49:56] [ls_cond_hist] AFR 진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[10:49:56] 💾 [SCALP] universe=76 saved=76 +[10:49:56] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:50:00] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[10:50:00] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[10:50:00] 💾 [SCALP] universe=75 saved=75 +[10:50:00] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[10:50:01] AFR 이탈 143240 sid=SCALP name=scalp_re px=16540 alert=1045500200I +[10:50:01] [ls_cond_hist] AFR 이탈 143240 sid=SCALP name=scalp_re px=16540 alert=1045500200I +[10:50:01] 💾 [SCALP] universe=74 saved=74 +[10:50:01] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:50:01] AFR 이탈 093050 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[10:50:01] [ls_cond_hist] AFR 이탈 093050 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[10:50:01] 💾 [SCALP] universe=73 saved=73 +[10:50:01] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:50:01] AFR 재진입 093050 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[10:50:01] [ls_cond_hist] AFR 재진입 093050 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[10:50:01] 💾 [SCALP] universe=74 saved=74 +[10:50:01] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:50:12] AFR 이탈 465770 sid=SCALP name=scalp_re px=3515 alert=1045500200I +[10:50:12] [ls_cond_hist] AFR 이탈 465770 sid=SCALP name=scalp_re px=3515 alert=1045500200I +[10:50:12] 💾 [SCALP] universe=73 saved=73 +[10:50:12] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:50:24] AFR 재진입 484870 sid=SCALP name=scalp_re px=19250 alert=1045500200I +[10:50:24] [ls_cond_hist] AFR 재진입 484870 sid=SCALP name=scalp_re px=19250 alert=1045500200I +[10:50:24] 💾 [SCALP] universe=74 saved=74 +[10:50:24] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:50:41] AFR 이탈 484870 sid=SCALP name=scalp_re px=19240 alert=1045500200I +[10:50:41] [ls_cond_hist] AFR 이탈 484870 sid=SCALP name=scalp_re px=19240 alert=1045500200I +[10:50:41] 💾 [SCALP] universe=73 saved=73 +[10:50:41] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:50:50] AFR 진입 475400 sid=SCALP name=scalp_re px=16410 alert=1045500200I +[10:50:50] [ls_cond_hist] AFR 진입 475400 sid=SCALP name=scalp_re px=16410 alert=1045500200I +[10:50:50] 💾 [SCALP] universe=74 saved=74 +[10:50:50] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:50:56] AFR 이탈 411080 sid=SCALP name=scalp_re px=3870 alert=1045500200I +[10:50:56] [ls_cond_hist] AFR 이탈 411080 sid=SCALP name=scalp_re px=3870 alert=1045500200I +[10:50:56] 💾 [SCALP] universe=73 saved=73 +[10:50:56] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:51:03] AFR 이탈 475400 sid=SCALP name=scalp_re px=16520 alert=1045500200I +[10:51:03] [ls_cond_hist] AFR 이탈 475400 sid=SCALP name=scalp_re px=16520 alert=1045500200I +[10:51:03] 💾 [SCALP] universe=72 saved=72 +[10:51:03] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:51:04] AFR 이탈 488900 sid=SCALP name=scalp_re px=7720 alert=1045500200I +[10:51:04] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7720 alert=1045500200I +[10:51:04] 💾 [SCALP] universe=71 saved=71 +[10:51:04] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:51:10] AFR 진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[10:51:10] [ls_cond_hist] AFR 진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[10:51:10] 💾 [SCALP] universe=72 saved=72 +[10:51:10] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:51:10] AFR 재진입 411080 sid=SCALP name=scalp_re px=3825 alert=1045500200I +[10:51:10] [ls_cond_hist] AFR 재진입 411080 sid=SCALP name=scalp_re px=3825 alert=1045500200I +[10:51:10] 💾 [SCALP] universe=73 saved=73 +[10:51:10] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:51:11] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[10:51:11] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[10:51:11] 💾 [SCALP] universe=72 saved=72 +[10:51:11] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:51:11] AFR 진입 417970 sid=SCALP name=scalp_re px=11010 alert=1045500200I +[10:51:11] [ls_cond_hist] AFR 진입 417970 sid=SCALP name=scalp_re px=11010 alert=1045500200I +[10:51:11] 💾 [SCALP] universe=73 saved=73 +[10:51:11] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:51:14] AFR 이탈 064850 sid=SCALP name=scalp_re px=18490 alert=1045500200I +[10:51:14] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18490 alert=1045500200I +[10:51:14] 💾 [SCALP] universe=72 saved=72 +[10:51:14] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:51:14] AFR 재진입 380550 sid=SCALP name=scalp_re px=7950 alert=1045500200I +[10:51:14] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7950 alert=1045500200I +[10:51:14] 💾 [SCALP] universe=73 saved=73 +[10:51:14] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:51:14] AFR 재진입 023350 sid=SCALP name=scalp_re px=4070 alert=1045500200I +[10:51:14] [ls_cond_hist] AFR 재진입 023350 sid=SCALP name=scalp_re px=4070 alert=1045500200I +[10:51:14] 💾 [SCALP] universe=74 saved=74 +[10:51:14] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:51:19] AFR 이탈 071280 sid=SCALP name=scalp_re px=6560 alert=1045500200I +[10:51:19] [ls_cond_hist] AFR 이탈 071280 sid=SCALP name=scalp_re px=6560 alert=1045500200I +[10:51:19] 💾 [SCALP] universe=73 saved=73 +[10:51:19] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:51:21] AFR 이탈 093050 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[10:51:21] [ls_cond_hist] AFR 이탈 093050 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[10:51:21] 💾 [SCALP] universe=72 saved=72 +[10:51:21] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:51:25] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:51:25] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:51:25] 💾 [SCALP] universe=71 saved=71 +[10:51:25] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:51:38] AFR 이탈 101970 sid=SCALP name=scalp_re px=9610 alert=1045500200I +[10:51:38] [ls_cond_hist] AFR 이탈 101970 sid=SCALP name=scalp_re px=9610 alert=1045500200I +[10:51:38] 💾 [SCALP] universe=70 saved=70 +[10:51:38] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:51:51] AFR 이탈 007690 sid=SCALP name=scalp_re px=38600 alert=1045500200I +[10:51:51] [ls_cond_hist] AFR 이탈 007690 sid=SCALP name=scalp_re px=38600 alert=1045500200I +[10:51:51] 💾 [SCALP] universe=69 saved=69 +[10:51:51] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:52:02] AFR 이탈 327260 sid=SCALP name=scalp_re px=22900 alert=1045500200I +[10:52:02] [ls_cond_hist] AFR 이탈 327260 sid=SCALP name=scalp_re px=22900 alert=1045500200I +[10:52:02] 💾 [SCALP] universe=68 saved=68 +[10:52:02] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:52:02] AFR 재진입 327260 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[10:52:02] [ls_cond_hist] AFR 재진입 327260 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[10:52:03] 💾 [SCALP] universe=69 saved=69 +[10:52:03] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:52:09] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[10:52:09] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[10:52:09] 💾 [SCALP] universe=70 saved=70 +[10:52:09] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:52:17] AFR 재진입 064850 sid=SCALP name=scalp_re px=18530 alert=1045500200I +[10:52:17] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18530 alert=1045500200I +[10:52:17] 💾 [SCALP] universe=71 saved=71 +[10:52:17] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:52:23] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[10:52:23] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[10:52:23] 💾 [SCALP] universe=72 saved=72 +[10:52:23] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:52:24] AFR 재진입 475400 sid=SCALP name=scalp_re px=16410 alert=1045500200I +[10:52:24] [ls_cond_hist] AFR 재진입 475400 sid=SCALP name=scalp_re px=16410 alert=1045500200I +[10:52:24] 💾 [SCALP] universe=73 saved=73 +[10:52:24] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:52:25] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[10:52:25] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[10:52:25] 💾 [SCALP] universe=74 saved=74 +[10:52:25] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:52:26] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[10:52:26] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[10:52:26] 💾 [SCALP] universe=73 saved=73 +[10:52:26] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:52:29] AFR 이탈 064850 sid=SCALP name=scalp_re px=18470 alert=1045500200I +[10:52:29] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18470 alert=1045500200I +[10:52:29] 💾 [SCALP] universe=72 saved=72 +[10:52:29] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:52:29] AFR 재진입 064850 sid=SCALP name=scalp_re px=18530 alert=1045500200I +[10:52:29] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18530 alert=1045500200I +[10:52:29] 💾 [SCALP] universe=73 saved=73 +[10:52:29] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:52:33] AFR 이탈 016250 sid=SCALP name=scalp_re px=11800 alert=1045500200I +[10:52:33] [ls_cond_hist] AFR 이탈 016250 sid=SCALP name=scalp_re px=11800 alert=1045500200I +[10:52:33] 💾 [SCALP] universe=72 saved=72 +[10:52:33] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:52:34] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:52:34] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:52:34] 💾 [SCALP] universe=71 saved=71 +[10:52:34] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:52:37] AFR 진입 317830 sid=SCALP name=scalp_re px=4540 alert=1045500200I +[10:52:37] [ls_cond_hist] AFR 진입 317830 sid=SCALP name=scalp_re px=4540 alert=1045500200I +[10:52:37] 💾 [SCALP] universe=72 saved=72 +[10:52:37] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:52:53] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[10:52:53] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[10:52:53] 💾 [SCALP] universe=73 saved=73 +[10:52:53] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:52:54] AFR 이탈 014530 sid=SCALP name=scalp_re px=3165 alert=1045500200I +[10:52:54] [ls_cond_hist] AFR 이탈 014530 sid=SCALP name=scalp_re px=3165 alert=1045500200I +[10:52:54] 💾 [SCALP] universe=72 saved=72 +[10:52:54] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:52:59] AFR 이탈 023350 sid=SCALP name=scalp_re px=4060 alert=1045500200I +[10:52:59] [ls_cond_hist] AFR 이탈 023350 sid=SCALP name=scalp_re px=4060 alert=1045500200I +[10:52:59] 💾 [SCALP] universe=71 saved=71 +[10:52:59] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:52:59] AFR 재진입 023350 sid=SCALP name=scalp_re px=4070 alert=1045500200I +[10:52:59] [ls_cond_hist] AFR 재진입 023350 sid=SCALP name=scalp_re px=4070 alert=1045500200I +[10:52:59] 💾 [SCALP] universe=72 saved=72 +[10:52:59] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:53:00] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[10:53:00] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[10:53:00] 💾 [SCALP] universe=71 saved=71 +[10:53:00] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:53:00] AFR 재진입 007690 sid=SCALP name=scalp_re px=38550 alert=1045500200I +[10:53:00] [ls_cond_hist] AFR 재진입 007690 sid=SCALP name=scalp_re px=38550 alert=1045500200I +[10:53:00] 💾 [SCALP] universe=72 saved=72 +[10:53:00] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:53:00] AFR 이탈 007690 sid=SCALP name=scalp_re px=38400 alert=1045500200I +[10:53:00] [ls_cond_hist] AFR 이탈 007690 sid=SCALP name=scalp_re px=38400 alert=1045500200I +[10:53:00] 💾 [SCALP] universe=71 saved=71 +[10:53:00] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:53:10] AFR 재진입 071280 sid=SCALP name=scalp_re px=6590 alert=1045500200I +[10:53:10] [ls_cond_hist] AFR 재진입 071280 sid=SCALP name=scalp_re px=6590 alert=1045500200I +[10:53:10] 💾 [SCALP] universe=72 saved=72 +[10:53:10] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:53:13] AFR 재진입 488900 sid=SCALP name=scalp_re px=7700 alert=1045500200I +[10:53:13] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7700 alert=1045500200I +[10:53:13] 💾 [SCALP] universe=73 saved=73 +[10:53:13] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:53:20] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:53:20] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:53:20] 💾 [SCALP] universe=72 saved=72 +[10:53:20] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:53:25] AFR 이탈 393890 sid=SCALP name=scalp_re px=7150 alert=1045500200I +[10:53:25] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7150 alert=1045500200I +[10:53:25] 💾 [SCALP] universe=71 saved=71 +[10:53:25] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:53:28] AFR 재진입 393890 sid=SCALP name=scalp_re px=7160 alert=1045500200I +[10:53:28] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7160 alert=1045500200I +[10:53:28] 💾 [SCALP] universe=72 saved=72 +[10:53:28] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:53:28] AFR 이탈 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[10:53:28] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[10:53:28] 💾 [SCALP] universe=71 saved=71 +[10:53:28] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:53:28] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[10:53:28] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[10:53:28] 💾 [SCALP] universe=72 saved=72 +[10:53:28] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:53:37] AFR 진입 105740 sid=SCALP name=scalp_re px=6940 alert=1045500200I +[10:53:37] [ls_cond_hist] AFR 진입 105740 sid=SCALP name=scalp_re px=6940 alert=1045500200I +[10:53:37] 💾 [SCALP] universe=73 saved=73 +[10:53:37] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:53:38] AFR 이탈 071280 sid=SCALP name=scalp_re px=6560 alert=1045500200I +[10:53:38] [ls_cond_hist] AFR 이탈 071280 sid=SCALP name=scalp_re px=6560 alert=1045500200I +[10:53:38] 💾 [SCALP] universe=72 saved=72 +[10:53:38] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:53:39] AFR 이탈 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[10:53:39] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[10:53:39] 💾 [SCALP] universe=71 saved=71 +[10:53:39] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:53:44] AFR 재진입 244920 sid=SCALP name=scalp_re px=11350 alert=1045500200I +[10:53:44] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11350 alert=1045500200I +[10:53:44] 💾 [SCALP] universe=72 saved=72 +[10:53:44] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:53:53] AFR 재진입 007690 sid=SCALP name=scalp_re px=38500 alert=1045500200I +[10:53:53] [ls_cond_hist] AFR 재진입 007690 sid=SCALP name=scalp_re px=38500 alert=1045500200I +[10:53:53] 💾 [SCALP] universe=73 saved=73 +[10:53:53] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:53:56] AFR 이탈 417970 sid=SCALP name=scalp_re px=11020 alert=1045500200I +[10:53:56] [ls_cond_hist] AFR 이탈 417970 sid=SCALP name=scalp_re px=11020 alert=1045500200I +[10:53:56] 💾 [SCALP] universe=72 saved=72 +[10:53:56] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:53:57] AFR 진입 092460 sid=SCALP name=scalp_re px=16530 alert=1045500200I +[10:53:57] [ls_cond_hist] AFR 진입 092460 sid=SCALP name=scalp_re px=16530 alert=1045500200I +[10:53:57] 💾 [SCALP] universe=73 saved=73 +[10:53:57] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:53:57] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15160 alert=1045500200I +[10:53:57] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15160 alert=1045500200I +[10:53:58] 💾 [SCALP] universe=72 saved=72 +[10:53:58] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:53:58] AFR 이탈 456070 sid=SCALP name=scalp_re px=6070 alert=1045500200I +[10:53:58] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6070 alert=1045500200I +[10:53:58] 💾 [SCALP] universe=71 saved=71 +[10:53:58] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:54:00] AFR 이탈 244920 sid=SCALP name=scalp_re px=11320 alert=1045500200I +[10:54:00] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11320 alert=1045500200I +[10:54:00] 💾 [SCALP] universe=70 saved=70 +[10:54:00] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:54:01] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:54:01] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:54:01] 💾 [SCALP] universe=69 saved=69 +[10:54:01] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:54:04] AFR 진입 100220 sid=SCALP name=scalp_re px=5030 alert=1045500200I +[10:54:04] [ls_cond_hist] AFR 진입 100220 sid=SCALP name=scalp_re px=5030 alert=1045500200I +[10:54:04] 💾 [SCALP] universe=70 saved=70 +[10:54:04] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:54:05] AFR 이탈 007690 sid=SCALP name=scalp_re px=38350 alert=1045500200I +[10:54:05] [ls_cond_hist] AFR 이탈 007690 sid=SCALP name=scalp_re px=38350 alert=1045500200I +[10:54:05] 💾 [SCALP] universe=69 saved=69 +[10:54:05] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:54:07] AFR 이탈 041910 sid=SCALP name=scalp_re px=5420 alert=1045500200I +[10:54:07] [ls_cond_hist] AFR 이탈 041910 sid=SCALP name=scalp_re px=5420 alert=1045500200I +[10:54:07] 💾 [SCALP] universe=68 saved=68 +[10:54:07] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:54:17] AFR 이탈 217590 sid=SCALP name=scalp_re px=12140 alert=1045500200I +[10:54:17] [ls_cond_hist] AFR 이탈 217590 sid=SCALP name=scalp_re px=12140 alert=1045500200I +[10:54:17] 💾 [SCALP] universe=67 saved=67 +[10:54:17] [ls_cond_hist] 💾 [SCALP] universe=67 saved=67 +[10:54:20] AFR 진입 493330 sid=SCALP name=scalp_re px=9100 alert=1045500200I +[10:54:20] [ls_cond_hist] AFR 진입 493330 sid=SCALP name=scalp_re px=9100 alert=1045500200I +[10:54:20] 💾 [SCALP] universe=68 saved=68 +[10:54:20] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:54:21] AFR 이탈 493330 sid=SCALP name=scalp_re px=9070 alert=1045500200I +[10:54:21] [ls_cond_hist] AFR 이탈 493330 sid=SCALP name=scalp_re px=9070 alert=1045500200I +[10:54:21] 💾 [SCALP] universe=67 saved=67 +[10:54:21] [ls_cond_hist] 💾 [SCALP] universe=67 saved=67 +[10:54:23] AFR 재진입 217590 sid=SCALP name=scalp_re px=12150 alert=1045500200I +[10:54:23] [ls_cond_hist] AFR 재진입 217590 sid=SCALP name=scalp_re px=12150 alert=1045500200I +[10:54:23] 💾 [SCALP] universe=68 saved=68 +[10:54:23] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:54:25] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8900 alert=1045500200I +[10:54:25] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8900 alert=1045500200I +[10:54:25] 💾 [SCALP] universe=69 saved=69 +[10:54:25] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:54:25] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[10:54:25] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[10:54:25] 💾 [SCALP] universe=70 saved=70 +[10:54:25] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:54:26] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:54:26] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:54:26] 💾 [SCALP] universe=69 saved=69 +[10:54:26] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:54:27] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:54:27] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:54:27] 💾 [SCALP] universe=68 saved=68 +[10:54:27] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:54:28] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:54:28] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:54:28] 💾 [SCALP] universe=69 saved=69 +[10:54:28] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:54:28] AFR 재진입 014530 sid=SCALP name=scalp_re px=3165 alert=1045500200I +[10:54:28] [ls_cond_hist] AFR 재진입 014530 sid=SCALP name=scalp_re px=3165 alert=1045500200I +[10:54:28] 💾 [SCALP] universe=70 saved=70 +[10:54:28] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:54:28] AFR 이탈 217590 sid=SCALP name=scalp_re px=12140 alert=1045500200I +[10:54:28] [ls_cond_hist] AFR 이탈 217590 sid=SCALP name=scalp_re px=12140 alert=1045500200I +[10:54:28] 💾 [SCALP] universe=69 saved=69 +[10:54:28] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:54:29] AFR 재진입 007690 sid=SCALP name=scalp_re px=38450 alert=1045500200I +[10:54:29] [ls_cond_hist] AFR 재진입 007690 sid=SCALP name=scalp_re px=38450 alert=1045500200I +[10:54:30] 💾 [SCALP] universe=70 saved=70 +[10:54:30] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:54:30] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:54:30] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:54:30] 💾 [SCALP] universe=69 saved=69 +[10:54:30] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:54:32] AFR 이탈 150900 sid=SCALP name=scalp_re px=3270 alert=1045500200I +[10:54:32] [ls_cond_hist] AFR 이탈 150900 sid=SCALP name=scalp_re px=3270 alert=1045500200I +[10:54:32] 💾 [SCALP] universe=68 saved=68 +[10:54:32] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:54:34] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[10:54:34] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[10:54:34] 💾 [SCALP] universe=67 saved=67 +[10:54:34] [ls_cond_hist] 💾 [SCALP] universe=67 saved=67 +[10:54:35] AFR 진입 081180 sid=SCALP name=scalp_re px=5580 alert=1045500200I +[10:54:35] [ls_cond_hist] AFR 진입 081180 sid=SCALP name=scalp_re px=5580 alert=1045500200I +[10:54:35] 💾 [SCALP] universe=68 saved=68 +[10:54:35] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:54:37] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:54:37] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:54:37] 💾 [SCALP] universe=69 saved=69 +[10:54:37] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:54:37] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:54:37] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:54:37] 💾 [SCALP] universe=68 saved=68 +[10:54:37] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:54:38] AFR 재진입 150900 sid=SCALP name=scalp_re px=3280 alert=1045500200I +[10:54:38] [ls_cond_hist] AFR 재진입 150900 sid=SCALP name=scalp_re px=3280 alert=1045500200I +[10:54:38] 💾 [SCALP] universe=69 saved=69 +[10:54:38] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:54:39] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:54:39] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:54:39] 💾 [SCALP] universe=70 saved=70 +[10:54:39] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:54:42] AFR 이탈 030530 sid=SCALP name=scalp_re px=16780 alert=1045500200I +[10:54:42] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16780 alert=1045500200I +[10:54:42] 💾 [SCALP] universe=69 saved=69 +[10:54:42] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:54:43] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[10:54:43] [ls_cond_hist] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[10:54:44] 💾 [SCALP] universe=68 saved=68 +[10:54:44] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:54:44] AFR 진입 009520 sid=SCALP name=scalp_re px=10610 alert=1045500200I +[10:54:44] [ls_cond_hist] AFR 진입 009520 sid=SCALP name=scalp_re px=10610 alert=1045500200I +[10:54:44] 💾 [SCALP] universe=69 saved=69 +[10:54:44] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:54:44] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[10:54:44] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[10:54:44] 💾 [SCALP] universe=70 saved=70 +[10:54:44] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:54:46] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:54:46] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:54:46] 💾 [SCALP] universe=69 saved=69 +[10:54:46] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:54:47] AFR 이탈 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[10:54:47] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[10:54:47] 💾 [SCALP] universe=68 saved=68 +[10:54:47] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:54:47] AFR 이탈 092460 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[10:54:47] [ls_cond_hist] AFR 이탈 092460 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[10:54:47] 💾 [SCALP] universe=67 saved=67 +[10:54:47] [ls_cond_hist] 💾 [SCALP] universe=67 saved=67 +[10:54:48] AFR 진입 022100 sid=SCALP name=scalp_re px=19350 alert=1045500200I +[10:54:48] [ls_cond_hist] AFR 진입 022100 sid=SCALP name=scalp_re px=19350 alert=1045500200I +[10:54:48] 💾 [SCALP] universe=68 saved=68 +[10:54:48] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:54:49] AFR 재진입 393890 sid=SCALP name=scalp_re px=7140 alert=1045500200I +[10:54:49] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7140 alert=1045500200I +[10:54:49] 💾 [SCALP] universe=69 saved=69 +[10:54:49] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:54:51] AFR 재진입 456070 sid=SCALP name=scalp_re px=6080 alert=1045500200I +[10:54:51] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6080 alert=1045500200I +[10:54:51] 💾 [SCALP] universe=70 saved=70 +[10:54:51] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:54:58] AFR 이탈 150900 sid=SCALP name=scalp_re px=3270 alert=1045500200I +[10:54:58] [ls_cond_hist] AFR 이탈 150900 sid=SCALP name=scalp_re px=3270 alert=1045500200I +[10:54:58] 💾 [SCALP] universe=69 saved=69 +[10:54:58] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:54:59] AFR 재진입 030530 sid=SCALP name=scalp_re px=16760 alert=1045500200I +[10:54:59] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16760 alert=1045500200I +[10:54:59] 💾 [SCALP] universe=70 saved=70 +[10:54:59] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:55:00] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:00] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:00] 💾 [SCALP] universe=69 saved=69 +[10:55:00] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:55:01] AFR 이탈 030530 sid=SCALP name=scalp_re px=16750 alert=1045500200I +[10:55:01] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16750 alert=1045500200I +[10:55:01] 💾 [SCALP] universe=68 saved=68 +[10:55:01] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:55:01] AFR 진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[10:55:01] [ls_cond_hist] AFR 진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[10:55:01] 💾 [SCALP] universe=69 saved=69 +[10:55:01] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:55:01] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:55:01] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:55:01] 💾 [SCALP] universe=70 saved=70 +[10:55:01] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:55:01] AFR 이탈 155660 sid=SCALP name=scalp_re px=4625 alert=1045500200I +[10:55:01] [ls_cond_hist] AFR 이탈 155660 sid=SCALP name=scalp_re px=4625 alert=1045500200I +[10:55:02] 💾 [SCALP] universe=69 saved=69 +[10:55:02] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:55:03] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:03] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:03] 💾 [SCALP] universe=68 saved=68 +[10:55:03] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:55:04] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:55:04] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:55:04] 💾 [SCALP] universe=69 saved=69 +[10:55:04] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:55:04] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:04] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:04] 💾 [SCALP] universe=68 saved=68 +[10:55:04] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:55:04] AFR 재진입 030530 sid=SCALP name=scalp_re px=16760 alert=1045500200I +[10:55:04] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16760 alert=1045500200I +[10:55:04] 💾 [SCALP] universe=69 saved=69 +[10:55:04] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:55:09] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:55:09] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:55:09] 💾 [SCALP] universe=70 saved=70 +[10:55:09] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:55:09] AFR 재진입 150900 sid=SCALP name=scalp_re px=3240 alert=1045500200I +[10:55:09] [ls_cond_hist] AFR 재진입 150900 sid=SCALP name=scalp_re px=3240 alert=1045500200I +[10:55:09] 💾 [SCALP] universe=71 saved=71 +[10:55:09] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:55:10] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:10] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:10] 💾 [SCALP] universe=70 saved=70 +[10:55:10] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:55:11] AFR 이탈 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[10:55:11] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[10:55:11] 💾 [SCALP] universe=69 saved=69 +[10:55:11] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:55:13] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:55:13] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:55:13] 💾 [SCALP] universe=70 saved=70 +[10:55:13] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:55:14] AFR 재진입 016250 sid=SCALP name=scalp_re px=11800 alert=1045500200I +[10:55:14] [ls_cond_hist] AFR 재진입 016250 sid=SCALP name=scalp_re px=11800 alert=1045500200I +[10:55:14] 💾 [SCALP] universe=71 saved=71 +[10:55:14] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:55:16] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:16] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:16] 💾 [SCALP] universe=70 saved=70 +[10:55:16] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:55:18] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:55:18] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:55:18] 💾 [SCALP] universe=71 saved=71 +[10:55:18] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:55:19] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:19] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:19] 💾 [SCALP] universe=70 saved=70 +[10:55:19] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:55:23] AFR 이탈 064850 sid=SCALP name=scalp_re px=18460 alert=1045500200I +[10:55:23] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18460 alert=1045500200I +[10:55:23] 💾 [SCALP] universe=69 saved=69 +[10:55:23] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:55:30] AFR 재진입 024840 sid=SCALP name=scalp_re px=4415 alert=1045500200I +[10:55:30] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4415 alert=1045500200I +[10:55:30] 💾 [SCALP] universe=70 saved=70 +[10:55:30] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:55:30] AFR 이탈 007690 sid=SCALP name=scalp_re px=38400 alert=1045500200I +[10:55:30] [ls_cond_hist] AFR 이탈 007690 sid=SCALP name=scalp_re px=38400 alert=1045500200I +[10:55:30] 💾 [SCALP] universe=69 saved=69 +[10:55:30] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:55:33] AFR 재진입 092460 sid=SCALP name=scalp_re px=16520 alert=1045500200I +[10:55:33] [ls_cond_hist] AFR 재진입 092460 sid=SCALP name=scalp_re px=16520 alert=1045500200I +[10:55:33] 💾 [SCALP] universe=70 saved=70 +[10:55:33] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:55:37] AFR 이탈 092460 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[10:55:37] [ls_cond_hist] AFR 이탈 092460 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[10:55:37] 💾 [SCALP] universe=69 saved=69 +[10:55:37] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:55:38] AFR 재진입 217590 sid=SCALP name=scalp_re px=12070 alert=1045500200I +[10:55:38] [ls_cond_hist] AFR 재진입 217590 sid=SCALP name=scalp_re px=12070 alert=1045500200I +[10:55:38] 💾 [SCALP] universe=70 saved=70 +[10:55:38] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:55:39] AFR 이탈 217590 sid=SCALP name=scalp_re px=12030 alert=1045500200I +[10:55:39] [ls_cond_hist] AFR 이탈 217590 sid=SCALP name=scalp_re px=12030 alert=1045500200I +[10:55:39] 💾 [SCALP] universe=69 saved=69 +[10:55:39] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:55:44] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:44] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:44] 💾 [SCALP] universe=68 saved=68 +[10:55:44] [ls_cond_hist] 💾 [SCALP] universe=68 saved=68 +[10:55:45] AFR 진입 250000 sid=SCALP name=scalp_re px=5160 alert=1045500200I +[10:55:45] [ls_cond_hist] AFR 진입 250000 sid=SCALP name=scalp_re px=5160 alert=1045500200I +[10:55:45] 💾 [SCALP] universe=69 saved=69 +[10:55:45] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[10:55:48] AFR 재진입 217590 sid=SCALP name=scalp_re px=12080 alert=1045500200I +[10:55:48] [ls_cond_hist] AFR 재진입 217590 sid=SCALP name=scalp_re px=12080 alert=1045500200I +[10:55:48] 💾 [SCALP] universe=70 saved=70 +[10:55:48] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[10:55:49] AFR 진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[10:55:49] [ls_cond_hist] AFR 진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[10:55:49] 💾 [SCALP] universe=71 saved=71 +[10:55:49] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[10:55:52] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[10:55:52] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[10:55:52] 💾 [SCALP] universe=72 saved=72 +[10:55:52] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[10:55:55] AFR 재진입 493330 sid=SCALP name=scalp_re px=9110 alert=1045500200I +[10:55:55] [ls_cond_hist] AFR 재진입 493330 sid=SCALP name=scalp_re px=9110 alert=1045500200I +[10:55:55] 💾 [SCALP] universe=73 saved=73 +[10:55:55] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:55:57] AFR 재진입 024840 sid=SCALP name=scalp_re px=4415 alert=1045500200I +[10:55:57] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4415 alert=1045500200I +[10:55:57] 💾 [SCALP] universe=74 saved=74 +[10:55:57] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:55:58] AFR 이탈 419080 sid=SCALP name=scalp_re px=4380 alert=1045500200I +[10:55:58] [ls_cond_hist] AFR 이탈 419080 sid=SCALP name=scalp_re px=4380 alert=1045500200I +[10:55:58] 💾 [SCALP] universe=73 saved=73 +[10:55:58] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:55:58] AFR 재진입 419080 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:58] [ls_cond_hist] AFR 재진입 419080 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:55:58] 💾 [SCALP] universe=74 saved=74 +[10:55:58] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:56:01] AFR 재진입 092460 sid=SCALP name=scalp_re px=16510 alert=1045500200I +[10:56:01] [ls_cond_hist] AFR 재진입 092460 sid=SCALP name=scalp_re px=16510 alert=1045500200I +[10:56:01] 💾 [SCALP] universe=75 saved=75 +[10:56:01] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[10:56:01] AFR 재진입 041910 sid=SCALP name=scalp_re px=5430 alert=1045500200I +[10:56:01] [ls_cond_hist] AFR 재진입 041910 sid=SCALP name=scalp_re px=5430 alert=1045500200I +[10:56:01] 💾 [SCALP] universe=76 saved=76 +[10:56:01] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:56:03] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15140 alert=1045500200I +[10:56:03] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15140 alert=1045500200I +[10:56:03] 💾 [SCALP] universe=77 saved=77 +[10:56:03] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:56:06] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[10:56:06] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[10:56:06] 💾 [SCALP] universe=78 saved=78 +[10:56:06] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[10:56:10] AFR 이탈 022100 sid=SCALP name=scalp_re px=19400 alert=1045500200I +[10:56:10] [ls_cond_hist] AFR 이탈 022100 sid=SCALP name=scalp_re px=19400 alert=1045500200I +[10:56:10] 💾 [SCALP] universe=77 saved=77 +[10:56:10] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:56:12] AFR 이탈 419080 sid=SCALP name=scalp_re px=4370 alert=1045500200I +[10:56:12] [ls_cond_hist] AFR 이탈 419080 sid=SCALP name=scalp_re px=4370 alert=1045500200I +[10:56:12] 💾 [SCALP] universe=76 saved=76 +[10:56:12] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:56:20] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:56:20] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[10:56:20] 💾 [SCALP] universe=75 saved=75 +[10:56:20] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[10:56:20] AFR 이탈 493330 sid=SCALP name=scalp_re px=9070 alert=1045500200I +[10:56:20] [ls_cond_hist] AFR 이탈 493330 sid=SCALP name=scalp_re px=9070 alert=1045500200I +[10:56:20] 💾 [SCALP] universe=74 saved=74 +[10:56:20] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:56:27] AFR 재진입 493330 sid=SCALP name=scalp_re px=9110 alert=1045500200I +[10:56:27] [ls_cond_hist] AFR 재진입 493330 sid=SCALP name=scalp_re px=9110 alert=1045500200I +[10:56:27] 💾 [SCALP] universe=75 saved=75 +[10:56:27] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[10:56:29] AFR 재진입 064850 sid=SCALP name=scalp_re px=18500 alert=1045500200I +[10:56:29] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18500 alert=1045500200I +[10:56:29] 💾 [SCALP] universe=76 saved=76 +[10:56:29] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:56:31] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:56:31] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:56:31] 💾 [SCALP] universe=77 saved=77 +[10:56:31] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:56:31] AFR 재진입 081180 sid=SCALP name=scalp_re px=5580 alert=1045500200I +[10:56:31] [ls_cond_hist] AFR 재진입 081180 sid=SCALP name=scalp_re px=5580 alert=1045500200I +[10:56:31] 💾 [SCALP] universe=78 saved=78 +[10:56:31] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[10:56:32] AFR 재진입 007690 sid=SCALP name=scalp_re px=38425 alert=1045500200I +[10:56:32] [ls_cond_hist] AFR 재진입 007690 sid=SCALP name=scalp_re px=38425 alert=1045500200I +[10:56:32] 💾 [SCALP] universe=79 saved=79 +[10:56:32] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[10:56:32] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[10:56:32] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[10:56:32] 💾 [SCALP] universe=78 saved=78 +[10:56:32] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[10:56:32] AFR 재진입 393890 sid=SCALP name=scalp_re px=7140 alert=1045500200I +[10:56:32] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7140 alert=1045500200I +[10:56:33] 💾 [SCALP] universe=79 saved=79 +[10:56:33] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[10:56:36] AFR 이탈 393890 sid=SCALP name=scalp_re px=7130 alert=1045500200I +[10:56:36] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7130 alert=1045500200I +[10:56:36] 💾 [SCALP] universe=78 saved=78 +[10:56:36] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[10:56:43] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:56:43] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:56:43] 💾 [SCALP] universe=79 saved=79 +[10:56:43] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[10:56:43] AFR 이탈 458650 sid=SCALP name=scalp_re px=7960 alert=1045500200I +[10:56:43] [ls_cond_hist] AFR 이탈 458650 sid=SCALP name=scalp_re px=7960 alert=1045500200I +[10:56:43] 💾 [SCALP] universe=78 saved=78 +[10:56:43] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[10:56:45] AFR 재진입 393890 sid=SCALP name=scalp_re px=7140 alert=1045500200I +[10:56:45] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7140 alert=1045500200I +[10:56:45] 💾 [SCALP] universe=79 saved=79 +[10:56:45] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[10:56:47] AFR 이탈 092460 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[10:56:47] [ls_cond_hist] AFR 이탈 092460 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[10:56:47] 💾 [SCALP] universe=78 saved=78 +[10:56:47] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[10:56:48] AFR 이탈 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[10:56:48] [ls_cond_hist] AFR 이탈 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[10:56:48] 💾 [SCALP] universe=77 saved=77 +[10:56:48] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:56:51] AFR 이탈 041910 sid=SCALP name=scalp_re px=5420 alert=1045500200I +[10:56:51] [ls_cond_hist] AFR 이탈 041910 sid=SCALP name=scalp_re px=5420 alert=1045500200I +[10:56:51] 💾 [SCALP] universe=76 saved=76 +[10:56:51] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:56:53] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8900 alert=1045500200I +[10:56:53] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8900 alert=1045500200I +[10:56:53] 💾 [SCALP] universe=75 saved=75 +[10:56:53] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[10:56:54] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8910 alert=1045500200I +[10:56:54] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8910 alert=1045500200I +[10:56:54] 💾 [SCALP] universe=76 saved=76 +[10:56:54] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:56:54] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[10:56:54] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[10:56:54] 💾 [SCALP] universe=75 saved=75 +[10:56:54] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[10:56:54] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15130 alert=1045500200I +[10:56:54] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15130 alert=1045500200I +[10:56:54] 💾 [SCALP] universe=74 saved=74 +[10:56:54] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:56:54] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[10:56:54] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[10:56:54] 💾 [SCALP] universe=73 saved=73 +[10:56:54] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:56:59] AFR 재진입 081180 sid=SCALP name=scalp_re px=5590 alert=1045500200I +[10:56:59] [ls_cond_hist] AFR 재진입 081180 sid=SCALP name=scalp_re px=5590 alert=1045500200I +[10:56:59] 💾 [SCALP] universe=74 saved=74 +[10:56:59] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:56:59] AFR 이탈 493330 sid=SCALP name=scalp_re px=9070 alert=1045500200I +[10:56:59] [ls_cond_hist] AFR 이탈 493330 sid=SCALP name=scalp_re px=9070 alert=1045500200I +[10:56:59] 💾 [SCALP] universe=73 saved=73 +[10:56:59] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:57:00] AFR 재진입 041910 sid=SCALP name=scalp_re px=5430 alert=1045500200I +[10:57:00] [ls_cond_hist] AFR 재진입 041910 sid=SCALP name=scalp_re px=5430 alert=1045500200I +[10:57:00] 💾 [SCALP] universe=74 saved=74 +[10:57:00] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:57:04] AFR 재진입 092460 sid=SCALP name=scalp_re px=16510 alert=1045500200I +[10:57:04] [ls_cond_hist] AFR 재진입 092460 sid=SCALP name=scalp_re px=16510 alert=1045500200I +[10:57:04] 💾 [SCALP] universe=75 saved=75 +[10:57:04] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[10:57:06] AFR 이탈 456070 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[10:57:06] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[10:57:06] 💾 [SCALP] universe=74 saved=74 +[10:57:06] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:57:07] AFR 이탈 092460 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[10:57:07] [ls_cond_hist] AFR 이탈 092460 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[10:57:08] 💾 [SCALP] universe=73 saved=73 +[10:57:08] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:57:13] AFR 재진입 419080 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:57:13] [ls_cond_hist] AFR 재진입 419080 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[10:57:13] 💾 [SCALP] universe=74 saved=74 +[10:57:13] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:57:13] AFR 이탈 393890 sid=SCALP name=scalp_re px=7130 alert=1045500200I +[10:57:13] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7130 alert=1045500200I +[10:57:13] 💾 [SCALP] universe=73 saved=73 +[10:57:13] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:57:16] AFR 재진입 456070 sid=SCALP name=scalp_re px=6070 alert=1045500200I +[10:57:16] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6070 alert=1045500200I +[10:57:16] 💾 [SCALP] universe=74 saved=74 +[10:57:16] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:57:16] AFR 이탈 014530 sid=SCALP name=scalp_re px=3155 alert=1045500200I +[10:57:16] [ls_cond_hist] AFR 이탈 014530 sid=SCALP name=scalp_re px=3155 alert=1045500200I +[10:57:16] 💾 [SCALP] universe=73 saved=73 +[10:57:16] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[10:57:20] AFR 진입 023800 sid=SCALP name=scalp_re px=5400 alert=1045500200I +[10:57:20] [ls_cond_hist] AFR 진입 023800 sid=SCALP name=scalp_re px=5400 alert=1045500200I +[10:57:20] 💾 [SCALP] universe=74 saved=74 +[10:57:20] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[10:57:25] AFR 재진입 393890 sid=SCALP name=scalp_re px=7140 alert=1045500200I +[10:57:25] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7140 alert=1045500200I +[10:57:25] 💾 [SCALP] universe=75 saved=75 +[10:57:25] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[10:57:27] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[10:57:27] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[10:57:27] 💾 [SCALP] universe=76 saved=76 +[10:57:27] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:57:29] AFR 이탈 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[10:57:29] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[10:57:29] 💾 [SCALP] universe=75 saved=75 +[10:57:29] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[10:57:31] AFR 재진입 092460 sid=SCALP name=scalp_re px=16510 alert=1045500200I +[10:57:31] [ls_cond_hist] AFR 재진입 092460 sid=SCALP name=scalp_re px=16510 alert=1045500200I +[10:57:31] 💾 [SCALP] universe=76 saved=76 +[10:57:31] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:57:38] AFR 이탈 411080 sid=SCALP name=scalp_re px=3870 alert=1045500200I +[10:57:38] [ls_cond_hist] AFR 이탈 411080 sid=SCALP name=scalp_re px=3870 alert=1045500200I +[10:57:38] 💾 [SCALP] universe=75 saved=75 +[10:57:38] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[10:57:46] AFR 재진입 155660 sid=SCALP name=scalp_re px=4620 alert=1045500200I +[10:57:46] [ls_cond_hist] AFR 재진입 155660 sid=SCALP name=scalp_re px=4620 alert=1045500200I +[10:57:46] 💾 [SCALP] universe=76 saved=76 +[10:57:46] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:57:57] AFR 재진입 393890 sid=SCALP name=scalp_re px=7140 alert=1045500200I +[10:57:57] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7140 alert=1045500200I +[10:57:57] 💾 [SCALP] universe=77 saved=77 +[10:57:57] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:57:57] AFR 이탈 105740 sid=SCALP name=scalp_re px=6980 alert=1045500200I +[10:57:57] [ls_cond_hist] AFR 이탈 105740 sid=SCALP name=scalp_re px=6980 alert=1045500200I +[10:57:57] 💾 [SCALP] universe=76 saved=76 +[10:57:57] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:58:00] AFR 진입 012630 sid=SCALP name=scalp_re px=22150 alert=1045500200I +[10:58:00] [ls_cond_hist] AFR 진입 012630 sid=SCALP name=scalp_re px=22150 alert=1045500200I +[10:58:00] 💾 [SCALP] universe=77 saved=77 +[10:58:00] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:58:01] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15200 alert=1045500200I +[10:58:01] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15200 alert=1045500200I +[10:58:01] 💾 [SCALP] universe=78 saved=78 +[10:58:01] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[10:58:12] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[10:58:12] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[10:58:12] 💾 [SCALP] universe=77 saved=77 +[10:58:12] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:58:13] AFR 진입 003535 sid=SCALP name=scalp_re px=5320 alert=1045500200I +[10:58:13] [ls_cond_hist] AFR 진입 003535 sid=SCALP name=scalp_re px=5320 alert=1045500200I +[10:58:13] 💾 [SCALP] universe=78 saved=78 +[10:58:13] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[10:58:15] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[10:58:15] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[10:58:15] 💾 [SCALP] universe=77 saved=77 +[10:58:15] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:58:18] AFR 이탈 064850 sid=SCALP name=scalp_re px=18470 alert=1045500200I +[10:58:18] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18470 alert=1045500200I +[10:58:18] 💾 [SCALP] universe=76 saved=76 +[10:58:18] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:58:19] AFR 진입 001940 sid=SCALP name=scalp_re px=25700 alert=1045500200I +[10:58:19] [ls_cond_hist] AFR 진입 001940 sid=SCALP name=scalp_re px=25700 alert=1045500200I +[10:58:19] 💾 [SCALP] universe=77 saved=77 +[10:58:19] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:58:22] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[10:58:22] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[10:58:22] 💾 [SCALP] universe=78 saved=78 +[10:58:22] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[10:58:26] AFR 이탈 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[10:58:26] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[10:58:26] 💾 [SCALP] universe=77 saved=77 +[10:58:26] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:58:32] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[10:58:32] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[10:58:32] 💾 [SCALP] universe=76 saved=76 +[10:58:32] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:58:45] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[10:58:45] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[10:58:45] 💾 [SCALP] universe=77 saved=77 +[10:58:45] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:58:45] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[10:58:45] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[10:58:45] 💾 [SCALP] universe=76 saved=76 +[10:58:45] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:58:48] AFR 이탈 092460 sid=SCALP name=scalp_re px=16430 alert=1045500200I +[10:58:48] [ls_cond_hist] AFR 이탈 092460 sid=SCALP name=scalp_re px=16430 alert=1045500200I +[10:58:48] 💾 [SCALP] universe=75 saved=75 +[10:58:48] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[10:58:49] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8910 alert=1045500200I +[10:58:49] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8910 alert=1045500200I +[10:58:49] 💾 [SCALP] universe=76 saved=76 +[10:58:49] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:58:50] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[10:58:50] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[10:58:50] 💾 [SCALP] universe=77 saved=77 +[10:58:50] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:58:54] AFR 재진입 071280 sid=SCALP name=scalp_re px=6560 alert=1045500200I +[10:58:54] [ls_cond_hist] AFR 재진입 071280 sid=SCALP name=scalp_re px=6560 alert=1045500200I +[10:58:54] 💾 [SCALP] universe=78 saved=78 +[10:58:54] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[10:58:59] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[10:58:59] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[10:58:59] 💾 [SCALP] universe=79 saved=79 +[10:58:59] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[10:59:00] AFR 재진입 456070 sid=SCALP name=scalp_re px=6070 alert=1045500200I +[10:59:00] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6070 alert=1045500200I +[10:59:00] 💾 [SCALP] universe=80 saved=80 +[10:59:00] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[10:59:01] AFR 재진입 064850 sid=SCALP name=scalp_re px=18490 alert=1045500200I +[10:59:01] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18490 alert=1045500200I +[10:59:01] 💾 [SCALP] universe=81 saved=81 +[10:59:01] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[10:59:02] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[10:59:02] [ls_cond_hist] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[10:59:02] 💾 [SCALP] universe=80 saved=80 +[10:59:02] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[10:59:10] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15400 alert=1045500200I +[10:59:10] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15400 alert=1045500200I +[10:59:10] 💾 [SCALP] universe=79 saved=79 +[10:59:10] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[10:59:12] AFR 이탈 009520 sid=SCALP name=scalp_re px=10640 alert=1045500200I +[10:59:12] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10640 alert=1045500200I +[10:59:12] 💾 [SCALP] universe=78 saved=78 +[10:59:12] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[10:59:13] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:59:13] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:59:13] 💾 [SCALP] universe=77 saved=77 +[10:59:13] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:59:17] AFR 재진입 013030 sid=SCALP name=scalp_re px=31650 alert=1045500200I +[10:59:17] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31650 alert=1045500200I +[10:59:17] 💾 [SCALP] universe=78 saved=78 +[10:59:17] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[10:59:17] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:59:17] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[10:59:17] 💾 [SCALP] universe=77 saved=77 +[10:59:17] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:59:19] AFR 재진입 014530 sid=SCALP name=scalp_re px=3160 alert=1045500200I +[10:59:19] [ls_cond_hist] AFR 재진입 014530 sid=SCALP name=scalp_re px=3160 alert=1045500200I +[10:59:19] 💾 [SCALP] universe=78 saved=78 +[10:59:19] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[10:59:20] AFR 이탈 475400 sid=SCALP name=scalp_re px=16420 alert=1045500200I +[10:59:20] [ls_cond_hist] AFR 이탈 475400 sid=SCALP name=scalp_re px=16420 alert=1045500200I +[10:59:20] 💾 [SCALP] universe=77 saved=77 +[10:59:20] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:59:23] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[10:59:23] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[10:59:23] 💾 [SCALP] universe=76 saved=76 +[10:59:23] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:59:23] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15170 alert=1045500200I +[10:59:23] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15170 alert=1045500200I +[10:59:23] 💾 [SCALP] universe=77 saved=77 +[10:59:23] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:59:26] AFR 이탈 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[10:59:26] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[10:59:26] 💾 [SCALP] universe=76 saved=76 +[10:59:26] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[10:59:28] AFR 재진입 143240 sid=SCALP name=scalp_re px=16510 alert=1045500200I +[10:59:28] [ls_cond_hist] AFR 재진입 143240 sid=SCALP name=scalp_re px=16510 alert=1045500200I +[10:59:28] 💾 [SCALP] universe=77 saved=77 +[10:59:28] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[10:59:30] AFR 재진입 488900 sid=SCALP name=scalp_re px=7730 alert=1045500200I +[10:59:30] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7730 alert=1045500200I +[10:59:30] 💾 [SCALP] universe=78 saved=78 +[10:59:30] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[10:59:33] AFR 재진입 013030 sid=SCALP name=scalp_re px=31700 alert=1045500200I +[10:59:33] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31700 alert=1045500200I +[10:59:33] 💾 [SCALP] universe=79 saved=79 +[10:59:33] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[10:59:37] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[10:59:37] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[10:59:37] 💾 [SCALP] universe=80 saved=80 +[10:59:37] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[10:59:38] AFR 재진입 092460 sid=SCALP name=scalp_re px=16510 alert=1045500200I +[10:59:38] [ls_cond_hist] AFR 재진입 092460 sid=SCALP name=scalp_re px=16510 alert=1045500200I +[10:59:38] 💾 [SCALP] universe=81 saved=81 +[10:59:38] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[10:59:42] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8930 alert=1045500200I +[10:59:42] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8930 alert=1045500200I +[10:59:42] 💾 [SCALP] universe=82 saved=82 +[10:59:42] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[10:59:50] AFR 이탈 001940 sid=SCALP name=scalp_re px=25800 alert=1045500200I +[10:59:50] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25800 alert=1045500200I +[10:59:50] 💾 [SCALP] universe=81 saved=81 +[10:59:50] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:00:01] AFR 이탈 120240 sid=SCALP name=scalp_re px=14800 alert=1045500200I +[11:00:01] [ls_cond_hist] AFR 이탈 120240 sid=SCALP name=scalp_re px=14800 alert=1045500200I +[11:00:01] 💾 [SCALP] universe=80 saved=80 +[11:00:01] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:00:06] AFR 이탈 101330 sid=SCALP name=scalp_re px=3325 alert=1045500200I +[11:00:06] [ls_cond_hist] AFR 이탈 101330 sid=SCALP name=scalp_re px=3325 alert=1045500200I +[11:00:06] 💾 [SCALP] universe=79 saved=79 +[11:00:06] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:00:11] AFR 재진입 244920 sid=SCALP name=scalp_re px=11430 alert=1045500200I +[11:00:11] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11430 alert=1045500200I +[11:00:11] 💾 [SCALP] universe=80 saved=80 +[11:00:11] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:00:11] AFR 이탈 380550 sid=SCALP name=scalp_re px=7970 alert=1045500200I +[11:00:11] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7970 alert=1045500200I +[11:00:12] 💾 [SCALP] universe=79 saved=79 +[11:00:12] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:00:13] AFR 이탈 023800 sid=SCALP name=scalp_re px=5370 alert=1045500200I +[11:00:13] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5370 alert=1045500200I +[11:00:13] 💾 [SCALP] universe=78 saved=78 +[11:00:13] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:00:25] AFR 재진입 001940 sid=SCALP name=scalp_re px=25750 alert=1045500200I +[11:00:25] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25750 alert=1045500200I +[11:00:25] 💾 [SCALP] universe=79 saved=79 +[11:00:25] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:00:31] AFR 이탈 060900 sid=SCALP name=scalp_re px=4305 alert=1045500200I +[11:00:31] [ls_cond_hist] AFR 이탈 060900 sid=SCALP name=scalp_re px=4305 alert=1045500200I +[11:00:31] 💾 [SCALP] universe=78 saved=78 +[11:00:31] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:00:37] AFR 재진입 380550 sid=SCALP name=scalp_re px=7950 alert=1045500200I +[11:00:37] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7950 alert=1045500200I +[11:00:37] 💾 [SCALP] universe=79 saved=79 +[11:00:37] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:00:40] AFR 재진입 317830 sid=SCALP name=scalp_re px=4545 alert=1045500200I +[11:00:40] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4545 alert=1045500200I +[11:00:40] 💾 [SCALP] universe=80 saved=80 +[11:00:40] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:00:59] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[11:00:59] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[11:00:59] 💾 [SCALP] universe=81 saved=81 +[11:00:59] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:01:05] AFR 이탈 014530 sid=SCALP name=scalp_re px=3155 alert=1045500200I +[11:01:05] [ls_cond_hist] AFR 이탈 014530 sid=SCALP name=scalp_re px=3155 alert=1045500200I +[11:01:05] 💾 [SCALP] universe=80 saved=80 +[11:01:05] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:01:05] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15290 alert=1045500200I +[11:01:05] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15290 alert=1045500200I +[11:01:05] 💾 [SCALP] universe=79 saved=79 +[11:01:05] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:01:06] AFR 이탈 338840 sid=SCALP name=scalp_re px=9370 alert=1045500200I +[11:01:06] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9370 alert=1045500200I +[11:01:06] 💾 [SCALP] universe=78 saved=78 +[11:01:06] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:01:10] AFR 재진입 060900 sid=SCALP name=scalp_re px=4325 alert=1045500200I +[11:01:10] [ls_cond_hist] AFR 재진입 060900 sid=SCALP name=scalp_re px=4325 alert=1045500200I +[11:01:10] 💾 [SCALP] universe=79 saved=79 +[11:01:10] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:01:11] AFR 이탈 380550 sid=SCALP name=scalp_re px=7940 alert=1045500200I +[11:01:11] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7940 alert=1045500200I +[11:01:11] 💾 [SCALP] universe=78 saved=78 +[11:01:11] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:01:13] AFR 이탈 064850 sid=SCALP name=scalp_re px=18480 alert=1045500200I +[11:01:13] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18480 alert=1045500200I +[11:01:13] 💾 [SCALP] universe=77 saved=77 +[11:01:13] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:01:21] AFR 진입 004365 sid=SCALP name=scalp_re px=9290 alert=1045500200I +[11:01:21] [ls_cond_hist] AFR 진입 004365 sid=SCALP name=scalp_re px=9290 alert=1045500200I +[11:01:21] 💾 [SCALP] universe=78 saved=78 +[11:01:21] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:01:22] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:01:22] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:01:22] 💾 [SCALP] universe=77 saved=77 +[11:01:22] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:01:31] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[11:01:31] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[11:01:32] 💾 [SCALP] universe=78 saved=78 +[11:01:32] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:01:34] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:01:34] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:01:34] 💾 [SCALP] universe=77 saved=77 +[11:01:34] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:01:42] AFR 이탈 092460 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[11:01:42] [ls_cond_hist] AFR 이탈 092460 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[11:01:42] 💾 [SCALP] universe=76 saved=76 +[11:01:42] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:01:43] AFR 이탈 059270 sid=SCALP name=scalp_re px=5280 alert=1045500200I +[11:01:43] [ls_cond_hist] AFR 이탈 059270 sid=SCALP name=scalp_re px=5280 alert=1045500200I +[11:01:43] 💾 [SCALP] universe=75 saved=75 +[11:01:43] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:01:48] AFR 재진입 475400 sid=SCALP name=scalp_re px=16410 alert=1045500200I +[11:01:48] [ls_cond_hist] AFR 재진입 475400 sid=SCALP name=scalp_re px=16410 alert=1045500200I +[11:01:48] 💾 [SCALP] universe=76 saved=76 +[11:01:48] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:01:51] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:01:51] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:01:51] 💾 [SCALP] universe=77 saved=77 +[11:01:51] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:01:51] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15210 alert=1045500200I +[11:01:51] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15210 alert=1045500200I +[11:01:51] 💾 [SCALP] universe=78 saved=78 +[11:01:51] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:01:51] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[11:01:51] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[11:01:51] 💾 [SCALP] universe=79 saved=79 +[11:01:51] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:01:54] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:01:54] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:01:54] 💾 [SCALP] universe=78 saved=78 +[11:01:54] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:02:09] AFR 이탈 393890 sid=SCALP name=scalp_re px=7130 alert=1045500200I +[11:02:09] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7130 alert=1045500200I +[11:02:09] 💾 [SCALP] universe=77 saved=77 +[11:02:09] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:02:10] AFR 이탈 009520 sid=SCALP name=scalp_re px=10640 alert=1045500200I +[11:02:10] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10640 alert=1045500200I +[11:02:11] 💾 [SCALP] universe=76 saved=76 +[11:02:11] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:02:16] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15310 alert=1045500200I +[11:02:16] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15310 alert=1045500200I +[11:02:16] 💾 [SCALP] universe=75 saved=75 +[11:02:16] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:02:36] AFR 이탈 475400 sid=SCALP name=scalp_re px=16420 alert=1045500200I +[11:02:36] [ls_cond_hist] AFR 이탈 475400 sid=SCALP name=scalp_re px=16420 alert=1045500200I +[11:02:36] 💾 [SCALP] universe=74 saved=74 +[11:02:36] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:02:40] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15210 alert=1045500200I +[11:02:40] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15210 alert=1045500200I +[11:02:40] 💾 [SCALP] universe=75 saved=75 +[11:02:40] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:02:44] AFR 진입 474610 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[11:02:44] [ls_cond_hist] AFR 진입 474610 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[11:02:44] 💾 [SCALP] universe=76 saved=76 +[11:02:44] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:02:47] AFR 재진입 064850 sid=SCALP name=scalp_re px=18600 alert=1045500200I +[11:02:47] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18600 alert=1045500200I +[11:02:47] 💾 [SCALP] universe=77 saved=77 +[11:02:47] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:02:48] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[11:02:48] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[11:02:48] 💾 [SCALP] universe=78 saved=78 +[11:02:48] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:02:48] AFR 재진입 290550 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[11:02:48] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[11:02:48] 💾 [SCALP] universe=79 saved=79 +[11:02:48] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:02:57] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:02:57] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:02:57] 💾 [SCALP] universe=78 saved=78 +[11:02:57] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:03:00] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:03:00] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:03:00] 💾 [SCALP] universe=77 saved=77 +[11:03:00] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:03:01] AFR 재진입 338840 sid=SCALP name=scalp_re px=9300 alert=1045500200I +[11:03:01] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9300 alert=1045500200I +[11:03:01] 💾 [SCALP] universe=78 saved=78 +[11:03:01] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:03:04] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[11:03:04] [ls_cond_hist] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[11:03:04] 💾 [SCALP] universe=79 saved=79 +[11:03:04] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:03:16] AFR 이탈 001940 sid=SCALP name=scalp_re px=25850 alert=1045500200I +[11:03:16] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25850 alert=1045500200I +[11:03:16] 💾 [SCALP] universe=78 saved=78 +[11:03:16] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:03:22] AFR 재진입 475400 sid=SCALP name=scalp_re px=16330 alert=1045500200I +[11:03:22] [ls_cond_hist] AFR 재진입 475400 sid=SCALP name=scalp_re px=16330 alert=1045500200I +[11:03:22] 💾 [SCALP] universe=79 saved=79 +[11:03:22] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:03:23] AFR 이탈 012630 sid=SCALP name=scalp_re px=22200 alert=1045500200I +[11:03:23] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=22200 alert=1045500200I +[11:03:23] 💾 [SCALP] universe=78 saved=78 +[11:03:23] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:03:28] AFR 재진입 290550 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[11:03:28] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[11:03:28] 💾 [SCALP] universe=79 saved=79 +[11:03:28] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:03:34] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:03:34] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:03:34] 💾 [SCALP] universe=78 saved=78 +[11:03:34] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:03:36] AFR 재진입 014530 sid=SCALP name=scalp_re px=3160 alert=1045500200I +[11:03:36] [ls_cond_hist] AFR 재진입 014530 sid=SCALP name=scalp_re px=3160 alert=1045500200I +[11:03:36] 💾 [SCALP] universe=79 saved=79 +[11:03:36] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:03:55] AFR 이탈 071280 sid=SCALP name=scalp_re px=6550 alert=1045500200I +[11:03:55] [ls_cond_hist] AFR 이탈 071280 sid=SCALP name=scalp_re px=6550 alert=1045500200I +[11:03:55] 💾 [SCALP] universe=78 saved=78 +[11:03:55] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:04:00] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:04:00] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:04:00] 💾 [SCALP] universe=77 saved=77 +[11:04:00] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:04:01] AFR 이탈 475400 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[11:04:01] [ls_cond_hist] AFR 이탈 475400 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[11:04:01] 💾 [SCALP] universe=76 saved=76 +[11:04:01] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:04:02] AFR 진입 054920 sid=SCALP name=scalp_re px=3200 alert=1045500200I +[11:04:02] [ls_cond_hist] AFR 진입 054920 sid=SCALP name=scalp_re px=3200 alert=1045500200I +[11:04:02] 💾 [SCALP] universe=77 saved=77 +[11:04:02] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:04:04] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[11:04:04] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[11:04:04] 💾 [SCALP] universe=78 saved=78 +[11:04:04] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:04:05] AFR 재진입 005010 sid=SCALP name=scalp_re px=3750 alert=1045500200I +[11:04:05] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3750 alert=1045500200I +[11:04:05] 💾 [SCALP] universe=79 saved=79 +[11:04:05] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:04:06] AFR 이탈 290650 sid=SCALP name=scalp_re px=57800 alert=1045500200I +[11:04:06] [ls_cond_hist] AFR 이탈 290650 sid=SCALP name=scalp_re px=57800 alert=1045500200I +[11:04:06] 💾 [SCALP] universe=78 saved=78 +[11:04:06] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:04:11] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:04:11] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:04:11] 💾 [SCALP] universe=77 saved=77 +[11:04:11] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:04:13] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:04:13] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:04:13] 💾 [SCALP] universe=76 saved=76 +[11:04:13] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:04:14] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[11:04:14] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[11:04:14] 💾 [SCALP] universe=77 saved=77 +[11:04:14] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:04:14] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:04:14] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:04:14] 💾 [SCALP] universe=76 saved=76 +[11:04:14] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:04:16] AFR 재진입 493330 sid=SCALP name=scalp_re px=9110 alert=1045500200I +[11:04:16] [ls_cond_hist] AFR 재진입 493330 sid=SCALP name=scalp_re px=9110 alert=1045500200I +[11:04:16] 💾 [SCALP] universe=77 saved=77 +[11:04:16] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:04:17] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:04:17] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:04:17] 💾 [SCALP] universe=76 saved=76 +[11:04:17] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:04:23] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:04:23] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:04:23] 💾 [SCALP] universe=75 saved=75 +[11:04:23] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:04:34] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:04:34] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:04:34] 💾 [SCALP] universe=76 saved=76 +[11:04:34] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:04:45] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[11:04:45] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[11:04:45] 💾 [SCALP] universe=77 saved=77 +[11:04:45] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:04:45] AFR 이탈 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[11:04:45] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[11:04:45] 💾 [SCALP] universe=76 saved=76 +[11:04:45] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:04:47] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:04:47] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:04:47] 💾 [SCALP] universe=75 saved=75 +[11:04:47] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:04:47] AFR 이탈 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[11:04:47] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[11:04:47] 💾 [SCALP] universe=74 saved=74 +[11:04:47] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:04:49] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[11:04:49] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[11:04:49] 💾 [SCALP] universe=75 saved=75 +[11:04:49] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:04:50] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:04:50] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:04:50] 💾 [SCALP] universe=74 saved=74 +[11:04:50] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:04:50] AFR 이탈 054920 sid=SCALP name=scalp_re px=3195 alert=1045500200I +[11:04:50] [ls_cond_hist] AFR 이탈 054920 sid=SCALP name=scalp_re px=3195 alert=1045500200I +[11:04:50] 💾 [SCALP] universe=73 saved=73 +[11:04:50] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:04:52] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[11:04:52] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[11:04:52] 💾 [SCALP] universe=72 saved=72 +[11:04:52] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:04:52] AFR 재진입 393890 sid=SCALP name=scalp_re px=7130 alert=1045500200I +[11:04:52] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7130 alert=1045500200I +[11:04:53] 💾 [SCALP] universe=73 saved=73 +[11:04:53] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:04:55] AFR 이탈 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:04:55] [ls_cond_hist] AFR 이탈 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:04:55] 💾 [SCALP] universe=72 saved=72 +[11:04:55] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:04:55] AFR 이탈 155660 sid=SCALP name=scalp_re px=4615 alert=1045500200I +[11:04:55] [ls_cond_hist] AFR 이탈 155660 sid=SCALP name=scalp_re px=4615 alert=1045500200I +[11:04:55] 💾 [SCALP] universe=71 saved=71 +[11:04:55] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:04:56] AFR 재진입 475400 sid=SCALP name=scalp_re px=16340 alert=1045500200I +[11:04:56] [ls_cond_hist] AFR 재진입 475400 sid=SCALP name=scalp_re px=16340 alert=1045500200I +[11:04:56] 💾 [SCALP] universe=72 saved=72 +[11:04:56] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:04:56] AFR 재진입 081180 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[11:04:56] [ls_cond_hist] AFR 재진입 081180 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[11:04:56] 💾 [SCALP] universe=73 saved=73 +[11:04:56] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:04:58] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[11:04:58] [ls_cond_hist] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[11:04:58] 💾 [SCALP] universe=74 saved=74 +[11:04:58] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:05:00] AFR 이탈 003535 sid=SCALP name=scalp_re px=5310 alert=1045500200I +[11:05:00] [ls_cond_hist] AFR 이탈 003535 sid=SCALP name=scalp_re px=5310 alert=1045500200I +[11:05:00] 💾 [SCALP] universe=73 saved=73 +[11:05:00] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:05:00] AFR 재진입 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[11:05:00] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[11:05:00] 💾 [SCALP] universe=74 saved=74 +[11:05:00] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:05:00] AFR 이탈 493330 sid=SCALP name=scalp_re px=9080 alert=1045500200I +[11:05:00] [ls_cond_hist] AFR 이탈 493330 sid=SCALP name=scalp_re px=9080 alert=1045500200I +[11:05:00] 💾 [SCALP] universe=73 saved=73 +[11:05:00] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:05:00] AFR 재진입 024840 sid=SCALP name=scalp_re px=4390 alert=1045500200I +[11:05:00] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4390 alert=1045500200I +[11:05:00] 💾 [SCALP] universe=74 saved=74 +[11:05:00] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:05:00] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:05:00] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:05:00] 💾 [SCALP] universe=73 saved=73 +[11:05:00] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:05:09] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[11:05:09] [ls_cond_hist] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[11:05:09] 💾 [SCALP] universe=74 saved=74 +[11:05:09] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:05:10] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[11:05:10] [ls_cond_hist] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[11:05:10] 💾 [SCALP] universe=73 saved=73 +[11:05:10] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:05:12] AFR 재진입 024840 sid=SCALP name=scalp_re px=4390 alert=1045500200I +[11:05:12] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4390 alert=1045500200I +[11:05:12] 💾 [SCALP] universe=74 saved=74 +[11:05:12] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:05:12] AFR 이탈 024840 sid=SCALP name=scalp_re px=4380 alert=1045500200I +[11:05:12] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4380 alert=1045500200I +[11:05:12] 💾 [SCALP] universe=73 saved=73 +[11:05:12] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:05:18] AFR 재진입 012630 sid=SCALP name=scalp_re px=22200 alert=1045500200I +[11:05:18] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=22200 alert=1045500200I +[11:05:18] 💾 [SCALP] universe=74 saved=74 +[11:05:18] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:05:18] AFR 재진입 024840 sid=SCALP name=scalp_re px=4390 alert=1045500200I +[11:05:18] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4390 alert=1045500200I +[11:05:18] 💾 [SCALP] universe=75 saved=75 +[11:05:18] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:05:21] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[11:05:21] [ls_cond_hist] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[11:05:21] 💾 [SCALP] universe=76 saved=76 +[11:05:21] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:05:31] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[11:05:31] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[11:05:31] 💾 [SCALP] universe=75 saved=75 +[11:05:31] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:05:32] AFR 이탈 348030 sid=SCALP name=scalp_re px=3065 alert=1045500200I +[11:05:32] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=3065 alert=1045500200I +[11:05:32] 💾 [SCALP] universe=74 saved=74 +[11:05:32] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:05:35] AFR 재진입 054920 sid=SCALP name=scalp_re px=3200 alert=1045500200I +[11:05:35] [ls_cond_hist] AFR 재진입 054920 sid=SCALP name=scalp_re px=3200 alert=1045500200I +[11:05:35] 💾 [SCALP] universe=75 saved=75 +[11:05:35] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:05:37] AFR 재진입 417970 sid=SCALP name=scalp_re px=10970 alert=1045500200I +[11:05:37] [ls_cond_hist] AFR 재진입 417970 sid=SCALP name=scalp_re px=10970 alert=1045500200I +[11:05:37] 💾 [SCALP] universe=76 saved=76 +[11:05:37] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:05:45] AFR 이탈 012630 sid=SCALP name=scalp_re px=22100 alert=1045500200I +[11:05:45] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=22100 alert=1045500200I +[11:05:46] 💾 [SCALP] universe=75 saved=75 +[11:05:46] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:05:46] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:05:46] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:05:46] 💾 [SCALP] universe=74 saved=74 +[11:05:46] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:05:46] AFR 이탈 023350 sid=SCALP name=scalp_re px=4050 alert=1045500200I +[11:05:46] [ls_cond_hist] AFR 이탈 023350 sid=SCALP name=scalp_re px=4050 alert=1045500200I +[11:05:46] 💾 [SCALP] universe=73 saved=73 +[11:05:46] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:05:47] AFR 재진입 024840 sid=SCALP name=scalp_re px=4390 alert=1045500200I +[11:05:47] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4390 alert=1045500200I +[11:05:47] 💾 [SCALP] universe=74 saved=74 +[11:05:47] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:06:06] AFR 재진입 493330 sid=SCALP name=scalp_re px=9110 alert=1045500200I +[11:06:06] [ls_cond_hist] AFR 재진입 493330 sid=SCALP name=scalp_re px=9110 alert=1045500200I +[11:06:06] 💾 [SCALP] universe=75 saved=75 +[11:06:06] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:06:17] AFR 이탈 317830 sid=SCALP name=scalp_re px=4510 alert=1045500200I +[11:06:17] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4510 alert=1045500200I +[11:06:17] 💾 [SCALP] universe=74 saved=74 +[11:06:17] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:06:19] AFR 이탈 493330 sid=SCALP name=scalp_re px=9070 alert=1045500200I +[11:06:19] [ls_cond_hist] AFR 이탈 493330 sid=SCALP name=scalp_re px=9070 alert=1045500200I +[11:06:19] 💾 [SCALP] universe=73 saved=73 +[11:06:19] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:06:19] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[11:06:19] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[11:06:19] 💾 [SCALP] universe=74 saved=74 +[11:06:19] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:06:25] AFR 이탈 054920 sid=SCALP name=scalp_re px=3195 alert=1045500200I +[11:06:25] [ls_cond_hist] AFR 이탈 054920 sid=SCALP name=scalp_re px=3195 alert=1045500200I +[11:06:25] 💾 [SCALP] universe=73 saved=73 +[11:06:25] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:06:28] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:06:28] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:06:28] 💾 [SCALP] universe=72 saved=72 +[11:06:28] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:06:32] AFR 이탈 014530 sid=SCALP name=scalp_re px=3155 alert=1045500200I +[11:06:32] [ls_cond_hist] AFR 이탈 014530 sid=SCALP name=scalp_re px=3155 alert=1045500200I +[11:06:32] 💾 [SCALP] universe=71 saved=71 +[11:06:32] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:06:40] AFR 재진입 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[11:06:40] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4395 alert=1045500200I +[11:06:40] 💾 [SCALP] universe=72 saved=72 +[11:06:40] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:06:41] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:06:41] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:06:41] 💾 [SCALP] universe=71 saved=71 +[11:06:41] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:06:45] AFR 재진입 071280 sid=SCALP name=scalp_re px=6550 alert=1045500200I +[11:06:45] [ls_cond_hist] AFR 재진입 071280 sid=SCALP name=scalp_re px=6550 alert=1045500200I +[11:06:45] 💾 [SCALP] universe=72 saved=72 +[11:06:45] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:06:53] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:06:53] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:06:53] 💾 [SCALP] universe=73 saved=73 +[11:06:53] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:07:03] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[11:07:03] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4400 alert=1045500200I +[11:07:03] 💾 [SCALP] universe=74 saved=74 +[11:07:03] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:07:09] AFR 이탈 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[11:07:09] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[11:07:09] 💾 [SCALP] universe=73 saved=73 +[11:07:09] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:07:14] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:07:14] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:07:14] 💾 [SCALP] universe=72 saved=72 +[11:07:14] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:07:14] AFR 이탈 071280 sid=SCALP name=scalp_re px=6550 alert=1045500200I +[11:07:14] [ls_cond_hist] AFR 이탈 071280 sid=SCALP name=scalp_re px=6550 alert=1045500200I +[11:07:14] 💾 [SCALP] universe=71 saved=71 +[11:07:14] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:07:19] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:07:19] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:07:19] 💾 [SCALP] universe=72 saved=72 +[11:07:19] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:07:20] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:07:20] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:07:20] 💾 [SCALP] universe=71 saved=71 +[11:07:20] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:07:22] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[11:07:22] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[11:07:22] 💾 [SCALP] universe=72 saved=72 +[11:07:22] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:07:27] AFR 재진입 024840 sid=SCALP name=scalp_re px=4390 alert=1045500200I +[11:07:27] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4390 alert=1045500200I +[11:07:27] 💾 [SCALP] universe=73 saved=73 +[11:07:27] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:07:31] AFR 재진입 101970 sid=SCALP name=scalp_re px=9700 alert=1045500200I +[11:07:31] [ls_cond_hist] AFR 재진입 101970 sid=SCALP name=scalp_re px=9700 alert=1045500200I +[11:07:32] 💾 [SCALP] universe=74 saved=74 +[11:07:32] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:07:34] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15140 alert=1045500200I +[11:07:34] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15140 alert=1045500200I +[11:07:34] 💾 [SCALP] universe=73 saved=73 +[11:07:34] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:07:40] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:07:40] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:07:40] 💾 [SCALP] universe=72 saved=72 +[11:07:40] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:07:42] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:07:42] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:07:42] 💾 [SCALP] universe=71 saved=71 +[11:07:42] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:07:43] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[11:07:43] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[11:07:43] 💾 [SCALP] universe=72 saved=72 +[11:07:43] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:07:46] AFR 이탈 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[11:07:46] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[11:07:46] 💾 [SCALP] universe=71 saved=71 +[11:07:46] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:07:54] AFR 이탈 475400 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[11:07:54] [ls_cond_hist] AFR 이탈 475400 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[11:07:54] 💾 [SCALP] universe=70 saved=70 +[11:07:54] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[11:08:04] AFR 재진입 475400 sid=SCALP name=scalp_re px=16350 alert=1045500200I +[11:08:04] [ls_cond_hist] AFR 재진입 475400 sid=SCALP name=scalp_re px=16350 alert=1045500200I +[11:08:04] 💾 [SCALP] universe=71 saved=71 +[11:08:04] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:08:04] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:08:04] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:08:04] 💾 [SCALP] universe=70 saved=70 +[11:08:04] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[11:08:10] AFR 재진입 012630 sid=SCALP name=scalp_re px=22150 alert=1045500200I +[11:08:10] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=22150 alert=1045500200I +[11:08:10] 💾 [SCALP] universe=71 saved=71 +[11:08:10] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:08:12] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:08:12] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:08:12] 💾 [SCALP] universe=70 saved=70 +[11:08:12] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[11:08:18] AFR 재진입 411080 sid=SCALP name=scalp_re px=3825 alert=1045500200I +[11:08:18] [ls_cond_hist] AFR 재진입 411080 sid=SCALP name=scalp_re px=3825 alert=1045500200I +[11:08:18] 💾 [SCALP] universe=71 saved=71 +[11:08:18] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:08:25] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[11:08:25] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[11:08:25] 💾 [SCALP] universe=72 saved=72 +[11:08:25] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:08:47] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:08:47] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:08:47] 💾 [SCALP] universe=71 saved=71 +[11:08:47] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:08:50] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:08:50] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:08:50] 💾 [SCALP] universe=72 saved=72 +[11:08:50] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:08:53] AFR 재진입 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:08:53] [ls_cond_hist] AFR 재진입 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:08:53] 💾 [SCALP] universe=73 saved=73 +[11:08:53] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:08:54] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[11:08:54] [ls_cond_hist] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[11:08:54] 💾 [SCALP] universe=72 saved=72 +[11:08:54] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:08:59] AFR 이탈 120240 sid=SCALP name=scalp_re px=14800 alert=1045500200I +[11:08:59] [ls_cond_hist] AFR 이탈 120240 sid=SCALP name=scalp_re px=14800 alert=1045500200I +[11:08:59] 💾 [SCALP] universe=71 saved=71 +[11:08:59] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:09:00] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:09:00] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:09:00] 💾 [SCALP] universe=72 saved=72 +[11:09:00] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:09:00] AFR 재진입 493330 sid=SCALP name=scalp_re px=9100 alert=1045500200I +[11:09:00] [ls_cond_hist] AFR 재진입 493330 sid=SCALP name=scalp_re px=9100 alert=1045500200I +[11:09:01] 💾 [SCALP] universe=73 saved=73 +[11:09:01] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:09:05] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[11:09:05] [ls_cond_hist] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[11:09:05] 💾 [SCALP] universe=72 saved=72 +[11:09:05] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:09:09] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:09:09] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:09:09] 💾 [SCALP] universe=71 saved=71 +[11:09:09] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:09:13] AFR 이탈 244920 sid=SCALP name=scalp_re px=11300 alert=1045500200I +[11:09:13] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11300 alert=1045500200I +[11:09:13] 💾 [SCALP] universe=70 saved=70 +[11:09:13] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[11:09:14] AFR 재진입 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:09:14] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:09:14] 💾 [SCALP] universe=71 saved=71 +[11:09:14] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:09:18] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:09:18] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:09:18] 💾 [SCALP] universe=72 saved=72 +[11:09:18] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:09:22] AFR 재진입 348030 sid=SCALP name=scalp_re px=3070 alert=1045500200I +[11:09:22] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3070 alert=1045500200I +[11:09:22] 💾 [SCALP] universe=73 saved=73 +[11:09:22] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:09:25] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[11:09:25] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[11:09:25] 💾 [SCALP] universe=72 saved=72 +[11:09:25] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:09:34] AFR 재진입 244920 sid=SCALP name=scalp_re px=11350 alert=1045500200I +[11:09:34] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11350 alert=1045500200I +[11:09:34] 💾 [SCALP] universe=73 saved=73 +[11:09:34] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:09:35] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[11:09:35] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[11:09:35] 💾 [SCALP] universe=74 saved=74 +[11:09:35] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:09:36] AFR 재진입 120240 sid=SCALP name=scalp_re px=14780 alert=1045500200I +[11:09:36] [ls_cond_hist] AFR 재진입 120240 sid=SCALP name=scalp_re px=14780 alert=1045500200I +[11:09:36] 💾 [SCALP] universe=75 saved=75 +[11:09:36] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:09:40] AFR 이탈 419080 sid=SCALP name=scalp_re px=4380 alert=1045500200I +[11:09:40] [ls_cond_hist] AFR 이탈 419080 sid=SCALP name=scalp_re px=4380 alert=1045500200I +[11:09:40] 💾 [SCALP] universe=74 saved=74 +[11:09:40] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:10:00] AFR 이탈 012630 sid=SCALP name=scalp_re px=22050 alert=1045500200I +[11:10:00] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=22050 alert=1045500200I +[11:10:01] 💾 [SCALP] universe=73 saved=73 +[11:10:01] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:10:01] AFR 이탈 024840 sid=SCALP name=scalp_re px=4370 alert=1045500200I +[11:10:01] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4370 alert=1045500200I +[11:10:02] 💾 [SCALP] universe=72 saved=72 +[11:10:02] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:10:02] AFR 재진입 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:10:02] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:10:02] 💾 [SCALP] universe=73 saved=73 +[11:10:02] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:10:04] AFR 재진입 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[11:10:04] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[11:10:04] 💾 [SCALP] universe=74 saved=74 +[11:10:04] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:10:04] AFR 이탈 317830 sid=SCALP name=scalp_re px=4515 alert=1045500200I +[11:10:04] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4515 alert=1045500200I +[11:10:04] 💾 [SCALP] universe=73 saved=73 +[11:10:04] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:10:08] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:10:08] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:10:08] 💾 [SCALP] universe=72 saved=72 +[11:10:08] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:10:09] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:10:09] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:10:09] 💾 [SCALP] universe=73 saved=73 +[11:10:09] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:10:12] AFR 이탈 024840 sid=SCALP name=scalp_re px=4370 alert=1045500200I +[11:10:12] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4370 alert=1045500200I +[11:10:12] 💾 [SCALP] universe=72 saved=72 +[11:10:12] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:10:12] AFR 재진입 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:10:12] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:10:12] 💾 [SCALP] universe=73 saved=73 +[11:10:12] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:10:14] AFR 이탈 024840 sid=SCALP name=scalp_re px=4370 alert=1045500200I +[11:10:14] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4370 alert=1045500200I +[11:10:14] 💾 [SCALP] universe=72 saved=72 +[11:10:14] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:10:15] AFR 재진입 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:10:15] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:10:15] 💾 [SCALP] universe=73 saved=73 +[11:10:15] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:10:20] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[11:10:20] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[11:10:20] 💾 [SCALP] universe=74 saved=74 +[11:10:20] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:10:23] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[11:10:23] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12250 alert=1045500200I +[11:10:23] 💾 [SCALP] universe=75 saved=75 +[11:10:23] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:10:24] AFR 이탈 143240 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[11:10:24] [ls_cond_hist] AFR 이탈 143240 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[11:10:24] 💾 [SCALP] universe=74 saved=74 +[11:10:24] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:10:25] AFR 재진입 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[11:10:25] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[11:10:25] 💾 [SCALP] universe=75 saved=75 +[11:10:25] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:10:25] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8900 alert=1045500200I +[11:10:25] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8900 alert=1045500200I +[11:10:26] 💾 [SCALP] universe=76 saved=76 +[11:10:26] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:10:34] AFR 재진입 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:10:34] [ls_cond_hist] AFR 재진입 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:10:34] 💾 [SCALP] universe=77 saved=77 +[11:10:34] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:10:35] AFR 재진입 012630 sid=SCALP name=scalp_re px=22150 alert=1045500200I +[11:10:35] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=22150 alert=1045500200I +[11:10:35] 💾 [SCALP] universe=78 saved=78 +[11:10:35] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:10:36] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:10:36] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:10:36] 💾 [SCALP] universe=77 saved=77 +[11:10:36] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:10:39] AFR 이탈 452400 sid=SCALP name=scalp_re px=5580 alert=1045500200I +[11:10:39] [ls_cond_hist] AFR 이탈 452400 sid=SCALP name=scalp_re px=5580 alert=1045500200I +[11:10:40] 💾 [SCALP] universe=76 saved=76 +[11:10:40] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:10:45] AFR 이탈 024840 sid=SCALP name=scalp_re px=4370 alert=1045500200I +[11:10:45] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4370 alert=1045500200I +[11:10:45] 💾 [SCALP] universe=75 saved=75 +[11:10:45] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:10:55] AFR 이탈 456070 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[11:10:55] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[11:10:55] 💾 [SCALP] universe=74 saved=74 +[11:10:55] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:10:55] AFR 재진입 014530 sid=SCALP name=scalp_re px=3160 alert=1045500200I +[11:10:55] [ls_cond_hist] AFR 재진입 014530 sid=SCALP name=scalp_re px=3160 alert=1045500200I +[11:10:56] 💾 [SCALP] universe=75 saved=75 +[11:10:56] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:10:57] AFR 이탈 950190 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[11:10:57] [ls_cond_hist] AFR 이탈 950190 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[11:10:57] 💾 [SCALP] universe=74 saved=74 +[11:10:57] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:10:58] AFR 이탈 493330 sid=SCALP name=scalp_re px=9070 alert=1045500200I +[11:10:58] [ls_cond_hist] AFR 이탈 493330 sid=SCALP name=scalp_re px=9070 alert=1045500200I +[11:10:58] 💾 [SCALP] universe=73 saved=73 +[11:10:58] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:10:59] AFR 재진입 001940 sid=SCALP name=scalp_re px=25750 alert=1045500200I +[11:10:59] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25750 alert=1045500200I +[11:10:59] 💾 [SCALP] universe=74 saved=74 +[11:10:59] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:11:00] AFR 재진입 092460 sid=SCALP name=scalp_re px=16450 alert=1045500200I +[11:11:00] [ls_cond_hist] AFR 재진입 092460 sid=SCALP name=scalp_re px=16450 alert=1045500200I +[11:11:00] 💾 [SCALP] universe=75 saved=75 +[11:11:00] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:11:00] AFR 재진입 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:11:00] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:11:00] 💾 [SCALP] universe=76 saved=76 +[11:11:00] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:11:04] AFR 이탈 001940 sid=SCALP name=scalp_re px=25850 alert=1045500200I +[11:11:04] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25850 alert=1045500200I +[11:11:04] 💾 [SCALP] universe=75 saved=75 +[11:11:04] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:11:04] AFR 재진입 290650 sid=SCALP name=scalp_re px=57500 alert=1045500200I +[11:11:04] [ls_cond_hist] AFR 재진입 290650 sid=SCALP name=scalp_re px=57500 alert=1045500200I +[11:11:04] 💾 [SCALP] universe=76 saved=76 +[11:11:04] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:11:11] AFR 이탈 030530 sid=SCALP name=scalp_re px=16810 alert=1045500200I +[11:11:11] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16810 alert=1045500200I +[11:11:11] 💾 [SCALP] universe=75 saved=75 +[11:11:11] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:11:11] AFR 재진입 030530 sid=SCALP name=scalp_re px=16790 alert=1045500200I +[11:11:11] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16790 alert=1045500200I +[11:11:11] 💾 [SCALP] universe=76 saved=76 +[11:11:11] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:11:13] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:11:13] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:11:13] 💾 [SCALP] universe=75 saved=75 +[11:11:13] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:11:21] AFR 이탈 348030 sid=SCALP name=scalp_re px=3130 alert=1045500200I +[11:11:21] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=3130 alert=1045500200I +[11:11:21] 💾 [SCALP] universe=74 saved=74 +[11:11:21] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:11:47] AFR 재진입 950190 sid=SCALP name=scalp_re px=9950 alert=1045500200I +[11:11:47] [ls_cond_hist] AFR 재진입 950190 sid=SCALP name=scalp_re px=9950 alert=1045500200I +[11:11:47] 💾 [SCALP] universe=75 saved=75 +[11:11:47] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:11:47] AFR 이탈 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[11:11:47] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[11:11:47] 💾 [SCALP] universe=74 saved=74 +[11:11:47] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:11:49] AFR 재진입 456070 sid=SCALP name=scalp_re px=6070 alert=1045500200I +[11:11:49] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6070 alert=1045500200I +[11:11:49] 💾 [SCALP] universe=75 saved=75 +[11:11:49] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:11:50] AFR 재진입 009520 sid=SCALP name=scalp_re px=10580 alert=1045500200I +[11:11:50] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10580 alert=1045500200I +[11:11:50] 💾 [SCALP] universe=76 saved=76 +[11:11:50] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:12:01] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[11:12:01] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[11:12:01] 💾 [SCALP] universe=77 saved=77 +[11:12:01] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:12:03] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:12:03] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12240 alert=1045500200I +[11:12:03] 💾 [SCALP] universe=76 saved=76 +[11:12:03] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:12:06] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[11:12:06] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[11:12:06] 💾 [SCALP] universe=77 saved=77 +[11:12:06] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:12:18] AFR 재진입 452400 sid=SCALP name=scalp_re px=5590 alert=1045500200I +[11:12:18] [ls_cond_hist] AFR 재진입 452400 sid=SCALP name=scalp_re px=5590 alert=1045500200I +[11:12:18] 💾 [SCALP] universe=78 saved=78 +[11:12:18] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:12:23] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:12:23] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:12:23] 💾 [SCALP] universe=77 saved=77 +[11:12:23] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:12:27] AFR 이탈 411080 sid=SCALP name=scalp_re px=3840 alert=1045500200I +[11:12:27] [ls_cond_hist] AFR 이탈 411080 sid=SCALP name=scalp_re px=3840 alert=1045500200I +[11:12:27] 💾 [SCALP] universe=76 saved=76 +[11:12:27] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:12:35] AFR 이탈 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:12:35] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:12:35] 💾 [SCALP] universe=75 saved=75 +[11:12:35] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:12:38] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[11:12:38] [ls_cond_hist] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[11:12:38] 💾 [SCALP] universe=74 saved=74 +[11:12:38] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:12:38] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[11:12:38] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[11:12:38] 💾 [SCALP] universe=73 saved=73 +[11:12:38] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:12:46] AFR 이탈 012630 sid=SCALP name=scalp_re px=22150 alert=1045500200I +[11:12:46] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=22150 alert=1045500200I +[11:12:46] 💾 [SCALP] universe=72 saved=72 +[11:12:46] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:12:46] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:12:46] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:12:46] 💾 [SCALP] universe=71 saved=71 +[11:12:46] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:12:47] AFR 이탈 317830 sid=SCALP name=scalp_re px=4515 alert=1045500200I +[11:12:47] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4515 alert=1045500200I +[11:12:47] 💾 [SCALP] universe=70 saved=70 +[11:12:47] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[11:12:58] AFR 재진입 054920 sid=SCALP name=scalp_re px=3195 alert=1045500200I +[11:12:58] [ls_cond_hist] AFR 재진입 054920 sid=SCALP name=scalp_re px=3195 alert=1045500200I +[11:12:58] 💾 [SCALP] universe=71 saved=71 +[11:12:58] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:13:05] AFR 재진입 458650 sid=SCALP name=scalp_re px=7960 alert=1045500200I +[11:13:05] [ls_cond_hist] AFR 재진입 458650 sid=SCALP name=scalp_re px=7960 alert=1045500200I +[11:13:05] 💾 [SCALP] universe=72 saved=72 +[11:13:05] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:13:06] AFR 이탈 327260 sid=SCALP name=scalp_re px=22850 alert=1045500200I +[11:13:06] [ls_cond_hist] AFR 이탈 327260 sid=SCALP name=scalp_re px=22850 alert=1045500200I +[11:13:06] 💾 [SCALP] universe=71 saved=71 +[11:13:06] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:13:06] AFR 재진입 001940 sid=SCALP name=scalp_re px=25750 alert=1045500200I +[11:13:06] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25750 alert=1045500200I +[11:13:06] 💾 [SCALP] universe=72 saved=72 +[11:13:06] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:13:08] AFR 이탈 101970 sid=SCALP name=scalp_re px=9620 alert=1045500200I +[11:13:08] [ls_cond_hist] AFR 이탈 101970 sid=SCALP name=scalp_re px=9620 alert=1045500200I +[11:13:08] 💾 [SCALP] universe=71 saved=71 +[11:13:08] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:13:08] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[11:13:08] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[11:13:08] 💾 [SCALP] universe=72 saved=72 +[11:13:08] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:13:11] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15170 alert=1045500200I +[11:13:11] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15170 alert=1045500200I +[11:13:11] 💾 [SCALP] universe=73 saved=73 +[11:13:11] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:13:31] AFR 이탈 054920 sid=SCALP name=scalp_re px=3190 alert=1045500200I +[11:13:31] [ls_cond_hist] AFR 이탈 054920 sid=SCALP name=scalp_re px=3190 alert=1045500200I +[11:13:31] 💾 [SCALP] universe=72 saved=72 +[11:13:31] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:13:35] AFR 재진입 155660 sid=SCALP name=scalp_re px=4590 alert=1045500200I +[11:13:35] [ls_cond_hist] AFR 재진입 155660 sid=SCALP name=scalp_re px=4590 alert=1045500200I +[11:13:35] 💾 [SCALP] universe=73 saved=73 +[11:13:35] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:13:38] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[11:13:38] [ls_cond_hist] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[11:13:38] 💾 [SCALP] universe=72 saved=72 +[11:13:38] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:13:53] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:13:53] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:13:53] 💾 [SCALP] universe=73 saved=73 +[11:13:53] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:13:57] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8910 alert=1045500200I +[11:13:57] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8910 alert=1045500200I +[11:13:57] 💾 [SCALP] universe=74 saved=74 +[11:13:57] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:14:01] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:14:01] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:14:02] 💾 [SCALP] universe=73 saved=73 +[11:14:02] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:14:04] AFR 재진입 317830 sid=SCALP name=scalp_re px=4540 alert=1045500200I +[11:14:04] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4540 alert=1045500200I +[11:14:04] 💾 [SCALP] universe=74 saved=74 +[11:14:04] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:14:29] AFR 재진입 290550 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[11:14:29] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[11:14:30] 💾 [SCALP] universe=75 saved=75 +[11:14:30] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:14:30] AFR 이탈 120240 sid=SCALP name=scalp_re px=14830 alert=1045500200I +[11:14:30] [ls_cond_hist] AFR 이탈 120240 sid=SCALP name=scalp_re px=14830 alert=1045500200I +[11:14:30] 💾 [SCALP] universe=74 saved=74 +[11:14:30] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:14:42] AFR 재진입 012630 sid=SCALP name=scalp_re px=22150 alert=1045500200I +[11:14:42] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=22150 alert=1045500200I +[11:14:42] 💾 [SCALP] universe=75 saved=75 +[11:14:42] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:14:59] AFR 이탈 012630 sid=SCALP name=scalp_re px=22100 alert=1045500200I +[11:14:59] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=22100 alert=1045500200I +[11:14:59] 💾 [SCALP] universe=74 saved=74 +[11:14:59] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:15:02] AFR 재진입 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:15:02] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:15:02] 💾 [SCALP] universe=75 saved=75 +[11:15:02] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:15:08] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[11:15:08] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[11:15:08] 💾 [SCALP] universe=74 saved=74 +[11:15:08] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:15:08] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15130 alert=1045500200I +[11:15:08] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15130 alert=1045500200I +[11:15:09] 💾 [SCALP] universe=73 saved=73 +[11:15:09] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:15:09] AFR 재진입 081180 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[11:15:09] [ls_cond_hist] AFR 재진입 081180 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[11:15:09] 💾 [SCALP] universe=74 saved=74 +[11:15:09] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:15:13] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:15:13] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:15:13] 💾 [SCALP] universe=73 saved=73 +[11:15:13] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:15:14] AFR 이탈 317830 sid=SCALP name=scalp_re px=4515 alert=1045500200I +[11:15:14] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4515 alert=1045500200I +[11:15:14] 💾 [SCALP] universe=72 saved=72 +[11:15:14] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:15:16] AFR 재진입 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[11:15:16] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[11:15:16] 💾 [SCALP] universe=73 saved=73 +[11:15:16] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:15:36] AFR 재진입 493330 sid=SCALP name=scalp_re px=9100 alert=1045500200I +[11:15:36] [ls_cond_hist] AFR 재진입 493330 sid=SCALP name=scalp_re px=9100 alert=1045500200I +[11:15:36] 💾 [SCALP] universe=74 saved=74 +[11:15:36] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:15:40] AFR 재진입 012630 sid=SCALP name=scalp_re px=22150 alert=1045500200I +[11:15:40] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=22150 alert=1045500200I +[11:15:40] 💾 [SCALP] universe=75 saved=75 +[11:15:40] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:15:48] AFR 재진입 290550 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[11:15:48] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[11:15:48] 💾 [SCALP] universe=76 saved=76 +[11:15:48] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:15:50] AFR 재진입 023800 sid=SCALP name=scalp_re px=5370 alert=1045500200I +[11:15:50] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5370 alert=1045500200I +[11:15:50] 💾 [SCALP] universe=77 saved=77 +[11:15:50] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:15:52] AFR 재진입 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:15:52] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:15:52] 💾 [SCALP] universe=78 saved=78 +[11:15:52] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:15:54] AFR 이탈 456070 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[11:15:54] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[11:15:54] 💾 [SCALP] universe=77 saved=77 +[11:15:54] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:16:00] AFR 이탈 417970 sid=SCALP name=scalp_re px=10980 alert=1045500200I +[11:16:00] [ls_cond_hist] AFR 이탈 417970 sid=SCALP name=scalp_re px=10980 alert=1045500200I +[11:16:00] 💾 [SCALP] universe=76 saved=76 +[11:16:00] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:16:00] AFR 재진입 417970 sid=SCALP name=scalp_re px=10920 alert=1045500200I +[11:16:00] [ls_cond_hist] AFR 재진입 417970 sid=SCALP name=scalp_re px=10920 alert=1045500200I +[11:16:00] 💾 [SCALP] universe=77 saved=77 +[11:16:00] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:16:04] AFR 이탈 100220 sid=SCALP name=scalp_re px=5050 alert=1045500200I +[11:16:04] [ls_cond_hist] AFR 이탈 100220 sid=SCALP name=scalp_re px=5050 alert=1045500200I +[11:16:04] 💾 [SCALP] universe=76 saved=76 +[11:16:04] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:16:08] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15200 alert=1045500200I +[11:16:08] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15200 alert=1045500200I +[11:16:08] 💾 [SCALP] universe=77 saved=77 +[11:16:08] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:16:11] AFR 재진입 003535 sid=SCALP name=scalp_re px=5310 alert=1045500200I +[11:16:11] [ls_cond_hist] AFR 재진입 003535 sid=SCALP name=scalp_re px=5310 alert=1045500200I +[11:16:11] 💾 [SCALP] universe=78 saved=78 +[11:16:11] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:16:20] AFR 이탈 023800 sid=SCALP name=scalp_re px=5360 alert=1045500200I +[11:16:20] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5360 alert=1045500200I +[11:16:21] 💾 [SCALP] universe=77 saved=77 +[11:16:21] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:16:39] AFR 재진입 023800 sid=SCALP name=scalp_re px=5370 alert=1045500200I +[11:16:39] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5370 alert=1045500200I +[11:16:39] 💾 [SCALP] universe=78 saved=78 +[11:16:39] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:16:48] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:16:48] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:16:48] 💾 [SCALP] universe=79 saved=79 +[11:16:48] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:16:53] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:16:53] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:16:53] 💾 [SCALP] universe=78 saved=78 +[11:16:53] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:16:56] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:16:56] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:16:56] 💾 [SCALP] universe=79 saved=79 +[11:16:56] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:16:56] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:16:56] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:16:57] 💾 [SCALP] universe=78 saved=78 +[11:16:57] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:16:57] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:16:57] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:16:57] 💾 [SCALP] universe=79 saved=79 +[11:16:57] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:16:57] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15140 alert=1045500200I +[11:16:57] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15140 alert=1045500200I +[11:16:57] 💾 [SCALP] universe=78 saved=78 +[11:16:57] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:17:01] AFR 이탈 012630 sid=SCALP name=scalp_re px=22050 alert=1045500200I +[11:17:01] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=22050 alert=1045500200I +[11:17:01] 💾 [SCALP] universe=77 saved=77 +[11:17:01] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:17:19] AFR 이탈 060900 sid=SCALP name=scalp_re px=4585 alert=1045500200I +[11:17:19] [ls_cond_hist] AFR 이탈 060900 sid=SCALP name=scalp_re px=4585 alert=1045500200I +[11:17:19] 💾 [SCALP] universe=76 saved=76 +[11:17:19] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:17:26] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8920 alert=1045500200I +[11:17:26] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8920 alert=1045500200I +[11:17:26] 💾 [SCALP] universe=77 saved=77 +[11:17:26] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:17:31] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:17:31] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:17:31] 💾 [SCALP] universe=76 saved=76 +[11:17:31] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:17:38] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[11:17:38] [ls_cond_hist] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[11:17:38] 💾 [SCALP] universe=75 saved=75 +[11:17:38] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:17:38] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15150 alert=1045500200I +[11:17:38] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15150 alert=1045500200I +[11:17:38] 💾 [SCALP] universe=76 saved=76 +[11:17:38] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:17:38] AFR 재진입 081180 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[11:17:38] [ls_cond_hist] AFR 재진입 081180 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[11:17:38] 💾 [SCALP] universe=77 saved=77 +[11:17:38] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:17:39] AFR 이탈 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[11:17:39] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[11:17:39] 💾 [SCALP] universe=76 saved=76 +[11:17:39] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:17:41] AFR 재진입 009520 sid=SCALP name=scalp_re px=10590 alert=1045500200I +[11:17:41] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10590 alert=1045500200I +[11:17:41] 💾 [SCALP] universe=77 saved=77 +[11:17:41] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:17:56] AFR 이탈 493330 sid=SCALP name=scalp_re px=9080 alert=1045500200I +[11:17:56] [ls_cond_hist] AFR 이탈 493330 sid=SCALP name=scalp_re px=9080 alert=1045500200I +[11:17:56] 💾 [SCALP] universe=76 saved=76 +[11:17:56] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:18:10] AFR 재진입 290550 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[11:18:10] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[11:18:10] 💾 [SCALP] universe=77 saved=77 +[11:18:10] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:18:23] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[11:18:23] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[11:18:23] 💾 [SCALP] universe=76 saved=76 +[11:18:23] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:18:23] AFR 재진입 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:18:23] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:18:23] 💾 [SCALP] universe=77 saved=77 +[11:18:23] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:18:29] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:18:29] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:18:29] 💾 [SCALP] universe=76 saved=76 +[11:18:29] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:18:31] AFR 재진입 060900 sid=SCALP name=scalp_re px=4355 alert=1045500200I +[11:18:31] [ls_cond_hist] AFR 재진입 060900 sid=SCALP name=scalp_re px=4355 alert=1045500200I +[11:18:31] 💾 [SCALP] universe=77 saved=77 +[11:18:31] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:18:43] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:18:43] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:18:43] 💾 [SCALP] universe=76 saved=76 +[11:18:43] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:18:49] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8920 alert=1045500200I +[11:18:49] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8920 alert=1045500200I +[11:18:49] 💾 [SCALP] universe=77 saved=77 +[11:18:49] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:18:58] AFR 이탈 456070 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[11:18:58] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[11:18:58] 💾 [SCALP] universe=76 saved=76 +[11:18:58] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:19:05] AFR 재진입 290550 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[11:19:05] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[11:19:05] 💾 [SCALP] universe=77 saved=77 +[11:19:05] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:19:16] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:19:16] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:19:16] 💾 [SCALP] universe=76 saved=76 +[11:19:16] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:19:19] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:19:19] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:19:19] 💾 [SCALP] universe=77 saved=77 +[11:19:19] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:19:24] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:19:24] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:19:24] 💾 [SCALP] universe=76 saved=76 +[11:19:24] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:19:31] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:19:31] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:19:31] 💾 [SCALP] universe=77 saved=77 +[11:19:31] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:19:40] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:19:40] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:19:40] 💾 [SCALP] universe=76 saved=76 +[11:19:40] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:19:41] AFR 재진입 071970 sid=SCALP name=scalp_re px=63600 alert=1045500200I +[11:19:41] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63600 alert=1045500200I +[11:19:41] 💾 [SCALP] universe=77 saved=77 +[11:19:41] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:19:49] AFR 이탈 317830 sid=SCALP name=scalp_re px=4510 alert=1045500200I +[11:19:49] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4510 alert=1045500200I +[11:19:49] 💾 [SCALP] universe=76 saved=76 +[11:19:49] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:19:50] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:19:50] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:19:50] 💾 [SCALP] universe=75 saved=75 +[11:19:50] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:19:56] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:19:56] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:19:56] 💾 [SCALP] universe=74 saved=74 +[11:19:56] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:19:58] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:19:58] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:19:58] 💾 [SCALP] universe=75 saved=75 +[11:19:58] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:20:07] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[11:20:07] [ls_cond_hist] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[11:20:07] 💾 [SCALP] universe=74 saved=74 +[11:20:07] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:20:07] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[11:20:07] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[11:20:07] 💾 [SCALP] universe=73 saved=73 +[11:20:07] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:20:09] AFR 이탈 475400 sid=SCALP name=scalp_re px=16570 alert=1045500200I +[11:20:09] [ls_cond_hist] AFR 이탈 475400 sid=SCALP name=scalp_re px=16570 alert=1045500200I +[11:20:09] 💾 [SCALP] universe=72 saved=72 +[11:20:09] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:20:12] AFR 진입 122310 sid=SCALP name=scalp_re px=3510 alert=1045500200I +[11:20:12] [ls_cond_hist] AFR 진입 122310 sid=SCALP name=scalp_re px=3510 alert=1045500200I +[11:20:12] 💾 [SCALP] universe=73 saved=73 +[11:20:12] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:20:14] AFR 재진입 012630 sid=SCALP name=scalp_re px=22100 alert=1045500200I +[11:20:14] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=22100 alert=1045500200I +[11:20:14] 💾 [SCALP] universe=74 saved=74 +[11:20:14] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:20:17] AFR 이탈 012630 sid=SCALP name=scalp_re px=22050 alert=1045500200I +[11:20:17] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=22050 alert=1045500200I +[11:20:17] 💾 [SCALP] universe=73 saved=73 +[11:20:17] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:20:23] AFR 재진입 475400 sid=SCALP name=scalp_re px=16360 alert=1045500200I +[11:20:23] [ls_cond_hist] AFR 재진입 475400 sid=SCALP name=scalp_re px=16360 alert=1045500200I +[11:20:23] 💾 [SCALP] universe=74 saved=74 +[11:20:23] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:20:27] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:20:27] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:20:27] 💾 [SCALP] universe=73 saved=73 +[11:20:27] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:20:30] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:20:30] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:20:30] 💾 [SCALP] universe=74 saved=74 +[11:20:30] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:20:31] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:20:31] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:20:31] 💾 [SCALP] universe=73 saved=73 +[11:20:31] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:20:32] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:20:32] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:20:32] 💾 [SCALP] universe=74 saved=74 +[11:20:32] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:20:34] AFR 재진입 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:20:34] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:20:34] 💾 [SCALP] universe=75 saved=75 +[11:20:34] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:20:36] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:20:36] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:20:36] 💾 [SCALP] universe=74 saved=74 +[11:20:36] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:20:39] AFR 재진입 419080 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:20:39] [ls_cond_hist] AFR 재진입 419080 sid=SCALP name=scalp_re px=4385 alert=1045500200I +[11:20:39] 💾 [SCALP] universe=75 saved=75 +[11:20:39] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:20:39] AFR 이탈 419080 sid=SCALP name=scalp_re px=4380 alert=1045500200I +[11:20:39] [ls_cond_hist] AFR 이탈 419080 sid=SCALP name=scalp_re px=4380 alert=1045500200I +[11:20:39] 💾 [SCALP] universe=74 saved=74 +[11:20:39] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:20:40] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[11:20:40] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[11:20:40] 💾 [SCALP] universe=73 saved=73 +[11:20:40] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:20:43] AFR 이탈 456070 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[11:20:43] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[11:20:43] 💾 [SCALP] universe=72 saved=72 +[11:20:43] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:20:47] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:20:47] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:20:47] 💾 [SCALP] universe=73 saved=73 +[11:20:47] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:20:48] AFR 이탈 009520 sid=SCALP name=scalp_re px=10640 alert=1045500200I +[11:20:48] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10640 alert=1045500200I +[11:20:48] 💾 [SCALP] universe=72 saved=72 +[11:20:48] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:20:51] AFR 이탈 071970 sid=SCALP name=scalp_re px=63450 alert=1045500200I +[11:20:51] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63450 alert=1045500200I +[11:20:51] 💾 [SCALP] universe=71 saved=71 +[11:20:51] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:20:55] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[11:20:55] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[11:20:56] 💾 [SCALP] universe=72 saved=72 +[11:20:56] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:20:58] AFR 이탈 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:20:58] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:20:58] 💾 [SCALP] universe=71 saved=71 +[11:20:58] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:20:59] AFR 이탈 003535 sid=SCALP name=scalp_re px=5300 alert=1045500200I +[11:20:59] [ls_cond_hist] AFR 이탈 003535 sid=SCALP name=scalp_re px=5300 alert=1045500200I +[11:20:59] 💾 [SCALP] universe=70 saved=70 +[11:20:59] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[11:21:03] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[11:21:03] [ls_cond_hist] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[11:21:03] 💾 [SCALP] universe=71 saved=71 +[11:21:03] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:21:05] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[11:21:05] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[11:21:05] 💾 [SCALP] universe=72 saved=72 +[11:21:05] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:21:06] AFR 재진입 105740 sid=SCALP name=scalp_re px=6930 alert=1045500200I +[11:21:06] [ls_cond_hist] AFR 재진입 105740 sid=SCALP name=scalp_re px=6930 alert=1045500200I +[11:21:07] 💾 [SCALP] universe=73 saved=73 +[11:21:07] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:21:07] AFR 이탈 030530 sid=SCALP name=scalp_re px=16760 alert=1045500200I +[11:21:07] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16760 alert=1045500200I +[11:21:07] 💾 [SCALP] universe=72 saved=72 +[11:21:07] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:21:07] AFR 재진입 054920 sid=SCALP name=scalp_re px=3195 alert=1045500200I +[11:21:07] [ls_cond_hist] AFR 재진입 054920 sid=SCALP name=scalp_re px=3195 alert=1045500200I +[11:21:07] 💾 [SCALP] universe=73 saved=73 +[11:21:07] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:21:07] AFR 재진입 030530 sid=SCALP name=scalp_re px=16770 alert=1045500200I +[11:21:07] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16770 alert=1045500200I +[11:21:08] 💾 [SCALP] universe=74 saved=74 +[11:21:08] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:21:08] AFR 이탈 054920 sid=SCALP name=scalp_re px=3190 alert=1045500200I +[11:21:08] [ls_cond_hist] AFR 이탈 054920 sid=SCALP name=scalp_re px=3190 alert=1045500200I +[11:21:08] 💾 [SCALP] universe=73 saved=73 +[11:21:08] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:21:09] AFR 재진입 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:21:09] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:21:09] 💾 [SCALP] universe=74 saved=74 +[11:21:09] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:21:11] AFR 재진입 054920 sid=SCALP name=scalp_re px=3195 alert=1045500200I +[11:21:11] [ls_cond_hist] AFR 재진입 054920 sid=SCALP name=scalp_re px=3195 alert=1045500200I +[11:21:11] 💾 [SCALP] universe=75 saved=75 +[11:21:11] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:21:11] AFR 이탈 458650 sid=SCALP name=scalp_re px=7930 alert=1045500200I +[11:21:11] [ls_cond_hist] AFR 이탈 458650 sid=SCALP name=scalp_re px=7930 alert=1045500200I +[11:21:11] 💾 [SCALP] universe=74 saved=74 +[11:21:11] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:21:14] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:21:14] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:21:14] 💾 [SCALP] universe=73 saved=73 +[11:21:14] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:21:14] AFR 이탈 030530 sid=SCALP name=scalp_re px=16730 alert=1045500200I +[11:21:14] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16730 alert=1045500200I +[11:21:14] 💾 [SCALP] universe=72 saved=72 +[11:21:14] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:21:23] AFR 이탈 456070 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[11:21:23] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[11:21:23] 💾 [SCALP] universe=71 saved=71 +[11:21:23] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:21:23] AFR 재진입 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:21:23] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:21:23] 💾 [SCALP] universe=72 saved=72 +[11:21:23] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:21:30] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8910 alert=1045500200I +[11:21:30] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8910 alert=1045500200I +[11:21:30] 💾 [SCALP] universe=73 saved=73 +[11:21:30] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:21:31] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:21:31] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:21:31] 💾 [SCALP] universe=74 saved=74 +[11:21:31] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:21:33] AFR 재진입 458650 sid=SCALP name=scalp_re px=7940 alert=1045500200I +[11:21:33] [ls_cond_hist] AFR 재진입 458650 sid=SCALP name=scalp_re px=7940 alert=1045500200I +[11:21:33] 💾 [SCALP] universe=75 saved=75 +[11:21:33] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:21:46] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:21:46] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:21:46] 💾 [SCALP] universe=74 saved=74 +[11:21:46] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:21:47] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[11:21:47] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[11:21:47] 💾 [SCALP] universe=75 saved=75 +[11:21:47] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:21:51] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[11:21:51] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[11:21:51] 💾 [SCALP] universe=74 saved=74 +[11:21:51] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:21:53] AFR 이탈 456070 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[11:21:53] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[11:21:54] 💾 [SCALP] universe=73 saved=73 +[11:21:54] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:21:54] AFR 재진입 456070 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[11:21:54] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[11:21:54] 💾 [SCALP] universe=74 saved=74 +[11:21:54] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:21:54] AFR 재진입 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:21:54] [ls_cond_hist] AFR 재진입 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:21:54] 💾 [SCALP] universe=75 saved=75 +[11:21:54] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:22:00] AFR 재진입 411080 sid=SCALP name=scalp_re px=3820 alert=1045500200I +[11:22:00] [ls_cond_hist] AFR 재진입 411080 sid=SCALP name=scalp_re px=3820 alert=1045500200I +[11:22:00] 💾 [SCALP] universe=76 saved=76 +[11:22:00] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:22:02] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[11:22:02] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[11:22:02] 💾 [SCALP] universe=77 saved=77 +[11:22:02] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:22:05] AFR 이탈 100120 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[11:22:05] [ls_cond_hist] AFR 이탈 100120 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[11:22:05] 💾 [SCALP] universe=76 saved=76 +[11:22:05] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:22:10] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:22:10] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:22:10] 💾 [SCALP] universe=75 saved=75 +[11:22:10] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:22:10] AFR 이탈 456070 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[11:22:10] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[11:22:10] 💾 [SCALP] universe=74 saved=74 +[11:22:10] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:22:10] AFR 재진입 456070 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[11:22:10] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[11:22:10] 💾 [SCALP] universe=75 saved=75 +[11:22:10] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:22:15] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:22:15] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:22:15] 💾 [SCALP] universe=74 saved=74 +[11:22:15] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:22:16] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[11:22:16] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[11:22:16] 💾 [SCALP] universe=73 saved=73 +[11:22:16] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:22:19] AFR 이탈 458650 sid=SCALP name=scalp_re px=7910 alert=1045500200I +[11:22:19] [ls_cond_hist] AFR 이탈 458650 sid=SCALP name=scalp_re px=7910 alert=1045500200I +[11:22:19] 💾 [SCALP] universe=72 saved=72 +[11:22:19] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:22:19] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:22:19] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:22:19] 💾 [SCALP] universe=73 saved=73 +[11:22:19] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:22:19] AFR 이탈 054920 sid=SCALP name=scalp_re px=3185 alert=1045500200I +[11:22:19] [ls_cond_hist] AFR 이탈 054920 sid=SCALP name=scalp_re px=3185 alert=1045500200I +[11:22:19] 💾 [SCALP] universe=72 saved=72 +[11:22:19] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:22:20] AFR 이탈 456070 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[11:22:20] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[11:22:20] 💾 [SCALP] universe=71 saved=71 +[11:22:20] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:22:20] AFR 재진입 456070 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[11:22:20] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[11:22:20] 💾 [SCALP] universe=72 saved=72 +[11:22:20] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:22:21] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[11:22:21] [ls_cond_hist] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[11:22:21] 💾 [SCALP] universe=71 saved=71 +[11:22:21] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:22:22] AFR 재진입 100220 sid=SCALP name=scalp_re px=5010 alert=1045500200I +[11:22:22] [ls_cond_hist] AFR 재진입 100220 sid=SCALP name=scalp_re px=5010 alert=1045500200I +[11:22:22] 💾 [SCALP] universe=72 saved=72 +[11:22:22] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:22:29] AFR 이탈 456070 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[11:22:29] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[11:22:29] 💾 [SCALP] universe=71 saved=71 +[11:22:29] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:22:30] AFR 이탈 122310 sid=SCALP name=scalp_re px=3480 alert=1045500200I +[11:22:30] [ls_cond_hist] AFR 이탈 122310 sid=SCALP name=scalp_re px=3480 alert=1045500200I +[11:22:30] 💾 [SCALP] universe=70 saved=70 +[11:22:30] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[11:22:39] AFR 이탈 285130 sid=SCALP name=scalp_re px=40350 alert=1045500200I +[11:22:39] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40350 alert=1045500200I +[11:22:40] 💾 [SCALP] universe=69 saved=69 +[11:22:40] [ls_cond_hist] 💾 [SCALP] universe=69 saved=69 +[11:22:42] AFR 재진입 030530 sid=SCALP name=scalp_re px=16770 alert=1045500200I +[11:22:42] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16770 alert=1045500200I +[11:22:42] 💾 [SCALP] universe=70 saved=70 +[11:22:42] [ls_cond_hist] 💾 [SCALP] universe=70 saved=70 +[11:22:49] AFR 재진입 317830 sid=SCALP name=scalp_re px=4525 alert=1045500200I +[11:22:49] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4525 alert=1045500200I +[11:22:49] 💾 [SCALP] universe=71 saved=71 +[11:22:49] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:22:49] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:22:49] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:22:49] 💾 [SCALP] universe=72 saved=72 +[11:22:49] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:22:49] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:22:49] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:22:49] 💾 [SCALP] universe=71 saved=71 +[11:22:49] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:22:51] AFR 재진입 285130 sid=SCALP name=scalp_re px=40300 alert=1045500200I +[11:22:51] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40300 alert=1045500200I +[11:22:51] 💾 [SCALP] universe=72 saved=72 +[11:22:51] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:22:55] AFR 이탈 092460 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[11:22:55] [ls_cond_hist] AFR 이탈 092460 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[11:22:55] 💾 [SCALP] universe=71 saved=71 +[11:22:55] [ls_cond_hist] 💾 [SCALP] universe=71 saved=71 +[11:22:56] AFR 재진입 100120 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[11:22:56] [ls_cond_hist] AFR 재진입 100120 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[11:22:56] 💾 [SCALP] universe=72 saved=72 +[11:22:56] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:22:57] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:22:57] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:22:57] 💾 [SCALP] universe=73 saved=73 +[11:22:57] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:22:57] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:22:57] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:22:58] 💾 [SCALP] universe=72 saved=72 +[11:22:58] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:22:58] AFR 진입 101140 sid=SCALP name=scalp_re px=5180 alert=1045500200I +[11:22:58] [ls_cond_hist] AFR 진입 101140 sid=SCALP name=scalp_re px=5180 alert=1045500200I +[11:22:58] 💾 [SCALP] universe=73 saved=73 +[11:22:58] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:23:03] AFR 이탈 100120 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[11:23:03] [ls_cond_hist] AFR 이탈 100120 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[11:23:03] 💾 [SCALP] universe=72 saved=72 +[11:23:03] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:23:04] AFR 재진입 071970 sid=SCALP name=scalp_re px=63600 alert=1045500200I +[11:23:04] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63600 alert=1045500200I +[11:23:04] 💾 [SCALP] universe=73 saved=73 +[11:23:04] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:23:08] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[11:23:08] [ls_cond_hist] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[11:23:08] 💾 [SCALP] universe=72 saved=72 +[11:23:08] [ls_cond_hist] 💾 [SCALP] universe=72 saved=72 +[11:23:14] AFR 재진입 012630 sid=SCALP name=scalp_re px=22000 alert=1045500200I +[11:23:14] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=22000 alert=1045500200I +[11:23:14] 💾 [SCALP] universe=73 saved=73 +[11:23:14] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:23:18] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[11:23:18] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[11:23:18] 💾 [SCALP] universe=74 saved=74 +[11:23:18] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:23:25] AFR 재진입 054920 sid=SCALP name=scalp_re px=3185 alert=1045500200I +[11:23:25] [ls_cond_hist] AFR 재진입 054920 sid=SCALP name=scalp_re px=3185 alert=1045500200I +[11:23:26] 💾 [SCALP] universe=75 saved=75 +[11:23:26] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:23:26] AFR 재진입 290650 sid=SCALP name=scalp_re px=57500 alert=1045500200I +[11:23:26] [ls_cond_hist] AFR 재진입 290650 sid=SCALP name=scalp_re px=57500 alert=1045500200I +[11:23:26] 💾 [SCALP] universe=76 saved=76 +[11:23:26] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:23:29] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:23:29] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:23:29] 💾 [SCALP] universe=75 saved=75 +[11:23:29] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:23:32] AFR 이탈 012630 sid=SCALP name=scalp_re px=21950 alert=1045500200I +[11:23:32] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21950 alert=1045500200I +[11:23:33] 💾 [SCALP] universe=74 saved=74 +[11:23:33] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:23:43] AFR 이탈 475400 sid=SCALP name=scalp_re px=16290 alert=1045500200I +[11:23:43] [ls_cond_hist] AFR 이탈 475400 sid=SCALP name=scalp_re px=16290 alert=1045500200I +[11:23:43] 💾 [SCALP] universe=73 saved=73 +[11:23:43] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:23:44] AFR 재진입 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:23:44] [ls_cond_hist] AFR 재진입 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:23:44] 💾 [SCALP] universe=74 saved=74 +[11:23:44] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:23:50] AFR 재진입 456070 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[11:23:50] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[11:23:50] 💾 [SCALP] universe=75 saved=75 +[11:23:50] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:23:50] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:23:50] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:23:50] 💾 [SCALP] universe=76 saved=76 +[11:23:50] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:23:50] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:23:50] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:23:51] 💾 [SCALP] universe=77 saved=77 +[11:23:51] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:23:51] AFR 재진입 143240 sid=SCALP name=scalp_re px=16470 alert=1045500200I +[11:23:51] [ls_cond_hist] AFR 재진입 143240 sid=SCALP name=scalp_re px=16470 alert=1045500200I +[11:23:51] 💾 [SCALP] universe=78 saved=78 +[11:23:51] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:23:53] AFR 이탈 456070 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[11:23:53] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[11:23:53] 💾 [SCALP] universe=77 saved=77 +[11:23:53] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:23:53] AFR 재진입 456070 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[11:23:53] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[11:23:53] 💾 [SCALP] universe=78 saved=78 +[11:23:53] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:24:14] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[11:24:14] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[11:24:14] 💾 [SCALP] universe=77 saved=77 +[11:24:14] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:24:17] AFR 이탈 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[11:24:17] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[11:24:17] 💾 [SCALP] universe=76 saved=76 +[11:24:17] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:24:21] AFR 이탈 33626L sid=SCALP name=scalp_re px=6430 alert=1045500200I +[11:24:21] [ls_cond_hist] AFR 이탈 33626L sid=SCALP name=scalp_re px=6430 alert=1045500200I +[11:24:21] 💾 [SCALP] universe=75 saved=75 +[11:24:21] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:24:26] AFR 재진입 475400 sid=SCALP name=scalp_re px=16310 alert=1045500200I +[11:24:26] [ls_cond_hist] AFR 재진입 475400 sid=SCALP name=scalp_re px=16310 alert=1045500200I +[11:24:26] 💾 [SCALP] universe=76 saved=76 +[11:24:26] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:24:27] AFR 이탈 456070 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[11:24:27] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[11:24:27] 💾 [SCALP] universe=75 saved=75 +[11:24:27] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:24:28] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[11:24:28] [ls_cond_hist] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[11:24:29] 💾 [SCALP] universe=74 saved=74 +[11:24:29] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:24:29] AFR 재진입 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:24:29] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:24:30] 💾 [SCALP] universe=75 saved=75 +[11:24:30] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:24:32] AFR 이탈 456070 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[11:24:32] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[11:24:32] 💾 [SCALP] universe=74 saved=74 +[11:24:32] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:24:32] AFR 재진입 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:24:32] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[11:24:32] 💾 [SCALP] universe=75 saved=75 +[11:24:32] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:24:34] AFR 이탈 009520 sid=SCALP name=scalp_re px=10630 alert=1045500200I +[11:24:34] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10630 alert=1045500200I +[11:24:34] 💾 [SCALP] universe=74 saved=74 +[11:24:34] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:24:34] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:24:34] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:24:34] 💾 [SCALP] universe=73 saved=73 +[11:24:34] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:24:37] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:24:37] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:24:37] 💾 [SCALP] universe=74 saved=74 +[11:24:37] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:24:58] AFR 재진입 100120 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[11:24:58] [ls_cond_hist] AFR 재진입 100120 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[11:24:58] 💾 [SCALP] universe=75 saved=75 +[11:24:58] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:25:06] AFR 재진입 122310 sid=SCALP name=scalp_re px=3500 alert=1045500200I +[11:25:06] [ls_cond_hist] AFR 재진입 122310 sid=SCALP name=scalp_re px=3500 alert=1045500200I +[11:25:06] 💾 [SCALP] universe=76 saved=76 +[11:25:06] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:25:06] AFR 이탈 081180 sid=SCALP name=scalp_re px=5550 alert=1045500200I +[11:25:06] [ls_cond_hist] AFR 이탈 081180 sid=SCALP name=scalp_re px=5550 alert=1045500200I +[11:25:06] 💾 [SCALP] universe=75 saved=75 +[11:25:06] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:25:12] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:25:12] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:25:12] 💾 [SCALP] universe=76 saved=76 +[11:25:12] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:25:16] AFR 재진입 092460 sid=SCALP name=scalp_re px=16510 alert=1045500200I +[11:25:16] [ls_cond_hist] AFR 재진입 092460 sid=SCALP name=scalp_re px=16510 alert=1045500200I +[11:25:16] 💾 [SCALP] universe=77 saved=77 +[11:25:16] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:25:22] AFR 이탈 456070 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[11:25:22] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[11:25:22] 💾 [SCALP] universe=76 saved=76 +[11:25:22] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:25:25] AFR 재진입 081180 sid=SCALP name=scalp_re px=5580 alert=1045500200I +[11:25:25] [ls_cond_hist] AFR 재진입 081180 sid=SCALP name=scalp_re px=5580 alert=1045500200I +[11:25:25] 💾 [SCALP] universe=77 saved=77 +[11:25:25] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:25:27] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:25:27] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:25:28] 💾 [SCALP] universe=76 saved=76 +[11:25:28] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:25:32] AFR 재진입 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:25:32] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:25:32] 💾 [SCALP] universe=77 saved=77 +[11:25:32] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:25:32] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:25:32] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:25:33] 💾 [SCALP] universe=78 saved=78 +[11:25:33] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:25:33] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[11:25:33] [ls_cond_hist] AFR 이탈 081180 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[11:25:33] 💾 [SCALP] universe=77 saved=77 +[11:25:33] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:25:36] AFR 이탈 024840 sid=SCALP name=scalp_re px=4360 alert=1045500200I +[11:25:36] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4360 alert=1045500200I +[11:25:36] 💾 [SCALP] universe=76 saved=76 +[11:25:36] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:25:47] AFR 재진입 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:25:47] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:25:47] 💾 [SCALP] universe=77 saved=77 +[11:25:47] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:25:53] AFR 재진입 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:25:53] [ls_cond_hist] AFR 재진입 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:25:54] 💾 [SCALP] universe=78 saved=78 +[11:25:54] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:25:57] AFR 재진입 012630 sid=SCALP name=scalp_re px=22000 alert=1045500200I +[11:25:57] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=22000 alert=1045500200I +[11:25:57] 💾 [SCALP] universe=79 saved=79 +[11:25:57] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:26:03] AFR 이탈 290650 sid=SCALP name=scalp_re px=57800 alert=1045500200I +[11:26:03] [ls_cond_hist] AFR 이탈 290650 sid=SCALP name=scalp_re px=57800 alert=1045500200I +[11:26:03] 💾 [SCALP] universe=78 saved=78 +[11:26:03] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:26:11] AFR 재진입 071280 sid=SCALP name=scalp_re px=6540 alert=1045500200I +[11:26:11] [ls_cond_hist] AFR 재진입 071280 sid=SCALP name=scalp_re px=6540 alert=1045500200I +[11:26:11] 💾 [SCALP] universe=79 saved=79 +[11:26:11] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:26:15] AFR 이탈 411080 sid=SCALP name=scalp_re px=3840 alert=1045500200I +[11:26:15] [ls_cond_hist] AFR 이탈 411080 sid=SCALP name=scalp_re px=3840 alert=1045500200I +[11:26:15] 💾 [SCALP] universe=78 saved=78 +[11:26:15] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:26:19] AFR 재진입 005440 sid=SCALP name=scalp_re px=12230 alert=1045500200I +[11:26:19] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12230 alert=1045500200I +[11:26:19] 💾 [SCALP] universe=79 saved=79 +[11:26:19] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:26:21] AFR 재진입 300080 sid=SCALP name=scalp_re px=8070 alert=1045500200I +[11:26:21] [ls_cond_hist] AFR 재진입 300080 sid=SCALP name=scalp_re px=8070 alert=1045500200I +[11:26:22] 💾 [SCALP] universe=80 saved=80 +[11:26:22] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:26:23] AFR 이탈 071280 sid=SCALP name=scalp_re px=6530 alert=1045500200I +[11:26:23] [ls_cond_hist] AFR 이탈 071280 sid=SCALP name=scalp_re px=6530 alert=1045500200I +[11:26:23] 💾 [SCALP] universe=79 saved=79 +[11:26:23] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:26:41] AFR 재진입 071280 sid=SCALP name=scalp_re px=6560 alert=1045500200I +[11:26:41] [ls_cond_hist] AFR 재진입 071280 sid=SCALP name=scalp_re px=6560 alert=1045500200I +[11:26:41] 💾 [SCALP] universe=80 saved=80 +[11:26:41] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:26:42] AFR 이탈 005440 sid=SCALP name=scalp_re px=12220 alert=1045500200I +[11:26:42] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12220 alert=1045500200I +[11:26:42] 💾 [SCALP] universe=79 saved=79 +[11:26:42] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:26:56] AFR 이탈 092460 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[11:26:56] [ls_cond_hist] AFR 이탈 092460 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[11:26:56] 💾 [SCALP] universe=78 saved=78 +[11:26:56] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:27:00] AFR 이탈 014530 sid=SCALP name=scalp_re px=3155 alert=1045500200I +[11:27:00] [ls_cond_hist] AFR 이탈 014530 sid=SCALP name=scalp_re px=3155 alert=1045500200I +[11:27:00] 💾 [SCALP] universe=77 saved=77 +[11:27:00] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:27:02] AFR 이탈 380550 sid=SCALP name=scalp_re px=7950 alert=1045500200I +[11:27:02] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7950 alert=1045500200I +[11:27:02] 💾 [SCALP] universe=76 saved=76 +[11:27:02] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:27:05] AFR 이탈 475400 sid=SCALP name=scalp_re px=16530 alert=1045500200I +[11:27:05] [ls_cond_hist] AFR 이탈 475400 sid=SCALP name=scalp_re px=16530 alert=1045500200I +[11:27:05] 💾 [SCALP] universe=75 saved=75 +[11:27:05] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:27:06] AFR 재진입 456070 sid=SCALP name=scalp_re px=6020 alert=1045500200I +[11:27:06] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6020 alert=1045500200I +[11:27:06] 💾 [SCALP] universe=76 saved=76 +[11:27:06] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:27:18] AFR 이탈 105740 sid=SCALP name=scalp_re px=6950 alert=1045500200I +[11:27:18] [ls_cond_hist] AFR 이탈 105740 sid=SCALP name=scalp_re px=6950 alert=1045500200I +[11:27:18] 💾 [SCALP] universe=75 saved=75 +[11:27:18] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:27:26] AFR 재진입 458650 sid=SCALP name=scalp_re px=7960 alert=1045500200I +[11:27:26] [ls_cond_hist] AFR 재진입 458650 sid=SCALP name=scalp_re px=7960 alert=1045500200I +[11:27:26] 💾 [SCALP] universe=76 saved=76 +[11:27:26] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:27:32] AFR 재진입 475400 sid=SCALP name=scalp_re px=16400 alert=1045500200I +[11:27:32] [ls_cond_hist] AFR 재진입 475400 sid=SCALP name=scalp_re px=16400 alert=1045500200I +[11:27:32] 💾 [SCALP] universe=77 saved=77 +[11:27:32] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:27:36] AFR 재진입 380550 sid=SCALP name=scalp_re px=7890 alert=1045500200I +[11:27:36] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7890 alert=1045500200I +[11:27:36] 💾 [SCALP] universe=78 saved=78 +[11:27:36] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:27:46] AFR 재진입 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:27:46] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:27:46] 💾 [SCALP] universe=79 saved=79 +[11:27:46] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:28:02] AFR 재진입 092460 sid=SCALP name=scalp_re px=16530 alert=1045500200I +[11:28:02] [ls_cond_hist] AFR 재진입 092460 sid=SCALP name=scalp_re px=16530 alert=1045500200I +[11:28:02] 💾 [SCALP] universe=80 saved=80 +[11:28:02] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:28:19] AFR 이탈 456070 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[11:28:19] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[11:28:19] 💾 [SCALP] universe=79 saved=79 +[11:28:19] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:28:29] AFR 재진입 456070 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[11:28:29] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[11:28:30] 💾 [SCALP] universe=80 saved=80 +[11:28:30] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:28:30] AFR 이탈 475400 sid=SCALP name=scalp_re px=16310 alert=1045500200I +[11:28:30] [ls_cond_hist] AFR 이탈 475400 sid=SCALP name=scalp_re px=16310 alert=1045500200I +[11:28:30] 💾 [SCALP] universe=79 saved=79 +[11:28:30] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:28:33] AFR 이탈 456070 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[11:28:33] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[11:28:33] 💾 [SCALP] universe=78 saved=78 +[11:28:33] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:28:47] AFR 진입 378340 sid=SCALP name=scalp_re px=9990 alert=1045500200I +[11:28:47] [ls_cond_hist] AFR 진입 378340 sid=SCALP name=scalp_re px=9990 alert=1045500200I +[11:28:47] 💾 [SCALP] universe=79 saved=79 +[11:28:47] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:28:55] AFR 재진입 005440 sid=SCALP name=scalp_re px=12230 alert=1045500200I +[11:28:55] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12230 alert=1045500200I +[11:28:55] 💾 [SCALP] universe=80 saved=80 +[11:28:55] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:28:56] AFR 이탈 092460 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[11:28:56] [ls_cond_hist] AFR 이탈 092460 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[11:28:56] 💾 [SCALP] universe=79 saved=79 +[11:28:56] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:29:00] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15250 alert=1045500200I +[11:29:00] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15250 alert=1045500200I +[11:29:00] 💾 [SCALP] universe=78 saved=78 +[11:29:00] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:29:06] AFR 이탈 005440 sid=SCALP name=scalp_re px=12220 alert=1045500200I +[11:29:06] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12220 alert=1045500200I +[11:29:06] 💾 [SCALP] universe=77 saved=77 +[11:29:06] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:29:09] AFR 이탈 307280 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[11:29:09] [ls_cond_hist] AFR 이탈 307280 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[11:29:09] 💾 [SCALP] universe=76 saved=76 +[11:29:09] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:29:10] AFR 재진입 456070 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[11:29:10] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[11:29:10] 💾 [SCALP] universe=77 saved=77 +[11:29:10] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:29:13] AFR 이탈 054920 sid=SCALP name=scalp_re px=3180 alert=1045500200I +[11:29:13] [ls_cond_hist] AFR 이탈 054920 sid=SCALP name=scalp_re px=3180 alert=1045500200I +[11:29:13] 💾 [SCALP] universe=76 saved=76 +[11:29:13] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:29:18] AFR 재진입 003535 sid=SCALP name=scalp_re px=5310 alert=1045500200I +[11:29:18] [ls_cond_hist] AFR 재진입 003535 sid=SCALP name=scalp_re px=5310 alert=1045500200I +[11:29:18] 💾 [SCALP] universe=77 saved=77 +[11:29:18] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:29:30] AFR 재진입 054920 sid=SCALP name=scalp_re px=3200 alert=1045500200I +[11:29:30] [ls_cond_hist] AFR 재진입 054920 sid=SCALP name=scalp_re px=3200 alert=1045500200I +[11:29:30] 💾 [SCALP] universe=78 saved=78 +[11:29:30] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:29:35] AFR 재진입 493330 sid=SCALP name=scalp_re px=9060 alert=1045500200I +[11:29:35] [ls_cond_hist] AFR 재진입 493330 sid=SCALP name=scalp_re px=9060 alert=1045500200I +[11:29:35] 💾 [SCALP] universe=79 saved=79 +[11:29:35] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:29:38] AFR 이탈 456070 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[11:29:38] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[11:29:38] 💾 [SCALP] universe=78 saved=78 +[11:29:38] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:29:40] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:29:40] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:29:40] 💾 [SCALP] universe=77 saved=77 +[11:29:40] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:30:00] AFR 이탈 012630 sid=SCALP name=scalp_re px=21950 alert=1045500200I +[11:30:00] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21950 alert=1045500200I +[11:30:00] 💾 [SCALP] universe=76 saved=76 +[11:30:00] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:30:06] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15230 alert=1045500200I +[11:30:06] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15230 alert=1045500200I +[11:30:06] 💾 [SCALP] universe=77 saved=77 +[11:30:06] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:30:09] AFR 재진입 456070 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[11:30:09] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[11:30:09] 💾 [SCALP] universe=78 saved=78 +[11:30:09] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:30:10] AFR 재진입 023800 sid=SCALP name=scalp_re px=5360 alert=1045500200I +[11:30:10] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5360 alert=1045500200I +[11:30:10] 💾 [SCALP] universe=79 saved=79 +[11:30:10] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:30:12] AFR 이탈 100220 sid=SCALP name=scalp_re px=5040 alert=1045500200I +[11:30:12] [ls_cond_hist] AFR 이탈 100220 sid=SCALP name=scalp_re px=5040 alert=1045500200I +[11:30:12] 💾 [SCALP] universe=78 saved=78 +[11:30:12] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:30:20] AFR 이탈 456070 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[11:30:20] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[11:30:20] 💾 [SCALP] universe=77 saved=77 +[11:30:20] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:30:22] AFR 재진입 411080 sid=SCALP name=scalp_re px=3825 alert=1045500200I +[11:30:22] [ls_cond_hist] AFR 재진입 411080 sid=SCALP name=scalp_re px=3825 alert=1045500200I +[11:30:22] 💾 [SCALP] universe=78 saved=78 +[11:30:22] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:30:40] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[11:30:40] [ls_cond_hist] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[11:30:40] 💾 [SCALP] universe=79 saved=79 +[11:30:40] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:30:41] AFR 이탈 380550 sid=SCALP name=scalp_re px=7880 alert=1045500200I +[11:30:41] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7880 alert=1045500200I +[11:30:41] 💾 [SCALP] universe=78 saved=78 +[11:30:41] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:30:49] AFR 재진입 456070 sid=SCALP name=scalp_re px=6020 alert=1045500200I +[11:30:49] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6020 alert=1045500200I +[11:30:49] 💾 [SCALP] universe=79 saved=79 +[11:30:49] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:30:58] AFR 재진입 307280 sid=SCALP name=scalp_re px=5580 alert=1045500200I +[11:30:58] [ls_cond_hist] AFR 재진입 307280 sid=SCALP name=scalp_re px=5580 alert=1045500200I +[11:30:58] 💾 [SCALP] universe=80 saved=80 +[11:30:58] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:31:06] AFR 이탈 493330 sid=SCALP name=scalp_re px=9040 alert=1045500200I +[11:31:06] [ls_cond_hist] AFR 이탈 493330 sid=SCALP name=scalp_re px=9040 alert=1045500200I +[11:31:06] 💾 [SCALP] universe=79 saved=79 +[11:31:06] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:31:16] AFR 이탈 137950 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[11:31:16] [ls_cond_hist] AFR 이탈 137950 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[11:31:16] 💾 [SCALP] universe=78 saved=78 +[11:31:16] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:31:24] AFR 이탈 054920 sid=SCALP name=scalp_re px=3205 alert=1045500200I +[11:31:24] [ls_cond_hist] AFR 이탈 054920 sid=SCALP name=scalp_re px=3205 alert=1045500200I +[11:31:24] 💾 [SCALP] universe=77 saved=77 +[11:31:24] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:31:27] AFR 재진입 105740 sid=SCALP name=scalp_re px=6920 alert=1045500200I +[11:31:27] [ls_cond_hist] AFR 재진입 105740 sid=SCALP name=scalp_re px=6920 alert=1045500200I +[11:31:27] 💾 [SCALP] universe=78 saved=78 +[11:31:27] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:31:39] AFR 이탈 071280 sid=SCALP name=scalp_re px=6530 alert=1045500200I +[11:31:39] [ls_cond_hist] AFR 이탈 071280 sid=SCALP name=scalp_re px=6530 alert=1045500200I +[11:31:39] 💾 [SCALP] universe=77 saved=77 +[11:31:39] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:31:39] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:31:39] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:31:39] 💾 [SCALP] universe=78 saved=78 +[11:31:39] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:31:42] AFR 재진입 059270 sid=SCALP name=scalp_re px=5240 alert=1045500200I +[11:31:42] [ls_cond_hist] AFR 재진입 059270 sid=SCALP name=scalp_re px=5240 alert=1045500200I +[11:31:42] 💾 [SCALP] universe=79 saved=79 +[11:31:42] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:31:45] AFR 이탈 456070 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[11:31:45] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[11:31:45] 💾 [SCALP] universe=78 saved=78 +[11:31:45] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:31:46] AFR 재진입 348030 sid=SCALP name=scalp_re px=3115 alert=1045500200I +[11:31:46] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3115 alert=1045500200I +[11:31:46] 💾 [SCALP] universe=79 saved=79 +[11:31:46] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:32:00] AFR 재진입 054920 sid=SCALP name=scalp_re px=3190 alert=1045500200I +[11:32:00] [ls_cond_hist] AFR 재진입 054920 sid=SCALP name=scalp_re px=3190 alert=1045500200I +[11:32:00] 💾 [SCALP] universe=80 saved=80 +[11:32:00] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:32:01] AFR 이탈 054920 sid=SCALP name=scalp_re px=3195 alert=1045500200I +[11:32:01] [ls_cond_hist] AFR 이탈 054920 sid=SCALP name=scalp_re px=3195 alert=1045500200I +[11:32:02] 💾 [SCALP] universe=79 saved=79 +[11:32:02] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:32:04] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[11:32:04] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3745 alert=1045500200I +[11:32:04] 💾 [SCALP] universe=80 saved=80 +[11:32:04] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:32:05] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:32:05] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:32:05] 💾 [SCALP] universe=79 saved=79 +[11:32:05] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:32:06] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[11:32:06] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[11:32:06] 💾 [SCALP] universe=80 saved=80 +[11:32:06] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:32:08] AFR 이탈 030530 sid=SCALP name=scalp_re px=16750 alert=1045500200I +[11:32:08] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16750 alert=1045500200I +[11:32:08] 💾 [SCALP] universe=79 saved=79 +[11:32:08] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:32:08] AFR 재진입 030530 sid=SCALP name=scalp_re px=16770 alert=1045500200I +[11:32:08] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16770 alert=1045500200I +[11:32:09] 💾 [SCALP] universe=80 saved=80 +[11:32:09] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:32:13] AFR 이탈 030530 sid=SCALP name=scalp_re px=16750 alert=1045500200I +[11:32:13] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16750 alert=1045500200I +[11:32:13] 💾 [SCALP] universe=79 saved=79 +[11:32:13] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:32:16] AFR 이탈 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[11:32:16] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[11:32:16] 💾 [SCALP] universe=78 saved=78 +[11:32:16] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:32:24] AFR 재진입 014530 sid=SCALP name=scalp_re px=3160 alert=1045500200I +[11:32:24] [ls_cond_hist] AFR 재진입 014530 sid=SCALP name=scalp_re px=3160 alert=1045500200I +[11:32:24] 💾 [SCALP] universe=79 saved=79 +[11:32:24] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:32:25] AFR 진입 039010 sid=SCALP name=scalp_re px=6400 alert=1045500200I +[11:32:25] [ls_cond_hist] AFR 진입 039010 sid=SCALP name=scalp_re px=6400 alert=1045500200I +[11:32:25] 💾 [SCALP] universe=80 saved=80 +[11:32:25] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:32:28] AFR 이탈 024840 sid=SCALP name=scalp_re px=4360 alert=1045500200I +[11:32:28] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4360 alert=1045500200I +[11:32:28] 💾 [SCALP] universe=79 saved=79 +[11:32:28] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:32:35] AFR 이탈 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[11:32:35] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[11:32:35] 💾 [SCALP] universe=78 saved=78 +[11:32:35] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:32:36] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:32:36] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:32:36] 💾 [SCALP] universe=79 saved=79 +[11:32:36] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:32:40] AFR 재진입 024840 sid=SCALP name=scalp_re px=4370 alert=1045500200I +[11:32:40] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4370 alert=1045500200I +[11:32:41] 💾 [SCALP] universe=80 saved=80 +[11:32:41] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:32:41] AFR 이탈 024840 sid=SCALP name=scalp_re px=4360 alert=1045500200I +[11:32:41] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4360 alert=1045500200I +[11:32:41] 💾 [SCALP] universe=79 saved=79 +[11:32:41] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:32:43] AFR 재진입 456070 sid=SCALP name=scalp_re px=5980 alert=1045500200I +[11:32:43] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5980 alert=1045500200I +[11:32:43] 💾 [SCALP] universe=80 saved=80 +[11:32:43] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:32:44] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[11:32:44] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[11:32:44] 💾 [SCALP] universe=81 saved=81 +[11:32:44] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:32:57] AFR 이탈 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[11:32:57] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[11:32:57] 💾 [SCALP] universe=80 saved=80 +[11:32:57] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:32:58] AFR 이탈 456070 sid=SCALP name=scalp_re px=5970 alert=1045500200I +[11:32:58] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5970 alert=1045500200I +[11:32:58] 💾 [SCALP] universe=79 saved=79 +[11:32:58] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:33:00] AFR 이탈 488900 sid=SCALP name=scalp_re px=7700 alert=1045500200I +[11:33:00] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7700 alert=1045500200I +[11:33:00] 💾 [SCALP] universe=78 saved=78 +[11:33:00] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:33:08] AFR 재진입 456070 sid=SCALP name=scalp_re px=5980 alert=1045500200I +[11:33:08] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5980 alert=1045500200I +[11:33:08] 💾 [SCALP] universe=79 saved=79 +[11:33:08] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:33:12] AFR 진입 126640 sid=SCALP name=scalp_re px=4000 alert=1045500200I +[11:33:12] [ls_cond_hist] AFR 진입 126640 sid=SCALP name=scalp_re px=4000 alert=1045500200I +[11:33:12] 💾 [SCALP] universe=80 saved=80 +[11:33:12] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:33:14] AFR 이탈 064850 sid=SCALP name=scalp_re px=18480 alert=1045500200I +[11:33:14] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18480 alert=1045500200I +[11:33:14] 💾 [SCALP] universe=79 saved=79 +[11:33:14] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:33:18] AFR 이탈 456070 sid=SCALP name=scalp_re px=5970 alert=1045500200I +[11:33:18] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5970 alert=1045500200I +[11:33:18] 💾 [SCALP] universe=78 saved=78 +[11:33:18] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:33:24] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[11:33:24] [ls_cond_hist] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[11:33:24] 💾 [SCALP] universe=77 saved=77 +[11:33:24] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:33:27] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:33:27] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:33:27] 💾 [SCALP] universe=78 saved=78 +[11:33:27] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:33:34] AFR 이탈 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[11:33:34] [ls_cond_hist] AFR 이탈 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[11:33:34] 💾 [SCALP] universe=77 saved=77 +[11:33:34] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:33:44] AFR 재진입 290650 sid=SCALP name=scalp_re px=57500 alert=1045500200I +[11:33:44] [ls_cond_hist] AFR 재진입 290650 sid=SCALP name=scalp_re px=57500 alert=1045500200I +[11:33:44] 💾 [SCALP] universe=78 saved=78 +[11:33:44] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:33:53] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:33:53] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:33:53] 💾 [SCALP] universe=79 saved=79 +[11:33:53] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:34:00] AFR 재진입 064850 sid=SCALP name=scalp_re px=18550 alert=1045500200I +[11:34:00] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18550 alert=1045500200I +[11:34:00] 💾 [SCALP] universe=80 saved=80 +[11:34:00] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:34:04] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:34:04] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:34:04] 💾 [SCALP] universe=79 saved=79 +[11:34:04] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:34:04] AFR 진입 441270 sid=SCALP name=scalp_re px=6810 alert=1045500200I +[11:34:04] [ls_cond_hist] AFR 진입 441270 sid=SCALP name=scalp_re px=6810 alert=1045500200I +[11:34:04] 💾 [SCALP] universe=80 saved=80 +[11:34:04] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:34:14] AFR 이탈 009520 sid=SCALP name=scalp_re px=10620 alert=1045500200I +[11:34:14] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10620 alert=1045500200I +[11:34:14] 💾 [SCALP] universe=79 saved=79 +[11:34:14] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:34:14] AFR 재진입 009520 sid=SCALP name=scalp_re px=10590 alert=1045500200I +[11:34:14] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10590 alert=1045500200I +[11:34:14] 💾 [SCALP] universe=80 saved=80 +[11:34:14] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:34:21] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:34:21] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:34:21] 💾 [SCALP] universe=81 saved=81 +[11:34:21] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:34:33] AFR 이탈 003535 sid=SCALP name=scalp_re px=5300 alert=1045500200I +[11:34:33] [ls_cond_hist] AFR 이탈 003535 sid=SCALP name=scalp_re px=5300 alert=1045500200I +[11:34:33] 💾 [SCALP] universe=80 saved=80 +[11:34:33] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:34:33] AFR 재진입 419080 sid=SCALP name=scalp_re px=4325 alert=1045500200I +[11:34:33] [ls_cond_hist] AFR 재진입 419080 sid=SCALP name=scalp_re px=4325 alert=1045500200I +[11:34:33] 💾 [SCALP] universe=81 saved=81 +[11:34:33] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:34:37] AFR 재진입 488900 sid=SCALP name=scalp_re px=7700 alert=1045500200I +[11:34:37] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7700 alert=1045500200I +[11:34:37] 💾 [SCALP] universe=82 saved=82 +[11:34:37] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:34:55] AFR 재진입 024840 sid=SCALP name=scalp_re px=4285 alert=1045500200I +[11:34:55] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4285 alert=1045500200I +[11:34:55] 💾 [SCALP] universe=83 saved=83 +[11:34:55] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:34:57] AFR 이탈 024840 sid=SCALP name=scalp_re px=4290 alert=1045500200I +[11:34:57] [ls_cond_hist] AFR 이탈 024840 sid=SCALP name=scalp_re px=4290 alert=1045500200I +[11:34:57] 💾 [SCALP] universe=82 saved=82 +[11:34:57] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:34:58] AFR 이탈 064850 sid=SCALP name=scalp_re px=18470 alert=1045500200I +[11:34:58] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18470 alert=1045500200I +[11:34:58] 💾 [SCALP] universe=81 saved=81 +[11:34:58] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:34:59] AFR 재진입 137950 sid=SCALP name=scalp_re px=3005 alert=1045500200I +[11:34:59] [ls_cond_hist] AFR 재진입 137950 sid=SCALP name=scalp_re px=3005 alert=1045500200I +[11:34:59] 💾 [SCALP] universe=82 saved=82 +[11:34:59] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:35:05] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8860 alert=1045500200I +[11:35:05] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8860 alert=1045500200I +[11:35:05] 💾 [SCALP] universe=81 saved=81 +[11:35:05] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:35:05] AFR 이탈 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[11:35:05] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[11:35:05] 💾 [SCALP] universe=80 saved=80 +[11:35:05] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:35:14] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[11:35:14] [ls_cond_hist] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[11:35:14] 💾 [SCALP] universe=79 saved=79 +[11:35:14] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:35:15] AFR 이탈 101140 sid=SCALP name=scalp_re px=5160 alert=1045500200I +[11:35:15] [ls_cond_hist] AFR 이탈 101140 sid=SCALP name=scalp_re px=5160 alert=1045500200I +[11:35:15] 💾 [SCALP] universe=78 saved=78 +[11:35:15] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:35:28] AFR 이탈 071970 sid=SCALP name=scalp_re px=63450 alert=1045500200I +[11:35:28] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63450 alert=1045500200I +[11:35:28] 💾 [SCALP] universe=77 saved=77 +[11:35:28] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:35:33] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[11:35:33] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[11:35:33] 💾 [SCALP] universe=78 saved=78 +[11:35:33] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:35:33] AFR 재진입 456070 sid=SCALP name=scalp_re px=5970 alert=1045500200I +[11:35:33] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5970 alert=1045500200I +[11:35:34] 💾 [SCALP] universe=79 saved=79 +[11:35:34] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:35:47] AFR 이탈 456070 sid=SCALP name=scalp_re px=5960 alert=1045500200I +[11:35:47] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5960 alert=1045500200I +[11:35:47] 💾 [SCALP] universe=78 saved=78 +[11:35:47] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:35:51] AFR 이탈 950190 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[11:35:51] [ls_cond_hist] AFR 이탈 950190 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[11:35:51] 💾 [SCALP] universe=77 saved=77 +[11:35:51] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:35:55] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[11:35:55] [ls_cond_hist] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[11:35:55] 💾 [SCALP] universe=78 saved=78 +[11:35:55] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:35:56] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:35:56] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:35:56] 💾 [SCALP] universe=79 saved=79 +[11:35:56] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:36:01] AFR 재진입 024840 sid=SCALP name=scalp_re px=4290 alert=1045500200I +[11:36:01] [ls_cond_hist] AFR 재진입 024840 sid=SCALP name=scalp_re px=4290 alert=1045500200I +[11:36:01] 💾 [SCALP] universe=80 saved=80 +[11:36:01] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:36:15] AFR 이탈 060900 sid=SCALP name=scalp_re px=4405 alert=1045500200I +[11:36:15] [ls_cond_hist] AFR 이탈 060900 sid=SCALP name=scalp_re px=4405 alert=1045500200I +[11:36:15] 💾 [SCALP] universe=79 saved=79 +[11:36:15] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:36:30] AFR 이탈 137950 sid=SCALP name=scalp_re px=2985 alert=1045500200I +[11:36:30] [ls_cond_hist] AFR 이탈 137950 sid=SCALP name=scalp_re px=2985 alert=1045500200I +[11:36:30] 💾 [SCALP] universe=78 saved=78 +[11:36:30] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:36:45] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8850 alert=1045500200I +[11:36:45] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8850 alert=1045500200I +[11:36:45] 💾 [SCALP] universe=79 saved=79 +[11:36:45] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:36:46] AFR 이탈 348030 sid=SCALP name=scalp_re px=3120 alert=1045500200I +[11:36:46] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=3120 alert=1045500200I +[11:36:46] 💾 [SCALP] universe=78 saved=78 +[11:36:46] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:36:57] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:36:57] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:36:57] 💾 [SCALP] universe=79 saved=79 +[11:36:57] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:36:57] AFR 재진입 030530 sid=SCALP name=scalp_re px=16760 alert=1045500200I +[11:36:57] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16760 alert=1045500200I +[11:36:57] 💾 [SCALP] universe=80 saved=80 +[11:36:57] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:36:58] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:36:58] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:36:58] 💾 [SCALP] universe=79 saved=79 +[11:36:58] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:37:00] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:37:00] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:37:00] 💾 [SCALP] universe=80 saved=80 +[11:37:00] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:37:02] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[11:37:02] [ls_cond_hist] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[11:37:02] 💾 [SCALP] universe=79 saved=79 +[11:37:02] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:37:05] AFR 재진입 054920 sid=SCALP name=scalp_re px=3190 alert=1045500200I +[11:37:05] [ls_cond_hist] AFR 재진입 054920 sid=SCALP name=scalp_re px=3190 alert=1045500200I +[11:37:05] 💾 [SCALP] universe=80 saved=80 +[11:37:05] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:37:12] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:37:12] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:37:12] 💾 [SCALP] universe=79 saved=79 +[11:37:12] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:37:16] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:37:16] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:37:16] 💾 [SCALP] universe=80 saved=80 +[11:37:16] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:37:17] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:37:17] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:37:17] 💾 [SCALP] universe=79 saved=79 +[11:37:17] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:37:21] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:37:21] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:37:21] 💾 [SCALP] universe=78 saved=78 +[11:37:21] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:37:22] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[11:37:22] [ls_cond_hist] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[11:37:22] 💾 [SCALP] universe=79 saved=79 +[11:37:22] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:37:35] AFR 이탈 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[11:37:35] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[11:37:35] 💾 [SCALP] universe=78 saved=78 +[11:37:35] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:37:35] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8820 alert=1045500200I +[11:37:35] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8820 alert=1045500200I +[11:37:35] 💾 [SCALP] universe=77 saved=77 +[11:37:35] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:37:41] AFR 이탈 030530 sid=SCALP name=scalp_re px=16750 alert=1045500200I +[11:37:41] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16750 alert=1045500200I +[11:37:41] 💾 [SCALP] universe=76 saved=76 +[11:37:41] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:37:49] AFR 이탈 009520 sid=SCALP name=scalp_re px=10650 alert=1045500200I +[11:37:49] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10650 alert=1045500200I +[11:37:49] 💾 [SCALP] universe=75 saved=75 +[11:37:49] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:37:50] AFR 재진입 030530 sid=SCALP name=scalp_re px=16760 alert=1045500200I +[11:37:50] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16760 alert=1045500200I +[11:37:50] 💾 [SCALP] universe=76 saved=76 +[11:37:50] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:38:07] AFR 재진입 456070 sid=SCALP name=scalp_re px=5970 alert=1045500200I +[11:38:07] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5970 alert=1045500200I +[11:38:08] 💾 [SCALP] universe=77 saved=77 +[11:38:08] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:38:08] AFR 이탈 456070 sid=SCALP name=scalp_re px=5960 alert=1045500200I +[11:38:08] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5960 alert=1045500200I +[11:38:08] 💾 [SCALP] universe=76 saved=76 +[11:38:08] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:38:17] AFR 재진입 456070 sid=SCALP name=scalp_re px=5970 alert=1045500200I +[11:38:17] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5970 alert=1045500200I +[11:38:17] 💾 [SCALP] universe=77 saved=77 +[11:38:17] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:38:24] AFR 이탈 290650 sid=SCALP name=scalp_re px=57800 alert=1045500200I +[11:38:24] [ls_cond_hist] AFR 이탈 290650 sid=SCALP name=scalp_re px=57800 alert=1045500200I +[11:38:24] 💾 [SCALP] universe=76 saved=76 +[11:38:24] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:38:26] AFR 재진입 071280 sid=SCALP name=scalp_re px=6530 alert=1045500200I +[11:38:26] [ls_cond_hist] AFR 재진입 071280 sid=SCALP name=scalp_re px=6530 alert=1045500200I +[11:38:26] 💾 [SCALP] universe=77 saved=77 +[11:38:26] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:38:31] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:38:31] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:38:32] 💾 [SCALP] universe=78 saved=78 +[11:38:32] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:38:38] AFR 재진입 012630 sid=SCALP name=scalp_re px=21950 alert=1045500200I +[11:38:38] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21950 alert=1045500200I +[11:38:38] 💾 [SCALP] universe=79 saved=79 +[11:38:38] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:38:44] AFR 이탈 105740 sid=SCALP name=scalp_re px=6950 alert=1045500200I +[11:38:44] [ls_cond_hist] AFR 이탈 105740 sid=SCALP name=scalp_re px=6950 alert=1045500200I +[11:38:44] 💾 [SCALP] universe=78 saved=78 +[11:38:44] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:38:49] AFR 이탈 143240 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[11:38:49] [ls_cond_hist] AFR 이탈 143240 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[11:38:49] 💾 [SCALP] universe=77 saved=77 +[11:38:49] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:38:49] AFR 재진입 143240 sid=SCALP name=scalp_re px=16470 alert=1045500200I +[11:38:49] [ls_cond_hist] AFR 재진입 143240 sid=SCALP name=scalp_re px=16470 alert=1045500200I +[11:38:49] 💾 [SCALP] universe=78 saved=78 +[11:38:49] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:38:50] AFR 이탈 143240 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[11:38:50] [ls_cond_hist] AFR 이탈 143240 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[11:38:50] 💾 [SCALP] universe=77 saved=77 +[11:38:50] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:38:58] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:38:58] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:38:58] 💾 [SCALP] universe=76 saved=76 +[11:38:58] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:39:10] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:39:10] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:39:10] 💾 [SCALP] universe=77 saved=77 +[11:39:10] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:39:18] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[11:39:18] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[11:39:18] 💾 [SCALP] universe=76 saved=76 +[11:39:18] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:39:28] AFR 재진입 064850 sid=SCALP name=scalp_re px=18500 alert=1045500200I +[11:39:28] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18500 alert=1045500200I +[11:39:28] 💾 [SCALP] universe=77 saved=77 +[11:39:28] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:39:29] AFR 이탈 000225 sid=SCALP name=scalp_re px=3675 alert=1045500200I +[11:39:29] [ls_cond_hist] AFR 이탈 000225 sid=SCALP name=scalp_re px=3675 alert=1045500200I +[11:39:29] 💾 [SCALP] universe=76 saved=76 +[11:39:29] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:39:39] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:39:39] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:39:40] 💾 [SCALP] universe=77 saved=77 +[11:39:40] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:39:44] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:39:44] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:39:44] 💾 [SCALP] universe=76 saved=76 +[11:39:44] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:39:50] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:39:50] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:39:50] 💾 [SCALP] universe=77 saved=77 +[11:39:50] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:39:56] AFR 진입 140670 sid=SCALP name=scalp_re px=8900 alert=1045500200I +[11:39:56] [ls_cond_hist] AFR 진입 140670 sid=SCALP name=scalp_re px=8900 alert=1045500200I +[11:39:56] 💾 [SCALP] universe=78 saved=78 +[11:39:56] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:40:00] AFR 이탈 012630 sid=SCALP name=scalp_re px=21900 alert=1045500200I +[11:40:00] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21900 alert=1045500200I +[11:40:01] 💾 [SCALP] universe=77 saved=77 +[11:40:01] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:40:01] AFR 이탈 338840 sid=SCALP name=scalp_re px=9340 alert=1045500200I +[11:40:01] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9340 alert=1045500200I +[11:40:01] 💾 [SCALP] universe=76 saved=76 +[11:40:01] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:40:04] AFR 이탈 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[11:40:04] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[11:40:04] 💾 [SCALP] universe=75 saved=75 +[11:40:04] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:40:04] AFR 재진입 137950 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[11:40:04] [ls_cond_hist] AFR 재진입 137950 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[11:40:05] 💾 [SCALP] universe=76 saved=76 +[11:40:05] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:40:05] AFR 재진입 060900 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:40:05] [ls_cond_hist] AFR 재진입 060900 sid=SCALP name=scalp_re px=4375 alert=1045500200I +[11:40:05] 💾 [SCALP] universe=77 saved=77 +[11:40:05] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:40:14] AFR 재진입 338840 sid=SCALP name=scalp_re px=9290 alert=1045500200I +[11:40:14] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9290 alert=1045500200I +[11:40:14] 💾 [SCALP] universe=78 saved=78 +[11:40:14] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:40:16] AFR 이탈 036670 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[11:40:16] [ls_cond_hist] AFR 이탈 036670 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[11:40:16] 💾 [SCALP] universe=77 saved=77 +[11:40:16] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:40:18] AFR 재진입 012630 sid=SCALP name=scalp_re px=21950 alert=1045500200I +[11:40:18] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21950 alert=1045500200I +[11:40:18] 💾 [SCALP] universe=78 saved=78 +[11:40:18] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:40:29] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[11:40:29] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[11:40:29] 💾 [SCALP] universe=79 saved=79 +[11:40:29] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:40:44] AFR 이탈 411080 sid=SCALP name=scalp_re px=3835 alert=1045500200I +[11:40:44] [ls_cond_hist] AFR 이탈 411080 sid=SCALP name=scalp_re px=3835 alert=1045500200I +[11:40:44] 💾 [SCALP] universe=78 saved=78 +[11:40:44] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:41:00] AFR 이탈 012630 sid=SCALP name=scalp_re px=21900 alert=1045500200I +[11:41:00] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21900 alert=1045500200I +[11:41:00] 💾 [SCALP] universe=77 saved=77 +[11:41:00] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:41:02] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8850 alert=1045500200I +[11:41:02] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8850 alert=1045500200I +[11:41:03] 💾 [SCALP] universe=78 saved=78 +[11:41:03] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:41:03] AFR 재진입 33626L sid=SCALP name=scalp_re px=6440 alert=1045500200I +[11:41:03] [ls_cond_hist] AFR 재진입 33626L sid=SCALP name=scalp_re px=6440 alert=1045500200I +[11:41:03] 💾 [SCALP] universe=79 saved=79 +[11:41:03] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:41:03] AFR 재진입 000225 sid=SCALP name=scalp_re px=3675 alert=1045500200I +[11:41:03] [ls_cond_hist] AFR 재진입 000225 sid=SCALP name=scalp_re px=3675 alert=1045500200I +[11:41:03] 💾 [SCALP] universe=80 saved=80 +[11:41:03] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:41:16] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:41:16] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7900 alert=1045500200I +[11:41:16] 💾 [SCALP] universe=81 saved=81 +[11:41:16] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:41:30] AFR 이탈 317830 sid=SCALP name=scalp_re px=4555 alert=1045500200I +[11:41:30] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4555 alert=1045500200I +[11:41:30] 💾 [SCALP] universe=80 saved=80 +[11:41:30] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:41:32] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:41:32] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:41:32] 💾 [SCALP] universe=81 saved=81 +[11:41:32] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:41:32] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:41:32] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:41:32] 💾 [SCALP] universe=80 saved=80 +[11:41:32] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:41:45] AFR 이탈 338840 sid=SCALP name=scalp_re px=9330 alert=1045500200I +[11:41:45] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9330 alert=1045500200I +[11:41:45] 💾 [SCALP] universe=79 saved=79 +[11:41:45] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:41:56] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[11:41:56] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[11:41:56] 💾 [SCALP] universe=78 saved=78 +[11:41:56] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:42:28] AFR 재진입 338840 sid=SCALP name=scalp_re px=9290 alert=1045500200I +[11:42:28] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9290 alert=1045500200I +[11:42:29] 💾 [SCALP] universe=79 saved=79 +[11:42:29] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:42:34] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8820 alert=1045500200I +[11:42:34] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8820 alert=1045500200I +[11:42:34] 💾 [SCALP] universe=78 saved=78 +[11:42:34] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:42:41] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:42:41] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:42:41] 💾 [SCALP] universe=79 saved=79 +[11:42:41] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:42:47] AFR 재진입 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:42:47] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:42:47] 💾 [SCALP] universe=80 saved=80 +[11:42:47] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:42:49] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:42:49] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:42:49] 💾 [SCALP] universe=79 saved=79 +[11:42:49] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:43:02] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[11:43:02] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[11:43:02] 💾 [SCALP] universe=78 saved=78 +[11:43:02] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:43:03] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:43:03] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:43:03] 💾 [SCALP] universe=79 saved=79 +[11:43:03] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:43:08] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:43:08] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:43:08] 💾 [SCALP] universe=78 saved=78 +[11:43:08] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:43:17] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:43:17] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:43:17] 💾 [SCALP] universe=79 saved=79 +[11:43:17] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:43:19] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:43:19] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:43:19] 💾 [SCALP] universe=78 saved=78 +[11:43:19] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:43:29] AFR 재진입 317830 sid=SCALP name=scalp_re px=4530 alert=1045500200I +[11:43:29] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4530 alert=1045500200I +[11:43:29] 💾 [SCALP] universe=79 saved=79 +[11:43:29] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:43:29] AFR 이탈 317830 sid=SCALP name=scalp_re px=4520 alert=1045500200I +[11:43:29] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4520 alert=1045500200I +[11:43:29] 💾 [SCALP] universe=78 saved=78 +[11:43:29] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:43:39] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:43:39] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:43:39] 💾 [SCALP] universe=79 saved=79 +[11:43:39] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:43:43] AFR 이탈 071280 sid=SCALP name=scalp_re px=6520 alert=1045500200I +[11:43:43] [ls_cond_hist] AFR 이탈 071280 sid=SCALP name=scalp_re px=6520 alert=1045500200I +[11:43:43] 💾 [SCALP] universe=78 saved=78 +[11:43:43] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:43:44] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:43:44] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:43:44] 💾 [SCALP] universe=77 saved=77 +[11:43:44] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:43:44] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[11:43:44] [ls_cond_hist] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[11:43:44] 💾 [SCALP] universe=78 saved=78 +[11:43:44] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:43:51] AFR 재진입 059270 sid=SCALP name=scalp_re px=5240 alert=1045500200I +[11:43:51] [ls_cond_hist] AFR 재진입 059270 sid=SCALP name=scalp_re px=5240 alert=1045500200I +[11:43:51] 💾 [SCALP] universe=79 saved=79 +[11:43:51] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:43:56] AFR 재진입 143240 sid=SCALP name=scalp_re px=16520 alert=1045500200I +[11:43:56] [ls_cond_hist] AFR 재진입 143240 sid=SCALP name=scalp_re px=16520 alert=1045500200I +[11:43:56] 💾 [SCALP] universe=80 saved=80 +[11:43:56] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:43:58] AFR 재진입 071280 sid=SCALP name=scalp_re px=6550 alert=1045500200I +[11:43:58] [ls_cond_hist] AFR 재진입 071280 sid=SCALP name=scalp_re px=6550 alert=1045500200I +[11:43:58] 💾 [SCALP] universe=81 saved=81 +[11:43:58] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:43:59] AFR 이탈 137950 sid=SCALP name=scalp_re px=2990 alert=1045500200I +[11:43:59] [ls_cond_hist] AFR 이탈 137950 sid=SCALP name=scalp_re px=2990 alert=1045500200I +[11:43:59] 💾 [SCALP] universe=80 saved=80 +[11:43:59] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:44:04] AFR 재진입 012630 sid=SCALP name=scalp_re px=21950 alert=1045500200I +[11:44:04] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21950 alert=1045500200I +[11:44:04] 💾 [SCALP] universe=81 saved=81 +[11:44:04] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:44:07] AFR 이탈 012630 sid=SCALP name=scalp_re px=21850 alert=1045500200I +[11:44:07] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21850 alert=1045500200I +[11:44:07] 💾 [SCALP] universe=80 saved=80 +[11:44:07] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:44:07] AFR 재진입 012630 sid=SCALP name=scalp_re px=21950 alert=1045500200I +[11:44:07] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21950 alert=1045500200I +[11:44:07] 💾 [SCALP] universe=81 saved=81 +[11:44:07] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:44:10] AFR 이탈 140670 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[11:44:10] [ls_cond_hist] AFR 이탈 140670 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[11:44:10] 💾 [SCALP] universe=80 saved=80 +[11:44:10] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:44:16] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[11:44:16] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[11:44:16] 💾 [SCALP] universe=81 saved=81 +[11:44:16] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:45:04] AFR 이탈 054920 sid=SCALP name=scalp_re px=3180 alert=1045500200I +[11:45:04] [ls_cond_hist] AFR 이탈 054920 sid=SCALP name=scalp_re px=3180 alert=1045500200I +[11:45:04] 💾 [SCALP] universe=80 saved=80 +[11:45:04] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:45:17] AFR 이탈 059270 sid=SCALP name=scalp_re px=5280 alert=1045500200I +[11:45:17] [ls_cond_hist] AFR 이탈 059270 sid=SCALP name=scalp_re px=5280 alert=1045500200I +[11:45:17] 💾 [SCALP] universe=79 saved=79 +[11:45:17] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:45:19] AFR 재진입 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:45:19] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:45:19] 💾 [SCALP] universe=80 saved=80 +[11:45:19] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:45:23] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[11:45:23] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[11:45:23] 💾 [SCALP] universe=79 saved=79 +[11:45:23] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:45:23] AFR 재진입 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:45:23] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:45:24] 💾 [SCALP] universe=80 saved=80 +[11:45:24] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:45:25] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[11:45:25] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[11:45:26] 💾 [SCALP] universe=79 saved=79 +[11:45:26] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:45:33] AFR 진입 475660 sid=SCALP name=scalp_re px=3275 alert=1045500200I +[11:45:33] [ls_cond_hist] AFR 진입 475660 sid=SCALP name=scalp_re px=3275 alert=1045500200I +[11:45:34] 💾 [SCALP] universe=80 saved=80 +[11:45:34] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:45:36] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:45:36] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:45:36] 💾 [SCALP] universe=81 saved=81 +[11:45:36] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:45:38] AFR 이탈 012630 sid=SCALP name=scalp_re px=21900 alert=1045500200I +[11:45:38] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21900 alert=1045500200I +[11:45:38] 💾 [SCALP] universe=80 saved=80 +[11:45:38] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:45:39] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[11:45:39] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[11:45:39] 💾 [SCALP] universe=79 saved=79 +[11:45:39] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:45:39] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:45:39] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:45:39] 💾 [SCALP] universe=80 saved=80 +[11:45:39] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:45:44] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[11:45:44] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[11:45:44] 💾 [SCALP] universe=79 saved=79 +[11:45:44] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:45:46] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[11:45:46] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[11:45:47] 💾 [SCALP] universe=78 saved=78 +[11:45:47] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:45:50] AFR 진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[11:45:50] [ls_cond_hist] AFR 진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[11:45:51] 💾 [SCALP] universe=79 saved=79 +[11:45:51] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:46:00] AFR 재진입 009520 sid=SCALP name=scalp_re px=10610 alert=1045500200I +[11:46:00] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10610 alert=1045500200I +[11:46:00] 💾 [SCALP] universe=80 saved=80 +[11:46:00] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:46:02] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:46:02] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:46:02] 💾 [SCALP] universe=79 saved=79 +[11:46:02] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:46:08] AFR 이탈 456070 sid=SCALP name=scalp_re px=5960 alert=1045500200I +[11:46:08] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5960 alert=1045500200I +[11:46:08] 💾 [SCALP] universe=78 saved=78 +[11:46:08] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:46:10] AFR 재진입 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:46:10] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:46:10] 💾 [SCALP] universe=79 saved=79 +[11:46:10] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:46:12] AFR 재진입 137950 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[11:46:12] [ls_cond_hist] AFR 재진입 137950 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[11:46:12] 💾 [SCALP] universe=80 saved=80 +[11:46:12] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:46:16] AFR 재진입 411080 sid=SCALP name=scalp_re px=3820 alert=1045500200I +[11:46:16] [ls_cond_hist] AFR 재진입 411080 sid=SCALP name=scalp_re px=3820 alert=1045500200I +[11:46:16] 💾 [SCALP] universe=81 saved=81 +[11:46:16] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:46:18] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[11:46:18] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[11:46:18] 💾 [SCALP] universe=80 saved=80 +[11:46:18] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:46:23] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:46:23] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:46:24] 💾 [SCALP] universe=81 saved=81 +[11:46:24] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:46:33] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[11:46:33] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[11:46:33] 💾 [SCALP] universe=82 saved=82 +[11:46:33] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:46:38] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:46:38] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:46:38] 💾 [SCALP] universe=83 saved=83 +[11:46:38] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:46:46] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:46:46] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:46:46] 💾 [SCALP] universe=82 saved=82 +[11:46:46] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:46:58] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:46:58] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:46:58] 💾 [SCALP] universe=83 saved=83 +[11:46:58] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:46:59] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:46:59] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:46:59] 💾 [SCALP] universe=82 saved=82 +[11:46:59] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:47:01] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:47:01] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:47:01] 💾 [SCALP] universe=83 saved=83 +[11:47:01] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:47:01] AFR 이탈 33626L sid=SCALP name=scalp_re px=6430 alert=1045500200I +[11:47:01] [ls_cond_hist] AFR 이탈 33626L sid=SCALP name=scalp_re px=6430 alert=1045500200I +[11:47:01] 💾 [SCALP] universe=82 saved=82 +[11:47:01] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:47:02] AFR 재진입 348030 sid=SCALP name=scalp_re px=3100 alert=1045500200I +[11:47:02] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3100 alert=1045500200I +[11:47:02] 💾 [SCALP] universe=83 saved=83 +[11:47:02] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:47:03] AFR 진입 082920 sid=SCALP name=scalp_re px=31000 alert=1045500200I +[11:47:03] [ls_cond_hist] AFR 진입 082920 sid=SCALP name=scalp_re px=31000 alert=1045500200I +[11:47:04] 💾 [SCALP] universe=84 saved=84 +[11:47:04] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[11:47:04] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:47:04] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:47:04] 💾 [SCALP] universe=83 saved=83 +[11:47:04] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:47:04] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:47:04] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:47:04] 💾 [SCALP] universe=82 saved=82 +[11:47:04] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:47:06] AFR 재진입 092460 sid=SCALP name=scalp_re px=16450 alert=1045500200I +[11:47:06] [ls_cond_hist] AFR 재진입 092460 sid=SCALP name=scalp_re px=16450 alert=1045500200I +[11:47:06] 💾 [SCALP] universe=83 saved=83 +[11:47:06] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:47:08] AFR 이탈 137950 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[11:47:08] [ls_cond_hist] AFR 이탈 137950 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[11:47:08] 💾 [SCALP] universe=82 saved=82 +[11:47:08] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:47:08] AFR 재진입 137950 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[11:47:08] [ls_cond_hist] AFR 재진입 137950 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[11:47:09] 💾 [SCALP] universe=83 saved=83 +[11:47:09] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:47:22] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:47:22] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:47:22] 💾 [SCALP] universe=84 saved=84 +[11:47:22] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[11:47:25] AFR 이탈 009520 sid=SCALP name=scalp_re px=10630 alert=1045500200I +[11:47:25] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10630 alert=1045500200I +[11:47:25] 💾 [SCALP] universe=83 saved=83 +[11:47:25] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:47:28] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[11:47:28] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[11:47:29] 💾 [SCALP] universe=84 saved=84 +[11:47:29] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[11:47:30] AFR 재진입 33626L sid=SCALP name=scalp_re px=6440 alert=1045500200I +[11:47:30] [ls_cond_hist] AFR 재진입 33626L sid=SCALP name=scalp_re px=6440 alert=1045500200I +[11:47:30] 💾 [SCALP] universe=85 saved=85 +[11:47:30] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[11:47:30] AFR 이탈 33626L sid=SCALP name=scalp_re px=6420 alert=1045500200I +[11:47:30] [ls_cond_hist] AFR 이탈 33626L sid=SCALP name=scalp_re px=6420 alert=1045500200I +[11:47:30] 💾 [SCALP] universe=84 saved=84 +[11:47:30] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[11:47:31] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:47:31] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:47:31] 💾 [SCALP] universe=83 saved=83 +[11:47:31] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:47:44] AFR 재진입 456070 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[11:47:44] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[11:47:44] 💾 [SCALP] universe=84 saved=84 +[11:47:44] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[11:47:45] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:47:45] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40150 alert=1045500200I +[11:47:45] 💾 [SCALP] universe=85 saved=85 +[11:47:45] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[11:47:46] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[11:47:46] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[11:47:46] 💾 [SCALP] universe=86 saved=86 +[11:47:46] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[11:48:01] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[11:48:01] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[11:48:01] 💾 [SCALP] universe=85 saved=85 +[11:48:01] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[11:48:02] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:48:02] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63500 alert=1045500200I +[11:48:02] 💾 [SCALP] universe=86 saved=86 +[11:48:02] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[11:48:03] AFR 이탈 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[11:48:03] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[11:48:03] 💾 [SCALP] universe=85 saved=85 +[11:48:03] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[11:48:03] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:48:03] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:48:04] 💾 [SCALP] universe=84 saved=84 +[11:48:04] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[11:48:06] AFR 이탈 456070 sid=SCALP name=scalp_re px=5960 alert=1045500200I +[11:48:06] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5960 alert=1045500200I +[11:48:06] 💾 [SCALP] universe=83 saved=83 +[11:48:06] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:48:06] AFR 이탈 458650 sid=SCALP name=scalp_re px=7930 alert=1045500200I +[11:48:06] [ls_cond_hist] AFR 이탈 458650 sid=SCALP name=scalp_re px=7930 alert=1045500200I +[11:48:06] 💾 [SCALP] universe=82 saved=82 +[11:48:06] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:48:07] AFR 재진입 456070 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[11:48:07] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[11:48:07] 💾 [SCALP] universe=83 saved=83 +[11:48:07] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:48:12] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:48:12] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40100 alert=1045500200I +[11:48:12] 💾 [SCALP] universe=82 saved=82 +[11:48:12] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:48:12] AFR 이탈 071280 sid=SCALP name=scalp_re px=6530 alert=1045500200I +[11:48:12] [ls_cond_hist] AFR 이탈 071280 sid=SCALP name=scalp_re px=6530 alert=1045500200I +[11:48:12] 💾 [SCALP] universe=81 saved=81 +[11:48:12] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:48:12] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[11:48:12] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[11:48:13] 💾 [SCALP] universe=82 saved=82 +[11:48:13] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:48:13] AFR 이탈 456070 sid=SCALP name=scalp_re px=5950 alert=1045500200I +[11:48:13] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5950 alert=1045500200I +[11:48:13] 💾 [SCALP] universe=81 saved=81 +[11:48:13] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:48:13] AFR 진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[11:48:13] [ls_cond_hist] AFR 진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[11:48:13] 💾 [SCALP] universe=82 saved=82 +[11:48:13] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:48:13] AFR 재진입 105740 sid=SCALP name=scalp_re px=6930 alert=1045500200I +[11:48:13] [ls_cond_hist] AFR 재진입 105740 sid=SCALP name=scalp_re px=6930 alert=1045500200I +[11:48:13] 💾 [SCALP] universe=83 saved=83 +[11:48:13] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:48:13] AFR 이탈 419080 sid=SCALP name=scalp_re px=4320 alert=1045500200I +[11:48:13] [ls_cond_hist] AFR 이탈 419080 sid=SCALP name=scalp_re px=4320 alert=1045500200I +[11:48:13] 💾 [SCALP] universe=82 saved=82 +[11:48:13] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:48:15] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:48:15] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:48:15] 💾 [SCALP] universe=81 saved=81 +[11:48:15] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:48:19] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[11:48:19] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[11:48:19] 💾 [SCALP] universe=80 saved=80 +[11:48:19] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:48:20] AFR 재진입 317830 sid=SCALP name=scalp_re px=4530 alert=1045500200I +[11:48:20] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4530 alert=1045500200I +[11:48:20] 💾 [SCALP] universe=81 saved=81 +[11:48:20] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:48:20] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[11:48:20] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[11:48:20] 💾 [SCALP] universe=82 saved=82 +[11:48:20] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:48:21] AFR 이탈 317830 sid=SCALP name=scalp_re px=4525 alert=1045500200I +[11:48:21] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4525 alert=1045500200I +[11:48:21] 💾 [SCALP] universe=81 saved=81 +[11:48:21] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:48:21] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[11:48:21] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[11:48:21] 💾 [SCALP] universe=80 saved=80 +[11:48:21] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:48:24] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:48:24] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:48:24] 💾 [SCALP] universe=81 saved=81 +[11:48:24] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:48:30] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:48:30] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:48:30] 💾 [SCALP] universe=80 saved=80 +[11:48:30] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:48:31] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:48:31] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:48:31] 💾 [SCALP] universe=81 saved=81 +[11:48:31] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:48:34] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:48:34] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:48:34] 💾 [SCALP] universe=80 saved=80 +[11:48:34] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:48:37] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[11:48:37] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[11:48:37] 💾 [SCALP] universe=79 saved=79 +[11:48:37] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:48:39] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[11:48:39] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[11:48:39] 💾 [SCALP] universe=80 saved=80 +[11:48:39] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:48:40] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:48:40] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:48:41] 💾 [SCALP] universe=81 saved=81 +[11:48:41] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:48:44] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:48:44] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:48:44] 💾 [SCALP] universe=80 saved=80 +[11:48:44] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:48:45] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8830 alert=1045500200I +[11:48:45] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8830 alert=1045500200I +[11:48:46] 💾 [SCALP] universe=81 saved=81 +[11:48:46] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:48:46] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:48:46] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:48:47] 💾 [SCALP] universe=82 saved=82 +[11:48:47] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:48:47] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8800 alert=1045500200I +[11:48:47] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8800 alert=1045500200I +[11:48:47] 💾 [SCALP] universe=81 saved=81 +[11:48:47] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:48:49] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:48:49] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:48:49] 💾 [SCALP] universe=80 saved=80 +[11:48:49] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:48:57] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[11:48:57] [ls_cond_hist] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[11:48:57] 💾 [SCALP] universe=81 saved=81 +[11:48:57] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:49:00] AFR 재진입 488900 sid=SCALP name=scalp_re px=7700 alert=1045500200I +[11:49:00] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7700 alert=1045500200I +[11:49:00] 💾 [SCALP] universe=82 saved=82 +[11:49:00] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:49:00] AFR 이탈 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[11:49:00] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[11:49:00] 💾 [SCALP] universe=81 saved=81 +[11:49:00] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:49:01] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:49:01] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:49:01] 💾 [SCALP] universe=82 saved=82 +[11:49:01] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:49:02] AFR 이탈 092460 sid=SCALP name=scalp_re px=16410 alert=1045500200I +[11:49:02] [ls_cond_hist] AFR 이탈 092460 sid=SCALP name=scalp_re px=16410 alert=1045500200I +[11:49:02] 💾 [SCALP] universe=81 saved=81 +[11:49:02] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:49:03] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8840 alert=1045500200I +[11:49:03] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8840 alert=1045500200I +[11:49:03] 💾 [SCALP] universe=82 saved=82 +[11:49:03] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:49:07] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[11:49:07] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[11:49:07] 💾 [SCALP] universe=83 saved=83 +[11:49:07] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:49:10] AFR 이탈 051600 sid=SCALP name=scalp_re px=47000 alert=1045500200I +[11:49:10] [ls_cond_hist] AFR 이탈 051600 sid=SCALP name=scalp_re px=47000 alert=1045500200I +[11:49:10] 💾 [SCALP] universe=82 saved=82 +[11:49:10] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:49:10] AFR 이탈 229640 sid=SCALP name=scalp_re px=44300 alert=1045500200I +[11:49:10] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44300 alert=1045500200I +[11:49:10] 💾 [SCALP] universe=81 saved=81 +[11:49:10] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:49:13] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[11:49:13] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[11:49:13] 💾 [SCALP] universe=80 saved=80 +[11:49:13] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:49:17] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:49:17] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:49:17] 💾 [SCALP] universe=81 saved=81 +[11:49:17] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:49:18] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:49:18] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:49:18] 💾 [SCALP] universe=80 saved=80 +[11:49:18] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:49:19] AFR 재진입 051600 sid=SCALP name=scalp_re px=46950 alert=1045500200I +[11:49:19] [ls_cond_hist] AFR 재진입 051600 sid=SCALP name=scalp_re px=46950 alert=1045500200I +[11:49:19] 💾 [SCALP] universe=81 saved=81 +[11:49:19] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:49:20] AFR 재진입 458650 sid=SCALP name=scalp_re px=7950 alert=1045500200I +[11:49:20] [ls_cond_hist] AFR 재진입 458650 sid=SCALP name=scalp_re px=7950 alert=1045500200I +[11:49:20] 💾 [SCALP] universe=82 saved=82 +[11:49:20] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:49:20] AFR 이탈 458650 sid=SCALP name=scalp_re px=7930 alert=1045500200I +[11:49:20] [ls_cond_hist] AFR 이탈 458650 sid=SCALP name=scalp_re px=7930 alert=1045500200I +[11:49:20] 💾 [SCALP] universe=81 saved=81 +[11:49:20] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:49:21] AFR 이탈 229640 sid=SCALP name=scalp_re px=44300 alert=1045500200I +[11:49:21] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44300 alert=1045500200I +[11:49:21] 💾 [SCALP] universe=80 saved=80 +[11:49:21] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:49:22] AFR 진입 067370 sid=SCALP name=scalp_re px=6310 alert=1045500200I +[11:49:22] [ls_cond_hist] AFR 진입 067370 sid=SCALP name=scalp_re px=6310 alert=1045500200I +[11:49:22] 💾 [SCALP] universe=81 saved=81 +[11:49:22] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:49:28] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:49:28] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:49:28] 💾 [SCALP] universe=82 saved=82 +[11:49:28] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:49:29] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:49:29] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:49:29] 💾 [SCALP] universe=83 saved=83 +[11:49:29] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:49:29] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:49:29] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:49:29] 💾 [SCALP] universe=82 saved=82 +[11:49:29] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:49:35] AFR 이탈 041910 sid=SCALP name=scalp_re px=5430 alert=1045500200I +[11:49:35] [ls_cond_hist] AFR 이탈 041910 sid=SCALP name=scalp_re px=5430 alert=1045500200I +[11:49:36] 💾 [SCALP] universe=81 saved=81 +[11:49:36] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:49:36] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[11:49:36] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[11:49:36] 💾 [SCALP] universe=82 saved=82 +[11:49:36] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:49:37] AFR 재진입 140670 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[11:49:37] [ls_cond_hist] AFR 재진입 140670 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[11:49:37] 💾 [SCALP] universe=83 saved=83 +[11:49:37] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:49:38] AFR 이탈 140670 sid=SCALP name=scalp_re px=8850 alert=1045500200I +[11:49:38] [ls_cond_hist] AFR 이탈 140670 sid=SCALP name=scalp_re px=8850 alert=1045500200I +[11:49:38] 💾 [SCALP] universe=82 saved=82 +[11:49:38] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:49:39] AFR 이탈 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[11:49:39] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[11:49:39] 💾 [SCALP] universe=81 saved=81 +[11:49:39] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:49:43] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[11:49:43] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[11:49:43] 💾 [SCALP] universe=80 saved=80 +[11:49:43] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:49:43] AFR 재진입 059270 sid=SCALP name=scalp_re px=5240 alert=1045500200I +[11:49:43] [ls_cond_hist] AFR 재진입 059270 sid=SCALP name=scalp_re px=5240 alert=1045500200I +[11:49:43] 💾 [SCALP] universe=81 saved=81 +[11:49:43] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:49:44] AFR 이탈 143240 sid=SCALP name=scalp_re px=16470 alert=1045500200I +[11:49:44] [ls_cond_hist] AFR 이탈 143240 sid=SCALP name=scalp_re px=16470 alert=1045500200I +[11:49:44] 💾 [SCALP] universe=80 saved=80 +[11:49:44] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:49:44] AFR 이탈 229640 sid=SCALP name=scalp_re px=44300 alert=1045500200I +[11:49:44] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44300 alert=1045500200I +[11:49:44] 💾 [SCALP] universe=79 saved=79 +[11:49:44] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:49:44] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[11:49:44] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[11:49:44] 💾 [SCALP] universe=78 saved=78 +[11:49:44] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:49:44] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[11:49:44] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[11:49:44] 💾 [SCALP] universe=79 saved=79 +[11:49:44] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:49:49] AFR 진입 049830 sid=SCALP name=scalp_re px=6230 alert=1045500200I +[11:49:49] [ls_cond_hist] AFR 진입 049830 sid=SCALP name=scalp_re px=6230 alert=1045500200I +[11:49:49] 💾 [SCALP] universe=80 saved=80 +[11:49:49] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:50:04] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8800 alert=1045500200I +[11:50:04] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8800 alert=1045500200I +[11:50:04] 💾 [SCALP] universe=79 saved=79 +[11:50:04] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:50:06] AFR 재진입 456070 sid=SCALP name=scalp_re px=5970 alert=1045500200I +[11:50:06] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5970 alert=1045500200I +[11:50:06] 💾 [SCALP] universe=80 saved=80 +[11:50:06] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:50:07] AFR 이탈 096250 sid=SCALP name=scalp_re px=6090 alert=1045500200I +[11:50:07] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=6090 alert=1045500200I +[11:50:07] 💾 [SCALP] universe=79 saved=79 +[11:50:07] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:50:07] AFR 재진입 096250 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[11:50:07] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[11:50:07] 💾 [SCALP] universe=80 saved=80 +[11:50:07] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:50:08] AFR 이탈 120240 sid=SCALP name=scalp_re px=14800 alert=1045500200I +[11:50:08] [ls_cond_hist] AFR 이탈 120240 sid=SCALP name=scalp_re px=14800 alert=1045500200I +[11:50:08] 💾 [SCALP] universe=79 saved=79 +[11:50:08] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:50:11] AFR 이탈 051600 sid=SCALP name=scalp_re px=47100 alert=1045500200I +[11:50:11] [ls_cond_hist] AFR 이탈 051600 sid=SCALP name=scalp_re px=47100 alert=1045500200I +[11:50:11] 💾 [SCALP] universe=78 saved=78 +[11:50:11] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:50:14] AFR 재진입 488900 sid=SCALP name=scalp_re px=7720 alert=1045500200I +[11:50:14] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7720 alert=1045500200I +[11:50:14] 💾 [SCALP] universe=79 saved=79 +[11:50:14] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:50:24] AFR 이탈 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[11:50:24] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[11:50:24] 💾 [SCALP] universe=78 saved=78 +[11:50:24] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:50:32] AFR 이탈 244920 sid=SCALP name=scalp_re px=11330 alert=1045500200I +[11:50:32] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11330 alert=1045500200I +[11:50:32] 💾 [SCALP] universe=77 saved=77 +[11:50:32] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:50:34] AFR 재진입 317830 sid=SCALP name=scalp_re px=4530 alert=1045500200I +[11:50:34] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4530 alert=1045500200I +[11:50:34] 💾 [SCALP] universe=78 saved=78 +[11:50:34] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:50:37] AFR 재진입 244920 sid=SCALP name=scalp_re px=11350 alert=1045500200I +[11:50:37] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11350 alert=1045500200I +[11:50:37] 💾 [SCALP] universe=79 saved=79 +[11:50:37] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:50:42] AFR 이탈 064850 sid=SCALP name=scalp_re px=18470 alert=1045500200I +[11:50:42] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18470 alert=1045500200I +[11:50:42] 💾 [SCALP] universe=78 saved=78 +[11:50:42] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:51:05] AFR 이탈 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[11:51:05] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[11:51:05] 💾 [SCALP] universe=77 saved=77 +[11:51:05] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:51:14] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:51:14] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:51:14] 💾 [SCALP] universe=78 saved=78 +[11:51:14] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:51:27] AFR 재진입 380550 sid=SCALP name=scalp_re px=7880 alert=1045500200I +[11:51:27] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7880 alert=1045500200I +[11:51:27] 💾 [SCALP] universe=79 saved=79 +[11:51:27] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:51:37] AFR 재진입 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[11:51:37] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[11:51:37] 💾 [SCALP] universe=80 saved=80 +[11:51:37] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:51:38] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:51:38] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:51:38] 💾 [SCALP] universe=79 saved=79 +[11:51:38] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:51:38] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:51:38] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:51:38] 💾 [SCALP] universe=80 saved=80 +[11:51:38] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:51:39] AFR 이탈 456070 sid=SCALP name=scalp_re px=5940 alert=1045500200I +[11:51:39] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5940 alert=1045500200I +[11:51:39] 💾 [SCALP] universe=79 saved=79 +[11:51:39] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:51:42] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:51:42] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:51:42] 💾 [SCALP] universe=78 saved=78 +[11:51:42] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:51:42] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:51:42] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[11:51:42] 💾 [SCALP] universe=77 saved=77 +[11:51:42] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:51:43] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:51:43] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[11:51:43] 💾 [SCALP] universe=78 saved=78 +[11:51:43] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:51:49] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:51:49] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:51:49] 💾 [SCALP] universe=79 saved=79 +[11:51:49] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:51:51] AFR 진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[11:51:51] [ls_cond_hist] AFR 진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[11:51:51] 💾 [SCALP] universe=80 saved=80 +[11:51:51] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:51:58] AFR 이탈 317830 sid=SCALP name=scalp_re px=4555 alert=1045500200I +[11:51:58] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4555 alert=1045500200I +[11:51:58] 💾 [SCALP] universe=79 saved=79 +[11:51:58] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:52:02] AFR 이탈 049830 sid=SCALP name=scalp_re px=6260 alert=1045500200I +[11:52:02] [ls_cond_hist] AFR 이탈 049830 sid=SCALP name=scalp_re px=6260 alert=1045500200I +[11:52:02] 💾 [SCALP] universe=78 saved=78 +[11:52:02] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:52:19] AFR 재진입 049830 sid=SCALP name=scalp_re px=6230 alert=1045500200I +[11:52:19] [ls_cond_hist] AFR 재진입 049830 sid=SCALP name=scalp_re px=6230 alert=1045500200I +[11:52:19] 💾 [SCALP] universe=79 saved=79 +[11:52:19] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:52:32] AFR 이탈 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[11:52:32] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[11:52:32] 💾 [SCALP] universe=78 saved=78 +[11:52:32] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:52:49] AFR 이탈 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[11:52:49] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[11:52:49] 💾 [SCALP] universe=77 saved=77 +[11:52:49] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:52:49] AFR 재진입 036670 sid=SCALP name=scalp_re px=5115 alert=1045500200I +[11:52:49] [ls_cond_hist] AFR 재진입 036670 sid=SCALP name=scalp_re px=5115 alert=1045500200I +[11:52:49] 💾 [SCALP] universe=78 saved=78 +[11:52:49] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:52:51] AFR 재진입 488900 sid=SCALP name=scalp_re px=7720 alert=1045500200I +[11:52:51] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7720 alert=1045500200I +[11:52:51] 💾 [SCALP] universe=79 saved=79 +[11:52:51] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:52:51] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[11:52:51] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[11:52:52] 💾 [SCALP] universe=78 saved=78 +[11:52:52] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:52:59] AFR 이탈 067370 sid=SCALP name=scalp_re px=6320 alert=1045500200I +[11:52:59] [ls_cond_hist] AFR 이탈 067370 sid=SCALP name=scalp_re px=6320 alert=1045500200I +[11:52:59] 💾 [SCALP] universe=77 saved=77 +[11:52:59] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:53:00] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:53:00] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:53:00] 💾 [SCALP] universe=76 saved=76 +[11:53:00] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:53:04] AFR 이탈 030530 sid=SCALP name=scalp_re px=16750 alert=1045500200I +[11:53:04] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16750 alert=1045500200I +[11:53:04] 💾 [SCALP] universe=75 saved=75 +[11:53:04] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:53:05] AFR 재진입 380550 sid=SCALP name=scalp_re px=7880 alert=1045500200I +[11:53:05] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7880 alert=1045500200I +[11:53:05] 💾 [SCALP] universe=76 saved=76 +[11:53:05] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:53:05] AFR 재진입 009520 sid=SCALP name=scalp_re px=10560 alert=1045500200I +[11:53:05] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10560 alert=1045500200I +[11:53:06] 💾 [SCALP] universe=77 saved=77 +[11:53:06] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:53:13] AFR 재진입 33626L sid=SCALP name=scalp_re px=6420 alert=1045500200I +[11:53:13] [ls_cond_hist] AFR 재진입 33626L sid=SCALP name=scalp_re px=6420 alert=1045500200I +[11:53:13] 💾 [SCALP] universe=78 saved=78 +[11:53:13] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:53:19] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:53:19] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:53:19] 💾 [SCALP] universe=79 saved=79 +[11:53:19] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:53:19] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:53:19] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:53:19] 💾 [SCALP] universe=80 saved=80 +[11:53:19] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:53:29] AFR 재진입 005440 sid=SCALP name=scalp_re px=12150 alert=1045500200I +[11:53:29] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12150 alert=1045500200I +[11:53:29] 💾 [SCALP] universe=81 saved=81 +[11:53:29] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:53:32] AFR 이탈 096250 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[11:53:32] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[11:53:32] 💾 [SCALP] universe=80 saved=80 +[11:53:32] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:53:47] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[11:53:47] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[11:53:47] 💾 [SCALP] universe=79 saved=79 +[11:53:47] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:53:52] AFR 재진입 456070 sid=SCALP name=scalp_re px=5945 alert=1045500200I +[11:53:52] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5945 alert=1045500200I +[11:53:52] 💾 [SCALP] universe=80 saved=80 +[11:53:52] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:53:55] AFR 이탈 039010 sid=SCALP name=scalp_re px=6370 alert=1045500200I +[11:53:55] [ls_cond_hist] AFR 이탈 039010 sid=SCALP name=scalp_re px=6370 alert=1045500200I +[11:53:55] 💾 [SCALP] universe=79 saved=79 +[11:53:55] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:53:57] AFR 이탈 005440 sid=SCALP name=scalp_re px=12120 alert=1045500200I +[11:53:57] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12120 alert=1045500200I +[11:53:57] 💾 [SCALP] universe=78 saved=78 +[11:53:57] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:54:02] AFR 재진입 096250 sid=SCALP name=scalp_re px=6020 alert=1045500200I +[11:54:02] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6020 alert=1045500200I +[11:54:02] 💾 [SCALP] universe=79 saved=79 +[11:54:02] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:54:03] AFR 재진입 493330 sid=SCALP name=scalp_re px=9030 alert=1045500200I +[11:54:03] [ls_cond_hist] AFR 재진입 493330 sid=SCALP name=scalp_re px=9030 alert=1045500200I +[11:54:03] 💾 [SCALP] universe=80 saved=80 +[11:54:03] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:54:05] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:54:05] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:54:05] 💾 [SCALP] universe=79 saved=79 +[11:54:05] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:54:07] AFR 이탈 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[11:54:07] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[11:54:07] 💾 [SCALP] universe=78 saved=78 +[11:54:07] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:54:09] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:54:09] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:54:09] 💾 [SCALP] universe=79 saved=79 +[11:54:09] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:54:10] AFR 재진입 456070 sid=SCALP name=scalp_re px=5940 alert=1045500200I +[11:54:10] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5940 alert=1045500200I +[11:54:10] 💾 [SCALP] universe=80 saved=80 +[11:54:10] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:54:14] AFR 진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[11:54:14] [ls_cond_hist] AFR 진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[11:54:14] 💾 [SCALP] universe=81 saved=81 +[11:54:14] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:54:20] AFR 재진입 419080 sid=SCALP name=scalp_re px=4325 alert=1045500200I +[11:54:20] [ls_cond_hist] AFR 재진입 419080 sid=SCALP name=scalp_re px=4325 alert=1045500200I +[11:54:20] 💾 [SCALP] universe=82 saved=82 +[11:54:20] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:54:20] AFR 이탈 096250 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[11:54:20] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[11:54:20] 💾 [SCALP] universe=81 saved=81 +[11:54:20] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:54:20] AFR 이탈 419080 sid=SCALP name=scalp_re px=4320 alert=1045500200I +[11:54:20] [ls_cond_hist] AFR 이탈 419080 sid=SCALP name=scalp_re px=4320 alert=1045500200I +[11:54:20] 💾 [SCALP] universe=80 saved=80 +[11:54:20] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:54:20] AFR 재진입 096250 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[11:54:20] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[11:54:20] 💾 [SCALP] universe=81 saved=81 +[11:54:20] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:54:21] AFR 재진입 229640 sid=SCALP name=scalp_re px=44550 alert=1045500200I +[11:54:21] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44550 alert=1045500200I +[11:54:21] 💾 [SCALP] universe=82 saved=82 +[11:54:21] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:54:23] AFR 이탈 33626L sid=SCALP name=scalp_re px=6410 alert=1045500200I +[11:54:23] [ls_cond_hist] AFR 이탈 33626L sid=SCALP name=scalp_re px=6410 alert=1045500200I +[11:54:23] 💾 [SCALP] universe=81 saved=81 +[11:54:23] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:54:27] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:54:27] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:54:27] 💾 [SCALP] universe=82 saved=82 +[11:54:27] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:54:28] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[11:54:28] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[11:54:28] 💾 [SCALP] universe=81 saved=81 +[11:54:28] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:54:28] AFR 재진입 039010 sid=SCALP name=scalp_re px=6380 alert=1045500200I +[11:54:28] [ls_cond_hist] AFR 재진입 039010 sid=SCALP name=scalp_re px=6380 alert=1045500200I +[11:54:28] 💾 [SCALP] universe=82 saved=82 +[11:54:28] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:54:46] AFR 이탈 493330 sid=SCALP name=scalp_re px=9000 alert=1045500200I +[11:54:46] [ls_cond_hist] AFR 이탈 493330 sid=SCALP name=scalp_re px=9000 alert=1045500200I +[11:54:46] 💾 [SCALP] universe=81 saved=81 +[11:54:46] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:55:00] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[11:55:00] [ls_cond_hist] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[11:55:00] 💾 [SCALP] universe=82 saved=82 +[11:55:00] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:55:00] AFR 재진입 317830 sid=SCALP name=scalp_re px=4520 alert=1045500200I +[11:55:00] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4520 alert=1045500200I +[11:55:00] 💾 [SCALP] universe=83 saved=83 +[11:55:00] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[11:55:01] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:55:01] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:55:01] 💾 [SCALP] universe=82 saved=82 +[11:55:01] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[11:55:02] AFR 이탈 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[11:55:02] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[11:55:02] 💾 [SCALP] universe=81 saved=81 +[11:55:02] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:55:02] AFR 이탈 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:55:02] [ls_cond_hist] AFR 이탈 081180 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:55:02] 💾 [SCALP] universe=80 saved=80 +[11:55:02] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:55:03] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:55:03] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[11:55:03] 💾 [SCALP] universe=81 saved=81 +[11:55:03] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[11:55:04] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[11:55:04] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[11:55:05] 💾 [SCALP] universe=80 saved=80 +[11:55:05] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[11:55:06] AFR 이탈 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[11:55:06] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[11:55:06] 💾 [SCALP] universe=79 saved=79 +[11:55:06] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:55:18] AFR 이탈 039010 sid=SCALP name=scalp_re px=6370 alert=1045500200I +[11:55:18] [ls_cond_hist] AFR 이탈 039010 sid=SCALP name=scalp_re px=6370 alert=1045500200I +[11:55:18] 💾 [SCALP] universe=78 saved=78 +[11:55:18] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:55:19] AFR 재진입 380550 sid=SCALP name=scalp_re px=7880 alert=1045500200I +[11:55:19] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7880 alert=1045500200I +[11:55:19] 💾 [SCALP] universe=79 saved=79 +[11:55:19] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[11:55:20] AFR 이탈 120240 sid=SCALP name=scalp_re px=14830 alert=1045500200I +[11:55:20] [ls_cond_hist] AFR 이탈 120240 sid=SCALP name=scalp_re px=14830 alert=1045500200I +[11:55:20] 💾 [SCALP] universe=78 saved=78 +[11:55:20] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:55:25] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[11:55:25] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[11:55:25] 💾 [SCALP] universe=77 saved=77 +[11:55:25] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:55:37] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[11:55:37] [ls_cond_hist] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[11:55:37] 💾 [SCALP] universe=78 saved=78 +[11:55:37] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:55:37] AFR 이탈 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[11:55:37] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[11:55:37] 💾 [SCALP] universe=77 saved=77 +[11:55:37] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:55:37] AFR 재진입 380550 sid=SCALP name=scalp_re px=7880 alert=1045500200I +[11:55:37] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7880 alert=1045500200I +[11:55:37] 💾 [SCALP] universe=78 saved=78 +[11:55:37] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:55:40] AFR 이탈 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[11:55:40] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[11:55:40] 💾 [SCALP] universe=77 saved=77 +[11:55:40] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:56:06] AFR 재진입 009520 sid=SCALP name=scalp_re px=10570 alert=1045500200I +[11:56:06] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10570 alert=1045500200I +[11:56:06] 💾 [SCALP] universe=78 saved=78 +[11:56:06] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:56:25] AFR 이탈 120240 sid=SCALP name=scalp_re px=14830 alert=1045500200I +[11:56:25] [ls_cond_hist] AFR 이탈 120240 sid=SCALP name=scalp_re px=14830 alert=1045500200I +[11:56:25] 💾 [SCALP] universe=77 saved=77 +[11:56:25] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:56:29] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:56:29] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:56:29] 💾 [SCALP] universe=78 saved=78 +[11:56:29] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[11:56:31] AFR 이탈 000225 sid=SCALP name=scalp_re px=3660 alert=1045500200I +[11:56:31] [ls_cond_hist] AFR 이탈 000225 sid=SCALP name=scalp_re px=3660 alert=1045500200I +[11:56:31] 💾 [SCALP] universe=77 saved=77 +[11:56:31] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:56:41] AFR 이탈 244920 sid=SCALP name=scalp_re px=11330 alert=1045500200I +[11:56:41] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11330 alert=1045500200I +[11:56:41] 💾 [SCALP] universe=76 saved=76 +[11:56:41] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:56:41] AFR 재진입 456070 sid=SCALP name=scalp_re px=5950 alert=1045500200I +[11:56:41] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5950 alert=1045500200I +[11:56:41] 💾 [SCALP] universe=77 saved=77 +[11:56:41] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:56:52] AFR 이탈 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[11:56:52] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[11:56:52] 💾 [SCALP] universe=76 saved=76 +[11:56:52] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:56:54] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:56:54] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:56:54] 💾 [SCALP] universe=75 saved=75 +[11:56:54] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:56:58] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:56:58] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:56:59] 💾 [SCALP] universe=76 saved=76 +[11:56:59] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:57:00] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:57:00] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:57:00] 💾 [SCALP] universe=75 saved=75 +[11:57:00] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:57:05] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[11:57:05] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[11:57:06] 💾 [SCALP] universe=76 saved=76 +[11:57:06] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:57:12] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:57:12] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:57:12] 💾 [SCALP] universe=75 saved=75 +[11:57:12] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:57:16] AFR 재진입 064850 sid=SCALP name=scalp_re px=18510 alert=1045500200I +[11:57:16] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18510 alert=1045500200I +[11:57:16] 💾 [SCALP] universe=76 saved=76 +[11:57:16] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:57:16] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:57:16] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:57:17] 💾 [SCALP] universe=77 saved=77 +[11:57:17] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:57:17] AFR 이탈 064850 sid=SCALP name=scalp_re px=18410 alert=1045500200I +[11:57:17] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18410 alert=1045500200I +[11:57:17] 💾 [SCALP] universe=76 saved=76 +[11:57:17] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:57:18] AFR 이탈 105740 sid=SCALP name=scalp_re px=6940 alert=1045500200I +[11:57:18] [ls_cond_hist] AFR 이탈 105740 sid=SCALP name=scalp_re px=6940 alert=1045500200I +[11:57:18] 💾 [SCALP] universe=75 saved=75 +[11:57:18] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:57:19] AFR 재진입 458650 sid=SCALP name=scalp_re px=7930 alert=1045500200I +[11:57:19] [ls_cond_hist] AFR 재진입 458650 sid=SCALP name=scalp_re px=7930 alert=1045500200I +[11:57:19] 💾 [SCALP] universe=76 saved=76 +[11:57:19] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:57:20] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[11:57:20] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[11:57:21] 💾 [SCALP] universe=75 saved=75 +[11:57:21] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:57:27] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:57:27] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:57:27] 💾 [SCALP] universe=76 saved=76 +[11:57:27] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:57:27] AFR 이탈 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[11:57:27] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[11:57:27] 💾 [SCALP] universe=75 saved=75 +[11:57:27] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:57:29] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:57:29] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:57:29] 💾 [SCALP] universe=74 saved=74 +[11:57:29] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:57:30] AFR 재진입 105740 sid=SCALP name=scalp_re px=6900 alert=1045500200I +[11:57:30] [ls_cond_hist] AFR 재진입 105740 sid=SCALP name=scalp_re px=6900 alert=1045500200I +[11:57:30] 💾 [SCALP] universe=75 saved=75 +[11:57:30] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:57:30] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:57:30] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:57:30] 💾 [SCALP] universe=74 saved=74 +[11:57:30] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:57:33] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:57:33] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[11:57:33] 💾 [SCALP] universe=75 saved=75 +[11:57:33] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:57:56] AFR 이탈 137950 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[11:57:56] [ls_cond_hist] AFR 이탈 137950 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[11:57:56] 💾 [SCALP] universe=74 saved=74 +[11:57:56] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:57:57] AFR 이탈 192400 sid=SCALP name=scalp_re px=26400 alert=1045500200I +[11:57:57] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26400 alert=1045500200I +[11:57:57] 💾 [SCALP] universe=73 saved=73 +[11:57:57] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:57:59] AFR 재진입 039010 sid=SCALP name=scalp_re px=6350 alert=1045500200I +[11:57:59] [ls_cond_hist] AFR 재진입 039010 sid=SCALP name=scalp_re px=6350 alert=1045500200I +[11:57:59] 💾 [SCALP] universe=74 saved=74 +[11:57:59] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:58:22] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[11:58:22] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[11:58:22] 💾 [SCALP] universe=75 saved=75 +[11:58:22] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:58:24] AFR 이탈 348030 sid=SCALP name=scalp_re px=3120 alert=1045500200I +[11:58:24] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=3120 alert=1045500200I +[11:58:24] 💾 [SCALP] universe=74 saved=74 +[11:58:24] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:58:28] AFR 이탈 039010 sid=SCALP name=scalp_re px=6340 alert=1045500200I +[11:58:28] [ls_cond_hist] AFR 이탈 039010 sid=SCALP name=scalp_re px=6340 alert=1045500200I +[11:58:28] 💾 [SCALP] universe=73 saved=73 +[11:58:28] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:58:31] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:58:31] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:58:31] 💾 [SCALP] universe=74 saved=74 +[11:58:31] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:58:32] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:58:32] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:58:32] 💾 [SCALP] universe=73 saved=73 +[11:58:32] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:58:35] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:58:35] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:58:35] 💾 [SCALP] universe=74 saved=74 +[11:58:35] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:58:36] AFR 재진입 100220 sid=SCALP name=scalp_re px=5040 alert=1045500200I +[11:58:36] [ls_cond_hist] AFR 재진입 100220 sid=SCALP name=scalp_re px=5040 alert=1045500200I +[11:58:36] 💾 [SCALP] universe=75 saved=75 +[11:58:36] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:58:41] AFR 재진입 071280 sid=SCALP name=scalp_re px=6510 alert=1045500200I +[11:58:41] [ls_cond_hist] AFR 재진입 071280 sid=SCALP name=scalp_re px=6510 alert=1045500200I +[11:58:41] 💾 [SCALP] universe=76 saved=76 +[11:58:41] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:58:42] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[11:58:42] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[11:58:42] 💾 [SCALP] universe=77 saved=77 +[11:58:42] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:58:44] AFR 이탈 071280 sid=SCALP name=scalp_re px=6500 alert=1045500200I +[11:58:44] [ls_cond_hist] AFR 이탈 071280 sid=SCALP name=scalp_re px=6500 alert=1045500200I +[11:58:44] 💾 [SCALP] universe=76 saved=76 +[11:58:44] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:58:45] AFR 이탈 452400 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:58:45] [ls_cond_hist] AFR 이탈 452400 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[11:58:45] 💾 [SCALP] universe=75 saved=75 +[11:58:45] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:58:52] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:58:52] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:58:52] 💾 [SCALP] universe=74 saved=74 +[11:58:52] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:59:00] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[11:59:00] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[11:59:01] 💾 [SCALP] universe=73 saved=73 +[11:59:01] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:59:01] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:59:01] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[11:59:01] 💾 [SCALP] universe=74 saved=74 +[11:59:01] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:59:10] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:59:10] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[11:59:10] 💾 [SCALP] universe=73 saved=73 +[11:59:10] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[11:59:18] AFR 재진입 452400 sid=SCALP name=scalp_re px=5550 alert=1045500200I +[11:59:18] [ls_cond_hist] AFR 재진입 452400 sid=SCALP name=scalp_re px=5550 alert=1045500200I +[11:59:18] 💾 [SCALP] universe=74 saved=74 +[11:59:18] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:59:19] AFR 재진입 039010 sid=SCALP name=scalp_re px=6310 alert=1045500200I +[11:59:19] [ls_cond_hist] AFR 재진입 039010 sid=SCALP name=scalp_re px=6310 alert=1045500200I +[11:59:19] 💾 [SCALP] universe=75 saved=75 +[11:59:19] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:59:28] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[11:59:28] [ls_cond_hist] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[11:59:28] 💾 [SCALP] universe=76 saved=76 +[11:59:28] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:59:29] AFR 재진입 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:59:29] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3740 alert=1045500200I +[11:59:29] 💾 [SCALP] universe=77 saved=77 +[11:59:29] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[11:59:40] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:59:40] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[11:59:41] 💾 [SCALP] universe=76 saved=76 +[11:59:41] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[11:59:42] AFR 이탈 122310 sid=SCALP name=scalp_re px=3470 alert=1045500200I +[11:59:42] [ls_cond_hist] AFR 이탈 122310 sid=SCALP name=scalp_re px=3470 alert=1045500200I +[11:59:42] 💾 [SCALP] universe=75 saved=75 +[11:59:42] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[11:59:48] AFR 이탈 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[11:59:48] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[11:59:48] 💾 [SCALP] universe=74 saved=74 +[11:59:48] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[11:59:48] AFR 재진입 33626L sid=SCALP name=scalp_re px=6410 alert=1045500200I +[11:59:48] [ls_cond_hist] AFR 재진입 33626L sid=SCALP name=scalp_re px=6410 alert=1045500200I +[11:59:48] 💾 [SCALP] universe=75 saved=75 +[11:59:48] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[12:00:05] AFR 이탈 317830 sid=SCALP name=scalp_re px=4510 alert=1045500200I +[12:00:05] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4510 alert=1045500200I +[12:00:05] 💾 [SCALP] universe=74 saved=74 +[12:00:05] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[12:00:05] AFR 재진입 317830 sid=SCALP name=scalp_re px=4515 alert=1045500200I +[12:00:05] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4515 alert=1045500200I +[12:00:05] 💾 [SCALP] universe=75 saved=75 +[12:00:05] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[12:00:12] AFR 재진입 064850 sid=SCALP name=scalp_re px=18500 alert=1045500200I +[12:00:12] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18500 alert=1045500200I +[12:00:13] 💾 [SCALP] universe=76 saved=76 +[12:00:13] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[12:00:14] AFR 재진입 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[12:00:14] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[12:00:14] 💾 [SCALP] universe=77 saved=77 +[12:00:14] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[12:00:22] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:00:22] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:00:23] 💾 [SCALP] universe=78 saved=78 +[12:00:23] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[12:00:26] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[12:00:26] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[12:00:26] 💾 [SCALP] universe=77 saved=77 +[12:00:26] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[12:00:28] AFR 재진입 244920 sid=SCALP name=scalp_re px=11380 alert=1045500200I +[12:00:28] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11380 alert=1045500200I +[12:00:28] 💾 [SCALP] universe=78 saved=78 +[12:00:28] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[12:00:31] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:00:31] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:00:31] 💾 [SCALP] universe=77 saved=77 +[12:00:31] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[12:00:32] AFR 진입 136540 sid=SCALP name=scalp_re px=10480 alert=1045500200I +[12:00:32] [ls_cond_hist] AFR 진입 136540 sid=SCALP name=scalp_re px=10480 alert=1045500200I +[12:00:32] 💾 [SCALP] universe=78 saved=78 +[12:00:32] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[12:00:37] AFR 재진입 054920 sid=SCALP name=scalp_re px=3185 alert=1045500200I +[12:00:37] [ls_cond_hist] AFR 재진입 054920 sid=SCALP name=scalp_re px=3185 alert=1045500200I +[12:00:37] 💾 [SCALP] universe=79 saved=79 +[12:00:37] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:00:49] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[12:00:49] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[12:00:49] 💾 [SCALP] universe=80 saved=80 +[12:00:49] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:00:53] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[12:00:53] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[12:00:53] 💾 [SCALP] universe=79 saved=79 +[12:00:53] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:00:53] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:00:53] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:00:53] 💾 [SCALP] universe=80 saved=80 +[12:00:53] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:00:56] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:00:56] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:00:56] 💾 [SCALP] universe=79 saved=79 +[12:00:56] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:01:06] AFR 재진입 009520 sid=SCALP name=scalp_re px=10570 alert=1045500200I +[12:01:06] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10570 alert=1045500200I +[12:01:06] 💾 [SCALP] universe=80 saved=80 +[12:01:06] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:01:11] AFR 이탈 244920 sid=SCALP name=scalp_re px=11330 alert=1045500200I +[12:01:11] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11330 alert=1045500200I +[12:01:12] 💾 [SCALP] universe=79 saved=79 +[12:01:12] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:01:16] AFR 이탈 120240 sid=SCALP name=scalp_re px=14820 alert=1045500200I +[12:01:16] [ls_cond_hist] AFR 이탈 120240 sid=SCALP name=scalp_re px=14820 alert=1045500200I +[12:01:16] 💾 [SCALP] universe=78 saved=78 +[12:01:16] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[12:01:21] AFR 이탈 380550 sid=SCALP name=scalp_re px=7830 alert=1045500200I +[12:01:21] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7830 alert=1045500200I +[12:01:21] 💾 [SCALP] universe=77 saved=77 +[12:01:21] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[12:01:25] AFR 이탈 064850 sid=SCALP name=scalp_re px=18440 alert=1045500200I +[12:01:25] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18440 alert=1045500200I +[12:01:25] 💾 [SCALP] universe=76 saved=76 +[12:01:25] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[12:01:32] AFR 이탈 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[12:01:32] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[12:01:32] 💾 [SCALP] universe=75 saved=75 +[12:01:32] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[12:01:38] AFR 재진입 488900 sid=SCALP name=scalp_re px=7700 alert=1045500200I +[12:01:38] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7700 alert=1045500200I +[12:01:38] 💾 [SCALP] universe=76 saved=76 +[12:01:38] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[12:01:40] AFR 재진입 244920 sid=SCALP name=scalp_re px=11360 alert=1045500200I +[12:01:40] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11360 alert=1045500200I +[12:01:40] 💾 [SCALP] universe=77 saved=77 +[12:01:40] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[12:01:46] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[12:01:46] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[12:01:47] 💾 [SCALP] universe=78 saved=78 +[12:01:47] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[12:01:50] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:01:50] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:01:51] 💾 [SCALP] universe=77 saved=77 +[12:01:51] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[12:01:53] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[12:01:53] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[12:01:53] 💾 [SCALP] universe=78 saved=78 +[12:01:53] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[12:02:00] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[12:02:00] [ls_cond_hist] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[12:02:00] 💾 [SCALP] universe=79 saved=79 +[12:02:00] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:02:03] AFR 재진입 009520 sid=SCALP name=scalp_re px=10560 alert=1045500200I +[12:02:03] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10560 alert=1045500200I +[12:02:03] 💾 [SCALP] universe=80 saved=80 +[12:02:03] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:02:20] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[12:02:20] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[12:02:21] 💾 [SCALP] universe=81 saved=81 +[12:02:21] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:02:23] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:02:23] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:02:23] 💾 [SCALP] universe=80 saved=80 +[12:02:23] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:02:31] AFR 이탈 054920 sid=SCALP name=scalp_re px=3195 alert=1045500200I +[12:02:31] [ls_cond_hist] AFR 이탈 054920 sid=SCALP name=scalp_re px=3195 alert=1045500200I +[12:02:31] 💾 [SCALP] universe=79 saved=79 +[12:02:31] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:02:32] AFR 재진입 348030 sid=SCALP name=scalp_re px=3115 alert=1045500200I +[12:02:32] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3115 alert=1045500200I +[12:02:32] 💾 [SCALP] universe=80 saved=80 +[12:02:32] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:02:47] AFR 재진입 030530 sid=SCALP name=scalp_re px=16740 alert=1045500200I +[12:02:47] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16740 alert=1045500200I +[12:02:48] 💾 [SCALP] universe=81 saved=81 +[12:02:48] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:02:51] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[12:02:51] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[12:02:51] 💾 [SCALP] universe=82 saved=82 +[12:02:51] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:02:53] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[12:02:53] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[12:02:54] 💾 [SCALP] universe=83 saved=83 +[12:02:54] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:03:09] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[12:03:09] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[12:03:09] 💾 [SCALP] universe=84 saved=84 +[12:03:09] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:03:12] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[12:03:12] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[12:03:12] 💾 [SCALP] universe=85 saved=85 +[12:03:12] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:03:12] AFR 재진입 000225 sid=SCALP name=scalp_re px=3710 alert=1045500200I +[12:03:12] [ls_cond_hist] AFR 재진입 000225 sid=SCALP name=scalp_re px=3710 alert=1045500200I +[12:03:12] 💾 [SCALP] universe=86 saved=86 +[12:03:12] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:03:16] AFR 재진입 071280 sid=SCALP name=scalp_re px=6510 alert=1045500200I +[12:03:16] [ls_cond_hist] AFR 재진입 071280 sid=SCALP name=scalp_re px=6510 alert=1045500200I +[12:03:16] 💾 [SCALP] universe=87 saved=87 +[12:03:16] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:03:28] AFR 이탈 290550 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[12:03:28] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[12:03:29] 💾 [SCALP] universe=86 saved=86 +[12:03:29] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:03:49] AFR 이탈 059270 sid=SCALP name=scalp_re px=5270 alert=1045500200I +[12:03:49] [ls_cond_hist] AFR 이탈 059270 sid=SCALP name=scalp_re px=5270 alert=1045500200I +[12:03:49] 💾 [SCALP] universe=85 saved=85 +[12:03:49] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:03:51] AFR 재진입 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[12:03:51] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[12:03:52] 💾 [SCALP] universe=86 saved=86 +[12:03:52] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:03:52] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:03:52] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:03:52] 💾 [SCALP] universe=85 saved=85 +[12:03:52] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:03:52] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[12:03:52] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[12:03:52] 💾 [SCALP] universe=84 saved=84 +[12:03:52] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:03:54] AFR 이탈 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:03:54] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:03:54] 💾 [SCALP] universe=83 saved=83 +[12:03:54] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:03:54] AFR 이탈 030530 sid=SCALP name=scalp_re px=16730 alert=1045500200I +[12:03:54] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16730 alert=1045500200I +[12:03:54] 💾 [SCALP] universe=82 saved=82 +[12:03:54] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:04:01] AFR 이탈 215000 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[12:04:01] [ls_cond_hist] AFR 이탈 215000 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[12:04:01] 💾 [SCALP] universe=81 saved=81 +[12:04:01] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:04:01] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[12:04:01] [ls_cond_hist] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[12:04:02] 💾 [SCALP] universe=82 saved=82 +[12:04:02] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:04:03] AFR 재진입 143240 sid=SCALP name=scalp_re px=16500 alert=1045500200I +[12:04:03] [ls_cond_hist] AFR 재진입 143240 sid=SCALP name=scalp_re px=16500 alert=1045500200I +[12:04:03] 💾 [SCALP] universe=83 saved=83 +[12:04:03] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:04:03] AFR 이탈 143240 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[12:04:03] [ls_cond_hist] AFR 이탈 143240 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[12:04:04] 💾 [SCALP] universe=82 saved=82 +[12:04:04] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:04:26] AFR 이탈 120240 sid=SCALP name=scalp_re px=14800 alert=1045500200I +[12:04:26] [ls_cond_hist] AFR 이탈 120240 sid=SCALP name=scalp_re px=14800 alert=1045500200I +[12:04:26] 💾 [SCALP] universe=81 saved=81 +[12:04:26] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:04:30] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[12:04:30] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[12:04:30] 💾 [SCALP] universe=80 saved=80 +[12:04:30] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:04:39] AFR 재진입 140670 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[12:04:39] [ls_cond_hist] AFR 재진입 140670 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[12:04:39] 💾 [SCALP] universe=81 saved=81 +[12:04:39] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:04:44] AFR 재진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[12:04:44] [ls_cond_hist] AFR 재진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[12:04:44] 💾 [SCALP] universe=82 saved=82 +[12:04:44] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:04:45] AFR 재진입 229640 sid=SCALP name=scalp_re px=44450 alert=1045500200I +[12:04:45] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44450 alert=1045500200I +[12:04:45] 💾 [SCALP] universe=83 saved=83 +[12:04:45] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:04:54] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[12:04:54] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[12:04:55] 💾 [SCALP] universe=82 saved=82 +[12:04:55] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:05:00] AFR 이탈 380550 sid=SCALP name=scalp_re px=7830 alert=1045500200I +[12:05:00] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7830 alert=1045500200I +[12:05:00] 💾 [SCALP] universe=81 saved=81 +[12:05:00] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:05:01] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[12:05:01] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[12:05:01] 💾 [SCALP] universe=82 saved=82 +[12:05:01] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:05:06] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:05:06] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:05:06] 💾 [SCALP] universe=81 saved=81 +[12:05:06] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:05:08] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[12:05:08] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[12:05:08] 💾 [SCALP] universe=82 saved=82 +[12:05:08] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:05:18] AFR 이탈 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[12:05:18] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[12:05:18] 💾 [SCALP] universe=81 saved=81 +[12:05:18] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:05:25] AFR 이탈 100220 sid=SCALP name=scalp_re px=5050 alert=1045500200I +[12:05:25] [ls_cond_hist] AFR 이탈 100220 sid=SCALP name=scalp_re px=5050 alert=1045500200I +[12:05:25] 💾 [SCALP] universe=80 saved=80 +[12:05:25] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:05:29] AFR 재진입 456070 sid=SCALP name=scalp_re px=5940 alert=1045500200I +[12:05:29] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5940 alert=1045500200I +[12:05:29] 💾 [SCALP] universe=81 saved=81 +[12:05:29] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:05:31] AFR 이탈 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[12:05:31] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[12:05:31] 💾 [SCALP] universe=80 saved=80 +[12:05:31] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:05:37] AFR 이탈 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[12:05:37] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[12:05:37] 💾 [SCALP] universe=79 saved=79 +[12:05:37] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:05:38] AFR 재진입 456070 sid=SCALP name=scalp_re px=5940 alert=1045500200I +[12:05:38] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5940 alert=1045500200I +[12:05:38] 💾 [SCALP] universe=80 saved=80 +[12:05:38] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:05:39] AFR 재진입 012630 sid=SCALP name=scalp_re px=21850 alert=1045500200I +[12:05:39] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21850 alert=1045500200I +[12:05:39] 💾 [SCALP] universe=81 saved=81 +[12:05:39] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:05:44] AFR 재진입 137950 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[12:05:44] [ls_cond_hist] AFR 재진입 137950 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[12:05:44] 💾 [SCALP] universe=82 saved=82 +[12:05:44] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:05:45] AFR 이탈 348030 sid=SCALP name=scalp_re px=3120 alert=1045500200I +[12:05:45] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=3120 alert=1045500200I +[12:05:45] 💾 [SCALP] universe=81 saved=81 +[12:05:45] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:05:48] AFR 이탈 290550 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[12:05:48] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[12:05:48] 💾 [SCALP] universe=80 saved=80 +[12:05:48] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:05:52] AFR 재진입 380550 sid=SCALP name=scalp_re px=7860 alert=1045500200I +[12:05:52] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7860 alert=1045500200I +[12:05:52] 💾 [SCALP] universe=81 saved=81 +[12:05:52] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:05:55] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[12:05:55] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[12:05:55] 💾 [SCALP] universe=82 saved=82 +[12:05:55] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:05:56] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[12:05:56] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[12:05:56] 💾 [SCALP] universe=83 saved=83 +[12:05:56] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:06:00] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[12:06:00] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[12:06:00] 💾 [SCALP] universe=82 saved=82 +[12:06:00] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:06:03] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[12:06:03] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[12:06:03] 💾 [SCALP] universe=81 saved=81 +[12:06:03] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:06:06] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[12:06:06] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[12:06:06] 💾 [SCALP] universe=80 saved=80 +[12:06:06] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:06:23] AFR 재진입 009520 sid=SCALP name=scalp_re px=10560 alert=1045500200I +[12:06:23] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10560 alert=1045500200I +[12:06:23] 💾 [SCALP] universe=81 saved=81 +[12:06:23] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:06:23] AFR 재진입 488900 sid=SCALP name=scalp_re px=7700 alert=1045500200I +[12:06:23] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7700 alert=1045500200I +[12:06:23] 💾 [SCALP] universe=82 saved=82 +[12:06:23] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:06:31] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[12:06:31] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[12:06:31] 💾 [SCALP] universe=83 saved=83 +[12:06:31] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:06:33] AFR 재진입 064850 sid=SCALP name=scalp_re px=18550 alert=1045500200I +[12:06:33] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18550 alert=1045500200I +[12:06:33] 💾 [SCALP] universe=84 saved=84 +[12:06:33] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:06:35] AFR 재진입 122310 sid=SCALP name=scalp_re px=3480 alert=1045500200I +[12:06:35] [ls_cond_hist] AFR 재진입 122310 sid=SCALP name=scalp_re px=3480 alert=1045500200I +[12:06:35] 💾 [SCALP] universe=85 saved=85 +[12:06:35] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:06:38] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:06:38] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:06:38] 💾 [SCALP] universe=86 saved=86 +[12:06:38] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:06:54] AFR 이탈 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[12:06:54] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[12:06:54] 💾 [SCALP] universe=85 saved=85 +[12:06:54] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:06:57] AFR 재진입 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[12:06:57] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[12:06:57] 💾 [SCALP] universe=86 saved=86 +[12:06:57] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:07:01] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[12:07:01] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[12:07:01] 💾 [SCALP] universe=87 saved=87 +[12:07:01] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:07:05] AFR 이탈 064850 sid=SCALP name=scalp_re px=18450 alert=1045500200I +[12:07:05] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18450 alert=1045500200I +[12:07:05] 💾 [SCALP] universe=86 saved=86 +[12:07:05] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:07:10] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[12:07:10] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[12:07:10] 💾 [SCALP] universe=87 saved=87 +[12:07:10] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:07:13] AFR 이탈 096250 sid=SCALP name=scalp_re px=6020 alert=1045500200I +[12:07:13] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=6020 alert=1045500200I +[12:07:13] 💾 [SCALP] universe=86 saved=86 +[12:07:13] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:07:13] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[12:07:13] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[12:07:13] 💾 [SCALP] universe=87 saved=87 +[12:07:13] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:07:15] AFR 진입 130580 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[12:07:15] [ls_cond_hist] AFR 진입 130580 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[12:07:15] 💾 [SCALP] universe=88 saved=88 +[12:07:15] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:07:21] AFR 재진입 393890 sid=SCALP name=scalp_re px=7130 alert=1045500200I +[12:07:21] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7130 alert=1045500200I +[12:07:21] 💾 [SCALP] universe=89 saved=89 +[12:07:21] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:07:27] AFR 이탈 380550 sid=SCALP name=scalp_re px=7840 alert=1045500200I +[12:07:27] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7840 alert=1045500200I +[12:07:27] 💾 [SCALP] universe=88 saved=88 +[12:07:27] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:07:30] AFR 재진입 096250 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[12:07:30] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[12:07:31] 💾 [SCALP] universe=89 saved=89 +[12:07:31] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:07:39] AFR 이탈 474650 sid=SCALP name=scalp_re px=20800 alert=1045500200I +[12:07:39] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20800 alert=1045500200I +[12:07:39] 💾 [SCALP] universe=88 saved=88 +[12:07:39] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:07:40] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:07:40] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:07:40] 💾 [SCALP] universe=87 saved=87 +[12:07:40] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:07:42] AFR 이탈 051600 sid=SCALP name=scalp_re px=47050 alert=1045500200I +[12:07:42] [ls_cond_hist] AFR 이탈 051600 sid=SCALP name=scalp_re px=47050 alert=1045500200I +[12:07:42] 💾 [SCALP] universe=86 saved=86 +[12:07:42] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:07:43] AFR 이탈 244920 sid=SCALP name=scalp_re px=11320 alert=1045500200I +[12:07:43] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11320 alert=1045500200I +[12:07:43] 💾 [SCALP] universe=85 saved=85 +[12:07:43] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:07:44] AFR 재진입 380550 sid=SCALP name=scalp_re px=7860 alert=1045500200I +[12:07:44] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7860 alert=1045500200I +[12:07:44] 💾 [SCALP] universe=86 saved=86 +[12:07:44] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:07:46] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[12:07:46] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[12:07:46] 💾 [SCALP] universe=85 saved=85 +[12:07:46] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:07:46] AFR 재진입 041910 sid=SCALP name=scalp_re px=5400 alert=1045500200I +[12:07:46] [ls_cond_hist] AFR 재진입 041910 sid=SCALP name=scalp_re px=5400 alert=1045500200I +[12:07:46] 💾 [SCALP] universe=86 saved=86 +[12:07:46] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:07:48] AFR 이탈 136540 sid=SCALP name=scalp_re px=10470 alert=1045500200I +[12:07:48] [ls_cond_hist] AFR 이탈 136540 sid=SCALP name=scalp_re px=10470 alert=1045500200I +[12:07:48] 💾 [SCALP] universe=85 saved=85 +[12:07:48] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:07:49] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:07:49] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:07:49] 💾 [SCALP] universe=86 saved=86 +[12:07:49] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:07:49] AFR 재진입 064850 sid=SCALP name=scalp_re px=18550 alert=1045500200I +[12:07:49] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18550 alert=1045500200I +[12:07:49] 💾 [SCALP] universe=87 saved=87 +[12:07:49] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:07:57] AFR 이탈 096250 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:07:57] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:07:57] 💾 [SCALP] universe=86 saved=86 +[12:07:57] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:07:57] AFR 재진입 096250 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[12:07:57] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[12:07:57] 💾 [SCALP] universe=87 saved=87 +[12:07:57] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:08:00] AFR 이탈 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[12:08:00] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[12:08:00] 💾 [SCALP] universe=86 saved=86 +[12:08:00] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:08:00] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[12:08:00] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[12:08:00] 💾 [SCALP] universe=87 saved=87 +[12:08:00] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:08:06] AFR 이탈 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[12:08:06] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[12:08:06] 💾 [SCALP] universe=86 saved=86 +[12:08:06] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:08:10] AFR 이탈 064850 sid=SCALP name=scalp_re px=18450 alert=1045500200I +[12:08:10] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18450 alert=1045500200I +[12:08:10] 💾 [SCALP] universe=85 saved=85 +[12:08:10] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:08:13] AFR 이탈 215000 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[12:08:13] [ls_cond_hist] AFR 이탈 215000 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[12:08:13] 💾 [SCALP] universe=84 saved=84 +[12:08:13] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:08:14] AFR 재진입 215000 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[12:08:14] [ls_cond_hist] AFR 재진입 215000 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[12:08:14] 💾 [SCALP] universe=85 saved=85 +[12:08:14] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:08:19] AFR 이탈 140670 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[12:08:19] [ls_cond_hist] AFR 이탈 140670 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[12:08:19] 💾 [SCALP] universe=84 saved=84 +[12:08:19] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:08:20] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[12:08:20] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[12:08:20] 💾 [SCALP] universe=83 saved=83 +[12:08:20] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:08:35] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:08:35] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:08:36] 💾 [SCALP] universe=82 saved=82 +[12:08:36] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:08:36] AFR 이탈 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[12:08:36] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[12:08:36] 💾 [SCALP] universe=81 saved=81 +[12:08:36] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:08:44] AFR 이탈 096250 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:08:44] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:08:44] 💾 [SCALP] universe=80 saved=80 +[12:08:44] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:08:45] AFR 재진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[12:08:45] [ls_cond_hist] AFR 재진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[12:08:45] 💾 [SCALP] universe=81 saved=81 +[12:08:45] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:08:53] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[12:08:53] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[12:08:53] 💾 [SCALP] universe=82 saved=82 +[12:08:53] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:08:55] AFR 재진입 064850 sid=SCALP name=scalp_re px=18550 alert=1045500200I +[12:08:55] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18550 alert=1045500200I +[12:08:55] 💾 [SCALP] universe=83 saved=83 +[12:08:55] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:09:01] AFR 이탈 380550 sid=SCALP name=scalp_re px=7840 alert=1045500200I +[12:09:01] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7840 alert=1045500200I +[12:09:02] 💾 [SCALP] universe=82 saved=82 +[12:09:02] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:09:05] AFR 재진입 348030 sid=SCALP name=scalp_re px=3115 alert=1045500200I +[12:09:05] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3115 alert=1045500200I +[12:09:05] 💾 [SCALP] universe=83 saved=83 +[12:09:05] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:09:07] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15140 alert=1045500200I +[12:09:07] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15140 alert=1045500200I +[12:09:07] 💾 [SCALP] universe=82 saved=82 +[12:09:07] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:09:08] AFR 이탈 229640 sid=SCALP name=scalp_re px=44300 alert=1045500200I +[12:09:08] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44300 alert=1045500200I +[12:09:09] 💾 [SCALP] universe=81 saved=81 +[12:09:09] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:09:11] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[12:09:11] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44400 alert=1045500200I +[12:09:11] 💾 [SCALP] universe=82 saved=82 +[12:09:11] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:09:12] AFR 이탈 071280 sid=SCALP name=scalp_re px=6500 alert=1045500200I +[12:09:12] [ls_cond_hist] AFR 이탈 071280 sid=SCALP name=scalp_re px=6500 alert=1045500200I +[12:09:12] 💾 [SCALP] universe=81 saved=81 +[12:09:12] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:09:16] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15150 alert=1045500200I +[12:09:16] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15150 alert=1045500200I +[12:09:16] 💾 [SCALP] universe=82 saved=82 +[12:09:16] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:09:18] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15130 alert=1045500200I +[12:09:18] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15130 alert=1045500200I +[12:09:18] 💾 [SCALP] universe=81 saved=81 +[12:09:18] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:09:19] AFR 이탈 229640 sid=SCALP name=scalp_re px=44300 alert=1045500200I +[12:09:19] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44300 alert=1045500200I +[12:09:19] 💾 [SCALP] universe=80 saved=80 +[12:09:19] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:09:25] AFR 재진입 022100 sid=SCALP name=scalp_re px=19350 alert=1045500200I +[12:09:25] [ls_cond_hist] AFR 재진입 022100 sid=SCALP name=scalp_re px=19350 alert=1045500200I +[12:09:25] 💾 [SCALP] universe=81 saved=81 +[12:09:25] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:09:26] AFR 이탈 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[12:09:26] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[12:09:26] 💾 [SCALP] universe=80 saved=80 +[12:09:26] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:09:28] AFR 재진입 096250 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[12:09:28] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[12:09:28] 💾 [SCALP] universe=81 saved=81 +[12:09:28] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:09:30] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:09:30] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:09:30] 💾 [SCALP] universe=80 saved=80 +[12:09:30] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:09:30] AFR 재진입 059270 sid=SCALP name=scalp_re px=5230 alert=1045500200I +[12:09:30] [ls_cond_hist] AFR 재진입 059270 sid=SCALP name=scalp_re px=5230 alert=1045500200I +[12:09:30] 💾 [SCALP] universe=81 saved=81 +[12:09:30] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:09:31] AFR 진입 006620 sid=SCALP name=scalp_re px=3855 alert=1045500200I +[12:09:31] [ls_cond_hist] AFR 진입 006620 sid=SCALP name=scalp_re px=3855 alert=1045500200I +[12:09:31] 💾 [SCALP] universe=82 saved=82 +[12:09:31] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:09:33] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:09:33] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:09:33] 💾 [SCALP] universe=83 saved=83 +[12:09:33] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:09:34] AFR 이탈 041910 sid=SCALP name=scalp_re px=5390 alert=1045500200I +[12:09:34] [ls_cond_hist] AFR 이탈 041910 sid=SCALP name=scalp_re px=5390 alert=1045500200I +[12:09:34] 💾 [SCALP] universe=82 saved=82 +[12:09:34] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:09:35] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:09:35] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:09:35] 💾 [SCALP] universe=83 saved=83 +[12:09:35] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:09:39] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[12:09:39] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[12:09:39] 💾 [SCALP] universe=82 saved=82 +[12:09:39] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:09:39] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:09:39] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:09:40] 💾 [SCALP] universe=81 saved=81 +[12:09:40] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:09:40] AFR 재진입 041910 sid=SCALP name=scalp_re px=5400 alert=1045500200I +[12:09:40] [ls_cond_hist] AFR 재진입 041910 sid=SCALP name=scalp_re px=5400 alert=1045500200I +[12:09:40] 💾 [SCALP] universe=82 saved=82 +[12:09:40] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:09:40] AFR 이탈 012630 sid=SCALP name=scalp_re px=21800 alert=1045500200I +[12:09:40] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21800 alert=1045500200I +[12:09:40] 💾 [SCALP] universe=81 saved=81 +[12:09:40] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:09:46] AFR 재진입 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[12:09:46] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[12:09:46] 💾 [SCALP] universe=82 saved=82 +[12:09:46] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:09:46] AFR 이탈 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[12:09:46] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[12:09:46] 💾 [SCALP] universe=81 saved=81 +[12:09:46] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:09:46] AFR 재진입 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[12:09:46] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[12:09:46] 💾 [SCALP] universe=82 saved=82 +[12:09:46] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:09:47] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:09:47] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:09:47] 💾 [SCALP] universe=81 saved=81 +[12:09:47] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:09:47] AFR 이탈 096250 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:09:47] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:09:47] 💾 [SCALP] universe=80 saved=80 +[12:09:47] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:09:51] AFR 이탈 064850 sid=SCALP name=scalp_re px=18450 alert=1045500200I +[12:09:51] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18450 alert=1045500200I +[12:09:51] 💾 [SCALP] universe=79 saved=79 +[12:09:51] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:09:56] AFR 재진입 096250 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[12:09:56] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6060 alert=1045500200I +[12:09:56] 💾 [SCALP] universe=80 saved=80 +[12:09:56] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:09:57] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:09:57] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:09:57] 💾 [SCALP] universe=81 saved=81 +[12:09:57] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:09:57] AFR 재진입 064850 sid=SCALP name=scalp_re px=18530 alert=1045500200I +[12:09:57] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18530 alert=1045500200I +[12:09:57] 💾 [SCALP] universe=82 saved=82 +[12:09:57] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:10:00] AFR 이탈 064850 sid=SCALP name=scalp_re px=18440 alert=1045500200I +[12:10:00] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18440 alert=1045500200I +[12:10:00] 💾 [SCALP] universe=81 saved=81 +[12:10:00] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:10:00] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:10:00] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:10:01] 💾 [SCALP] universe=80 saved=80 +[12:10:01] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:10:02] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:10:02] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:10:02] 💾 [SCALP] universe=81 saved=81 +[12:10:02] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:10:03] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:10:03] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:10:03] 💾 [SCALP] universe=82 saved=82 +[12:10:03] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:10:04] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:10:04] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:10:04] 💾 [SCALP] universe=81 saved=81 +[12:10:04] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:10:05] AFR 이탈 456070 sid=SCALP name=scalp_re px=5900 alert=1045500200I +[12:10:05] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5900 alert=1045500200I +[12:10:05] 💾 [SCALP] universe=80 saved=80 +[12:10:05] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:10:06] AFR 이탈 006620 sid=SCALP name=scalp_re px=3855 alert=1045500200I +[12:10:06] [ls_cond_hist] AFR 이탈 006620 sid=SCALP name=scalp_re px=3855 alert=1045500200I +[12:10:06] 💾 [SCALP] universe=79 saved=79 +[12:10:06] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:10:09] AFR 재진입 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[12:10:09] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[12:10:09] 💾 [SCALP] universe=80 saved=80 +[12:10:09] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:10:16] AFR 재진입 244920 sid=SCALP name=scalp_re px=11340 alert=1045500200I +[12:10:16] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11340 alert=1045500200I +[12:10:16] 💾 [SCALP] universe=81 saved=81 +[12:10:16] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:10:17] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:10:17] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:10:17] 💾 [SCALP] universe=80 saved=80 +[12:10:17] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:10:18] AFR 이탈 456070 sid=SCALP name=scalp_re px=5900 alert=1045500200I +[12:10:18] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5900 alert=1045500200I +[12:10:18] 💾 [SCALP] universe=79 saved=79 +[12:10:18] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:10:20] AFR 진입 455900 sid=SCALP name=scalp_re px=17180 alert=1045500200I +[12:10:20] [ls_cond_hist] AFR 진입 455900 sid=SCALP name=scalp_re px=17180 alert=1045500200I +[12:10:20] 💾 [SCALP] universe=80 saved=80 +[12:10:20] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:10:21] AFR 재진입 101970 sid=SCALP name=scalp_re px=9700 alert=1045500200I +[12:10:21] [ls_cond_hist] AFR 재진입 101970 sid=SCALP name=scalp_re px=9700 alert=1045500200I +[12:10:21] 💾 [SCALP] universe=81 saved=81 +[12:10:21] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:10:27] AFR 이탈 005010 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[12:10:27] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[12:10:27] 💾 [SCALP] universe=80 saved=80 +[12:10:27] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:10:28] AFR 재진입 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[12:10:28] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[12:10:28] 💾 [SCALP] universe=81 saved=81 +[12:10:28] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:10:30] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:10:30] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:10:30] 💾 [SCALP] universe=82 saved=82 +[12:10:30] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:10:30] AFR 이탈 096250 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:10:30] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:10:30] 💾 [SCALP] universe=81 saved=81 +[12:10:30] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:10:32] AFR 진입 195870 sid=SCALP name=scalp_re px=49900 alert=1045500200I +[12:10:32] [ls_cond_hist] AFR 진입 195870 sid=SCALP name=scalp_re px=49900 alert=1045500200I +[12:10:32] 💾 [SCALP] universe=82 saved=82 +[12:10:32] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:10:33] AFR 이탈 005010 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[12:10:33] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[12:10:33] 💾 [SCALP] universe=81 saved=81 +[12:10:33] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:10:35] AFR 이탈 456070 sid=SCALP name=scalp_re px=5890 alert=1045500200I +[12:10:35] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5890 alert=1045500200I +[12:10:35] 💾 [SCALP] universe=80 saved=80 +[12:10:35] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:10:41] AFR 이탈 452400 sid=SCALP name=scalp_re px=5540 alert=1045500200I +[12:10:41] [ls_cond_hist] AFR 이탈 452400 sid=SCALP name=scalp_re px=5540 alert=1045500200I +[12:10:41] 💾 [SCALP] universe=79 saved=79 +[12:10:41] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:10:43] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[12:10:43] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[12:10:43] 💾 [SCALP] universe=78 saved=78 +[12:10:43] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[12:10:44] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:10:44] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:10:44] 💾 [SCALP] universe=79 saved=79 +[12:10:44] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:10:47] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15140 alert=1045500200I +[12:10:47] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15140 alert=1045500200I +[12:10:47] 💾 [SCALP] universe=80 saved=80 +[12:10:47] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:10:48] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:10:48] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:10:48] 💾 [SCALP] universe=79 saved=79 +[12:10:48] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:10:49] AFR 이탈 411080 sid=SCALP name=scalp_re px=3850 alert=1045500200I +[12:10:49] [ls_cond_hist] AFR 이탈 411080 sid=SCALP name=scalp_re px=3850 alert=1045500200I +[12:10:49] 💾 [SCALP] universe=78 saved=78 +[12:10:49] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[12:10:50] AFR 진입 222110 sid=SCALP name=scalp_re px=4725 alert=1045500200I +[12:10:50] [ls_cond_hist] AFR 진입 222110 sid=SCALP name=scalp_re px=4725 alert=1045500200I +[12:10:50] 💾 [SCALP] universe=79 saved=79 +[12:10:50] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:10:58] AFR 재진입 096250 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[12:10:58] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[12:10:58] 💾 [SCALP] universe=80 saved=80 +[12:10:58] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:11:02] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:11:02] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:11:02] 💾 [SCALP] universe=81 saved=81 +[12:11:02] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:11:03] AFR 재진입 474650 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[12:11:03] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[12:11:03] 💾 [SCALP] universe=82 saved=82 +[12:11:03] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:11:13] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:11:13] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:11:13] 💾 [SCALP] universe=83 saved=83 +[12:11:13] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:11:16] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:11:16] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:11:16] 💾 [SCALP] universe=82 saved=82 +[12:11:16] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:11:18] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:11:18] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:11:18] 💾 [SCALP] universe=83 saved=83 +[12:11:18] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:11:20] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15090 alert=1045500200I +[12:11:20] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15090 alert=1045500200I +[12:11:20] 💾 [SCALP] universe=82 saved=82 +[12:11:20] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:11:27] AFR 재진입 023350 sid=SCALP name=scalp_re px=4055 alert=1045500200I +[12:11:27] [ls_cond_hist] AFR 재진입 023350 sid=SCALP name=scalp_re px=4055 alert=1045500200I +[12:11:27] 💾 [SCALP] universe=83 saved=83 +[12:11:27] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:11:30] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:11:30] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:11:30] 💾 [SCALP] universe=82 saved=82 +[12:11:30] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:11:36] AFR 재진입 140670 sid=SCALP name=scalp_re px=8860 alert=1045500200I +[12:11:36] [ls_cond_hist] AFR 재진입 140670 sid=SCALP name=scalp_re px=8860 alert=1045500200I +[12:11:37] 💾 [SCALP] universe=83 saved=83 +[12:11:37] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:11:37] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:11:37] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:11:37] 💾 [SCALP] universe=84 saved=84 +[12:11:37] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:11:38] AFR 이탈 105740 sid=SCALP name=scalp_re px=6870 alert=1045500200I +[12:11:38] [ls_cond_hist] AFR 이탈 105740 sid=SCALP name=scalp_re px=6870 alert=1045500200I +[12:11:38] 💾 [SCALP] universe=83 saved=83 +[12:11:38] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:11:45] AFR 이탈 096250 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:11:45] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:11:45] 💾 [SCALP] universe=82 saved=82 +[12:11:45] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:11:48] AFR 이탈 458650 sid=SCALP name=scalp_re px=7920 alert=1045500200I +[12:11:48] [ls_cond_hist] AFR 이탈 458650 sid=SCALP name=scalp_re px=7920 alert=1045500200I +[12:11:48] 💾 [SCALP] universe=81 saved=81 +[12:11:48] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:11:48] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:11:48] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:11:49] 💾 [SCALP] universe=82 saved=82 +[12:11:49] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:11:49] AFR 이탈 140670 sid=SCALP name=scalp_re px=8830 alert=1045500200I +[12:11:49] [ls_cond_hist] AFR 이탈 140670 sid=SCALP name=scalp_re px=8830 alert=1045500200I +[12:11:49] 💾 [SCALP] universe=81 saved=81 +[12:11:49] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:11:52] AFR 이탈 005010 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[12:11:52] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[12:11:52] 💾 [SCALP] universe=80 saved=80 +[12:11:52] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:11:59] AFR 재진입 105740 sid=SCALP name=scalp_re px=6880 alert=1045500200I +[12:11:59] [ls_cond_hist] AFR 재진입 105740 sid=SCALP name=scalp_re px=6880 alert=1045500200I +[12:11:59] 💾 [SCALP] universe=81 saved=81 +[12:11:59] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:11:59] AFR 재진입 229640 sid=SCALP name=scalp_re px=44500 alert=1045500200I +[12:11:59] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44500 alert=1045500200I +[12:11:59] 💾 [SCALP] universe=82 saved=82 +[12:11:59] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:11:59] AFR 이탈 105740 sid=SCALP name=scalp_re px=6860 alert=1045500200I +[12:11:59] [ls_cond_hist] AFR 이탈 105740 sid=SCALP name=scalp_re px=6860 alert=1045500200I +[12:12:00] 💾 [SCALP] universe=81 saved=81 +[12:12:00] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:12:00] AFR 진입 181710 sid=SCALP name=scalp_re px=37750 alert=1045500200I +[12:12:00] [ls_cond_hist] AFR 진입 181710 sid=SCALP name=scalp_re px=37750 alert=1045500200I +[12:12:00] 💾 [SCALP] universe=82 saved=82 +[12:12:00] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:12:03] AFR 재진입 105740 sid=SCALP name=scalp_re px=6890 alert=1045500200I +[12:12:03] [ls_cond_hist] AFR 재진입 105740 sid=SCALP name=scalp_re px=6890 alert=1045500200I +[12:12:03] 💾 [SCALP] universe=83 saved=83 +[12:12:03] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:12:09] AFR 재진입 458650 sid=SCALP name=scalp_re px=7930 alert=1045500200I +[12:12:09] [ls_cond_hist] AFR 재진입 458650 sid=SCALP name=scalp_re px=7930 alert=1045500200I +[12:12:09] 💾 [SCALP] universe=84 saved=84 +[12:12:09] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:12:12] AFR 이탈 195870 sid=SCALP name=scalp_re px=50000 alert=1045500200I +[12:12:12] [ls_cond_hist] AFR 이탈 195870 sid=SCALP name=scalp_re px=50000 alert=1045500200I +[12:12:12] 💾 [SCALP] universe=83 saved=83 +[12:12:12] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:12:12] AFR 이탈 215000 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[12:12:12] [ls_cond_hist] AFR 이탈 215000 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[12:12:12] 💾 [SCALP] universe=82 saved=82 +[12:12:12] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:12:16] AFR 이탈 348030 sid=SCALP name=scalp_re px=3120 alert=1045500200I +[12:12:16] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=3120 alert=1045500200I +[12:12:17] 💾 [SCALP] universe=81 saved=81 +[12:12:17] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:12:17] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8790 alert=1045500200I +[12:12:17] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8790 alert=1045500200I +[12:12:18] 💾 [SCALP] universe=82 saved=82 +[12:12:18] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:12:18] AFR 이탈 051600 sid=SCALP name=scalp_re px=46950 alert=1045500200I +[12:12:18] [ls_cond_hist] AFR 이탈 051600 sid=SCALP name=scalp_re px=46950 alert=1045500200I +[12:12:18] 💾 [SCALP] universe=81 saved=81 +[12:12:18] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:12:21] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:12:21] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:12:21] 💾 [SCALP] universe=82 saved=82 +[12:12:21] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:12:22] AFR 재진입 030530 sid=SCALP name=scalp_re px=16710 alert=1045500200I +[12:12:22] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16710 alert=1045500200I +[12:12:23] 💾 [SCALP] universe=83 saved=83 +[12:12:23] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:12:25] AFR 재진입 452400 sid=SCALP name=scalp_re px=5550 alert=1045500200I +[12:12:25] [ls_cond_hist] AFR 재진입 452400 sid=SCALP name=scalp_re px=5550 alert=1045500200I +[12:12:25] 💾 [SCALP] universe=84 saved=84 +[12:12:25] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:12:28] AFR 재진입 456070 sid=SCALP name=scalp_re px=5910 alert=1045500200I +[12:12:28] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5910 alert=1045500200I +[12:12:28] 💾 [SCALP] universe=85 saved=85 +[12:12:28] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:12:29] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8750 alert=1045500200I +[12:12:29] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8750 alert=1045500200I +[12:12:29] 💾 [SCALP] universe=84 saved=84 +[12:12:29] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:12:30] AFR 이탈 022100 sid=SCALP name=scalp_re px=19360 alert=1045500200I +[12:12:30] [ls_cond_hist] AFR 이탈 022100 sid=SCALP name=scalp_re px=19360 alert=1045500200I +[12:12:30] 💾 [SCALP] universe=83 saved=83 +[12:12:30] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:12:33] AFR 진입 297090 sid=SCALP name=scalp_re px=3630 alert=1045500200I +[12:12:33] [ls_cond_hist] AFR 진입 297090 sid=SCALP name=scalp_re px=3630 alert=1045500200I +[12:12:33] 💾 [SCALP] universe=84 saved=84 +[12:12:33] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:12:38] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:12:38] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:12:38] 💾 [SCALP] universe=85 saved=85 +[12:12:38] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:12:39] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:12:39] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:12:39] 💾 [SCALP] universe=84 saved=84 +[12:12:39] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:12:39] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:12:39] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:12:39] 💾 [SCALP] universe=85 saved=85 +[12:12:39] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:12:40] AFR 재진입 140670 sid=SCALP name=scalp_re px=8860 alert=1045500200I +[12:12:40] [ls_cond_hist] AFR 재진입 140670 sid=SCALP name=scalp_re px=8860 alert=1045500200I +[12:12:40] 💾 [SCALP] universe=86 saved=86 +[12:12:40] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:12:41] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:12:41] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:12:41] 💾 [SCALP] universe=85 saved=85 +[12:12:41] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:12:41] AFR 재진입 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[12:12:41] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7690 alert=1045500200I +[12:12:41] 💾 [SCALP] universe=86 saved=86 +[12:12:41] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:12:44] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8800 alert=1045500200I +[12:12:44] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8800 alert=1045500200I +[12:12:44] 💾 [SCALP] universe=87 saved=87 +[12:12:44] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:12:47] AFR 이탈 455900 sid=SCALP name=scalp_re px=17240 alert=1045500200I +[12:12:47] [ls_cond_hist] AFR 이탈 455900 sid=SCALP name=scalp_re px=17240 alert=1045500200I +[12:12:47] 💾 [SCALP] universe=86 saved=86 +[12:12:47] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:12:48] AFR 재진입 290550 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[12:12:48] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[12:12:48] 💾 [SCALP] universe=87 saved=87 +[12:12:48] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:12:48] AFR 이탈 222110 sid=SCALP name=scalp_re px=4840 alert=1045500200I +[12:12:48] [ls_cond_hist] AFR 이탈 222110 sid=SCALP name=scalp_re px=4840 alert=1045500200I +[12:12:48] 💾 [SCALP] universe=86 saved=86 +[12:12:48] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:12:49] AFR 재진입 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[12:12:49] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[12:12:49] 💾 [SCALP] universe=87 saved=87 +[12:12:49] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:12:50] AFR 재진입 051600 sid=SCALP name=scalp_re px=46950 alert=1045500200I +[12:12:50] [ls_cond_hist] AFR 재진입 051600 sid=SCALP name=scalp_re px=46950 alert=1045500200I +[12:12:51] 💾 [SCALP] universe=88 saved=88 +[12:12:51] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:12:53] AFR 재진입 071280 sid=SCALP name=scalp_re px=6500 alert=1045500200I +[12:12:53] [ls_cond_hist] AFR 재진입 071280 sid=SCALP name=scalp_re px=6500 alert=1045500200I +[12:12:53] 💾 [SCALP] universe=89 saved=89 +[12:12:53] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:12:55] AFR 재진입 003535 sid=SCALP name=scalp_re px=5300 alert=1045500200I +[12:12:55] [ls_cond_hist] AFR 재진입 003535 sid=SCALP name=scalp_re px=5300 alert=1045500200I +[12:12:55] 💾 [SCALP] universe=90 saved=90 +[12:12:55] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:12:58] AFR 재진입 096250 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[12:12:58] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[12:12:58] 💾 [SCALP] universe=91 saved=91 +[12:12:58] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:13:03] AFR 이탈 096250 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[12:13:03] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[12:13:04] 💾 [SCALP] universe=90 saved=90 +[12:13:04] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:13:04] AFR 이탈 456070 sid=SCALP name=scalp_re px=5900 alert=1045500200I +[12:13:04] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5900 alert=1045500200I +[12:13:04] 💾 [SCALP] universe=89 saved=89 +[12:13:04] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:13:04] AFR 재진입 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[12:13:04] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5930 alert=1045500200I +[12:13:04] 💾 [SCALP] universe=90 saved=90 +[12:13:04] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:13:05] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:13:05] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:13:06] 💾 [SCALP] universe=91 saved=91 +[12:13:06] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:13:08] AFR 이탈 126640 sid=SCALP name=scalp_re px=4090 alert=1045500200I +[12:13:08] [ls_cond_hist] AFR 이탈 126640 sid=SCALP name=scalp_re px=4090 alert=1045500200I +[12:13:08] 💾 [SCALP] universe=90 saved=90 +[12:13:08] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:13:13] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[12:13:13] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[12:13:13] 💾 [SCALP] universe=89 saved=89 +[12:13:13] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:13:13] AFR 재진입 081180 sid=SCALP name=scalp_re px=5520 alert=1045500200I +[12:13:13] [ls_cond_hist] AFR 재진입 081180 sid=SCALP name=scalp_re px=5520 alert=1045500200I +[12:13:14] 💾 [SCALP] universe=90 saved=90 +[12:13:14] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:13:15] AFR 재진입 096250 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[12:13:15] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[12:13:15] 💾 [SCALP] universe=91 saved=91 +[12:13:15] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:13:16] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[12:13:16] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[12:13:17] 💾 [SCALP] universe=92 saved=92 +[12:13:17] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:13:17] AFR 이탈 051600 sid=SCALP name=scalp_re px=47000 alert=1045500200I +[12:13:17] [ls_cond_hist] AFR 이탈 051600 sid=SCALP name=scalp_re px=47000 alert=1045500200I +[12:13:17] 💾 [SCALP] universe=91 saved=91 +[12:13:17] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:13:18] AFR 이탈 096250 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[12:13:18] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[12:13:18] 💾 [SCALP] universe=90 saved=90 +[12:13:18] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:13:22] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[12:13:22] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[12:13:22] 💾 [SCALP] universe=91 saved=91 +[12:13:22] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:13:25] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:13:25] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:13:25] 💾 [SCALP] universe=90 saved=90 +[12:13:25] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:13:43] AFR 이탈 317830 sid=SCALP name=scalp_re px=4550 alert=1045500200I +[12:13:43] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4550 alert=1045500200I +[12:13:43] 💾 [SCALP] universe=89 saved=89 +[12:13:43] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:13:45] AFR 이탈 33626L sid=SCALP name=scalp_re px=6390 alert=1045500200I +[12:13:45] [ls_cond_hist] AFR 이탈 33626L sid=SCALP name=scalp_re px=6390 alert=1045500200I +[12:13:45] 💾 [SCALP] universe=88 saved=88 +[12:13:45] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:13:45] AFR 이탈 378340 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[12:13:45] [ls_cond_hist] AFR 이탈 378340 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[12:13:45] 💾 [SCALP] universe=87 saved=87 +[12:13:45] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:13:53] AFR 이탈 140670 sid=SCALP name=scalp_re px=8840 alert=1045500200I +[12:13:53] [ls_cond_hist] AFR 이탈 140670 sid=SCALP name=scalp_re px=8840 alert=1045500200I +[12:13:53] 💾 [SCALP] universe=86 saved=86 +[12:13:53] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:13:56] AFR 재진입 051600 sid=SCALP name=scalp_re px=46850 alert=1045500200I +[12:13:56] [ls_cond_hist] AFR 재진입 051600 sid=SCALP name=scalp_re px=46850 alert=1045500200I +[12:13:56] 💾 [SCALP] universe=87 saved=87 +[12:13:56] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:14:04] AFR 재진입 33626L sid=SCALP name=scalp_re px=6400 alert=1045500200I +[12:14:04] [ls_cond_hist] AFR 재진입 33626L sid=SCALP name=scalp_re px=6400 alert=1045500200I +[12:14:04] 💾 [SCALP] universe=88 saved=88 +[12:14:04] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:14:08] AFR 재진입 140670 sid=SCALP name=scalp_re px=8860 alert=1045500200I +[12:14:08] [ls_cond_hist] AFR 재진입 140670 sid=SCALP name=scalp_re px=8860 alert=1045500200I +[12:14:08] 💾 [SCALP] universe=89 saved=89 +[12:14:08] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:14:09] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[12:14:09] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[12:14:09] 💾 [SCALP] universe=88 saved=88 +[12:14:09] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:14:09] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:14:09] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:14:09] 💾 [SCALP] universe=89 saved=89 +[12:14:09] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:14:18] AFR 이탈 155660 sid=SCALP name=scalp_re px=4590 alert=1045500200I +[12:14:18] [ls_cond_hist] AFR 이탈 155660 sid=SCALP name=scalp_re px=4590 alert=1045500200I +[12:14:18] 💾 [SCALP] universe=88 saved=88 +[12:14:18] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:14:20] AFR 재진입 493330 sid=SCALP name=scalp_re px=9030 alert=1045500200I +[12:14:20] [ls_cond_hist] AFR 재진입 493330 sid=SCALP name=scalp_re px=9030 alert=1045500200I +[12:14:20] 💾 [SCALP] universe=89 saved=89 +[12:14:20] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:14:25] AFR 재진입 419080 sid=SCALP name=scalp_re px=4325 alert=1045500200I +[12:14:25] [ls_cond_hist] AFR 재진입 419080 sid=SCALP name=scalp_re px=4325 alert=1045500200I +[12:14:25] 💾 [SCALP] universe=90 saved=90 +[12:14:25] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:14:25] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:14:25] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:14:25] 💾 [SCALP] universe=91 saved=91 +[12:14:25] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:14:27] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:14:27] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:14:27] 💾 [SCALP] universe=90 saved=90 +[12:14:27] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:14:29] AFR 이탈 488900 sid=SCALP name=scalp_re px=7680 alert=1045500200I +[12:14:29] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7680 alert=1045500200I +[12:14:29] 💾 [SCALP] universe=89 saved=89 +[12:14:29] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:14:33] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:14:33] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:14:33] 💾 [SCALP] universe=90 saved=90 +[12:14:33] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:14:51] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15150 alert=1045500200I +[12:14:51] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15150 alert=1045500200I +[12:14:52] 💾 [SCALP] universe=91 saved=91 +[12:14:52] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:14:52] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:14:52] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:14:52] 💾 [SCALP] universe=92 saved=92 +[12:14:52] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:14:54] AFR 이탈 051600 sid=SCALP name=scalp_re px=46950 alert=1045500200I +[12:14:54] [ls_cond_hist] AFR 이탈 051600 sid=SCALP name=scalp_re px=46950 alert=1045500200I +[12:14:54] 💾 [SCALP] universe=91 saved=91 +[12:14:54] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:14:54] AFR 재진입 378340 sid=SCALP name=scalp_re px=9980 alert=1045500200I +[12:14:54] [ls_cond_hist] AFR 재진입 378340 sid=SCALP name=scalp_re px=9980 alert=1045500200I +[12:14:55] 💾 [SCALP] universe=92 saved=92 +[12:14:55] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:14:56] AFR 재진입 012630 sid=SCALP name=scalp_re px=21850 alert=1045500200I +[12:14:56] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21850 alert=1045500200I +[12:14:56] 💾 [SCALP] universe=93 saved=93 +[12:14:56] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:14:59] AFR 이탈 380550 sid=SCALP name=scalp_re px=7830 alert=1045500200I +[12:14:59] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7830 alert=1045500200I +[12:14:59] 💾 [SCALP] universe=92 saved=92 +[12:14:59] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:14:59] AFR 재진입 380550 sid=SCALP name=scalp_re px=7860 alert=1045500200I +[12:14:59] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7860 alert=1045500200I +[12:14:59] 💾 [SCALP] universe=93 saved=93 +[12:14:59] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:15:00] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[12:15:00] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[12:15:00] 💾 [SCALP] universe=94 saved=94 +[12:15:00] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:15:03] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[12:15:03] [ls_cond_hist] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[12:15:03] 💾 [SCALP] universe=93 saved=93 +[12:15:03] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:15:04] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[12:15:04] [ls_cond_hist] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[12:15:04] 💾 [SCALP] universe=94 saved=94 +[12:15:04] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:15:05] AFR 이탈 33626L sid=SCALP name=scalp_re px=6395 alert=1045500200I +[12:15:05] [ls_cond_hist] AFR 이탈 33626L sid=SCALP name=scalp_re px=6395 alert=1045500200I +[12:15:05] 💾 [SCALP] universe=93 saved=93 +[12:15:05] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:15:06] AFR 이탈 005010 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[12:15:06] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[12:15:06] 💾 [SCALP] universe=92 saved=92 +[12:15:06] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:15:07] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15130 alert=1045500200I +[12:15:07] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15130 alert=1045500200I +[12:15:07] 💾 [SCALP] universe=91 saved=91 +[12:15:07] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:15:10] AFR 재진입 488900 sid=SCALP name=scalp_re px=7710 alert=1045500200I +[12:15:10] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7710 alert=1045500200I +[12:15:10] 💾 [SCALP] universe=92 saved=92 +[12:15:10] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:15:23] AFR 이탈 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:15:23] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:15:23] 💾 [SCALP] universe=91 saved=91 +[12:15:23] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:15:31] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:15:31] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:15:31] 💾 [SCALP] universe=92 saved=92 +[12:15:31] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:15:32] AFR 재진입 474650 sid=SCALP name=scalp_re px=20800 alert=1045500200I +[12:15:32] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20800 alert=1045500200I +[12:15:32] 💾 [SCALP] universe=93 saved=93 +[12:15:32] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:15:44] AFR 재진입 155660 sid=SCALP name=scalp_re px=4595 alert=1045500200I +[12:15:44] [ls_cond_hist] AFR 재진입 155660 sid=SCALP name=scalp_re px=4595 alert=1045500200I +[12:15:44] 💾 [SCALP] universe=94 saved=94 +[12:15:44] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:15:46] AFR 이탈 012200 sid=SCALP name=scalp_re px=4090 alert=1045500200I +[12:15:46] [ls_cond_hist] AFR 이탈 012200 sid=SCALP name=scalp_re px=4090 alert=1045500200I +[12:15:46] 💾 [SCALP] universe=93 saved=93 +[12:15:46] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:15:57] AFR 이탈 493330 sid=SCALP name=scalp_re px=9010 alert=1045500200I +[12:15:57] [ls_cond_hist] AFR 이탈 493330 sid=SCALP name=scalp_re px=9010 alert=1045500200I +[12:15:57] 💾 [SCALP] universe=92 saved=92 +[12:15:57] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:16:00] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15210 alert=1045500200I +[12:16:00] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15210 alert=1045500200I +[12:16:00] 💾 [SCALP] universe=93 saved=93 +[12:16:00] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:16:01] AFR 재진입 493330 sid=SCALP name=scalp_re px=9070 alert=1045500200I +[12:16:01] [ls_cond_hist] AFR 재진입 493330 sid=SCALP name=scalp_re px=9070 alert=1045500200I +[12:16:02] 💾 [SCALP] universe=94 saved=94 +[12:16:02] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:16:05] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[12:16:05] [ls_cond_hist] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[12:16:05] 💾 [SCALP] universe=93 saved=93 +[12:16:05] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:16:08] AFR 재진입 005440 sid=SCALP name=scalp_re px=12110 alert=1045500200I +[12:16:08] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12110 alert=1045500200I +[12:16:08] 💾 [SCALP] universe=94 saved=94 +[12:16:08] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:16:27] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[12:16:27] [ls_cond_hist] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[12:16:27] 💾 [SCALP] universe=95 saved=95 +[12:16:27] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:16:46] AFR 이탈 250000 sid=SCALP name=scalp_re px=5130 alert=1045500200I +[12:16:46] [ls_cond_hist] AFR 이탈 250000 sid=SCALP name=scalp_re px=5130 alert=1045500200I +[12:16:46] 💾 [SCALP] universe=94 saved=94 +[12:16:46] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:16:55] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[12:16:55] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[12:16:55] 💾 [SCALP] universe=93 saved=93 +[12:16:55] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:17:09] AFR 이탈 005440 sid=SCALP name=scalp_re px=12090 alert=1045500200I +[12:17:09] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12090 alert=1045500200I +[12:17:10] 💾 [SCALP] universe=92 saved=92 +[12:17:10] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:17:11] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[12:17:11] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[12:17:11] 💾 [SCALP] universe=93 saved=93 +[12:17:11] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:17:14] AFR 재진입 005440 sid=SCALP name=scalp_re px=12120 alert=1045500200I +[12:17:14] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12120 alert=1045500200I +[12:17:14] 💾 [SCALP] universe=94 saved=94 +[12:17:14] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:17:14] AFR 재진입 012200 sid=SCALP name=scalp_re px=4070 alert=1045500200I +[12:17:14] [ls_cond_hist] AFR 재진입 012200 sid=SCALP name=scalp_re px=4070 alert=1045500200I +[12:17:14] 💾 [SCALP] universe=95 saved=95 +[12:17:14] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:17:17] AFR 재진입 250000 sid=SCALP name=scalp_re px=5130 alert=1045500200I +[12:17:17] [ls_cond_hist] AFR 재진입 250000 sid=SCALP name=scalp_re px=5130 alert=1045500200I +[12:17:17] 💾 [SCALP] universe=96 saved=96 +[12:17:17] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[12:17:35] AFR 이탈 009520 sid=SCALP name=scalp_re px=10610 alert=1045500200I +[12:17:35] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10610 alert=1045500200I +[12:17:35] 💾 [SCALP] universe=95 saved=95 +[12:17:35] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:17:36] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[12:17:36] [ls_cond_hist] AFR 이탈 290650 sid=SCALP name=scalp_re px=57700 alert=1045500200I +[12:17:36] 💾 [SCALP] universe=94 saved=94 +[12:17:36] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:17:39] AFR 이탈 000225 sid=SCALP name=scalp_re px=3660 alert=1045500200I +[12:17:39] [ls_cond_hist] AFR 이탈 000225 sid=SCALP name=scalp_re px=3660 alert=1045500200I +[12:17:39] 💾 [SCALP] universe=93 saved=93 +[12:17:39] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:17:40] AFR 재진입 009520 sid=SCALP name=scalp_re px=10590 alert=1045500200I +[12:17:40] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10590 alert=1045500200I +[12:17:40] 💾 [SCALP] universe=94 saved=94 +[12:17:40] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:17:44] AFR 이탈 005440 sid=SCALP name=scalp_re px=12090 alert=1045500200I +[12:17:44] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12090 alert=1045500200I +[12:17:44] 💾 [SCALP] universe=93 saved=93 +[12:17:44] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:17:49] AFR 재진입 005440 sid=SCALP name=scalp_re px=12100 alert=1045500200I +[12:17:49] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12100 alert=1045500200I +[12:17:49] 💾 [SCALP] universe=94 saved=94 +[12:17:49] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:17:57] AFR 재진입 096250 sid=SCALP name=scalp_re px=6020 alert=1045500200I +[12:17:57] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6020 alert=1045500200I +[12:17:57] 💾 [SCALP] universe=95 saved=95 +[12:17:57] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:18:14] AFR 이탈 101330 sid=SCALP name=scalp_re px=3340 alert=1045500200I +[12:18:14] [ls_cond_hist] AFR 이탈 101330 sid=SCALP name=scalp_re px=3340 alert=1045500200I +[12:18:15] 💾 [SCALP] universe=94 saved=94 +[12:18:15] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:18:15] AFR 이탈 005440 sid=SCALP name=scalp_re px=12090 alert=1045500200I +[12:18:15] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12090 alert=1045500200I +[12:18:15] 💾 [SCALP] universe=93 saved=93 +[12:18:15] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:18:17] AFR 재진입 005440 sid=SCALP name=scalp_re px=12100 alert=1045500200I +[12:18:17] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12100 alert=1045500200I +[12:18:17] 💾 [SCALP] universe=94 saved=94 +[12:18:17] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:18:18] AFR 이탈 023350 sid=SCALP name=scalp_re px=4040 alert=1045500200I +[12:18:18] [ls_cond_hist] AFR 이탈 023350 sid=SCALP name=scalp_re px=4040 alert=1045500200I +[12:18:18] 💾 [SCALP] universe=93 saved=93 +[12:18:18] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:18:20] AFR 재진입 023350 sid=SCALP name=scalp_re px=4055 alert=1045500200I +[12:18:20] [ls_cond_hist] AFR 재진입 023350 sid=SCALP name=scalp_re px=4055 alert=1045500200I +[12:18:20] 💾 [SCALP] universe=94 saved=94 +[12:18:20] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:18:26] AFR 재진입 092460 sid=SCALP name=scalp_re px=16450 alert=1045500200I +[12:18:26] [ls_cond_hist] AFR 재진입 092460 sid=SCALP name=scalp_re px=16450 alert=1045500200I +[12:18:26] 💾 [SCALP] universe=95 saved=95 +[12:18:26] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:18:30] AFR 재진입 000225 sid=SCALP name=scalp_re px=3710 alert=1045500200I +[12:18:30] [ls_cond_hist] AFR 재진입 000225 sid=SCALP name=scalp_re px=3710 alert=1045500200I +[12:18:31] 💾 [SCALP] universe=96 saved=96 +[12:18:31] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[12:18:32] AFR 이탈 096250 sid=SCALP name=scalp_re px=5980 alert=1045500200I +[12:18:32] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=5980 alert=1045500200I +[12:18:32] 💾 [SCALP] universe=95 saved=95 +[12:18:32] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:18:37] AFR 이탈 250000 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[12:18:37] [ls_cond_hist] AFR 이탈 250000 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[12:18:37] 💾 [SCALP] universe=94 saved=94 +[12:18:37] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:18:37] AFR 재진입 250000 sid=SCALP name=scalp_re px=5140 alert=1045500200I +[12:18:37] [ls_cond_hist] AFR 재진입 250000 sid=SCALP name=scalp_re px=5140 alert=1045500200I +[12:18:37] 💾 [SCALP] universe=95 saved=95 +[12:18:37] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:18:46] AFR 이탈 250000 sid=SCALP name=scalp_re px=5120 alert=1045500200I +[12:18:46] [ls_cond_hist] AFR 이탈 250000 sid=SCALP name=scalp_re px=5120 alert=1045500200I +[12:18:46] 💾 [SCALP] universe=94 saved=94 +[12:18:46] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:18:46] AFR 재진입 250000 sid=SCALP name=scalp_re px=5140 alert=1045500200I +[12:18:46] [ls_cond_hist] AFR 재진입 250000 sid=SCALP name=scalp_re px=5140 alert=1045500200I +[12:18:46] 💾 [SCALP] universe=95 saved=95 +[12:18:46] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:18:47] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15260 alert=1045500200I +[12:18:47] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15260 alert=1045500200I +[12:18:47] 💾 [SCALP] universe=94 saved=94 +[12:18:47] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:18:47] AFR 이탈 155660 sid=SCALP name=scalp_re px=4595 alert=1045500200I +[12:18:47] [ls_cond_hist] AFR 이탈 155660 sid=SCALP name=scalp_re px=4595 alert=1045500200I +[12:18:47] 💾 [SCALP] universe=93 saved=93 +[12:18:47] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:18:53] AFR 재진입 064850 sid=SCALP name=scalp_re px=18510 alert=1045500200I +[12:18:53] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18510 alert=1045500200I +[12:18:53] 💾 [SCALP] universe=94 saved=94 +[12:18:53] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:18:57] AFR 이탈 005440 sid=SCALP name=scalp_re px=12090 alert=1045500200I +[12:18:57] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12090 alert=1045500200I +[12:18:57] 💾 [SCALP] universe=93 saved=93 +[12:18:57] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:18:58] AFR 재진입 005440 sid=SCALP name=scalp_re px=12100 alert=1045500200I +[12:18:58] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12100 alert=1045500200I +[12:18:58] 💾 [SCALP] universe=94 saved=94 +[12:18:58] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:18:58] AFR 이탈 137950 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[12:18:58] [ls_cond_hist] AFR 이탈 137950 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[12:18:58] 💾 [SCALP] universe=93 saved=93 +[12:18:58] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:19:00] AFR 재진입 096250 sid=SCALP name=scalp_re px=6020 alert=1045500200I +[12:19:00] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6020 alert=1045500200I +[12:19:00] 💾 [SCALP] universe=94 saved=94 +[12:19:00] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:19:01] AFR 이탈 474650 sid=SCALP name=scalp_re px=20900 alert=1045500200I +[12:19:01] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20900 alert=1045500200I +[12:19:01] 💾 [SCALP] universe=93 saved=93 +[12:19:01] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:19:03] AFR 이탈 009520 sid=SCALP name=scalp_re px=10650 alert=1045500200I +[12:19:03] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10650 alert=1045500200I +[12:19:03] 💾 [SCALP] universe=92 saved=92 +[12:19:03] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:19:03] AFR 재진입 009520 sid=SCALP name=scalp_re px=10580 alert=1045500200I +[12:19:03] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10580 alert=1045500200I +[12:19:03] 💾 [SCALP] universe=93 saved=93 +[12:19:03] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:19:05] AFR 이탈 250000 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[12:19:05] [ls_cond_hist] AFR 이탈 250000 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[12:19:05] 💾 [SCALP] universe=92 saved=92 +[12:19:05] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:19:05] AFR 재진입 250000 sid=SCALP name=scalp_re px=5140 alert=1045500200I +[12:19:05] [ls_cond_hist] AFR 재진입 250000 sid=SCALP name=scalp_re px=5140 alert=1045500200I +[12:19:05] 💾 [SCALP] universe=93 saved=93 +[12:19:05] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:19:32] AFR 재진입 33626L sid=SCALP name=scalp_re px=6225 alert=1045500200I +[12:19:32] [ls_cond_hist] AFR 재진입 33626L sid=SCALP name=scalp_re px=6225 alert=1045500200I +[12:19:33] 💾 [SCALP] universe=94 saved=94 +[12:19:33] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:19:34] AFR 이탈 092460 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[12:19:34] [ls_cond_hist] AFR 이탈 092460 sid=SCALP name=scalp_re px=16440 alert=1045500200I +[12:19:34] 💾 [SCALP] universe=93 saved=93 +[12:19:34] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:19:49] AFR 이탈 064850 sid=SCALP name=scalp_re px=18420 alert=1045500200I +[12:19:49] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18420 alert=1045500200I +[12:19:49] 💾 [SCALP] universe=92 saved=92 +[12:19:49] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:19:56] AFR 이탈 001940 sid=SCALP name=scalp_re px=25500 alert=1045500200I +[12:19:56] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25500 alert=1045500200I +[12:19:56] 💾 [SCALP] universe=91 saved=91 +[12:19:56] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:19:58] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15210 alert=1045500200I +[12:19:58] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15210 alert=1045500200I +[12:19:58] 💾 [SCALP] universe=92 saved=92 +[12:19:58] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:19:58] AFR 재진입 001940 sid=SCALP name=scalp_re px=25550 alert=1045500200I +[12:19:58] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25550 alert=1045500200I +[12:19:58] 💾 [SCALP] universe=93 saved=93 +[12:19:58] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:20:00] AFR 이탈 041910 sid=SCALP name=scalp_re px=5490 alert=1045500200I +[12:20:00] [ls_cond_hist] AFR 이탈 041910 sid=SCALP name=scalp_re px=5490 alert=1045500200I +[12:20:00] 💾 [SCALP] universe=92 saved=92 +[12:20:00] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:20:00] AFR 이탈 001940 sid=SCALP name=scalp_re px=25500 alert=1045500200I +[12:20:00] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25500 alert=1045500200I +[12:20:00] 💾 [SCALP] universe=91 saved=91 +[12:20:00] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:20:00] AFR 재진입 064850 sid=SCALP name=scalp_re px=18500 alert=1045500200I +[12:20:00] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18500 alert=1045500200I +[12:20:00] 💾 [SCALP] universe=92 saved=92 +[12:20:00] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:20:01] AFR 이탈 009520 sid=SCALP name=scalp_re px=10620 alert=1045500200I +[12:20:01] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10620 alert=1045500200I +[12:20:01] 💾 [SCALP] universe=91 saved=91 +[12:20:01] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:20:02] AFR 이탈 493330 sid=SCALP name=scalp_re px=9010 alert=1045500200I +[12:20:02] [ls_cond_hist] AFR 이탈 493330 sid=SCALP name=scalp_re px=9010 alert=1045500200I +[12:20:03] 💾 [SCALP] universe=90 saved=90 +[12:20:03] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:20:09] AFR 재진입 317830 sid=SCALP name=scalp_re px=4545 alert=1045500200I +[12:20:09] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4545 alert=1045500200I +[12:20:09] 💾 [SCALP] universe=91 saved=91 +[12:20:09] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:20:18] AFR 이탈 140670 sid=SCALP name=scalp_re px=8920 alert=1045500200I +[12:20:18] [ls_cond_hist] AFR 이탈 140670 sid=SCALP name=scalp_re px=8920 alert=1045500200I +[12:20:18] 💾 [SCALP] universe=90 saved=90 +[12:20:18] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:20:18] AFR 진입 000215 sid=SCALP name=scalp_re px=21000 alert=1045500200I +[12:20:18] [ls_cond_hist] AFR 진입 000215 sid=SCALP name=scalp_re px=21000 alert=1045500200I +[12:20:18] 💾 [SCALP] universe=91 saved=91 +[12:20:18] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:20:26] AFR 이탈 003535 sid=SCALP name=scalp_re px=5280 alert=1045500200I +[12:20:26] [ls_cond_hist] AFR 이탈 003535 sid=SCALP name=scalp_re px=5280 alert=1045500200I +[12:20:26] 💾 [SCALP] universe=90 saved=90 +[12:20:26] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:20:31] AFR 재진입 009520 sid=SCALP name=scalp_re px=10590 alert=1045500200I +[12:20:31] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10590 alert=1045500200I +[12:20:31] 💾 [SCALP] universe=91 saved=91 +[12:20:31] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:21:20] AFR 재진입 950190 sid=SCALP name=scalp_re px=9950 alert=1045500200I +[12:21:20] [ls_cond_hist] AFR 재진입 950190 sid=SCALP name=scalp_re px=9950 alert=1045500200I +[12:21:20] 💾 [SCALP] universe=92 saved=92 +[12:21:20] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:21:30] AFR 재진입 041910 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[12:21:30] [ls_cond_hist] AFR 재진입 041910 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[12:21:30] 💾 [SCALP] universe=93 saved=93 +[12:21:30] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:21:31] AFR 이탈 096250 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[12:21:31] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[12:21:31] 💾 [SCALP] universe=92 saved=92 +[12:21:31] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:21:41] AFR 재진입 096250 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:21:41] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:21:41] 💾 [SCALP] universe=93 saved=93 +[12:21:41] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:21:52] AFR 이탈 096250 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[12:21:52] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[12:21:52] 💾 [SCALP] universe=92 saved=92 +[12:21:52] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:22:00] AFR 재진입 001940 sid=SCALP name=scalp_re px=25550 alert=1045500200I +[12:22:00] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25550 alert=1045500200I +[12:22:00] 💾 [SCALP] universe=93 saved=93 +[12:22:00] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:22:03] AFR 이탈 101970 sid=SCALP name=scalp_re px=9620 alert=1045500200I +[12:22:03] [ls_cond_hist] AFR 이탈 101970 sid=SCALP name=scalp_re px=9620 alert=1045500200I +[12:22:04] 💾 [SCALP] universe=92 saved=92 +[12:22:04] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:22:08] AFR 재진입 096250 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[12:22:08] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6050 alert=1045500200I +[12:22:08] 💾 [SCALP] universe=93 saved=93 +[12:22:08] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:22:23] AFR 이탈 041910 sid=SCALP name=scalp_re px=5490 alert=1045500200I +[12:22:23] [ls_cond_hist] AFR 이탈 041910 sid=SCALP name=scalp_re px=5490 alert=1045500200I +[12:22:24] 💾 [SCALP] universe=92 saved=92 +[12:22:24] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:22:26] AFR 이탈 009520 sid=SCALP name=scalp_re px=10620 alert=1045500200I +[12:22:26] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10620 alert=1045500200I +[12:22:26] 💾 [SCALP] universe=91 saved=91 +[12:22:26] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:22:26] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[12:22:26] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[12:22:26] 💾 [SCALP] universe=92 saved=92 +[12:22:26] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:22:39] AFR 이탈 096250 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[12:22:39] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[12:22:40] 💾 [SCALP] universe=91 saved=91 +[12:22:40] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:22:42] AFR 이탈 001940 sid=SCALP name=scalp_re px=25500 alert=1045500200I +[12:22:42] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25500 alert=1045500200I +[12:22:42] 💾 [SCALP] universe=90 saved=90 +[12:22:42] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:22:44] AFR 재진입 143240 sid=SCALP name=scalp_re px=16510 alert=1045500200I +[12:22:44] [ls_cond_hist] AFR 재진입 143240 sid=SCALP name=scalp_re px=16510 alert=1045500200I +[12:22:45] 💾 [SCALP] universe=91 saved=91 +[12:22:45] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:22:53] AFR 재진입 101970 sid=SCALP name=scalp_re px=9700 alert=1045500200I +[12:22:53] [ls_cond_hist] AFR 재진입 101970 sid=SCALP name=scalp_re px=9700 alert=1045500200I +[12:22:53] 💾 [SCALP] universe=92 saved=92 +[12:22:53] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:22:56] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:22:56] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:22:57] 💾 [SCALP] universe=93 saved=93 +[12:22:57] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:22:57] AFR 이탈 143240 sid=SCALP name=scalp_re px=16450 alert=1045500200I +[12:22:57] [ls_cond_hist] AFR 이탈 143240 sid=SCALP name=scalp_re px=16450 alert=1045500200I +[12:22:57] 💾 [SCALP] universe=92 saved=92 +[12:22:57] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:22:59] AFR 재진입 003535 sid=SCALP name=scalp_re px=5300 alert=1045500200I +[12:22:59] [ls_cond_hist] AFR 재진입 003535 sid=SCALP name=scalp_re px=5300 alert=1045500200I +[12:22:59] 💾 [SCALP] universe=93 saved=93 +[12:22:59] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:23:01] AFR 이탈 380550 sid=SCALP name=scalp_re px=7940 alert=1045500200I +[12:23:01] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7940 alert=1045500200I +[12:23:01] 💾 [SCALP] universe=92 saved=92 +[12:23:01] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:23:03] AFR 재진입 001940 sid=SCALP name=scalp_re px=25550 alert=1045500200I +[12:23:03] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25550 alert=1045500200I +[12:23:03] 💾 [SCALP] universe=93 saved=93 +[12:23:03] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:23:07] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:23:07] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:23:07] 💾 [SCALP] universe=92 saved=92 +[12:23:07] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:23:19] AFR 이탈 005440 sid=SCALP name=scalp_re px=12090 alert=1045500200I +[12:23:19] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12090 alert=1045500200I +[12:23:19] 💾 [SCALP] universe=91 saved=91 +[12:23:19] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:23:19] AFR 재진입 005440 sid=SCALP name=scalp_re px=12100 alert=1045500200I +[12:23:19] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12100 alert=1045500200I +[12:23:19] 💾 [SCALP] universe=92 saved=92 +[12:23:19] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:23:20] AFR 이탈 005440 sid=SCALP name=scalp_re px=12090 alert=1045500200I +[12:23:20] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12090 alert=1045500200I +[12:23:20] 💾 [SCALP] universe=91 saved=91 +[12:23:20] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:23:24] AFR 재진입 005440 sid=SCALP name=scalp_re px=12100 alert=1045500200I +[12:23:24] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12100 alert=1045500200I +[12:23:24] 💾 [SCALP] universe=92 saved=92 +[12:23:24] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:23:25] AFR 이탈 005440 sid=SCALP name=scalp_re px=12080 alert=1045500200I +[12:23:25] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12080 alert=1045500200I +[12:23:25] 💾 [SCALP] universe=91 saved=91 +[12:23:25] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:23:26] AFR 이탈 023350 sid=SCALP name=scalp_re px=4040 alert=1045500200I +[12:23:26] [ls_cond_hist] AFR 이탈 023350 sid=SCALP name=scalp_re px=4040 alert=1045500200I +[12:23:26] 💾 [SCALP] universe=90 saved=90 +[12:23:26] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:23:39] AFR 재진입 096250 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:23:39] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:23:39] 💾 [SCALP] universe=91 saved=91 +[12:23:39] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:23:53] AFR 재진입 092460 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[12:23:53] [ls_cond_hist] AFR 재진입 092460 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[12:23:53] 💾 [SCALP] universe=92 saved=92 +[12:23:53] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:24:19] AFR 이탈 096250 sid=SCALP name=scalp_re px=5980 alert=1045500200I +[12:24:19] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=5980 alert=1045500200I +[12:24:19] 💾 [SCALP] universe=91 saved=91 +[12:24:19] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:24:44] AFR 재진입 380550 sid=SCALP name=scalp_re px=7910 alert=1045500200I +[12:24:44] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7910 alert=1045500200I +[12:24:44] 💾 [SCALP] universe=92 saved=92 +[12:24:44] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:24:56] AFR 이탈 001940 sid=SCALP name=scalp_re px=25500 alert=1045500200I +[12:24:56] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25500 alert=1045500200I +[12:24:56] 💾 [SCALP] universe=91 saved=91 +[12:24:56] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:25:03] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15260 alert=1045500200I +[12:25:03] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15260 alert=1045500200I +[12:25:03] 💾 [SCALP] universe=90 saved=90 +[12:25:03] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:25:04] AFR 이탈 039010 sid=SCALP name=scalp_re px=6430 alert=1045500200I +[12:25:04] [ls_cond_hist] AFR 이탈 039010 sid=SCALP name=scalp_re px=6430 alert=1045500200I +[12:25:04] 💾 [SCALP] universe=89 saved=89 +[12:25:04] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:25:12] AFR 이탈 092460 sid=SCALP name=scalp_re px=16400 alert=1045500200I +[12:25:12] [ls_cond_hist] AFR 이탈 092460 sid=SCALP name=scalp_re px=16400 alert=1045500200I +[12:25:12] 💾 [SCALP] universe=88 saved=88 +[12:25:12] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:25:29] AFR 재진입 096250 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[12:25:29] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[12:25:29] 💾 [SCALP] universe=89 saved=89 +[12:25:29] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:25:39] AFR 이탈 096250 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[12:25:39] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[12:25:39] 💾 [SCALP] universe=88 saved=88 +[12:25:39] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:25:48] AFR 재진입 096250 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[12:25:48] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[12:25:48] 💾 [SCALP] universe=89 saved=89 +[12:25:48] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:25:53] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[12:25:53] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[12:25:53] 💾 [SCALP] universe=88 saved=88 +[12:25:53] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:26:15] AFR 이탈 096250 sid=SCALP name=scalp_re px=5980 alert=1045500200I +[12:26:15] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=5980 alert=1045500200I +[12:26:16] 💾 [SCALP] universe=87 saved=87 +[12:26:16] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:26:34] AFR 이탈 012630 sid=SCALP name=scalp_re px=21800 alert=1045500200I +[12:26:34] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21800 alert=1045500200I +[12:26:34] 💾 [SCALP] universe=86 saved=86 +[12:26:34] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:26:34] AFR 재진입 012630 sid=SCALP name=scalp_re px=21850 alert=1045500200I +[12:26:34] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21850 alert=1045500200I +[12:26:34] 💾 [SCALP] universe=87 saved=87 +[12:26:34] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:27:09] AFR 재진입 215000 sid=SCALP name=scalp_re px=39700 alert=1045500200I +[12:27:09] [ls_cond_hist] AFR 재진입 215000 sid=SCALP name=scalp_re px=39700 alert=1045500200I +[12:27:10] 💾 [SCALP] universe=88 saved=88 +[12:27:10] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:27:11] AFR 재진입 067370 sid=SCALP name=scalp_re px=6270 alert=1045500200I +[12:27:11] [ls_cond_hist] AFR 재진입 067370 sid=SCALP name=scalp_re px=6270 alert=1045500200I +[12:27:11] 💾 [SCALP] universe=89 saved=89 +[12:27:11] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:27:12] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:27:12] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:27:12] 💾 [SCALP] universe=90 saved=90 +[12:27:12] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:27:27] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15210 alert=1045500200I +[12:27:27] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15210 alert=1045500200I +[12:27:27] 💾 [SCALP] universe=91 saved=91 +[12:27:27] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:27:28] AFR 재진입 096250 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[12:27:28] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6030 alert=1045500200I +[12:27:29] 💾 [SCALP] universe=92 saved=92 +[12:27:29] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:27:32] AFR 재진입 001940 sid=SCALP name=scalp_re px=25550 alert=1045500200I +[12:27:32] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25550 alert=1045500200I +[12:27:32] 💾 [SCALP] universe=93 saved=93 +[12:27:32] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:27:38] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[12:27:38] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[12:27:38] 💾 [SCALP] universe=92 saved=92 +[12:27:38] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:27:38] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[12:27:38] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[12:27:38] 💾 [SCALP] universe=93 saved=93 +[12:27:38] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:27:41] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[12:27:41] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[12:27:41] 💾 [SCALP] universe=92 saved=92 +[12:27:41] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:27:42] AFR 이탈 096250 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[12:27:42] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=5990 alert=1045500200I +[12:27:43] 💾 [SCALP] universe=91 saved=91 +[12:27:43] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:28:09] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[12:28:09] [ls_cond_hist] AFR 재진입 290650 sid=SCALP name=scalp_re px=57600 alert=1045500200I +[12:28:09] 💾 [SCALP] universe=92 saved=92 +[12:28:09] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:28:09] AFR 재진입 096250 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[12:28:09] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6040 alert=1045500200I +[12:28:09] 💾 [SCALP] universe=93 saved=93 +[12:28:09] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:28:11] AFR 이탈 004365 sid=SCALP name=scalp_re px=9390 alert=1045500200I +[12:28:11] [ls_cond_hist] AFR 이탈 004365 sid=SCALP name=scalp_re px=9390 alert=1045500200I +[12:28:11] 💾 [SCALP] universe=92 saved=92 +[12:28:11] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:28:14] AFR 이탈 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[12:28:14] [ls_cond_hist] AFR 이탈 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[12:28:14] 💾 [SCALP] universe=91 saved=91 +[12:28:14] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:28:18] AFR 재진입 059270 sid=SCALP name=scalp_re px=5240 alert=1045500200I +[12:28:18] [ls_cond_hist] AFR 재진입 059270 sid=SCALP name=scalp_re px=5240 alert=1045500200I +[12:28:18] 💾 [SCALP] universe=92 saved=92 +[12:28:18] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:28:20] AFR 재진입 101330 sid=SCALP name=scalp_re px=3325 alert=1045500200I +[12:28:20] [ls_cond_hist] AFR 재진입 101330 sid=SCALP name=scalp_re px=3325 alert=1045500200I +[12:28:20] 💾 [SCALP] universe=93 saved=93 +[12:28:20] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:28:33] AFR 이탈 215000 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[12:28:33] [ls_cond_hist] AFR 이탈 215000 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[12:28:33] 💾 [SCALP] universe=92 saved=92 +[12:28:33] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:28:36] AFR 재진입 143240 sid=SCALP name=scalp_re px=16530 alert=1045500200I +[12:28:36] [ls_cond_hist] AFR 재진입 143240 sid=SCALP name=scalp_re px=16530 alert=1045500200I +[12:28:36] 💾 [SCALP] universe=93 saved=93 +[12:28:36] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:28:36] AFR 이탈 143240 sid=SCALP name=scalp_re px=16450 alert=1045500200I +[12:28:36] [ls_cond_hist] AFR 이탈 143240 sid=SCALP name=scalp_re px=16450 alert=1045500200I +[12:28:36] 💾 [SCALP] universe=92 saved=92 +[12:28:36] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:28:36] AFR 재진입 143240 sid=SCALP name=scalp_re px=16570 alert=1045500200I +[12:28:36] [ls_cond_hist] AFR 재진입 143240 sid=SCALP name=scalp_re px=16570 alert=1045500200I +[12:28:37] 💾 [SCALP] universe=93 saved=93 +[12:28:37] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:28:37] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:28:37] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:28:38] 💾 [SCALP] universe=92 saved=92 +[12:28:38] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:28:38] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:28:38] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:28:38] 💾 [SCALP] universe=93 saved=93 +[12:28:38] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:28:38] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:28:38] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:28:38] 💾 [SCALP] universe=92 saved=92 +[12:28:38] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:28:38] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:28:38] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:28:38] 💾 [SCALP] universe=93 saved=93 +[12:28:38] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:28:47] AFR 이탈 143240 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[12:28:47] [ls_cond_hist] AFR 이탈 143240 sid=SCALP name=scalp_re px=16460 alert=1045500200I +[12:28:47] 💾 [SCALP] universe=92 saved=92 +[12:28:47] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:28:53] AFR 이탈 012630 sid=SCALP name=scalp_re px=21800 alert=1045500200I +[12:28:53] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21800 alert=1045500200I +[12:28:53] 💾 [SCALP] universe=91 saved=91 +[12:28:53] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:29:02] AFR 이탈 060900 sid=SCALP name=scalp_re px=4410 alert=1045500200I +[12:29:02] [ls_cond_hist] AFR 이탈 060900 sid=SCALP name=scalp_re px=4410 alert=1045500200I +[12:29:02] 💾 [SCALP] universe=90 saved=90 +[12:29:02] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:29:04] AFR 이탈 001940 sid=SCALP name=scalp_re px=25500 alert=1045500200I +[12:29:04] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25500 alert=1045500200I +[12:29:05] 💾 [SCALP] universe=89 saved=89 +[12:29:05] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:29:05] AFR 재진입 140670 sid=SCALP name=scalp_re px=8870 alert=1045500200I +[12:29:05] [ls_cond_hist] AFR 재진입 140670 sid=SCALP name=scalp_re px=8870 alert=1045500200I +[12:29:05] 💾 [SCALP] universe=90 saved=90 +[12:29:05] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:29:08] AFR 재진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[12:29:08] [ls_cond_hist] AFR 재진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[12:29:09] 💾 [SCALP] universe=91 saved=91 +[12:29:09] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:29:20] AFR 재진입 137950 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[12:29:20] [ls_cond_hist] AFR 재진입 137950 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[12:29:20] 💾 [SCALP] universe=92 saved=92 +[12:29:20] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:29:38] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:29:38] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:29:38] 💾 [SCALP] universe=93 saved=93 +[12:29:38] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:29:40] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[12:29:40] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[12:29:41] 💾 [SCALP] universe=92 saved=92 +[12:29:41] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:29:45] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:29:45] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:29:45] 💾 [SCALP] universe=93 saved=93 +[12:29:45] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:29:45] AFR 이탈 317830 sid=SCALP name=scalp_re px=4550 alert=1045500200I +[12:29:45] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4550 alert=1045500200I +[12:29:45] 💾 [SCALP] universe=92 saved=92 +[12:29:45] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:29:48] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:29:48] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:29:48] 💾 [SCALP] universe=91 saved=91 +[12:29:48] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:29:49] AFR 재진입 317830 sid=SCALP name=scalp_re px=4545 alert=1045500200I +[12:29:49] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4545 alert=1045500200I +[12:29:49] 💾 [SCALP] universe=92 saved=92 +[12:29:49] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:29:51] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[12:29:51] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[12:29:51] 💾 [SCALP] universe=91 saved=91 +[12:29:51] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:29:53] AFR 재진입 493330 sid=SCALP name=scalp_re px=9020 alert=1045500200I +[12:29:53] [ls_cond_hist] AFR 재진입 493330 sid=SCALP name=scalp_re px=9020 alert=1045500200I +[12:29:53] 💾 [SCALP] universe=92 saved=92 +[12:29:53] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:30:00] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:30:00] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:30:00] 💾 [SCALP] universe=93 saved=93 +[12:30:00] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:30:05] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[12:30:05] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[12:30:05] 💾 [SCALP] universe=92 saved=92 +[12:30:05] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:30:12] AFR 이탈 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[12:30:12] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[12:30:12] 💾 [SCALP] universe=91 saved=91 +[12:30:12] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:30:16] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:30:16] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:30:16] 💾 [SCALP] universe=92 saved=92 +[12:30:16] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:30:19] AFR 이탈 140670 sid=SCALP name=scalp_re px=8850 alert=1045500200I +[12:30:19] [ls_cond_hist] AFR 이탈 140670 sid=SCALP name=scalp_re px=8850 alert=1045500200I +[12:30:19] 💾 [SCALP] universe=91 saved=91 +[12:30:19] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:30:21] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:30:21] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:30:21] 💾 [SCALP] universe=90 saved=90 +[12:30:21] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:30:33] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:30:33] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:30:33] 💾 [SCALP] universe=89 saved=89 +[12:30:33] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:30:35] AFR 이탈 419080 sid=SCALP name=scalp_re px=4320 alert=1045500200I +[12:30:35] [ls_cond_hist] AFR 이탈 419080 sid=SCALP name=scalp_re px=4320 alert=1045500200I +[12:30:35] 💾 [SCALP] universe=88 saved=88 +[12:30:35] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:30:36] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:30:36] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:30:36] 💾 [SCALP] universe=89 saved=89 +[12:30:36] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:30:39] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[12:30:39] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[12:30:39] 💾 [SCALP] universe=88 saved=88 +[12:30:39] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:30:41] AFR 이탈 064850 sid=SCALP name=scalp_re px=18490 alert=1045500200I +[12:30:41] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18490 alert=1045500200I +[12:30:41] 💾 [SCALP] universe=87 saved=87 +[12:30:41] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:30:42] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[12:30:42] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[12:30:42] 💾 [SCALP] universe=88 saved=88 +[12:30:42] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:30:46] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[12:30:46] [ls_cond_hist] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[12:30:46] 💾 [SCALP] universe=89 saved=89 +[12:30:46] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:30:53] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:30:53] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:30:53] 💾 [SCALP] universe=90 saved=90 +[12:30:53] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:30:59] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:30:59] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:30:59] 💾 [SCALP] universe=89 saved=89 +[12:30:59] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:31:02] AFR 재진입 419080 sid=SCALP name=scalp_re px=4335 alert=1045500200I +[12:31:02] [ls_cond_hist] AFR 재진입 419080 sid=SCALP name=scalp_re px=4335 alert=1045500200I +[12:31:02] 💾 [SCALP] universe=90 saved=90 +[12:31:02] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:31:05] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:31:05] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:31:05] 💾 [SCALP] universe=89 saved=89 +[12:31:05] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:31:12] AFR 재진입 004365 sid=SCALP name=scalp_re px=9290 alert=1045500200I +[12:31:12] [ls_cond_hist] AFR 재진입 004365 sid=SCALP name=scalp_re px=9290 alert=1045500200I +[12:31:13] 💾 [SCALP] universe=90 saved=90 +[12:31:13] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:31:14] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[12:31:14] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[12:31:14] 💾 [SCALP] universe=91 saved=91 +[12:31:14] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:31:16] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:31:16] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:31:16] 💾 [SCALP] universe=90 saved=90 +[12:31:16] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:31:26] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:31:26] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:31:26] 💾 [SCALP] universe=91 saved=91 +[12:31:26] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:31:27] AFR 재진입 041910 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[12:31:27] [ls_cond_hist] AFR 재진입 041910 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[12:31:27] 💾 [SCALP] universe=92 saved=92 +[12:31:27] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:32:02] AFR 재진입 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[12:32:02] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[12:32:02] 💾 [SCALP] universe=93 saved=93 +[12:32:02] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:32:04] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[12:32:04] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[12:32:04] 💾 [SCALP] universe=92 saved=92 +[12:32:04] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:32:09] AFR 이탈 419080 sid=SCALP name=scalp_re px=4315 alert=1045500200I +[12:32:09] [ls_cond_hist] AFR 이탈 419080 sid=SCALP name=scalp_re px=4315 alert=1045500200I +[12:32:09] 💾 [SCALP] universe=91 saved=91 +[12:32:09] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:32:23] AFR 이탈 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[12:32:23] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[12:32:23] 💾 [SCALP] universe=90 saved=90 +[12:32:23] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:32:25] AFR 재진입 090460 sid=SCALP name=scalp_re px=16070 alert=1045500200I +[12:32:25] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16070 alert=1045500200I +[12:32:25] 💾 [SCALP] universe=91 saved=91 +[12:32:25] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:32:39] AFR 재진입 155660 sid=SCALP name=scalp_re px=4595 alert=1045500200I +[12:32:39] [ls_cond_hist] AFR 재진입 155660 sid=SCALP name=scalp_re px=4595 alert=1045500200I +[12:32:39] 💾 [SCALP] universe=92 saved=92 +[12:32:39] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:32:40] AFR 재진입 143240 sid=SCALP name=scalp_re px=16450 alert=1045500200I +[12:32:40] [ls_cond_hist] AFR 재진입 143240 sid=SCALP name=scalp_re px=16450 alert=1045500200I +[12:32:40] 💾 [SCALP] universe=93 saved=93 +[12:32:40] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:32:46] AFR 이탈 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[12:32:46] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[12:32:46] 💾 [SCALP] universe=92 saved=92 +[12:32:46] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:32:48] AFR 재진입 090460 sid=SCALP name=scalp_re px=16080 alert=1045500200I +[12:32:48] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16080 alert=1045500200I +[12:32:48] 💾 [SCALP] universe=93 saved=93 +[12:32:48] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:32:49] AFR 이탈 105740 sid=SCALP name=scalp_re px=6870 alert=1045500200I +[12:32:49] [ls_cond_hist] AFR 이탈 105740 sid=SCALP name=scalp_re px=6870 alert=1045500200I +[12:32:49] 💾 [SCALP] universe=92 saved=92 +[12:32:49] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:32:52] AFR 재진입 001940 sid=SCALP name=scalp_re px=25400 alert=1045500200I +[12:32:52] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25400 alert=1045500200I +[12:32:52] 💾 [SCALP] universe=93 saved=93 +[12:32:52] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:32:55] AFR 이탈 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[12:32:55] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[12:32:55] 💾 [SCALP] universe=92 saved=92 +[12:32:55] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:33:00] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:33:00] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:33:00] 💾 [SCALP] universe=93 saved=93 +[12:33:00] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:33:01] AFR 재진입 105740 sid=SCALP name=scalp_re px=6880 alert=1045500200I +[12:33:01] [ls_cond_hist] AFR 재진입 105740 sid=SCALP name=scalp_re px=6880 alert=1045500200I +[12:33:01] 💾 [SCALP] universe=94 saved=94 +[12:33:01] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:33:01] AFR 이탈 105740 sid=SCALP name=scalp_re px=6870 alert=1045500200I +[12:33:01] [ls_cond_hist] AFR 이탈 105740 sid=SCALP name=scalp_re px=6870 alert=1045500200I +[12:33:02] 💾 [SCALP] universe=93 saved=93 +[12:33:02] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:33:03] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[12:33:03] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[12:33:03] 💾 [SCALP] universe=92 saved=92 +[12:33:03] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:33:11] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:33:11] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:33:11] 💾 [SCALP] universe=93 saved=93 +[12:33:11] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:33:15] AFR 재진입 105740 sid=SCALP name=scalp_re px=6890 alert=1045500200I +[12:33:15] [ls_cond_hist] AFR 재진입 105740 sid=SCALP name=scalp_re px=6890 alert=1045500200I +[12:33:15] 💾 [SCALP] universe=94 saved=94 +[12:33:15] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:33:24] AFR 이탈 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[12:33:24] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[12:33:24] 💾 [SCALP] universe=93 saved=93 +[12:33:24] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:33:30] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:33:30] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:33:31] 💾 [SCALP] universe=94 saved=94 +[12:33:31] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:33:33] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:33:33] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:33:33] 💾 [SCALP] universe=93 saved=93 +[12:33:33] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:33:45] AFR 이탈 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[12:33:45] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[12:33:45] 💾 [SCALP] universe=92 saved=92 +[12:33:45] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:33:45] AFR 재진입 380550 sid=SCALP name=scalp_re px=7860 alert=1045500200I +[12:33:45] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7860 alert=1045500200I +[12:33:45] 💾 [SCALP] universe=93 saved=93 +[12:33:45] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:33:54] AFR 이탈 000225 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:33:54] [ls_cond_hist] AFR 이탈 000225 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:33:54] 💾 [SCALP] universe=92 saved=92 +[12:33:54] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:33:59] AFR 이탈 069730 sid=SCALP name=scalp_re px=5800 alert=1045500200I +[12:33:59] [ls_cond_hist] AFR 이탈 069730 sid=SCALP name=scalp_re px=5800 alert=1045500200I +[12:33:59] 💾 [SCALP] universe=91 saved=91 +[12:33:59] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:34:17] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:34:17] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:34:18] 💾 [SCALP] universe=92 saved=92 +[12:34:18] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:34:21] AFR 이탈 215000 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[12:34:21] [ls_cond_hist] AFR 이탈 215000 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[12:34:21] 💾 [SCALP] universe=91 saved=91 +[12:34:21] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:34:25] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:34:25] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:34:25] 💾 [SCALP] universe=90 saved=90 +[12:34:25] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:34:43] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:34:43] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:34:43] 💾 [SCALP] universe=91 saved=91 +[12:34:43] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:34:48] AFR 진입 143160 sid=SCALP name=scalp_re px=15900 alert=1045500200I +[12:34:48] [ls_cond_hist] AFR 진입 143160 sid=SCALP name=scalp_re px=15900 alert=1045500200I +[12:34:48] 💾 [SCALP] universe=92 saved=92 +[12:34:48] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:34:50] AFR 재진입 090460 sid=SCALP name=scalp_re px=16050 alert=1045500200I +[12:34:50] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16050 alert=1045500200I +[12:34:50] 💾 [SCALP] universe=93 saved=93 +[12:34:50] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:34:51] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:34:51] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:34:52] 💾 [SCALP] universe=92 saved=92 +[12:34:52] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:34:58] AFR 이탈 009520 sid=SCALP name=scalp_re px=10530 alert=1045500200I +[12:34:58] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10530 alert=1045500200I +[12:34:58] 💾 [SCALP] universe=91 saved=91 +[12:34:58] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:34:59] AFR 이탈 101330 sid=SCALP name=scalp_re px=3325 alert=1045500200I +[12:34:59] [ls_cond_hist] AFR 이탈 101330 sid=SCALP name=scalp_re px=3325 alert=1045500200I +[12:34:59] 💾 [SCALP] universe=90 saved=90 +[12:34:59] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:35:08] AFR 재진입 001940 sid=SCALP name=scalp_re px=25400 alert=1045500200I +[12:35:08] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25400 alert=1045500200I +[12:35:08] 💾 [SCALP] universe=91 saved=91 +[12:35:08] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:36:08] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[12:36:08] [ls_cond_hist] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[12:36:08] 💾 [SCALP] universe=92 saved=92 +[12:36:08] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:36:09] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[12:36:09] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[12:36:09] 💾 [SCALP] universe=91 saved=91 +[12:36:09] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:36:28] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8750 alert=1045500200I +[12:36:28] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8750 alert=1045500200I +[12:36:28] 💾 [SCALP] universe=90 saved=90 +[12:36:28] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:36:30] AFR 진입 078935 sid=SCALP name=scalp_re px=57400 alert=1045500200I +[12:36:30] [ls_cond_hist] AFR 진입 078935 sid=SCALP name=scalp_re px=57400 alert=1045500200I +[12:36:30] 💾 [SCALP] universe=91 saved=91 +[12:36:30] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:36:53] AFR 이탈 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[12:36:53] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[12:36:53] 💾 [SCALP] universe=90 saved=90 +[12:36:53] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:37:13] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:37:13] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[12:37:13] 💾 [SCALP] universe=91 saved=91 +[12:37:13] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:37:13] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[12:37:13] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[12:37:13] 💾 [SCALP] universe=90 saved=90 +[12:37:13] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:37:25] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8760 alert=1045500200I +[12:37:25] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8760 alert=1045500200I +[12:37:25] 💾 [SCALP] universe=91 saved=91 +[12:37:25] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:37:33] AFR 재진입 009520 sid=SCALP name=scalp_re px=10570 alert=1045500200I +[12:37:33] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10570 alert=1045500200I +[12:37:34] 💾 [SCALP] universe=92 saved=92 +[12:37:34] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:37:36] AFR 재진입 001940 sid=SCALP name=scalp_re px=25400 alert=1045500200I +[12:37:36] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25400 alert=1045500200I +[12:37:36] 💾 [SCALP] universe=93 saved=93 +[12:37:36] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:37:44] AFR 이탈 143240 sid=SCALP name=scalp_re px=16410 alert=1045500200I +[12:37:44] [ls_cond_hist] AFR 이탈 143240 sid=SCALP name=scalp_re px=16410 alert=1045500200I +[12:37:44] 💾 [SCALP] universe=92 saved=92 +[12:37:44] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:37:46] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[12:37:46] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[12:37:47] 💾 [SCALP] universe=91 saved=91 +[12:37:47] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:37:48] AFR 재진입 069730 sid=SCALP name=scalp_re px=5790 alert=1045500200I +[12:37:48] [ls_cond_hist] AFR 재진입 069730 sid=SCALP name=scalp_re px=5790 alert=1045500200I +[12:37:48] 💾 [SCALP] universe=92 saved=92 +[12:37:48] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:38:11] AFR 이탈 950190 sid=SCALP name=scalp_re px=9980 alert=1045500200I +[12:38:11] [ls_cond_hist] AFR 이탈 950190 sid=SCALP name=scalp_re px=9980 alert=1045500200I +[12:38:11] 💾 [SCALP] universe=91 saved=91 +[12:38:11] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:38:11] AFR 이탈 101330 sid=SCALP name=scalp_re px=3330 alert=1045500200I +[12:38:11] [ls_cond_hist] AFR 이탈 101330 sid=SCALP name=scalp_re px=3330 alert=1045500200I +[12:38:11] 💾 [SCALP] universe=90 saved=90 +[12:38:11] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:38:17] AFR 재진입 064850 sid=SCALP name=scalp_re px=18510 alert=1045500200I +[12:38:17] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18510 alert=1045500200I +[12:38:18] 💾 [SCALP] universe=91 saved=91 +[12:38:18] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:38:28] AFR 재진입 411080 sid=SCALP name=scalp_re px=3825 alert=1045500200I +[12:38:28] [ls_cond_hist] AFR 재진입 411080 sid=SCALP name=scalp_re px=3825 alert=1045500200I +[12:38:28] 💾 [SCALP] universe=92 saved=92 +[12:38:28] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:38:33] AFR 이탈 064850 sid=SCALP name=scalp_re px=18360 alert=1045500200I +[12:38:33] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18360 alert=1045500200I +[12:38:33] 💾 [SCALP] universe=91 saved=91 +[12:38:33] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:38:42] AFR 재진입 101330 sid=SCALP name=scalp_re px=3305 alert=1045500200I +[12:38:42] [ls_cond_hist] AFR 재진입 101330 sid=SCALP name=scalp_re px=3305 alert=1045500200I +[12:38:42] 💾 [SCALP] universe=92 saved=92 +[12:38:42] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:39:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:39:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:39:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:39:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:39:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:39:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:39:43] ⏱️ flush [SCALP/scalp_re] n=92 univ=92 +[12:39:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=92 univ=92 +[12:39:47] AFR 이탈 030530 sid=SCALP name=scalp_re px=16710 alert=1045500200I +[12:39:47] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16710 alert=1045500200I +[12:39:47] 💾 [SCALP] universe=91 saved=91 +[12:39:47] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:39:48] AFR 재진입 030530 sid=SCALP name=scalp_re px=16710 alert=1045500200I +[12:39:48] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16710 alert=1045500200I +[12:39:48] 💾 [SCALP] universe=92 saved=92 +[12:39:48] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:40:00] AFR 재진입 140670 sid=SCALP name=scalp_re px=8820 alert=1045500200I +[12:40:00] [ls_cond_hist] AFR 재진입 140670 sid=SCALP name=scalp_re px=8820 alert=1045500200I +[12:40:00] 💾 [SCALP] universe=93 saved=93 +[12:40:00] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:40:00] AFR 이탈 030530 sid=SCALP name=scalp_re px=16700 alert=1045500200I +[12:40:00] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16700 alert=1045500200I +[12:40:00] 💾 [SCALP] universe=92 saved=92 +[12:40:00] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:40:02] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:40:02] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:40:02] 💾 [SCALP] universe=91 saved=91 +[12:40:02] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:40:04] AFR 재진입 030530 sid=SCALP name=scalp_re px=16710 alert=1045500200I +[12:40:04] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16710 alert=1045500200I +[12:40:04] 💾 [SCALP] universe=92 saved=92 +[12:40:04] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:40:05] AFR 이탈 229640 sid=SCALP name=scalp_re px=44300 alert=1045500200I +[12:40:05] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44300 alert=1045500200I +[12:40:05] 💾 [SCALP] universe=91 saved=91 +[12:40:05] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:40:07] AFR 이탈 030530 sid=SCALP name=scalp_re px=16700 alert=1045500200I +[12:40:07] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16700 alert=1045500200I +[12:40:07] 💾 [SCALP] universe=90 saved=90 +[12:40:07] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:40:07] AFR 이탈 009520 sid=SCALP name=scalp_re px=10580 alert=1045500200I +[12:40:07] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10580 alert=1045500200I +[12:40:08] 💾 [SCALP] universe=89 saved=89 +[12:40:08] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:40:26] AFR 재진입 030530 sid=SCALP name=scalp_re px=16710 alert=1045500200I +[12:40:26] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16710 alert=1045500200I +[12:40:26] 💾 [SCALP] universe=90 saved=90 +[12:40:26] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:40:27] AFR 이탈 33626L sid=SCALP name=scalp_re px=6410 alert=1045500200I +[12:40:27] [ls_cond_hist] AFR 이탈 33626L sid=SCALP name=scalp_re px=6410 alert=1045500200I +[12:40:27] 💾 [SCALP] universe=89 saved=89 +[12:40:27] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:40:28] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:40:28] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:40:29] 💾 [SCALP] universe=90 saved=90 +[12:40:29] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:40:39] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[12:40:39] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[12:40:39] 💾 [SCALP] universe=89 saved=89 +[12:40:39] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:40:40] AFR 재진입 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[12:40:40] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[12:40:40] 💾 [SCALP] universe=90 saved=90 +[12:40:40] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:40:41] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:40:41] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:40:41] 💾 [SCALP] universe=89 saved=89 +[12:40:41] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:40:45] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[12:40:45] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[12:40:45] 💾 [SCALP] universe=90 saved=90 +[12:40:45] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:40:48] AFR 이탈 229640 sid=SCALP name=scalp_re px=44300 alert=1045500200I +[12:40:48] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44300 alert=1045500200I +[12:40:48] 💾 [SCALP] universe=89 saved=89 +[12:40:48] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:40:49] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:40:49] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:40:49] 💾 [SCALP] universe=90 saved=90 +[12:40:49] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:40:50] AFR 재진입 064850 sid=SCALP name=scalp_re px=18480 alert=1045500200I +[12:40:50] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18480 alert=1045500200I +[12:40:50] 💾 [SCALP] universe=91 saved=91 +[12:40:50] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:40:55] AFR 재진입 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[12:40:55] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[12:40:55] 💾 [SCALP] universe=92 saved=92 +[12:40:55] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:40:55] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:40:55] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:40:55] 💾 [SCALP] universe=93 saved=93 +[12:40:55] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:40:58] AFR 이탈 297090 sid=SCALP name=scalp_re px=3625 alert=1045500200I +[12:40:58] [ls_cond_hist] AFR 이탈 297090 sid=SCALP name=scalp_re px=3625 alert=1045500200I +[12:40:58] 💾 [SCALP] universe=92 saved=92 +[12:40:58] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:41:00] AFR 재진입 023800 sid=SCALP name=scalp_re px=5360 alert=1045500200I +[12:41:00] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5360 alert=1045500200I +[12:41:00] 💾 [SCALP] universe=93 saved=93 +[12:41:00] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:41:06] AFR 이탈 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[12:41:06] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[12:41:06] 💾 [SCALP] universe=92 saved=92 +[12:41:06] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:41:10] AFR 재진입 039010 sid=SCALP name=scalp_re px=6390 alert=1045500200I +[12:41:10] [ls_cond_hist] AFR 재진입 039010 sid=SCALP name=scalp_re px=6390 alert=1045500200I +[12:41:10] 💾 [SCALP] universe=93 saved=93 +[12:41:10] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:41:21] AFR 이탈 338840 sid=SCALP name=scalp_re px=9140 alert=1045500200I +[12:41:21] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9140 alert=1045500200I +[12:41:21] 💾 [SCALP] universe=92 saved=92 +[12:41:21] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:41:27] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[12:41:27] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[12:41:27] 💾 [SCALP] universe=91 saved=91 +[12:41:27] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:41:27] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[12:41:27] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[12:41:27] 💾 [SCALP] universe=92 saved=92 +[12:41:27] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:41:31] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15250 alert=1045500200I +[12:41:31] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15250 alert=1045500200I +[12:41:31] 💾 [SCALP] universe=91 saved=91 +[12:41:31] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:41:41] AFR 재진입 338840 sid=SCALP name=scalp_re px=9160 alert=1045500200I +[12:41:41] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9160 alert=1045500200I +[12:41:41] 💾 [SCALP] universe=92 saved=92 +[12:41:41] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:41:59] AFR 이탈 115160 sid=SCALP name=scalp_re px=5980 alert=1045500200I +[12:41:59] [ls_cond_hist] AFR 이탈 115160 sid=SCALP name=scalp_re px=5980 alert=1045500200I +[12:41:59] 💾 [SCALP] universe=91 saved=91 +[12:41:59] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:42:00] AFR 진입 038500 sid=SCALP name=scalp_re px=7420 alert=1045500200I +[12:42:00] [ls_cond_hist] AFR 진입 038500 sid=SCALP name=scalp_re px=7420 alert=1045500200I +[12:42:00] 💾 [SCALP] universe=92 saved=92 +[12:42:00] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:42:13] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8750 alert=1045500200I +[12:42:13] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8750 alert=1045500200I +[12:42:13] 💾 [SCALP] universe=91 saved=91 +[12:42:13] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:42:15] AFR 이탈 000215 sid=SCALP name=scalp_re px=21100 alert=1045500200I +[12:42:15] [ls_cond_hist] AFR 이탈 000215 sid=SCALP name=scalp_re px=21100 alert=1045500200I +[12:42:15] 💾 [SCALP] universe=90 saved=90 +[12:42:15] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:42:24] AFR 이탈 380550 sid=SCALP name=scalp_re px=7820 alert=1045500200I +[12:42:24] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7820 alert=1045500200I +[12:42:24] 💾 [SCALP] universe=89 saved=89 +[12:42:24] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:42:24] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15190 alert=1045500200I +[12:42:24] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15190 alert=1045500200I +[12:42:24] 💾 [SCALP] universe=90 saved=90 +[12:42:24] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:42:24] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:42:24] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:42:24] 💾 [SCALP] universe=91 saved=91 +[12:42:24] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:42:31] AFR 이탈 071970 sid=SCALP name=scalp_re px=63350 alert=1045500200I +[12:42:31] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63350 alert=1045500200I +[12:42:31] 💾 [SCALP] universe=90 saved=90 +[12:42:31] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:42:45] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:42:45] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:42:45] 💾 [SCALP] universe=91 saved=91 +[12:42:45] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:42:55] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:42:55] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:42:55] 💾 [SCALP] universe=90 saved=90 +[12:42:55] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:43:00] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:43:00] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:43:00] 💾 [SCALP] universe=91 saved=91 +[12:43:00] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:43:05] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:43:05] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:43:05] 💾 [SCALP] universe=92 saved=92 +[12:43:05] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:43:10] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8800 alert=1045500200I +[12:43:10] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8800 alert=1045500200I +[12:43:10] 💾 [SCALP] universe=93 saved=93 +[12:43:10] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:43:14] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:43:14] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:43:14] 💾 [SCALP] universe=92 saved=92 +[12:43:14] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:43:18] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:43:18] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:43:18] 💾 [SCALP] universe=93 saved=93 +[12:43:18] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:43:19] AFR 재진입 348030 sid=SCALP name=scalp_re px=3125 alert=1045500200I +[12:43:19] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3125 alert=1045500200I +[12:43:19] 💾 [SCALP] universe=94 saved=94 +[12:43:19] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:43:26] AFR 재진입 380550 sid=SCALP name=scalp_re px=7830 alert=1045500200I +[12:43:26] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7830 alert=1045500200I +[12:43:26] 💾 [SCALP] universe=95 saved=95 +[12:43:26] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:43:30] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:43:30] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[12:43:30] 💾 [SCALP] universe=96 saved=96 +[12:43:30] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[12:43:34] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15250 alert=1045500200I +[12:43:34] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15250 alert=1045500200I +[12:43:34] 💾 [SCALP] universe=95 saved=95 +[12:43:34] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:43:56] AFR 재진입 005440 sid=SCALP name=scalp_re px=12060 alert=1045500200I +[12:43:56] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12060 alert=1045500200I +[12:43:56] 💾 [SCALP] universe=96 saved=96 +[12:43:56] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[12:43:58] AFR 이탈 155660 sid=SCALP name=scalp_re px=4590 alert=1045500200I +[12:43:58] [ls_cond_hist] AFR 이탈 155660 sid=SCALP name=scalp_re px=4590 alert=1045500200I +[12:43:58] 💾 [SCALP] universe=95 saved=95 +[12:43:58] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:44:04] AFR 재진입 023800 sid=SCALP name=scalp_re px=5360 alert=1045500200I +[12:44:04] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5360 alert=1045500200I +[12:44:04] 💾 [SCALP] universe=96 saved=96 +[12:44:04] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[12:44:10] AFR 이탈 005440 sid=SCALP name=scalp_re px=12050 alert=1045500200I +[12:44:10] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12050 alert=1045500200I +[12:44:10] 💾 [SCALP] universe=95 saved=95 +[12:44:10] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:44:18] AFR 재진입 419080 sid=SCALP name=scalp_re px=4325 alert=1045500200I +[12:44:18] [ls_cond_hist] AFR 재진입 419080 sid=SCALP name=scalp_re px=4325 alert=1045500200I +[12:44:18] 💾 [SCALP] universe=96 saved=96 +[12:44:18] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[12:44:24] AFR 이탈 317830 sid=SCALP name=scalp_re px=4585 alert=1045500200I +[12:44:24] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4585 alert=1045500200I +[12:44:24] 💾 [SCALP] universe=95 saved=95 +[12:44:24] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:44:39] AFR 재진입 115160 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:44:39] [ls_cond_hist] AFR 재진입 115160 sid=SCALP name=scalp_re px=6000 alert=1045500200I +[12:44:39] 💾 [SCALP] universe=96 saved=96 +[12:44:39] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[12:44:54] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15190 alert=1045500200I +[12:44:54] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15190 alert=1045500200I +[12:44:54] 💾 [SCALP] universe=97 saved=97 +[12:44:54] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[12:44:54] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8740 alert=1045500200I +[12:44:54] [ls_cond_hist] AFR 이탈 0011A0 sid=SCALP name=scalp_re px=8740 alert=1045500200I +[12:44:54] 💾 [SCALP] universe=96 saved=96 +[12:44:54] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[12:44:59] AFR 이탈 348030 sid=SCALP name=scalp_re px=3085 alert=1045500200I +[12:44:59] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=3085 alert=1045500200I +[12:44:59] 💾 [SCALP] universe=95 saved=95 +[12:44:59] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:45:03] AFR 이탈 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:45:03] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:45:03] 💾 [SCALP] universe=94 saved=94 +[12:45:03] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:45:04] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:45:04] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:45:04] 💾 [SCALP] universe=95 saved=95 +[12:45:04] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:45:05] AFR 재진입 348030 sid=SCALP name=scalp_re px=3065 alert=1045500200I +[12:45:05] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3065 alert=1045500200I +[12:45:05] 💾 [SCALP] universe=96 saved=96 +[12:45:05] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[12:45:19] AFR 이탈 493330 sid=SCALP name=scalp_re px=9010 alert=1045500200I +[12:45:19] [ls_cond_hist] AFR 이탈 493330 sid=SCALP name=scalp_re px=9010 alert=1045500200I +[12:45:19] 💾 [SCALP] universe=95 saved=95 +[12:45:19] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[12:46:05] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:46:05] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[12:46:05] 💾 [SCALP] universe=94 saved=94 +[12:46:05] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[12:46:05] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:46:05] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:46:05] 💾 [SCALP] universe=93 saved=93 +[12:46:05] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:46:05] AFR 이탈 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[12:46:05] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[12:46:05] 💾 [SCALP] universe=92 saved=92 +[12:46:05] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:46:07] AFR 재진입 317830 sid=SCALP name=scalp_re px=4525 alert=1045500200I +[12:46:07] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4525 alert=1045500200I +[12:46:07] 💾 [SCALP] universe=93 saved=93 +[12:46:07] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:46:11] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[12:46:11] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44350 alert=1045500200I +[12:46:11] 💾 [SCALP] universe=92 saved=92 +[12:46:11] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:46:12] AFR 이탈 338840 sid=SCALP name=scalp_re px=9140 alert=1045500200I +[12:46:12] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9140 alert=1045500200I +[12:46:12] 💾 [SCALP] universe=91 saved=91 +[12:46:12] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:46:12] AFR 이탈 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[12:46:12] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[12:46:12] 💾 [SCALP] universe=90 saved=90 +[12:46:12] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:46:25] AFR 재진입 090460 sid=SCALP name=scalp_re px=16050 alert=1045500200I +[12:46:25] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16050 alert=1045500200I +[12:46:25] 💾 [SCALP] universe=91 saved=91 +[12:46:25] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:46:29] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[12:46:29] [ls_cond_hist] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[12:46:29] 💾 [SCALP] universe=92 saved=92 +[12:46:29] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:46:33] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:46:33] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:46:33] 💾 [SCALP] universe=93 saved=93 +[12:46:33] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:46:39] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:46:39] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:46:39] 💾 [SCALP] universe=92 saved=92 +[12:46:39] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:47:00] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:47:00] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:47:00] 💾 [SCALP] universe=93 saved=93 +[12:47:00] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:47:03] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:47:03] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:47:03] 💾 [SCALP] universe=92 saved=92 +[12:47:03] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:47:13] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[12:47:13] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[12:47:13] 💾 [SCALP] universe=91 saved=91 +[12:47:13] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:47:14] AFR 이탈 130580 sid=SCALP name=scalp_re px=5440 alert=1045500200I +[12:47:14] [ls_cond_hist] AFR 이탈 130580 sid=SCALP name=scalp_re px=5440 alert=1045500200I +[12:47:14] 💾 [SCALP] universe=90 saved=90 +[12:47:14] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:47:24] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8760 alert=1045500200I +[12:47:24] [ls_cond_hist] AFR 재진입 0011A0 sid=SCALP name=scalp_re px=8760 alert=1045500200I +[12:47:24] 💾 [SCALP] universe=91 saved=91 +[12:47:24] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:47:27] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:47:27] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:47:27] 💾 [SCALP] universe=92 saved=92 +[12:47:27] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:47:29] AFR 이탈 122310 sid=SCALP name=scalp_re px=3465 alert=1045500200I +[12:47:29] [ls_cond_hist] AFR 이탈 122310 sid=SCALP name=scalp_re px=3465 alert=1045500200I +[12:47:29] 💾 [SCALP] universe=91 saved=91 +[12:47:29] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:47:30] AFR 이탈 143160 sid=SCALP name=scalp_re px=15960 alert=1045500200I +[12:47:30] [ls_cond_hist] AFR 이탈 143160 sid=SCALP name=scalp_re px=15960 alert=1045500200I +[12:47:30] 💾 [SCALP] universe=90 saved=90 +[12:47:30] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:47:43] AFR 재진입 338840 sid=SCALP name=scalp_re px=9180 alert=1045500200I +[12:47:43] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9180 alert=1045500200I +[12:47:43] 💾 [SCALP] universe=91 saved=91 +[12:47:43] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:47:44] AFR 재진입 155660 sid=SCALP name=scalp_re px=4600 alert=1045500200I +[12:47:44] [ls_cond_hist] AFR 재진입 155660 sid=SCALP name=scalp_re px=4600 alert=1045500200I +[12:47:44] 💾 [SCALP] universe=92 saved=92 +[12:47:44] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:47:58] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:47:58] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:47:59] 💾 [SCALP] universe=93 saved=93 +[12:47:59] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[12:48:00] AFR 이탈 411080 sid=SCALP name=scalp_re px=3835 alert=1045500200I +[12:48:00] [ls_cond_hist] AFR 이탈 411080 sid=SCALP name=scalp_re px=3835 alert=1045500200I +[12:48:00] 💾 [SCALP] universe=92 saved=92 +[12:48:00] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:48:03] AFR 이탈 331920 sid=SCALP name=scalp_re px=9370 alert=1045500200I +[12:48:03] [ls_cond_hist] AFR 이탈 331920 sid=SCALP name=scalp_re px=9370 alert=1045500200I +[12:48:03] 💾 [SCALP] universe=91 saved=91 +[12:48:03] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:48:04] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:48:04] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[12:48:05] 💾 [SCALP] universe=92 saved=92 +[12:48:05] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:48:10] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:48:10] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:48:10] 💾 [SCALP] universe=91 saved=91 +[12:48:10] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:48:13] AFR 이탈 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[12:48:13] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[12:48:13] 💾 [SCALP] universe=90 saved=90 +[12:48:13] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:48:16] AFR 이탈 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[12:48:16] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[12:48:16] 💾 [SCALP] universe=89 saved=89 +[12:48:16] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:48:27] AFR 재진입 493330 sid=SCALP name=scalp_re px=9020 alert=1045500200I +[12:48:27] [ls_cond_hist] AFR 재진입 493330 sid=SCALP name=scalp_re px=9020 alert=1045500200I +[12:48:27] 💾 [SCALP] universe=90 saved=90 +[12:48:27] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:48:43] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:48:43] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:48:43] 💾 [SCALP] universe=91 saved=91 +[12:48:43] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:48:45] AFR 이탈 009520 sid=SCALP name=scalp_re px=10530 alert=1045500200I +[12:48:45] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10530 alert=1045500200I +[12:48:45] 💾 [SCALP] universe=90 saved=90 +[12:48:45] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:48:46] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:48:46] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[12:48:46] 💾 [SCALP] universe=91 saved=91 +[12:48:46] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:49:00] AFR 재진입 331920 sid=SCALP name=scalp_re px=9250 alert=1045500200I +[12:49:00] [ls_cond_hist] AFR 재진입 331920 sid=SCALP name=scalp_re px=9250 alert=1045500200I +[12:49:00] 💾 [SCALP] universe=92 saved=92 +[12:49:00] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:49:07] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:49:07] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:49:07] 💾 [SCALP] universe=91 saved=91 +[12:49:07] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:49:13] AFR 이탈 317830 sid=SCALP name=scalp_re px=4550 alert=1045500200I +[12:49:13] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4550 alert=1045500200I +[12:49:13] 💾 [SCALP] universe=90 saved=90 +[12:49:13] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:49:26] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:49:26] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:49:26] 💾 [SCALP] universe=91 saved=91 +[12:49:26] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:49:30] AFR 재진입 022100 sid=SCALP name=scalp_re px=19360 alert=1045500200I +[12:49:30] [ls_cond_hist] AFR 재진입 022100 sid=SCALP name=scalp_re px=19360 alert=1045500200I +[12:49:30] 💾 [SCALP] universe=92 saved=92 +[12:49:30] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[12:49:40] AFR 이탈 030530 sid=SCALP name=scalp_re px=16700 alert=1045500200I +[12:49:40] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16700 alert=1045500200I +[12:49:40] 💾 [SCALP] universe=91 saved=91 +[12:49:40] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:49:41] AFR 이탈 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[12:49:41] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[12:49:41] 💾 [SCALP] universe=90 saved=90 +[12:49:41] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:49:43] AFR 재진입 030530 sid=SCALP name=scalp_re px=16730 alert=1045500200I +[12:49:43] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16730 alert=1045500200I +[12:49:43] 💾 [SCALP] universe=91 saved=91 +[12:49:43] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:49:58] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:49:58] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:49:58] 💾 [SCALP] universe=90 saved=90 +[12:49:58] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:50:00] AFR 재진입 017960 sid=SCALP name=scalp_re px=22375 alert=1045500200I +[12:50:00] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22375 alert=1045500200I +[12:50:00] 💾 [SCALP] universe=91 saved=91 +[12:50:00] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[12:50:01] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:50:01] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:50:01] 💾 [SCALP] universe=90 saved=90 +[12:50:01] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[12:50:09] AFR 이탈 038500 sid=SCALP name=scalp_re px=7390 alert=1045500200I +[12:50:09] [ls_cond_hist] AFR 이탈 038500 sid=SCALP name=scalp_re px=7390 alert=1045500200I +[12:50:10] 💾 [SCALP] universe=89 saved=89 +[12:50:10] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[12:50:11] AFR 이탈 419080 sid=SCALP name=scalp_re px=4320 alert=1045500200I +[12:50:11] [ls_cond_hist] AFR 이탈 419080 sid=SCALP name=scalp_re px=4320 alert=1045500200I +[12:50:11] 💾 [SCALP] universe=88 saved=88 +[12:50:11] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:50:12] AFR 이탈 105740 sid=SCALP name=scalp_re px=6940 alert=1045500200I +[12:50:12] [ls_cond_hist] AFR 이탈 105740 sid=SCALP name=scalp_re px=6940 alert=1045500200I +[12:50:12] 💾 [SCALP] universe=87 saved=87 +[12:50:12] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:50:15] AFR 이탈 488900 sid=SCALP name=scalp_re px=7680 alert=1045500200I +[12:50:15] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7680 alert=1045500200I +[12:50:15] 💾 [SCALP] universe=86 saved=86 +[12:50:15] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:50:18] AFR 이탈 215000 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[12:50:18] [ls_cond_hist] AFR 이탈 215000 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[12:50:18] 💾 [SCALP] universe=85 saved=85 +[12:50:18] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:50:18] AFR 재진입 090460 sid=SCALP name=scalp_re px=16050 alert=1045500200I +[12:50:18] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16050 alert=1045500200I +[12:50:18] 💾 [SCALP] universe=86 saved=86 +[12:50:18] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:50:20] AFR 이탈 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[12:50:20] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[12:50:20] 💾 [SCALP] universe=85 saved=85 +[12:50:20] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:50:24] AFR 이탈 005950 sid=SCALP name=scalp_re px=13240 alert=1045500200I +[12:50:24] [ls_cond_hist] AFR 이탈 005950 sid=SCALP name=scalp_re px=13240 alert=1045500200I +[12:50:24] 💾 [SCALP] universe=84 saved=84 +[12:50:24] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:50:25] AFR 재진입 411080 sid=SCALP name=scalp_re px=3815 alert=1045500200I +[12:50:25] [ls_cond_hist] AFR 재진입 411080 sid=SCALP name=scalp_re px=3815 alert=1045500200I +[12:50:25] 💾 [SCALP] universe=85 saved=85 +[12:50:25] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:50:26] AFR 재진입 090460 sid=SCALP name=scalp_re px=16060 alert=1045500200I +[12:50:26] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16060 alert=1045500200I +[12:50:26] 💾 [SCALP] universe=86 saved=86 +[12:50:26] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:50:27] AFR 이탈 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[12:50:27] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[12:50:27] 💾 [SCALP] universe=85 saved=85 +[12:50:27] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:50:34] AFR 이탈 030530 sid=SCALP name=scalp_re px=16700 alert=1045500200I +[12:50:34] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16700 alert=1045500200I +[12:50:34] 💾 [SCALP] universe=84 saved=84 +[12:50:34] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:50:36] AFR 재진입 33626L sid=SCALP name=scalp_re px=6300 alert=1045500200I +[12:50:36] [ls_cond_hist] AFR 재진입 33626L sid=SCALP name=scalp_re px=6300 alert=1045500200I +[12:50:36] 💾 [SCALP] universe=85 saved=85 +[12:50:36] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:50:37] AFR 이탈 380550 sid=SCALP name=scalp_re px=7840 alert=1045500200I +[12:50:37] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7840 alert=1045500200I +[12:50:37] 💾 [SCALP] universe=84 saved=84 +[12:50:37] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:50:43] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[12:50:43] [ls_cond_hist] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[12:50:43] 💾 [SCALP] universe=85 saved=85 +[12:50:43] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:51:00] AFR 재진입 380550 sid=SCALP name=scalp_re px=7830 alert=1045500200I +[12:51:00] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7830 alert=1045500200I +[12:51:00] 💾 [SCALP] universe=86 saved=86 +[12:51:00] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:51:05] AFR 이탈 250000 sid=SCALP name=scalp_re px=5130 alert=1045500200I +[12:51:05] [ls_cond_hist] AFR 이탈 250000 sid=SCALP name=scalp_re px=5130 alert=1045500200I +[12:51:06] 💾 [SCALP] universe=85 saved=85 +[12:51:06] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:51:08] AFR 이탈 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[12:51:08] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[12:51:08] 💾 [SCALP] universe=84 saved=84 +[12:51:08] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:51:09] AFR 재진입 090460 sid=SCALP name=scalp_re px=16050 alert=1045500200I +[12:51:09] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16050 alert=1045500200I +[12:51:09] 💾 [SCALP] universe=85 saved=85 +[12:51:09] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:51:12] AFR 이탈 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[12:51:12] [ls_cond_hist] AFR 이탈 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[12:51:13] 💾 [SCALP] universe=84 saved=84 +[12:51:13] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:51:13] AFR 이탈 090460 sid=SCALP name=scalp_re px=16010 alert=1045500200I +[12:51:13] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16010 alert=1045500200I +[12:51:13] 💾 [SCALP] universe=83 saved=83 +[12:51:13] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:51:39] AFR 재진입 122310 sid=SCALP name=scalp_re px=3500 alert=1045500200I +[12:51:39] [ls_cond_hist] AFR 재진입 122310 sid=SCALP name=scalp_re px=3500 alert=1045500200I +[12:51:39] 💾 [SCALP] universe=84 saved=84 +[12:51:39] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:51:59] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:51:59] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:51:59] 💾 [SCALP] universe=83 saved=83 +[12:51:59] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:52:01] AFR 재진입 250000 sid=SCALP name=scalp_re px=5120 alert=1045500200I +[12:52:01] [ls_cond_hist] AFR 재진입 250000 sid=SCALP name=scalp_re px=5120 alert=1045500200I +[12:52:01] 💾 [SCALP] universe=84 saved=84 +[12:52:01] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:52:09] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:52:09] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:52:10] 💾 [SCALP] universe=85 saved=85 +[12:52:10] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:52:14] AFR 재진입 038500 sid=SCALP name=scalp_re px=7400 alert=1045500200I +[12:52:14] [ls_cond_hist] AFR 재진입 038500 sid=SCALP name=scalp_re px=7400 alert=1045500200I +[12:52:14] 💾 [SCALP] universe=86 saved=86 +[12:52:14] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:52:17] AFR 재진입 317830 sid=SCALP name=scalp_re px=4520 alert=1045500200I +[12:52:17] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4520 alert=1045500200I +[12:52:18] 💾 [SCALP] universe=87 saved=87 +[12:52:18] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:52:21] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:52:21] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:52:21] 💾 [SCALP] universe=86 saved=86 +[12:52:21] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:52:23] AFR 이탈 380550 sid=SCALP name=scalp_re px=7820 alert=1045500200I +[12:52:23] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7820 alert=1045500200I +[12:52:23] 💾 [SCALP] universe=85 saved=85 +[12:52:23] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:52:48] AFR 이탈 317830 sid=SCALP name=scalp_re px=4515 alert=1045500200I +[12:52:48] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4515 alert=1045500200I +[12:52:48] 💾 [SCALP] universe=84 saved=84 +[12:52:48] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:52:49] AFR 이탈 338840 sid=SCALP name=scalp_re px=9130 alert=1045500200I +[12:52:49] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9130 alert=1045500200I +[12:52:49] 💾 [SCALP] universe=83 saved=83 +[12:52:49] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:53:05] AFR 진입 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[12:53:05] [ls_cond_hist] AFR 진입 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[12:53:06] 💾 [SCALP] universe=84 saved=84 +[12:53:06] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:53:12] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:53:12] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:53:12] 💾 [SCALP] universe=85 saved=85 +[12:53:12] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:53:13] AFR 재진입 005950 sid=SCALP name=scalp_re px=13230 alert=1045500200I +[12:53:13] [ls_cond_hist] AFR 재진입 005950 sid=SCALP name=scalp_re px=13230 alert=1045500200I +[12:53:13] 💾 [SCALP] universe=86 saved=86 +[12:53:13] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:53:18] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:53:18] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:53:18] 💾 [SCALP] universe=87 saved=87 +[12:53:18] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:53:39] AFR 재진입 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[12:53:39] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[12:53:39] 💾 [SCALP] universe=88 saved=88 +[12:53:39] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[12:53:53] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[12:53:53] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[12:53:53] 💾 [SCALP] universe=87 saved=87 +[12:53:53] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:53:55] AFR 이탈 096250 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[12:53:55] [ls_cond_hist] AFR 이탈 096250 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[12:53:55] 💾 [SCALP] universe=86 saved=86 +[12:53:55] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:53:56] AFR 이탈 100120 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:53:56] [ls_cond_hist] AFR 이탈 100120 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:53:56] 💾 [SCALP] universe=85 saved=85 +[12:53:56] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:54:01] AFR 이탈 33626L sid=SCALP name=scalp_re px=6195 alert=1045500200I +[12:54:01] [ls_cond_hist] AFR 이탈 33626L sid=SCALP name=scalp_re px=6195 alert=1045500200I +[12:54:01] 💾 [SCALP] universe=84 saved=84 +[12:54:01] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:54:02] AFR 이탈 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[12:54:02] [ls_cond_hist] AFR 이탈 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[12:54:02] 💾 [SCALP] universe=83 saved=83 +[12:54:02] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:54:09] AFR 재진입 105740 sid=SCALP name=scalp_re px=6900 alert=1045500200I +[12:54:09] [ls_cond_hist] AFR 재진입 105740 sid=SCALP name=scalp_re px=6900 alert=1045500200I +[12:54:09] 💾 [SCALP] universe=84 saved=84 +[12:54:09] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:54:12] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:54:12] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:54:12] 💾 [SCALP] universe=83 saved=83 +[12:54:12] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:54:13] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:54:13] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:54:13] 💾 [SCALP] universe=82 saved=82 +[12:54:13] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:54:15] AFR 이탈 093920 sid=SCALP name=scalp_re px=4840 alert=1045500200I +[12:54:15] [ls_cond_hist] AFR 이탈 093920 sid=SCALP name=scalp_re px=4840 alert=1045500200I +[12:54:15] 💾 [SCALP] universe=81 saved=81 +[12:54:15] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:54:18] AFR 재진입 100120 sid=SCALP name=scalp_re px=22500 alert=1045500200I +[12:54:18] [ls_cond_hist] AFR 재진입 100120 sid=SCALP name=scalp_re px=22500 alert=1045500200I +[12:54:18] 💾 [SCALP] universe=82 saved=82 +[12:54:18] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:54:20] AFR 이탈 100120 sid=SCALP name=scalp_re px=22300 alert=1045500200I +[12:54:20] [ls_cond_hist] AFR 이탈 100120 sid=SCALP name=scalp_re px=22300 alert=1045500200I +[12:54:21] 💾 [SCALP] universe=81 saved=81 +[12:54:21] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:54:21] AFR 재진입 100120 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:54:21] [ls_cond_hist] AFR 재진입 100120 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:54:21] 💾 [SCALP] universe=82 saved=82 +[12:54:21] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:54:22] AFR 재진입 338840 sid=SCALP name=scalp_re px=9170 alert=1045500200I +[12:54:22] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9170 alert=1045500200I +[12:54:22] 💾 [SCALP] universe=83 saved=83 +[12:54:22] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:54:26] AFR 이탈 331920 sid=SCALP name=scalp_re px=9310 alert=1045500200I +[12:54:26] [ls_cond_hist] AFR 이탈 331920 sid=SCALP name=scalp_re px=9310 alert=1045500200I +[12:54:26] 💾 [SCALP] universe=82 saved=82 +[12:54:26] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:54:26] AFR 재진입 023800 sid=SCALP name=scalp_re px=5360 alert=1045500200I +[12:54:26] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5360 alert=1045500200I +[12:54:27] 💾 [SCALP] universe=83 saved=83 +[12:54:27] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:54:28] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[12:54:28] [ls_cond_hist] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[12:54:28] 💾 [SCALP] universe=84 saved=84 +[12:54:28] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:54:30] AFR 이탈 067370 sid=SCALP name=scalp_re px=6350 alert=1045500200I +[12:54:30] [ls_cond_hist] AFR 이탈 067370 sid=SCALP name=scalp_re px=6350 alert=1045500200I +[12:54:31] 💾 [SCALP] universe=83 saved=83 +[12:54:31] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:54:31] AFR 이탈 338840 sid=SCALP name=scalp_re px=9140 alert=1045500200I +[12:54:31] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9140 alert=1045500200I +[12:54:31] 💾 [SCALP] universe=82 saved=82 +[12:54:31] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:54:32] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:54:32] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:54:33] 💾 [SCALP] universe=83 saved=83 +[12:54:33] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:54:33] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:54:33] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[12:54:33] 💾 [SCALP] universe=84 saved=84 +[12:54:33] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:54:38] AFR 이탈 456070 sid=SCALP name=scalp_re px=5910 alert=1045500200I +[12:54:38] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5910 alert=1045500200I +[12:54:38] 💾 [SCALP] universe=83 saved=83 +[12:54:38] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:54:39] AFR 재진입 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[12:54:39] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[12:54:39] 💾 [SCALP] universe=84 saved=84 +[12:54:39] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:54:46] AFR 재진입 290550 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[12:54:46] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[12:54:46] 💾 [SCALP] universe=85 saved=85 +[12:54:46] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:54:49] AFR 이탈 456070 sid=SCALP name=scalp_re px=5900 alert=1045500200I +[12:54:49] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5900 alert=1045500200I +[12:54:50] 💾 [SCALP] universe=84 saved=84 +[12:54:50] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:54:52] AFR 이탈 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[12:54:52] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[12:54:52] 💾 [SCALP] universe=83 saved=83 +[12:54:52] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:55:00] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:55:00] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:55:00] 💾 [SCALP] universe=82 saved=82 +[12:55:00] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:55:02] AFR 재진입 488900 sid=SCALP name=scalp_re px=7640 alert=1045500200I +[12:55:02] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7640 alert=1045500200I +[12:55:02] 💾 [SCALP] universe=83 saved=83 +[12:55:02] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:55:03] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:55:03] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[12:55:03] 💾 [SCALP] universe=82 saved=82 +[12:55:03] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:55:06] AFR 이탈 120110 sid=SCALP name=scalp_re px=54200 alert=1045500200I +[12:55:06] [ls_cond_hist] AFR 이탈 120110 sid=SCALP name=scalp_re px=54200 alert=1045500200I +[12:55:06] 💾 [SCALP] universe=81 saved=81 +[12:55:06] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:55:06] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[12:55:06] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[12:55:07] 💾 [SCALP] universe=80 saved=80 +[12:55:07] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:55:10] AFR 재진입 338840 sid=SCALP name=scalp_re px=9170 alert=1045500200I +[12:55:10] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9170 alert=1045500200I +[12:55:10] 💾 [SCALP] universe=81 saved=81 +[12:55:10] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:55:11] AFR 이탈 004430 sid=SCALP name=scalp_re px=12840 alert=1045500200I +[12:55:11] [ls_cond_hist] AFR 이탈 004430 sid=SCALP name=scalp_re px=12840 alert=1045500200I +[12:55:11] 💾 [SCALP] universe=80 saved=80 +[12:55:11] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:55:12] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:55:12] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:55:12] 💾 [SCALP] universe=81 saved=81 +[12:55:12] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:55:13] AFR 이탈 038500 sid=SCALP name=scalp_re px=7380 alert=1045500200I +[12:55:13] [ls_cond_hist] AFR 이탈 038500 sid=SCALP name=scalp_re px=7380 alert=1045500200I +[12:55:13] 💾 [SCALP] universe=80 saved=80 +[12:55:13] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:55:13] AFR 재진입 038500 sid=SCALP name=scalp_re px=7400 alert=1045500200I +[12:55:13] [ls_cond_hist] AFR 재진입 038500 sid=SCALP name=scalp_re px=7400 alert=1045500200I +[12:55:13] 💾 [SCALP] universe=81 saved=81 +[12:55:13] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:55:18] AFR 이탈 378340 sid=SCALP name=scalp_re px=9980 alert=1045500200I +[12:55:18] [ls_cond_hist] AFR 이탈 378340 sid=SCALP name=scalp_re px=9980 alert=1045500200I +[12:55:18] 💾 [SCALP] universe=80 saved=80 +[12:55:18] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:55:22] AFR 이탈 458650 sid=SCALP name=scalp_re px=7920 alert=1045500200I +[12:55:22] [ls_cond_hist] AFR 이탈 458650 sid=SCALP name=scalp_re px=7920 alert=1045500200I +[12:55:22] 💾 [SCALP] universe=79 saved=79 +[12:55:22] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:55:25] AFR 이탈 493330 sid=SCALP name=scalp_re px=9010 alert=1045500200I +[12:55:25] [ls_cond_hist] AFR 이탈 493330 sid=SCALP name=scalp_re px=9010 alert=1045500200I +[12:55:25] 💾 [SCALP] universe=78 saved=78 +[12:55:25] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[12:55:28] AFR 이탈 338840 sid=SCALP name=scalp_re px=9140 alert=1045500200I +[12:55:28] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9140 alert=1045500200I +[12:55:28] 💾 [SCALP] universe=77 saved=77 +[12:55:28] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[12:55:35] AFR 이탈 250000 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[12:55:35] [ls_cond_hist] AFR 이탈 250000 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[12:55:35] 💾 [SCALP] universe=76 saved=76 +[12:55:35] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[12:55:39] AFR 재진입 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[12:55:39] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[12:55:39] 💾 [SCALP] universe=77 saved=77 +[12:55:39] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[12:55:42] AFR 재진입 378340 sid=SCALP name=scalp_re px=9980 alert=1045500200I +[12:55:42] [ls_cond_hist] AFR 재진입 378340 sid=SCALP name=scalp_re px=9980 alert=1045500200I +[12:55:42] 💾 [SCALP] universe=78 saved=78 +[12:55:42] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[12:55:43] AFR 재진입 096250 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[12:55:43] [ls_cond_hist] AFR 재진입 096250 sid=SCALP name=scalp_re px=6010 alert=1045500200I +[12:55:43] 💾 [SCALP] universe=79 saved=79 +[12:55:43] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:55:47] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[12:55:47] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[12:55:47] 💾 [SCALP] universe=78 saved=78 +[12:55:47] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[12:55:52] AFR 이탈 038500 sid=SCALP name=scalp_re px=7380 alert=1045500200I +[12:55:52] [ls_cond_hist] AFR 이탈 038500 sid=SCALP name=scalp_re px=7380 alert=1045500200I +[12:55:52] 💾 [SCALP] universe=77 saved=77 +[12:55:52] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[12:55:52] AFR 재진입 038500 sid=SCALP name=scalp_re px=7400 alert=1045500200I +[12:55:52] [ls_cond_hist] AFR 재진입 038500 sid=SCALP name=scalp_re px=7400 alert=1045500200I +[12:55:52] 💾 [SCALP] universe=78 saved=78 +[12:55:52] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[12:55:53] AFR 이탈 022100 sid=SCALP name=scalp_re px=19300 alert=1045500200I +[12:55:53] [ls_cond_hist] AFR 이탈 022100 sid=SCALP name=scalp_re px=19300 alert=1045500200I +[12:55:53] 💾 [SCALP] universe=77 saved=77 +[12:55:53] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[12:56:01] AFR 이탈 488900 sid=SCALP name=scalp_re px=7600 alert=1045500200I +[12:56:01] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7600 alert=1045500200I +[12:56:01] 💾 [SCALP] universe=76 saved=76 +[12:56:01] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[12:56:03] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[12:56:03] [ls_cond_hist] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[12:56:03] 💾 [SCALP] universe=77 saved=77 +[12:56:03] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[12:56:04] AFR 이탈 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[12:56:04] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[12:56:04] 💾 [SCALP] universe=76 saved=76 +[12:56:04] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[12:56:06] AFR 이탈 014530 sid=SCALP name=scalp_re px=3155 alert=1045500200I +[12:56:06] [ls_cond_hist] AFR 이탈 014530 sid=SCALP name=scalp_re px=3155 alert=1045500200I +[12:56:06] 💾 [SCALP] universe=75 saved=75 +[12:56:06] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[12:56:09] AFR 재진입 012630 sid=SCALP name=scalp_re px=21700 alert=1045500200I +[12:56:09] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21700 alert=1045500200I +[12:56:09] 💾 [SCALP] universe=76 saved=76 +[12:56:09] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[12:56:16] AFR 재진입 338840 sid=SCALP name=scalp_re px=9100 alert=1045500200I +[12:56:16] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9100 alert=1045500200I +[12:56:16] 💾 [SCALP] universe=77 saved=77 +[12:56:16] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[12:56:21] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[12:56:21] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[12:56:21] 💾 [SCALP] universe=76 saved=76 +[12:56:21] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[12:56:21] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[12:56:21] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[12:56:21] 💾 [SCALP] universe=77 saved=77 +[12:56:21] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[12:56:24] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[12:56:24] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[12:56:24] 💾 [SCALP] universe=76 saved=76 +[12:56:24] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[12:56:29] AFR 이탈 378340 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[12:56:29] [ls_cond_hist] AFR 이탈 378340 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[12:56:29] 💾 [SCALP] universe=75 saved=75 +[12:56:29] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[12:56:32] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:56:32] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:56:32] 💾 [SCALP] universe=74 saved=74 +[12:56:32] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[12:56:34] AFR 이탈 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[12:56:34] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[12:56:34] 💾 [SCALP] universe=73 saved=73 +[12:56:34] [ls_cond_hist] 💾 [SCALP] universe=73 saved=73 +[12:56:38] AFR 재진입 012630 sid=SCALP name=scalp_re px=21700 alert=1045500200I +[12:56:38] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21700 alert=1045500200I +[12:56:38] 💾 [SCALP] universe=74 saved=74 +[12:56:38] [ls_cond_hist] 💾 [SCALP] universe=74 saved=74 +[12:56:38] AFR 재진입 022100 sid=SCALP name=scalp_re px=19310 alert=1045500200I +[12:56:38] [ls_cond_hist] AFR 재진입 022100 sid=SCALP name=scalp_re px=19310 alert=1045500200I +[12:56:39] 💾 [SCALP] universe=75 saved=75 +[12:56:39] [ls_cond_hist] 💾 [SCALP] universe=75 saved=75 +[12:56:42] AFR 재진입 290550 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[12:56:42] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[12:56:42] 💾 [SCALP] universe=76 saved=76 +[12:56:42] [ls_cond_hist] 💾 [SCALP] universe=76 saved=76 +[12:56:42] AFR 재진입 004430 sid=SCALP name=scalp_re px=12830 alert=1045500200I +[12:56:42] [ls_cond_hist] AFR 재진입 004430 sid=SCALP name=scalp_re px=12830 alert=1045500200I +[12:56:42] 💾 [SCALP] universe=77 saved=77 +[12:56:42] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[12:56:52] AFR 재진입 030530 sid=SCALP name=scalp_re px=16690 alert=1045500200I +[12:56:52] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16690 alert=1045500200I +[12:56:52] 💾 [SCALP] universe=78 saved=78 +[12:56:52] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[12:56:58] AFR 이탈 012200 sid=SCALP name=scalp_re px=4010 alert=1045500200I +[12:56:58] [ls_cond_hist] AFR 이탈 012200 sid=SCALP name=scalp_re px=4010 alert=1045500200I +[12:56:58] 💾 [SCALP] universe=77 saved=77 +[12:56:58] [ls_cond_hist] 💾 [SCALP] universe=77 saved=77 +[12:57:00] AFR 재진입 331920 sid=SCALP name=scalp_re px=9160 alert=1045500200I +[12:57:00] [ls_cond_hist] AFR 재진입 331920 sid=SCALP name=scalp_re px=9160 alert=1045500200I +[12:57:00] 💾 [SCALP] universe=78 saved=78 +[12:57:00] [ls_cond_hist] 💾 [SCALP] universe=78 saved=78 +[12:57:00] AFR 재진입 000225 sid=SCALP name=scalp_re px=3675 alert=1045500200I +[12:57:00] [ls_cond_hist] AFR 재진입 000225 sid=SCALP name=scalp_re px=3675 alert=1045500200I +[12:57:00] 💾 [SCALP] universe=79 saved=79 +[12:57:00] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:57:05] AFR 재진입 005440 sid=SCALP name=scalp_re px=11970 alert=1045500200I +[12:57:05] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=11970 alert=1045500200I +[12:57:05] 💾 [SCALP] universe=80 saved=80 +[12:57:05] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:57:08] AFR 이탈 120110 sid=SCALP name=scalp_re px=54200 alert=1045500200I +[12:57:08] [ls_cond_hist] AFR 이탈 120110 sid=SCALP name=scalp_re px=54200 alert=1045500200I +[12:57:09] 💾 [SCALP] universe=79 saved=79 +[12:57:09] [ls_cond_hist] 💾 [SCALP] universe=79 saved=79 +[12:57:12] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:57:12] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:57:12] 💾 [SCALP] universe=80 saved=80 +[12:57:12] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:57:24] AFR 재진입 378340 sid=SCALP name=scalp_re px=9980 alert=1045500200I +[12:57:24] [ls_cond_hist] AFR 재진입 378340 sid=SCALP name=scalp_re px=9980 alert=1045500200I +[12:57:24] 💾 [SCALP] universe=81 saved=81 +[12:57:24] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:57:31] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[12:57:31] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[12:57:31] 💾 [SCALP] universe=82 saved=82 +[12:57:31] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:57:36] AFR 이탈 005440 sid=SCALP name=scalp_re px=11960 alert=1045500200I +[12:57:36] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=11960 alert=1045500200I +[12:57:36] 💾 [SCALP] universe=81 saved=81 +[12:57:36] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:57:38] AFR 재진입 250000 sid=SCALP name=scalp_re px=5130 alert=1045500200I +[12:57:38] [ls_cond_hist] AFR 재진입 250000 sid=SCALP name=scalp_re px=5130 alert=1045500200I +[12:57:38] 💾 [SCALP] universe=82 saved=82 +[12:57:38] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:57:39] AFR 이탈 064850 sid=SCALP name=scalp_re px=18400 alert=1045500200I +[12:57:39] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18400 alert=1045500200I +[12:57:39] 💾 [SCALP] universe=81 saved=81 +[12:57:39] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:57:40] AFR 재진입 217590 sid=SCALP name=scalp_re px=12050 alert=1045500200I +[12:57:40] [ls_cond_hist] AFR 재진입 217590 sid=SCALP name=scalp_re px=12050 alert=1045500200I +[12:57:40] 💾 [SCALP] universe=82 saved=82 +[12:57:40] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:57:41] AFR 이탈 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[12:57:41] [ls_cond_hist] AFR 이탈 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[12:57:41] 💾 [SCALP] universe=81 saved=81 +[12:57:41] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:57:46] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[12:57:46] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[12:57:46] 💾 [SCALP] universe=80 saved=80 +[12:57:46] [ls_cond_hist] 💾 [SCALP] universe=80 saved=80 +[12:57:48] AFR 진입 156100 sid=SCALP name=scalp_re px=3975 alert=1045500200I +[12:57:48] [ls_cond_hist] AFR 진입 156100 sid=SCALP name=scalp_re px=3975 alert=1045500200I +[12:57:48] 💾 [SCALP] universe=81 saved=81 +[12:57:48] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:57:50] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[12:57:50] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[12:57:50] 💾 [SCALP] universe=82 saved=82 +[12:57:50] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:57:50] AFR 재진입 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[12:57:50] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[12:57:50] 💾 [SCALP] universe=83 saved=83 +[12:57:50] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:57:53] AFR 이탈 022100 sid=SCALP name=scalp_re px=19300 alert=1045500200I +[12:57:53] [ls_cond_hist] AFR 이탈 022100 sid=SCALP name=scalp_re px=19300 alert=1045500200I +[12:57:53] 💾 [SCALP] universe=82 saved=82 +[12:57:53] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:57:56] AFR 이탈 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[12:57:56] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[12:57:56] 💾 [SCALP] universe=81 saved=81 +[12:57:56] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:58:00] AFR 재진입 005440 sid=SCALP name=scalp_re px=11970 alert=1045500200I +[12:58:00] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=11970 alert=1045500200I +[12:58:00] 💾 [SCALP] universe=82 saved=82 +[12:58:00] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:58:01] AFR 이탈 456070 sid=SCALP name=scalp_re px=5900 alert=1045500200I +[12:58:01] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5900 alert=1045500200I +[12:58:01] 💾 [SCALP] universe=81 saved=81 +[12:58:01] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:58:02] AFR 재진입 012630 sid=SCALP name=scalp_re px=21700 alert=1045500200I +[12:58:02] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21700 alert=1045500200I +[12:58:03] 💾 [SCALP] universe=82 saved=82 +[12:58:03] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:58:24] AFR 이탈 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[12:58:24] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[12:58:24] 💾 [SCALP] universe=81 saved=81 +[12:58:24] [ls_cond_hist] 💾 [SCALP] universe=81 saved=81 +[12:58:24] AFR 재진입 012630 sid=SCALP name=scalp_re px=21700 alert=1045500200I +[12:58:24] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21700 alert=1045500200I +[12:58:24] 💾 [SCALP] universe=82 saved=82 +[12:58:24] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:58:29] AFR 재진입 022100 sid=SCALP name=scalp_re px=19310 alert=1045500200I +[12:58:29] [ls_cond_hist] AFR 재진입 022100 sid=SCALP name=scalp_re px=19310 alert=1045500200I +[12:58:30] 💾 [SCALP] universe=83 saved=83 +[12:58:30] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:58:30] AFR 이탈 156100 sid=SCALP name=scalp_re px=3960 alert=1045500200I +[12:58:30] [ls_cond_hist] AFR 이탈 156100 sid=SCALP name=scalp_re px=3960 alert=1045500200I +[12:58:30] 💾 [SCALP] universe=82 saved=82 +[12:58:30] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:58:30] AFR 재진입 156100 sid=SCALP name=scalp_re px=3975 alert=1045500200I +[12:58:30] [ls_cond_hist] AFR 재진입 156100 sid=SCALP name=scalp_re px=3975 alert=1045500200I +[12:58:30] 💾 [SCALP] universe=83 saved=83 +[12:58:30] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:58:30] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[12:58:30] [ls_cond_hist] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[12:58:30] 💾 [SCALP] universe=84 saved=84 +[12:58:30] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:58:30] AFR 이탈 005440 sid=SCALP name=scalp_re px=11960 alert=1045500200I +[12:58:30] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=11960 alert=1045500200I +[12:58:31] 💾 [SCALP] universe=83 saved=83 +[12:58:31] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:58:31] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:58:31] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:58:31] 💾 [SCALP] universe=84 saved=84 +[12:58:31] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:58:33] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:58:33] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:58:33] 💾 [SCALP] universe=83 saved=83 +[12:58:33] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:58:42] AFR 재진입 005440 sid=SCALP name=scalp_re px=11970 alert=1045500200I +[12:58:42] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=11970 alert=1045500200I +[12:58:42] 💾 [SCALP] universe=84 saved=84 +[12:58:42] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:58:43] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:58:43] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:58:43] 💾 [SCALP] universe=85 saved=85 +[12:58:43] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:58:45] AFR 재진입 297090 sid=SCALP name=scalp_re px=3605 alert=1045500200I +[12:58:45] [ls_cond_hist] AFR 재진입 297090 sid=SCALP name=scalp_re px=3605 alert=1045500200I +[12:58:45] 💾 [SCALP] universe=86 saved=86 +[12:58:45] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:58:46] AFR 이탈 030530 sid=SCALP name=scalp_re px=16690 alert=1045500200I +[12:58:46] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16690 alert=1045500200I +[12:58:46] 💾 [SCALP] universe=85 saved=85 +[12:58:46] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:58:53] AFR 이탈 036670 sid=SCALP name=scalp_re px=5100 alert=1045500200I +[12:58:53] [ls_cond_hist] AFR 이탈 036670 sid=SCALP name=scalp_re px=5100 alert=1045500200I +[12:58:53] 💾 [SCALP] universe=84 saved=84 +[12:58:53] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:58:53] AFR 재진입 455900 sid=SCALP name=scalp_re px=17200 alert=1045500200I +[12:58:53] [ls_cond_hist] AFR 재진입 455900 sid=SCALP name=scalp_re px=17200 alert=1045500200I +[12:58:53] 💾 [SCALP] universe=85 saved=85 +[12:58:53] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:58:54] AFR 이탈 297090 sid=SCALP name=scalp_re px=3600 alert=1045500200I +[12:58:54] [ls_cond_hist] AFR 이탈 297090 sid=SCALP name=scalp_re px=3600 alert=1045500200I +[12:58:54] 💾 [SCALP] universe=84 saved=84 +[12:58:54] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:58:55] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[12:58:55] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[12:58:55] 💾 [SCALP] universe=85 saved=85 +[12:58:55] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:58:57] AFR 재진입 036670 sid=SCALP name=scalp_re px=5120 alert=1045500200I +[12:58:57] [ls_cond_hist] AFR 재진입 036670 sid=SCALP name=scalp_re px=5120 alert=1045500200I +[12:58:57] 💾 [SCALP] universe=86 saved=86 +[12:58:57] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:58:57] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:58:57] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[12:58:57] 💾 [SCALP] universe=85 saved=85 +[12:58:57] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:59:00] AFR 이탈 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[12:59:00] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[12:59:00] 💾 [SCALP] universe=84 saved=84 +[12:59:00] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:59:00] AFR 이탈 005440 sid=SCALP name=scalp_re px=11960 alert=1045500200I +[12:59:00] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=11960 alert=1045500200I +[12:59:00] 💾 [SCALP] universe=83 saved=83 +[12:59:00] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:59:04] AFR 이탈 380550 sid=SCALP name=scalp_re px=7800 alert=1045500200I +[12:59:04] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7800 alert=1045500200I +[12:59:04] 💾 [SCALP] universe=82 saved=82 +[12:59:04] [ls_cond_hist] 💾 [SCALP] universe=82 saved=82 +[12:59:06] AFR 재진입 012200 sid=SCALP name=scalp_re px=4015 alert=1045500200I +[12:59:06] [ls_cond_hist] AFR 재진입 012200 sid=SCALP name=scalp_re px=4015 alert=1045500200I +[12:59:06] 💾 [SCALP] universe=83 saved=83 +[12:59:06] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:59:06] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:59:06] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:59:06] 💾 [SCALP] universe=84 saved=84 +[12:59:06] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:59:14] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:59:14] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[12:59:14] 💾 [SCALP] universe=83 saved=83 +[12:59:14] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:59:21] AFR 재진입 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[12:59:21] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[12:59:21] 💾 [SCALP] universe=84 saved=84 +[12:59:21] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:59:22] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[12:59:22] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[12:59:22] 💾 [SCALP] universe=83 saved=83 +[12:59:22] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:59:23] AFR 재진입 005440 sid=SCALP name=scalp_re px=11970 alert=1045500200I +[12:59:23] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=11970 alert=1045500200I +[12:59:23] 💾 [SCALP] universe=84 saved=84 +[12:59:23] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:59:25] AFR 이탈 005440 sid=SCALP name=scalp_re px=11960 alert=1045500200I +[12:59:25] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=11960 alert=1045500200I +[12:59:25] 💾 [SCALP] universe=83 saved=83 +[12:59:25] [ls_cond_hist] 💾 [SCALP] universe=83 saved=83 +[12:59:27] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[12:59:27] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[12:59:28] 💾 [SCALP] universe=84 saved=84 +[12:59:28] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:59:29] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[12:59:29] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[12:59:29] 💾 [SCALP] universe=85 saved=85 +[12:59:29] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:59:31] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[12:59:31] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[12:59:31] 💾 [SCALP] universe=84 saved=84 +[12:59:31] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:59:32] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[12:59:32] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[12:59:32] 💾 [SCALP] universe=85 saved=85 +[12:59:32] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:59:34] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:59:34] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:59:34] 💾 [SCALP] universe=84 saved=84 +[12:59:34] [ls_cond_hist] 💾 [SCALP] universe=84 saved=84 +[12:59:36] AFR 재진입 030530 sid=SCALP name=scalp_re px=16690 alert=1045500200I +[12:59:36] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16690 alert=1045500200I +[12:59:36] 💾 [SCALP] universe=85 saved=85 +[12:59:36] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:59:40] AFR 재진입 005440 sid=SCALP name=scalp_re px=11970 alert=1045500200I +[12:59:40] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=11970 alert=1045500200I +[12:59:40] 💾 [SCALP] universe=86 saved=86 +[12:59:40] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:59:41] AFR 이탈 380550 sid=SCALP name=scalp_re px=7800 alert=1045500200I +[12:59:41] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7800 alert=1045500200I +[12:59:41] 💾 [SCALP] universe=85 saved=85 +[12:59:41] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:59:42] AFR 재진입 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[12:59:42] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[12:59:42] 💾 [SCALP] universe=86 saved=86 +[12:59:42] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:59:43] AFR 재진입 458650 sid=SCALP name=scalp_re px=7930 alert=1045500200I +[12:59:43] [ls_cond_hist] AFR 재진입 458650 sid=SCALP name=scalp_re px=7930 alert=1045500200I +[12:59:43] 💾 [SCALP] universe=87 saved=87 +[12:59:43] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[12:59:44] AFR 이탈 005440 sid=SCALP name=scalp_re px=11960 alert=1045500200I +[12:59:44] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=11960 alert=1045500200I +[12:59:44] 💾 [SCALP] universe=86 saved=86 +[12:59:44] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:59:48] AFR 이탈 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[12:59:48] [ls_cond_hist] AFR 이탈 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[12:59:48] 💾 [SCALP] universe=85 saved=85 +[12:59:48] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:59:52] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:59:52] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:59:52] 💾 [SCALP] universe=86 saved=86 +[12:59:52] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[12:59:55] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:59:55] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[12:59:55] 💾 [SCALP] universe=85 saved=85 +[12:59:55] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[12:59:58] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:59:58] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[12:59:58] 💾 [SCALP] universe=86 saved=86 +[12:59:58] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:00:01] AFR 이탈 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[13:00:01] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[13:00:01] 💾 [SCALP] universe=85 saved=85 +[13:00:01] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[13:00:05] AFR 진입 031430 sid=SCALP name=scalp_re px=11180 alert=1045500200I +[13:00:05] [ls_cond_hist] AFR 진입 031430 sid=SCALP name=scalp_re px=11180 alert=1045500200I +[13:00:05] 💾 [SCALP] universe=86 saved=86 +[13:00:05] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:00:10] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[13:00:10] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[13:00:10] 💾 [SCALP] universe=85 saved=85 +[13:00:10] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[13:00:11] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[13:00:11] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[13:00:11] 💾 [SCALP] universe=86 saved=86 +[13:00:11] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:00:14] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[13:00:14] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[13:00:15] 💾 [SCALP] universe=87 saved=87 +[13:00:15] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:00:16] AFR 이탈 017960 sid=SCALP name=scalp_re px=22300 alert=1045500200I +[13:00:16] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22300 alert=1045500200I +[13:00:16] 💾 [SCALP] universe=86 saved=86 +[13:00:16] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:00:17] AFR 이탈 105740 sid=SCALP name=scalp_re px=6960 alert=1045500200I +[13:00:17] [ls_cond_hist] AFR 이탈 105740 sid=SCALP name=scalp_re px=6960 alert=1045500200I +[13:00:17] 💾 [SCALP] universe=85 saved=85 +[13:00:17] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[13:00:18] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[13:00:18] [ls_cond_hist] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[13:00:18] 💾 [SCALP] universe=86 saved=86 +[13:00:18] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:00:19] AFR 이탈 071970 sid=SCALP name=scalp_re px=63200 alert=1045500200I +[13:00:19] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63200 alert=1045500200I +[13:00:19] 💾 [SCALP] universe=85 saved=85 +[13:00:19] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[13:00:27] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[13:00:27] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63400 alert=1045500200I +[13:00:27] 💾 [SCALP] universe=86 saved=86 +[13:00:27] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:00:30] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[13:00:30] [ls_cond_hist] AFR 이탈 071970 sid=SCALP name=scalp_re px=63300 alert=1045500200I +[13:00:30] 💾 [SCALP] universe=85 saved=85 +[13:00:30] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[13:00:38] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:00:38] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:00:38] 💾 [SCALP] universe=86 saved=86 +[13:00:38] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:00:41] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:00:41] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:00:41] 💾 [SCALP] universe=85 saved=85 +[13:00:41] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[13:00:42] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:00:42] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:00:42] 💾 [SCALP] universe=86 saved=86 +[13:00:42] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:01:03] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:01:03] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:01:03] 💾 [SCALP] universe=87 saved=87 +[13:01:03] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:01:05] AFR 재진입 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[13:01:05] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[13:01:05] 💾 [SCALP] universe=88 saved=88 +[13:01:05] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:01:05] AFR 이탈 455900 sid=SCALP name=scalp_re px=17290 alert=1045500200I +[13:01:05] [ls_cond_hist] AFR 이탈 455900 sid=SCALP name=scalp_re px=17290 alert=1045500200I +[13:01:05] 💾 [SCALP] universe=87 saved=87 +[13:01:05] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:01:14] AFR 재진입 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[13:01:14] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5920 alert=1045500200I +[13:01:14] 💾 [SCALP] universe=88 saved=88 +[13:01:14] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:01:17] AFR 이탈 156100 sid=SCALP name=scalp_re px=3970 alert=1045500200I +[13:01:17] [ls_cond_hist] AFR 이탈 156100 sid=SCALP name=scalp_re px=3970 alert=1045500200I +[13:01:17] 💾 [SCALP] universe=87 saved=87 +[13:01:17] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:01:18] AFR 재진입 156100 sid=SCALP name=scalp_re px=3960 alert=1045500200I +[13:01:18] [ls_cond_hist] AFR 재진입 156100 sid=SCALP name=scalp_re px=3960 alert=1045500200I +[13:01:18] 💾 [SCALP] universe=88 saved=88 +[13:01:18] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:01:20] AFR 재진입 217590 sid=SCALP name=scalp_re px=12050 alert=1045500200I +[13:01:20] [ls_cond_hist] AFR 재진입 217590 sid=SCALP name=scalp_re px=12050 alert=1045500200I +[13:01:20] 💾 [SCALP] universe=89 saved=89 +[13:01:20] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:01:22] AFR 이탈 380550 sid=SCALP name=scalp_re px=7780 alert=1045500200I +[13:01:22] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7780 alert=1045500200I +[13:01:22] 💾 [SCALP] universe=88 saved=88 +[13:01:22] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:01:23] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:01:23] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:01:23] 💾 [SCALP] universe=87 saved=87 +[13:01:23] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:01:26] AFR 이탈 120110 sid=SCALP name=scalp_re px=54200 alert=1045500200I +[13:01:26] [ls_cond_hist] AFR 이탈 120110 sid=SCALP name=scalp_re px=54200 alert=1045500200I +[13:01:26] 💾 [SCALP] universe=86 saved=86 +[13:01:26] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:01:31] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:01:31] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:01:31] 💾 [SCALP] universe=87 saved=87 +[13:01:31] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:01:32] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:01:32] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:01:32] 💾 [SCALP] universe=88 saved=88 +[13:01:32] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:01:35] AFR 이탈 036670 sid=SCALP name=scalp_re px=5100 alert=1045500200I +[13:01:35] [ls_cond_hist] AFR 이탈 036670 sid=SCALP name=scalp_re px=5100 alert=1045500200I +[13:01:35] 💾 [SCALP] universe=87 saved=87 +[13:01:35] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:01:35] AFR 재진입 036670 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[13:01:35] [ls_cond_hist] AFR 재진입 036670 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[13:01:35] 💾 [SCALP] universe=88 saved=88 +[13:01:35] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:01:38] AFR 재진입 064850 sid=SCALP name=scalp_re px=18490 alert=1045500200I +[13:01:38] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18490 alert=1045500200I +[13:01:38] 💾 [SCALP] universe=89 saved=89 +[13:01:38] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:01:43] AFR 재진입 005440 sid=SCALP name=scalp_re px=11970 alert=1045500200I +[13:01:43] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=11970 alert=1045500200I +[13:01:43] 💾 [SCALP] universe=90 saved=90 +[13:01:43] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:01:47] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:01:47] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:01:47] 💾 [SCALP] universe=89 saved=89 +[13:01:47] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:01:50] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:01:50] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:01:50] 💾 [SCALP] universe=88 saved=88 +[13:01:50] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:01:53] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[13:01:53] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[13:01:53] 💾 [SCALP] universe=89 saved=89 +[13:01:53] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:01:54] AFR 이탈 036670 sid=SCALP name=scalp_re px=5100 alert=1045500200I +[13:01:54] [ls_cond_hist] AFR 이탈 036670 sid=SCALP name=scalp_re px=5100 alert=1045500200I +[13:01:54] 💾 [SCALP] universe=88 saved=88 +[13:01:54] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:01:55] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[13:01:55] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[13:01:55] 💾 [SCALP] universe=87 saved=87 +[13:01:55] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:01:55] AFR 재진입 474650 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[13:01:55] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[13:01:55] 💾 [SCALP] universe=88 saved=88 +[13:01:55] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:01:55] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:01:55] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:01:55] 💾 [SCALP] universe=89 saved=89 +[13:01:55] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:01:56] AFR 이탈 456070 sid=SCALP name=scalp_re px=5900 alert=1045500200I +[13:01:56] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5900 alert=1045500200I +[13:01:56] 💾 [SCALP] universe=88 saved=88 +[13:01:56] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:01:56] AFR 이탈 378340 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[13:01:56] [ls_cond_hist] AFR 이탈 378340 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[13:01:56] 💾 [SCALP] universe=87 saved=87 +[13:01:56] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:01:57] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:01:57] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:01:57] 💾 [SCALP] universe=86 saved=86 +[13:01:57] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:02:10] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:02:10] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:02:10] 💾 [SCALP] universe=87 saved=87 +[13:02:10] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:02:14] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:02:14] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:02:14] 💾 [SCALP] universe=86 saved=86 +[13:02:14] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:02:15] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:02:15] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:02:15] 💾 [SCALP] universe=87 saved=87 +[13:02:15] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:02:16] AFR 재진입 488900 sid=SCALP name=scalp_re px=7630 alert=1045500200I +[13:02:16] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7630 alert=1045500200I +[13:02:16] 💾 [SCALP] universe=88 saved=88 +[13:02:16] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:02:21] AFR 이탈 380550 sid=SCALP name=scalp_re px=7790 alert=1045500200I +[13:02:21] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7790 alert=1045500200I +[13:02:21] 💾 [SCALP] universe=87 saved=87 +[13:02:21] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:02:22] AFR 재진입 071970 sid=SCALP name=scalp_re px=63200 alert=1045500200I +[13:02:22] [ls_cond_hist] AFR 재진입 071970 sid=SCALP name=scalp_re px=63200 alert=1045500200I +[13:02:22] 💾 [SCALP] universe=88 saved=88 +[13:02:22] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:02:26] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:02:26] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:02:26] 💾 [SCALP] universe=89 saved=89 +[13:02:26] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:02:26] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:02:26] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:02:26] 💾 [SCALP] universe=88 saved=88 +[13:02:26] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:02:35] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:02:35] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:02:35] 💾 [SCALP] universe=87 saved=87 +[13:02:35] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:02:36] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[13:02:36] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[13:02:36] 💾 [SCALP] universe=88 saved=88 +[13:02:36] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:02:38] AFR 재진입 105740 sid=SCALP name=scalp_re px=6920 alert=1045500200I +[13:02:38] [ls_cond_hist] AFR 재진입 105740 sid=SCALP name=scalp_re px=6920 alert=1045500200I +[13:02:38] 💾 [SCALP] universe=89 saved=89 +[13:02:38] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:02:39] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:02:39] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:02:39] 💾 [SCALP] universe=88 saved=88 +[13:02:39] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:02:43] AFR 재진입 456070 sid=SCALP name=scalp_re px=5890 alert=1045500200I +[13:02:43] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5890 alert=1045500200I +[13:02:43] 💾 [SCALP] universe=89 saved=89 +[13:02:43] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:02:44] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:02:44] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:02:44] 💾 [SCALP] universe=88 saved=88 +[13:02:44] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:02:46] AFR 이탈 001940 sid=SCALP name=scalp_re px=25300 alert=1045500200I +[13:02:46] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25300 alert=1045500200I +[13:02:46] 💾 [SCALP] universe=87 saved=87 +[13:02:46] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:02:47] AFR 이탈 456070 sid=SCALP name=scalp_re px=5860 alert=1045500200I +[13:02:47] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5860 alert=1045500200I +[13:02:47] 💾 [SCALP] universe=86 saved=86 +[13:02:47] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:02:47] AFR 재진입 001940 sid=SCALP name=scalp_re px=25400 alert=1045500200I +[13:02:47] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25400 alert=1045500200I +[13:02:48] 💾 [SCALP] universe=87 saved=87 +[13:02:48] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:02:48] AFR 재진입 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[13:02:48] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[13:02:48] 💾 [SCALP] universe=88 saved=88 +[13:02:48] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:02:48] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[13:02:48] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[13:02:48] 💾 [SCALP] universe=89 saved=89 +[13:02:48] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:02:52] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:02:52] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:02:52] 💾 [SCALP] universe=88 saved=88 +[13:02:52] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:02:54] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:02:54] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:02:54] 💾 [SCALP] universe=87 saved=87 +[13:02:54] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:02:54] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:02:54] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:02:55] 💾 [SCALP] universe=86 saved=86 +[13:02:55] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:02:55] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:02:55] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:02:55] 💾 [SCALP] universe=87 saved=87 +[13:02:55] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:02:55] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:02:55] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:02:55] 💾 [SCALP] universe=86 saved=86 +[13:02:55] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:02:56] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[13:02:56] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[13:02:56] 💾 [SCALP] universe=87 saved=87 +[13:02:56] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:02:57] AFR 이탈 001940 sid=SCALP name=scalp_re px=25300 alert=1045500200I +[13:02:57] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25300 alert=1045500200I +[13:02:57] 💾 [SCALP] universe=86 saved=86 +[13:02:57] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:03:01] AFR 재진입 456070 sid=SCALP name=scalp_re px=5850 alert=1045500200I +[13:03:01] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5850 alert=1045500200I +[13:03:01] 💾 [SCALP] universe=87 saved=87 +[13:03:01] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:03:05] AFR 재진입 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:03:05] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:03:06] 💾 [SCALP] universe=88 saved=88 +[13:03:06] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:03:06] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:03:06] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:03:06] 💾 [SCALP] universe=87 saved=87 +[13:03:06] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:03:08] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:03:08] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:03:08] 💾 [SCALP] universe=88 saved=88 +[13:03:08] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:03:10] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:03:10] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:03:10] 💾 [SCALP] universe=89 saved=89 +[13:03:10] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:03:20] AFR 이탈 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[13:03:20] [ls_cond_hist] AFR 이탈 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[13:03:20] 💾 [SCALP] universe=88 saved=88 +[13:03:20] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:03:22] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15140 alert=1045500200I +[13:03:22] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15140 alert=1045500200I +[13:03:22] 💾 [SCALP] universe=87 saved=87 +[13:03:22] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:03:23] AFR 재진입 092460 sid=SCALP name=scalp_re px=16340 alert=1045500200I +[13:03:23] [ls_cond_hist] AFR 재진입 092460 sid=SCALP name=scalp_re px=16340 alert=1045500200I +[13:03:23] 💾 [SCALP] universe=88 saved=88 +[13:03:23] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:03:24] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:03:24] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:03:24] 💾 [SCALP] universe=89 saved=89 +[13:03:24] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:03:24] AFR 이탈 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:03:24] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:03:25] 💾 [SCALP] universe=88 saved=88 +[13:03:25] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:03:26] AFR 재진입 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[13:03:26] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[13:03:26] 💾 [SCALP] universe=89 saved=89 +[13:03:26] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:03:27] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[13:03:27] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[13:03:27] 💾 [SCALP] universe=88 saved=88 +[13:03:27] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:03:31] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:03:31] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:03:31] 💾 [SCALP] universe=89 saved=89 +[13:03:31] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:03:32] AFR 이탈 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:03:32] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:03:32] 💾 [SCALP] universe=88 saved=88 +[13:03:32] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:03:37] AFR 재진입 217590 sid=SCALP name=scalp_re px=12050 alert=1045500200I +[13:03:37] [ls_cond_hist] AFR 재진입 217590 sid=SCALP name=scalp_re px=12050 alert=1045500200I +[13:03:37] 💾 [SCALP] universe=89 saved=89 +[13:03:37] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:03:42] AFR 재진입 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[13:03:42] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21650 alert=1045500200I +[13:03:42] 💾 [SCALP] universe=90 saved=90 +[13:03:42] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:03:48] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:03:48] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:03:49] 💾 [SCALP] universe=91 saved=91 +[13:03:49] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:03:50] AFR 이탈 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[13:03:50] [ls_cond_hist] AFR 이탈 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[13:03:50] 💾 [SCALP] universe=90 saved=90 +[13:03:50] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:04:01] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[13:04:01] [ls_cond_hist] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[13:04:01] 💾 [SCALP] universe=91 saved=91 +[13:04:01] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:04:03] AFR 재진입 217590 sid=SCALP name=scalp_re px=12050 alert=1045500200I +[13:04:03] [ls_cond_hist] AFR 재진입 217590 sid=SCALP name=scalp_re px=12050 alert=1045500200I +[13:04:03] 💾 [SCALP] universe=92 saved=92 +[13:04:03] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:04:06] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:04:06] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:04:06] 💾 [SCALP] universe=91 saved=91 +[13:04:06] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:04:10] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:04:10] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:04:10] 💾 [SCALP] universe=90 saved=90 +[13:04:10] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:04:10] AFR 이탈 004430 sid=SCALP name=scalp_re px=12840 alert=1045500200I +[13:04:10] [ls_cond_hist] AFR 이탈 004430 sid=SCALP name=scalp_re px=12840 alert=1045500200I +[13:04:10] 💾 [SCALP] universe=89 saved=89 +[13:04:10] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:04:16] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:04:16] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:04:16] 💾 [SCALP] universe=90 saved=90 +[13:04:16] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:04:23] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:04:23] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:04:23] 💾 [SCALP] universe=89 saved=89 +[13:04:23] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:04:24] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:04:24] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:04:24] 💾 [SCALP] universe=88 saved=88 +[13:04:24] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:04:28] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[13:04:28] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[13:04:28] 💾 [SCALP] universe=89 saved=89 +[13:04:28] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:04:29] AFR 이탈 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[13:04:29] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[13:04:29] 💾 [SCALP] universe=88 saved=88 +[13:04:29] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:04:34] AFR 재진입 090460 sid=SCALP name=scalp_re px=16080 alert=1045500200I +[13:04:34] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16080 alert=1045500200I +[13:04:34] 💾 [SCALP] universe=89 saved=89 +[13:04:34] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:04:38] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:04:38] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:04:38] 💾 [SCALP] universe=90 saved=90 +[13:04:38] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:04:38] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:04:38] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:04:38] 💾 [SCALP] universe=89 saved=89 +[13:04:38] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:04:43] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:04:43] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:04:43] 💾 [SCALP] universe=90 saved=90 +[13:04:43] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:04:51] AFR 이탈 380550 sid=SCALP name=scalp_re px=7770 alert=1045500200I +[13:04:51] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7770 alert=1045500200I +[13:04:51] 💾 [SCALP] universe=89 saved=89 +[13:04:51] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:04:54] AFR 이탈 488900 sid=SCALP name=scalp_re px=7620 alert=1045500200I +[13:04:54] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7620 alert=1045500200I +[13:04:54] 💾 [SCALP] universe=88 saved=88 +[13:04:54] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:05:00] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:05:00] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:05:01] 💾 [SCALP] universe=89 saved=89 +[13:05:01] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:05:07] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:05:07] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:05:07] 💾 [SCALP] universe=88 saved=88 +[13:05:07] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:05:10] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:05:10] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:05:10] 💾 [SCALP] universe=89 saved=89 +[13:05:10] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:05:25] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[13:05:25] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[13:05:25] 💾 [SCALP] universe=90 saved=90 +[13:05:25] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:05:29] AFR 이탈 290550 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[13:05:29] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[13:05:29] 💾 [SCALP] universe=89 saved=89 +[13:05:29] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:05:50] AFR 재진입 290550 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[13:05:50] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[13:05:50] 💾 [SCALP] universe=90 saved=90 +[13:05:50] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:05:52] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:05:52] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:05:52] 💾 [SCALP] universe=89 saved=89 +[13:05:52] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:05:57] AFR 재진입 004430 sid=SCALP name=scalp_re px=12830 alert=1045500200I +[13:05:57] [ls_cond_hist] AFR 재진입 004430 sid=SCALP name=scalp_re px=12830 alert=1045500200I +[13:05:57] 💾 [SCALP] universe=90 saved=90 +[13:05:57] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:06:07] AFR 재진입 488900 sid=SCALP name=scalp_re px=7630 alert=1045500200I +[13:06:07] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7630 alert=1045500200I +[13:06:08] 💾 [SCALP] universe=91 saved=91 +[13:06:08] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:06:09] AFR 이탈 004430 sid=SCALP name=scalp_re px=12840 alert=1045500200I +[13:06:09] [ls_cond_hist] AFR 이탈 004430 sid=SCALP name=scalp_re px=12840 alert=1045500200I +[13:06:09] 💾 [SCALP] universe=90 saved=90 +[13:06:09] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:06:15] AFR 재진입 093920 sid=SCALP name=scalp_re px=4840 alert=1045500200I +[13:06:15] [ls_cond_hist] AFR 재진입 093920 sid=SCALP name=scalp_re px=4840 alert=1045500200I +[13:06:15] 💾 [SCALP] universe=91 saved=91 +[13:06:15] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:06:23] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:06:23] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:06:23] 💾 [SCALP] universe=92 saved=92 +[13:06:23] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:06:24] AFR 재진입 229640 sid=SCALP name=scalp_re px=44100 alert=1045500200I +[13:06:24] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44100 alert=1045500200I +[13:06:24] 💾 [SCALP] universe=93 saved=93 +[13:06:24] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:06:25] AFR 이탈 229640 sid=SCALP name=scalp_re px=44150 alert=1045500200I +[13:06:25] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44150 alert=1045500200I +[13:06:25] 💾 [SCALP] universe=92 saved=92 +[13:06:25] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:06:25] AFR 재진입 229640 sid=SCALP name=scalp_re px=44250 alert=1045500200I +[13:06:25] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44250 alert=1045500200I +[13:06:25] 💾 [SCALP] universe=93 saved=93 +[13:06:25] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:06:26] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:06:26] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:06:27] 💾 [SCALP] universe=92 saved=92 +[13:06:27] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:06:27] AFR 이탈 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:06:27] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:06:27] 💾 [SCALP] universe=91 saved=91 +[13:06:27] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:06:27] AFR 재진입 090460 sid=SCALP name=scalp_re px=16050 alert=1045500200I +[13:06:27] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16050 alert=1045500200I +[13:06:28] 💾 [SCALP] universe=92 saved=92 +[13:06:28] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:06:28] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:06:28] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:06:28] 💾 [SCALP] universe=93 saved=93 +[13:06:28] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:06:28] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:06:28] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:06:29] 💾 [SCALP] universe=92 saved=92 +[13:06:29] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:06:29] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:06:29] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:06:30] 💾 [SCALP] universe=93 saved=93 +[13:06:30] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:06:30] AFR 이탈 090460 sid=SCALP name=scalp_re px=16050 alert=1045500200I +[13:06:30] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16050 alert=1045500200I +[13:06:30] 💾 [SCALP] universe=92 saved=92 +[13:06:30] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:06:30] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:06:30] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:06:30] 💾 [SCALP] universe=91 saved=91 +[13:06:30] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:06:40] AFR 재진입 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[13:06:40] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[13:06:40] 💾 [SCALP] universe=92 saved=92 +[13:06:40] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:06:40] AFR 재진입 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[13:06:40] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[13:06:41] 💾 [SCALP] universe=93 saved=93 +[13:06:41] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:06:41] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[13:06:41] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[13:06:41] 💾 [SCALP] universe=94 saved=94 +[13:06:41] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:06:42] AFR 이탈 090460 sid=SCALP name=scalp_re px=16010 alert=1045500200I +[13:06:42] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16010 alert=1045500200I +[13:06:42] 💾 [SCALP] universe=93 saved=93 +[13:06:42] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:07:00] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[13:07:00] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[13:07:00] 💾 [SCALP] universe=94 saved=94 +[13:07:00] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:07:03] AFR 재진입 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[13:07:03] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[13:07:03] 💾 [SCALP] universe=95 saved=95 +[13:07:03] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[13:07:11] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:07:11] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:07:11] 💾 [SCALP] universe=94 saved=94 +[13:07:11] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:07:13] AFR 이탈 456070 sid=SCALP name=scalp_re px=5860 alert=1045500200I +[13:07:13] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5860 alert=1045500200I +[13:07:13] 💾 [SCALP] universe=93 saved=93 +[13:07:13] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:07:17] AFR 이탈 022100 sid=SCALP name=scalp_re px=19370 alert=1045500200I +[13:07:17] [ls_cond_hist] AFR 이탈 022100 sid=SCALP name=scalp_re px=19370 alert=1045500200I +[13:07:17] 💾 [SCALP] universe=92 saved=92 +[13:07:17] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:07:18] AFR 재진입 090460 sid=SCALP name=scalp_re px=16060 alert=1045500200I +[13:07:18] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16060 alert=1045500200I +[13:07:18] 💾 [SCALP] universe=93 saved=93 +[13:07:18] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:07:19] AFR 이탈 009520 sid=SCALP name=scalp_re px=10510 alert=1045500200I +[13:07:19] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10510 alert=1045500200I +[13:07:19] 💾 [SCALP] universe=92 saved=92 +[13:07:19] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:07:24] AFR 재진입 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[13:07:24] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[13:07:24] 💾 [SCALP] universe=93 saved=93 +[13:07:24] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:07:24] AFR 이탈 009520 sid=SCALP name=scalp_re px=10530 alert=1045500200I +[13:07:24] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10530 alert=1045500200I +[13:07:24] 💾 [SCALP] universe=92 saved=92 +[13:07:24] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:07:25] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[13:07:25] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[13:07:25] 💾 [SCALP] universe=93 saved=93 +[13:07:25] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:07:26] AFR 재진입 009520 sid=SCALP name=scalp_re px=10580 alert=1045500200I +[13:07:26] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10580 alert=1045500200I +[13:07:26] 💾 [SCALP] universe=94 saved=94 +[13:07:26] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:07:29] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:07:29] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:07:29] 💾 [SCALP] universe=93 saved=93 +[13:07:29] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:07:30] AFR 이탈 000225 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[13:07:30] [ls_cond_hist] AFR 이탈 000225 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[13:07:30] 💾 [SCALP] universe=92 saved=92 +[13:07:30] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:07:36] AFR 재진입 456070 sid=SCALP name=scalp_re px=5820 alert=1045500200I +[13:07:36] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5820 alert=1045500200I +[13:07:36] 💾 [SCALP] universe=93 saved=93 +[13:07:36] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:07:39] AFR 이탈 488900 sid=SCALP name=scalp_re px=7610 alert=1045500200I +[13:07:39] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7610 alert=1045500200I +[13:07:39] 💾 [SCALP] universe=92 saved=92 +[13:07:39] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:07:42] AFR 이탈 023800 sid=SCALP name=scalp_re px=5330 alert=1045500200I +[13:07:42] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5330 alert=1045500200I +[13:07:42] 💾 [SCALP] universe=91 saved=91 +[13:07:42] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:07:43] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[13:07:43] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[13:07:43] 💾 [SCALP] universe=92 saved=92 +[13:07:43] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:07:49] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:07:49] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:07:49] 💾 [SCALP] universe=91 saved=91 +[13:07:49] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:07:54] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:07:54] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:07:54] 💾 [SCALP] universe=90 saved=90 +[13:07:54] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:08:01] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[13:08:01] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[13:08:02] 💾 [SCALP] universe=91 saved=91 +[13:08:02] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:08:05] AFR 재진입 090460 sid=SCALP name=scalp_re px=16060 alert=1045500200I +[13:08:05] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16060 alert=1045500200I +[13:08:05] 💾 [SCALP] universe=92 saved=92 +[13:08:05] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:08:09] AFR 이탈 122310 sid=SCALP name=scalp_re px=3545 alert=1045500200I +[13:08:09] [ls_cond_hist] AFR 이탈 122310 sid=SCALP name=scalp_re px=3545 alert=1045500200I +[13:08:09] 💾 [SCALP] universe=91 saved=91 +[13:08:09] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:08:15] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:08:15] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:08:15] 💾 [SCALP] universe=90 saved=90 +[13:08:15] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:08:23] AFR 재진입 090460 sid=SCALP name=scalp_re px=16060 alert=1045500200I +[13:08:23] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16060 alert=1045500200I +[13:08:23] 💾 [SCALP] universe=91 saved=91 +[13:08:23] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:08:52] AFR 재진입 488900 sid=SCALP name=scalp_re px=7630 alert=1045500200I +[13:08:52] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7630 alert=1045500200I +[13:08:52] 💾 [SCALP] universe=92 saved=92 +[13:08:52] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:08:52] AFR 이탈 488900 sid=SCALP name=scalp_re px=7600 alert=1045500200I +[13:08:52] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7600 alert=1045500200I +[13:08:52] 💾 [SCALP] universe=91 saved=91 +[13:08:52] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:09:00] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:09:00] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:09:00] 💾 [SCALP] universe=90 saved=90 +[13:09:00] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:09:06] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[13:09:06] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[13:09:06] 💾 [SCALP] universe=91 saved=91 +[13:09:06] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:09:08] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[13:09:08] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[13:09:08] 💾 [SCALP] universe=90 saved=90 +[13:09:08] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:09:12] AFR 이탈 039010 sid=SCALP name=scalp_re px=6390 alert=1045500200I +[13:09:12] [ls_cond_hist] AFR 이탈 039010 sid=SCALP name=scalp_re px=6390 alert=1045500200I +[13:09:12] 💾 [SCALP] universe=89 saved=89 +[13:09:12] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:09:12] AFR 이탈 007690 sid=SCALP name=scalp_re px=38400 alert=1045500200I +[13:09:12] [ls_cond_hist] AFR 이탈 007690 sid=SCALP name=scalp_re px=38400 alert=1045500200I +[13:09:12] 💾 [SCALP] universe=88 saved=88 +[13:09:12] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:09:12] AFR 재진입 007690 sid=SCALP name=scalp_re px=38500 alert=1045500200I +[13:09:12] [ls_cond_hist] AFR 재진입 007690 sid=SCALP name=scalp_re px=38500 alert=1045500200I +[13:09:12] 💾 [SCALP] universe=89 saved=89 +[13:09:12] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:09:13] AFR 이탈 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[13:09:13] [ls_cond_hist] AFR 이탈 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[13:09:14] 💾 [SCALP] universe=88 saved=88 +[13:09:14] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:09:15] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:09:15] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:09:15] 💾 [SCALP] universe=87 saved=87 +[13:09:15] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:09:15] AFR 이탈 456070 sid=SCALP name=scalp_re px=5820 alert=1045500200I +[13:09:15] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5820 alert=1045500200I +[13:09:16] 💾 [SCALP] universe=86 saved=86 +[13:09:16] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:09:18] AFR 이탈 001940 sid=SCALP name=scalp_re px=25300 alert=1045500200I +[13:09:18] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25300 alert=1045500200I +[13:09:18] 💾 [SCALP] universe=85 saved=85 +[13:09:18] [ls_cond_hist] 💾 [SCALP] universe=85 saved=85 +[13:09:18] AFR 재진입 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[13:09:18] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[13:09:18] 💾 [SCALP] universe=86 saved=86 +[13:09:18] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:09:20] AFR 재진입 488900 sid=SCALP name=scalp_re px=7630 alert=1045500200I +[13:09:20] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7630 alert=1045500200I +[13:09:20] 💾 [SCALP] universe=87 saved=87 +[13:09:20] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:09:21] AFR 재진입 456070 sid=SCALP name=scalp_re px=5810 alert=1045500200I +[13:09:21] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5810 alert=1045500200I +[13:09:21] 💾 [SCALP] universe=88 saved=88 +[13:09:21] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:09:24] AFR 이탈 030530 sid=SCALP name=scalp_re px=16680 alert=1045500200I +[13:09:24] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16680 alert=1045500200I +[13:09:24] 💾 [SCALP] universe=87 saved=87 +[13:09:24] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:09:24] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:09:24] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:09:25] 💾 [SCALP] universe=86 saved=86 +[13:09:25] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:09:26] AFR 진입 048430 sid=SCALP name=scalp_re px=5630 alert=1045500200I +[13:09:26] [ls_cond_hist] AFR 진입 048430 sid=SCALP name=scalp_re px=5630 alert=1045500200I +[13:09:26] 💾 [SCALP] universe=87 saved=87 +[13:09:26] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:09:26] AFR 이탈 005950 sid=SCALP name=scalp_re px=13220 alert=1045500200I +[13:09:26] [ls_cond_hist] AFR 이탈 005950 sid=SCALP name=scalp_re px=13220 alert=1045500200I +[13:09:27] 💾 [SCALP] universe=86 saved=86 +[13:09:27] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:09:27] AFR 재진입 378340 sid=SCALP name=scalp_re px=9980 alert=1045500200I +[13:09:27] [ls_cond_hist] AFR 재진입 378340 sid=SCALP name=scalp_re px=9980 alert=1045500200I +[13:09:27] 💾 [SCALP] universe=87 saved=87 +[13:09:27] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:09:28] AFR 이탈 229640 sid=SCALP name=scalp_re px=44050 alert=1045500200I +[13:09:28] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44050 alert=1045500200I +[13:09:28] 💾 [SCALP] universe=86 saved=86 +[13:09:28] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:09:30] AFR 재진입 229640 sid=SCALP name=scalp_re px=44200 alert=1045500200I +[13:09:30] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44200 alert=1045500200I +[13:09:30] 💾 [SCALP] universe=87 saved=87 +[13:09:30] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:09:36] AFR 재진입 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[13:09:36] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[13:09:36] 💾 [SCALP] universe=88 saved=88 +[13:09:36] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:09:50] AFR 이탈 007690 sid=SCALP name=scalp_re px=38400 alert=1045500200I +[13:09:50] [ls_cond_hist] AFR 이탈 007690 sid=SCALP name=scalp_re px=38400 alert=1045500200I +[13:09:50] 💾 [SCALP] universe=87 saved=87 +[13:09:50] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:09:51] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15140 alert=1045500200I +[13:09:51] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15140 alert=1045500200I +[13:09:51] 💾 [SCALP] universe=88 saved=88 +[13:09:51] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:09:51] AFR 이탈 387570 sid=SCALP name=scalp_re px=4090 alert=1045500200I +[13:09:51] [ls_cond_hist] AFR 이탈 387570 sid=SCALP name=scalp_re px=4090 alert=1045500200I +[13:09:51] 💾 [SCALP] universe=87 saved=87 +[13:09:51] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:10:00] AFR 이탈 001940 sid=SCALP name=scalp_re px=25300 alert=1045500200I +[13:10:00] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25300 alert=1045500200I +[13:10:00] 💾 [SCALP] universe=86 saved=86 +[13:10:00] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:10:04] AFR 재진입 030530 sid=SCALP name=scalp_re px=16690 alert=1045500200I +[13:10:04] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16690 alert=1045500200I +[13:10:04] 💾 [SCALP] universe=87 saved=87 +[13:10:04] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:10:05] AFR 재진입 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[13:10:05] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[13:10:05] 💾 [SCALP] universe=88 saved=88 +[13:10:05] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:10:06] AFR 이탈 229640 sid=SCALP name=scalp_re px=44050 alert=1045500200I +[13:10:06] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44050 alert=1045500200I +[13:10:06] 💾 [SCALP] universe=87 saved=87 +[13:10:06] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:10:08] AFR 재진입 297090 sid=SCALP name=scalp_re px=3605 alert=1045500200I +[13:10:08] [ls_cond_hist] AFR 재진입 297090 sid=SCALP name=scalp_re px=3605 alert=1045500200I +[13:10:08] 💾 [SCALP] universe=88 saved=88 +[13:10:08] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:10:08] AFR 이탈 458650 sid=SCALP name=scalp_re px=7920 alert=1045500200I +[13:10:08] [ls_cond_hist] AFR 이탈 458650 sid=SCALP name=scalp_re px=7920 alert=1045500200I +[13:10:08] 💾 [SCALP] universe=87 saved=87 +[13:10:08] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:10:09] AFR 진입 388720 sid=SCALP name=scalp_re px=62200 alert=1045500200I +[13:10:09] [ls_cond_hist] AFR 진입 388720 sid=SCALP name=scalp_re px=62200 alert=1045500200I +[13:10:09] 💾 [SCALP] universe=88 saved=88 +[13:10:09] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:10:13] AFR 재진입 022100 sid=SCALP name=scalp_re px=19350 alert=1045500200I +[13:10:13] [ls_cond_hist] AFR 재진입 022100 sid=SCALP name=scalp_re px=19350 alert=1045500200I +[13:10:13] 💾 [SCALP] universe=89 saved=89 +[13:10:13] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:10:21] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:10:21] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:10:21] 💾 [SCALP] universe=88 saved=88 +[13:10:21] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:10:25] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:10:25] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:10:25] 💾 [SCALP] universe=89 saved=89 +[13:10:25] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:10:26] AFR 재진입 229640 sid=SCALP name=scalp_re px=44100 alert=1045500200I +[13:10:26] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44100 alert=1045500200I +[13:10:26] 💾 [SCALP] universe=90 saved=90 +[13:10:26] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:10:31] AFR 이탈 229640 sid=SCALP name=scalp_re px=44050 alert=1045500200I +[13:10:31] [ls_cond_hist] AFR 이탈 229640 sid=SCALP name=scalp_re px=44050 alert=1045500200I +[13:10:31] 💾 [SCALP] universe=89 saved=89 +[13:10:31] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:10:36] AFR 재진입 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:10:36] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:10:36] 💾 [SCALP] universe=90 saved=90 +[13:10:36] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:10:36] AFR 재진입 007690 sid=SCALP name=scalp_re px=38500 alert=1045500200I +[13:10:36] [ls_cond_hist] AFR 재진입 007690 sid=SCALP name=scalp_re px=38500 alert=1045500200I +[13:10:36] 💾 [SCALP] universe=91 saved=91 +[13:10:36] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:10:37] AFR 이탈 090460 sid=SCALP name=scalp_re px=16010 alert=1045500200I +[13:10:37] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16010 alert=1045500200I +[13:10:37] 💾 [SCALP] universe=90 saved=90 +[13:10:37] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:10:44] AFR 재진입 387570 sid=SCALP name=scalp_re px=4095 alert=1045500200I +[13:10:44] [ls_cond_hist] AFR 재진입 387570 sid=SCALP name=scalp_re px=4095 alert=1045500200I +[13:10:44] 💾 [SCALP] universe=91 saved=91 +[13:10:44] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:10:45] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:10:45] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:10:45] 💾 [SCALP] universe=90 saved=90 +[13:10:45] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:10:49] AFR 이탈 007690 sid=SCALP name=scalp_re px=38400 alert=1045500200I +[13:10:49] [ls_cond_hist] AFR 이탈 007690 sid=SCALP name=scalp_re px=38400 alert=1045500200I +[13:10:49] 💾 [SCALP] universe=89 saved=89 +[13:10:49] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:10:50] AFR 이탈 297090 sid=SCALP name=scalp_re px=3600 alert=1045500200I +[13:10:50] [ls_cond_hist] AFR 이탈 297090 sid=SCALP name=scalp_re px=3600 alert=1045500200I +[13:10:50] 💾 [SCALP] universe=88 saved=88 +[13:10:50] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:10:56] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:10:56] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:10:56] 💾 [SCALP] universe=89 saved=89 +[13:10:56] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:10:57] AFR 재진입 458650 sid=SCALP name=scalp_re px=7940 alert=1045500200I +[13:10:57] [ls_cond_hist] AFR 재진입 458650 sid=SCALP name=scalp_re px=7940 alert=1045500200I +[13:10:57] 💾 [SCALP] universe=90 saved=90 +[13:10:57] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:11:00] AFR 이탈 090460 sid=SCALP name=scalp_re px=16000 alert=1045500200I +[13:11:00] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16000 alert=1045500200I +[13:11:00] 💾 [SCALP] universe=89 saved=89 +[13:11:00] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:11:01] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:11:01] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:11:01] 💾 [SCALP] universe=90 saved=90 +[13:11:01] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:11:04] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[13:11:04] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[13:11:05] 💾 [SCALP] universe=91 saved=91 +[13:11:05] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:11:08] AFR 이탈 009520 sid=SCALP name=scalp_re px=10510 alert=1045500200I +[13:11:08] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10510 alert=1045500200I +[13:11:08] 💾 [SCALP] universe=90 saved=90 +[13:11:08] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:11:08] AFR 이탈 393890 sid=SCALP name=scalp_re px=7090 alert=1045500200I +[13:11:08] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7090 alert=1045500200I +[13:11:08] 💾 [SCALP] universe=89 saved=89 +[13:11:08] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:11:11] AFR 이탈 030530 sid=SCALP name=scalp_re px=16680 alert=1045500200I +[13:11:11] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16680 alert=1045500200I +[13:11:12] 💾 [SCALP] universe=88 saved=88 +[13:11:12] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:11:22] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:11:22] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:11:22] 💾 [SCALP] universe=89 saved=89 +[13:11:22] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:11:30] AFR 재진입 297090 sid=SCALP name=scalp_re px=3605 alert=1045500200I +[13:11:30] [ls_cond_hist] AFR 재진입 297090 sid=SCALP name=scalp_re px=3605 alert=1045500200I +[13:11:30] 💾 [SCALP] universe=90 saved=90 +[13:11:30] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:11:31] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:11:31] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:11:31] 💾 [SCALP] universe=89 saved=89 +[13:11:31] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:11:34] AFR 재진입 217590 sid=SCALP name=scalp_re px=12050 alert=1045500200I +[13:11:34] [ls_cond_hist] AFR 재진입 217590 sid=SCALP name=scalp_re px=12050 alert=1045500200I +[13:11:34] 💾 [SCALP] universe=90 saved=90 +[13:11:34] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:11:34] AFR 이탈 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[13:11:34] [ls_cond_hist] AFR 이탈 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[13:11:34] 💾 [SCALP] universe=89 saved=89 +[13:11:34] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:11:35] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:11:35] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:11:36] 💾 [SCALP] universe=90 saved=90 +[13:11:36] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:11:37] AFR 재진입 004430 sid=SCALP name=scalp_re px=12830 alert=1045500200I +[13:11:37] [ls_cond_hist] AFR 재진입 004430 sid=SCALP name=scalp_re px=12830 alert=1045500200I +[13:11:37] 💾 [SCALP] universe=91 saved=91 +[13:11:37] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:11:42] AFR 이탈 022100 sid=SCALP name=scalp_re px=19360 alert=1045500200I +[13:11:42] [ls_cond_hist] AFR 이탈 022100 sid=SCALP name=scalp_re px=19360 alert=1045500200I +[13:11:42] 💾 [SCALP] universe=90 saved=90 +[13:11:42] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:11:43] AFR 이탈 004365 sid=SCALP name=scalp_re px=9200 alert=1045500200I +[13:11:43] [ls_cond_hist] AFR 이탈 004365 sid=SCALP name=scalp_re px=9200 alert=1045500200I +[13:11:43] 💾 [SCALP] universe=89 saved=89 +[13:11:43] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:11:45] AFR 재진입 030530 sid=SCALP name=scalp_re px=16690 alert=1045500200I +[13:11:45] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16690 alert=1045500200I +[13:11:45] 💾 [SCALP] universe=90 saved=90 +[13:11:45] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:11:45] AFR 재진입 229640 sid=SCALP name=scalp_re px=44150 alert=1045500200I +[13:11:45] [ls_cond_hist] AFR 재진입 229640 sid=SCALP name=scalp_re px=44150 alert=1045500200I +[13:11:45] 💾 [SCALP] universe=91 saved=91 +[13:11:45] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:11:50] AFR 이탈 297090 sid=SCALP name=scalp_re px=3600 alert=1045500200I +[13:11:50] [ls_cond_hist] AFR 이탈 297090 sid=SCALP name=scalp_re px=3600 alert=1045500200I +[13:11:51] 💾 [SCALP] universe=90 saved=90 +[13:11:51] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:11:51] AFR 재진입 297090 sid=SCALP name=scalp_re px=3605 alert=1045500200I +[13:11:51] [ls_cond_hist] AFR 재진입 297090 sid=SCALP name=scalp_re px=3605 alert=1045500200I +[13:11:51] 💾 [SCALP] universe=91 saved=91 +[13:11:51] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:11:58] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[13:11:58] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[13:11:58] 💾 [SCALP] universe=90 saved=90 +[13:11:58] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:11:58] AFR 재진입 474650 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[13:11:58] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[13:11:58] 💾 [SCALP] universe=91 saved=91 +[13:11:58] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:12:00] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[13:12:00] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[13:12:01] 💾 [SCALP] universe=90 saved=90 +[13:12:01] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:12:02] AFR 이탈 090460 sid=SCALP name=scalp_re px=16000 alert=1045500200I +[13:12:02] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16000 alert=1045500200I +[13:12:02] 💾 [SCALP] universe=89 saved=89 +[13:12:02] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:12:03] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15130 alert=1045500200I +[13:12:03] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15130 alert=1045500200I +[13:12:03] 💾 [SCALP] universe=88 saved=88 +[13:12:03] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:12:03] AFR 이탈 388720 sid=SCALP name=scalp_re px=62300 alert=1045500200I +[13:12:03] [ls_cond_hist] AFR 이탈 388720 sid=SCALP name=scalp_re px=62300 alert=1045500200I +[13:12:03] 💾 [SCALP] universe=87 saved=87 +[13:12:03] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:12:04] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:12:04] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:12:04] 💾 [SCALP] universe=88 saved=88 +[13:12:04] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:12:07] AFR 이탈 004430 sid=SCALP name=scalp_re px=12860 alert=1045500200I +[13:12:07] [ls_cond_hist] AFR 이탈 004430 sid=SCALP name=scalp_re px=12860 alert=1045500200I +[13:12:07] 💾 [SCALP] universe=87 saved=87 +[13:12:07] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:12:08] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:12:08] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:12:08] 💾 [SCALP] universe=88 saved=88 +[13:12:08] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:12:08] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[13:12:08] [ls_cond_hist] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[13:12:08] 💾 [SCALP] universe=87 saved=87 +[13:12:08] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:12:10] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:12:10] [ls_cond_hist] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:12:10] 💾 [SCALP] universe=88 saved=88 +[13:12:10] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:12:15] AFR 재진입 007690 sid=SCALP name=scalp_re px=38500 alert=1045500200I +[13:12:15] [ls_cond_hist] AFR 재진입 007690 sid=SCALP name=scalp_re px=38500 alert=1045500200I +[13:12:15] 💾 [SCALP] universe=89 saved=89 +[13:12:15] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:12:28] AFR 이탈 090460 sid=SCALP name=scalp_re px=16000 alert=1045500200I +[13:12:28] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16000 alert=1045500200I +[13:12:28] 💾 [SCALP] universe=88 saved=88 +[13:12:28] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:12:37] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:12:37] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:12:38] 💾 [SCALP] universe=89 saved=89 +[13:12:38] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:12:39] AFR 이탈 458650 sid=SCALP name=scalp_re px=7920 alert=1045500200I +[13:12:39] [ls_cond_hist] AFR 이탈 458650 sid=SCALP name=scalp_re px=7920 alert=1045500200I +[13:12:40] 💾 [SCALP] universe=88 saved=88 +[13:12:40] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:12:45] AFR 재진입 005950 sid=SCALP name=scalp_re px=13230 alert=1045500200I +[13:12:45] [ls_cond_hist] AFR 재진입 005950 sid=SCALP name=scalp_re px=13230 alert=1045500200I +[13:12:45] 💾 [SCALP] universe=89 saved=89 +[13:12:45] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:12:54] AFR 이탈 048430 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[13:12:54] [ls_cond_hist] AFR 이탈 048430 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[13:12:54] 💾 [SCALP] universe=88 saved=88 +[13:12:54] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:12:54] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[13:12:54] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[13:12:54] 💾 [SCALP] universe=89 saved=89 +[13:12:54] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:12:55] AFR 이탈 297090 sid=SCALP name=scalp_re px=3600 alert=1045500200I +[13:12:55] [ls_cond_hist] AFR 이탈 297090 sid=SCALP name=scalp_re px=3600 alert=1045500200I +[13:12:55] 💾 [SCALP] universe=88 saved=88 +[13:12:55] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:13:04] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:13:04] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:13:04] 💾 [SCALP] universe=87 saved=87 +[13:13:04] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:13:09] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:13:09] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:13:09] 💾 [SCALP] universe=86 saved=86 +[13:13:09] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:13:17] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:13:17] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:13:17] 💾 [SCALP] universe=87 saved=87 +[13:13:17] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:13:17] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:13:17] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:13:17] 💾 [SCALP] universe=88 saved=88 +[13:13:17] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:13:21] AFR 이탈 005950 sid=SCALP name=scalp_re px=13190 alert=1045500200I +[13:13:21] [ls_cond_hist] AFR 이탈 005950 sid=SCALP name=scalp_re px=13190 alert=1045500200I +[13:13:21] 💾 [SCALP] universe=87 saved=87 +[13:13:21] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:13:24] AFR 이탈 030530 sid=SCALP name=scalp_re px=16680 alert=1045500200I +[13:13:24] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16680 alert=1045500200I +[13:13:24] 💾 [SCALP] universe=86 saved=86 +[13:13:24] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:13:24] AFR 재진입 030530 sid=SCALP name=scalp_re px=16690 alert=1045500200I +[13:13:24] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16690 alert=1045500200I +[13:13:25] 💾 [SCALP] universe=87 saved=87 +[13:13:25] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:13:28] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:13:28] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:13:28] 💾 [SCALP] universe=88 saved=88 +[13:13:28] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:13:32] AFR 이탈 090460 sid=SCALP name=scalp_re px=16010 alert=1045500200I +[13:13:32] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16010 alert=1045500200I +[13:13:32] 💾 [SCALP] universe=87 saved=87 +[13:13:32] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:13:33] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:13:33] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:13:33] 💾 [SCALP] universe=88 saved=88 +[13:13:33] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:13:38] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:13:38] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:13:38] 💾 [SCALP] universe=87 saved=87 +[13:13:38] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:13:38] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:13:38] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:13:38] 💾 [SCALP] universe=86 saved=86 +[13:13:38] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:13:44] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:13:44] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16030 alert=1045500200I +[13:13:44] 💾 [SCALP] universe=87 saved=87 +[13:13:44] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:13:45] AFR 재진입 023160 sid=SCALP name=scalp_re px=22850 alert=1045500200I +[13:13:45] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22850 alert=1045500200I +[13:13:45] 💾 [SCALP] universe=88 saved=88 +[13:13:45] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:13:46] AFR 이탈 387570 sid=SCALP name=scalp_re px=4100 alert=1045500200I +[13:13:46] [ls_cond_hist] AFR 이탈 387570 sid=SCALP name=scalp_re px=4100 alert=1045500200I +[13:13:46] 💾 [SCALP] universe=87 saved=87 +[13:13:46] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:13:47] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[13:13:47] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[13:13:47] 💾 [SCALP] universe=88 saved=88 +[13:13:47] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:13:47] AFR 재진입 297090 sid=SCALP name=scalp_re px=3605 alert=1045500200I +[13:13:47] [ls_cond_hist] AFR 재진입 297090 sid=SCALP name=scalp_re px=3605 alert=1045500200I +[13:13:48] 💾 [SCALP] universe=89 saved=89 +[13:13:48] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:14:06] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:14:06] [ls_cond_hist] AFR 이탈 090460 sid=SCALP name=scalp_re px=16020 alert=1045500200I +[13:14:06] 💾 [SCALP] universe=88 saved=88 +[13:14:06] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:14:08] AFR 재진입 005950 sid=SCALP name=scalp_re px=13190 alert=1045500200I +[13:14:08] [ls_cond_hist] AFR 재진입 005950 sid=SCALP name=scalp_re px=13190 alert=1045500200I +[13:14:08] 💾 [SCALP] universe=89 saved=89 +[13:14:08] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:14:11] AFR 재진입 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[13:14:11] [ls_cond_hist] AFR 재진입 090460 sid=SCALP name=scalp_re px=16040 alert=1045500200I +[13:14:11] 💾 [SCALP] universe=90 saved=90 +[13:14:11] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:14:15] AFR 이탈 005950 sid=SCALP name=scalp_re px=13180 alert=1045500200I +[13:14:15] [ls_cond_hist] AFR 이탈 005950 sid=SCALP name=scalp_re px=13180 alert=1045500200I +[13:14:15] 💾 [SCALP] universe=89 saved=89 +[13:14:15] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:14:33] AFR 진입 460860 sid=SCALP name=scalp_re px=9130 alert=1045500200I +[13:14:33] [ls_cond_hist] AFR 진입 460860 sid=SCALP name=scalp_re px=9130 alert=1045500200I +[13:14:34] 💾 [SCALP] universe=90 saved=90 +[13:14:34] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:14:45] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:14:45] [ls_cond_hist] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:14:45] 💾 [SCALP] universe=89 saved=89 +[13:14:45] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:14:59] AFR 이탈 215000 sid=SCALP name=scalp_re px=39850 alert=1045500200I +[13:14:59] [ls_cond_hist] AFR 이탈 215000 sid=SCALP name=scalp_re px=39850 alert=1045500200I +[13:14:59] 💾 [SCALP] universe=88 saved=88 +[13:14:59] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:15:12] AFR 재진입 005950 sid=SCALP name=scalp_re px=13230 alert=1045500200I +[13:15:12] [ls_cond_hist] AFR 재진입 005950 sid=SCALP name=scalp_re px=13230 alert=1045500200I +[13:15:12] 💾 [SCALP] universe=89 saved=89 +[13:15:12] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:15:12] AFR 이탈 460860 sid=SCALP name=scalp_re px=9120 alert=1045500200I +[13:15:12] [ls_cond_hist] AFR 이탈 460860 sid=SCALP name=scalp_re px=9120 alert=1045500200I +[13:15:13] 💾 [SCALP] universe=88 saved=88 +[13:15:13] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:15:13] AFR 이탈 488900 sid=SCALP name=scalp_re px=7610 alert=1045500200I +[13:15:13] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7610 alert=1045500200I +[13:15:13] 💾 [SCALP] universe=87 saved=87 +[13:15:13] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:15:15] AFR 이탈 005950 sid=SCALP name=scalp_re px=13190 alert=1045500200I +[13:15:15] [ls_cond_hist] AFR 이탈 005950 sid=SCALP name=scalp_re px=13190 alert=1045500200I +[13:15:15] 💾 [SCALP] universe=86 saved=86 +[13:15:15] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:15:15] AFR 재진입 005950 sid=SCALP name=scalp_re px=13300 alert=1045500200I +[13:15:15] [ls_cond_hist] AFR 재진입 005950 sid=SCALP name=scalp_re px=13300 alert=1045500200I +[13:15:15] 💾 [SCALP] universe=87 saved=87 +[13:15:15] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:15:44] AFR 재진입 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[13:15:44] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[13:15:44] 💾 [SCALP] universe=88 saved=88 +[13:15:44] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:15:44] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:15:44] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:15:44] 💾 [SCALP] universe=87 saved=87 +[13:15:44] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:15:53] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:15:53] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:15:53] 💾 [SCALP] universe=86 saved=86 +[13:15:53] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:15:56] AFR 재진입 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[13:15:56] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[13:15:56] 💾 [SCALP] universe=87 saved=87 +[13:15:56] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:15:56] AFR 재진입 460860 sid=SCALP name=scalp_re px=9130 alert=1045500200I +[13:15:56] [ls_cond_hist] AFR 재진입 460860 sid=SCALP name=scalp_re px=9130 alert=1045500200I +[13:15:56] 💾 [SCALP] universe=88 saved=88 +[13:15:56] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:16:24] AFR 이탈 460860 sid=SCALP name=scalp_re px=9120 alert=1045500200I +[13:16:24] [ls_cond_hist] AFR 이탈 460860 sid=SCALP name=scalp_re px=9120 alert=1045500200I +[13:16:24] 💾 [SCALP] universe=87 saved=87 +[13:16:24] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:16:28] AFR 재진입 460860 sid=SCALP name=scalp_re px=9140 alert=1045500200I +[13:16:28] [ls_cond_hist] AFR 재진입 460860 sid=SCALP name=scalp_re px=9140 alert=1045500200I +[13:16:29] 💾 [SCALP] universe=88 saved=88 +[13:16:29] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:16:40] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[13:16:40] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7120 alert=1045500200I +[13:16:40] 💾 [SCALP] universe=89 saved=89 +[13:16:40] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:16:45] AFR 재진입 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:16:45] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:16:45] 💾 [SCALP] universe=90 saved=90 +[13:16:45] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:16:45] AFR 이탈 064850 sid=SCALP name=scalp_re px=18420 alert=1045500200I +[13:16:45] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18420 alert=1045500200I +[13:16:45] 💾 [SCALP] universe=89 saved=89 +[13:16:45] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:16:45] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:16:45] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:16:46] 💾 [SCALP] universe=88 saved=88 +[13:16:46] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:16:48] AFR 재진입 005010 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[13:16:48] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[13:16:48] 💾 [SCALP] universe=89 saved=89 +[13:16:48] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:16:51] AFR 재진입 488900 sid=SCALP name=scalp_re px=7630 alert=1045500200I +[13:16:51] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7630 alert=1045500200I +[13:16:52] 💾 [SCALP] universe=90 saved=90 +[13:16:52] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:16:53] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[13:16:53] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40050 alert=1045500200I +[13:16:53] 💾 [SCALP] universe=91 saved=91 +[13:16:53] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:16:59] AFR 이탈 488900 sid=SCALP name=scalp_re px=7620 alert=1045500200I +[13:16:59] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7620 alert=1045500200I +[13:16:59] 💾 [SCALP] universe=90 saved=90 +[13:16:59] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:17:00] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15150 alert=1045500200I +[13:17:00] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15150 alert=1045500200I +[13:17:00] 💾 [SCALP] universe=91 saved=91 +[13:17:00] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:17:03] AFR 재진입 387570 sid=SCALP name=scalp_re px=4095 alert=1045500200I +[13:17:03] [ls_cond_hist] AFR 재진입 387570 sid=SCALP name=scalp_re px=4095 alert=1045500200I +[13:17:03] 💾 [SCALP] universe=92 saved=92 +[13:17:03] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:17:05] AFR 이탈 285130 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[13:17:05] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[13:17:05] 💾 [SCALP] universe=91 saved=91 +[13:17:05] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:17:06] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[13:17:06] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[13:17:06] 💾 [SCALP] universe=90 saved=90 +[13:17:06] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:17:06] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:17:06] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=40000 alert=1045500200I +[13:17:06] 💾 [SCALP] universe=91 saved=91 +[13:17:06] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:17:13] AFR 이탈 338840 sid=SCALP name=scalp_re px=9380 alert=1045500200I +[13:17:13] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9380 alert=1045500200I +[13:17:13] 💾 [SCALP] universe=90 saved=90 +[13:17:13] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:17:46] AFR 재진입 338840 sid=SCALP name=scalp_re px=9290 alert=1045500200I +[13:17:46] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9290 alert=1045500200I +[13:17:46] 💾 [SCALP] universe=91 saved=91 +[13:17:46] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:17:52] AFR 재진입 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[13:17:52] [ls_cond_hist] AFR 재진입 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[13:17:52] 💾 [SCALP] universe=92 saved=92 +[13:17:52] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:17:53] AFR 재진입 488900 sid=SCALP name=scalp_re px=7640 alert=1045500200I +[13:17:53] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7640 alert=1045500200I +[13:17:53] 💾 [SCALP] universe=93 saved=93 +[13:17:53] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:18:00] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:18:00] [ls_cond_hist] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:18:00] 💾 [SCALP] universe=94 saved=94 +[13:18:00] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:18:07] AFR 이탈 411080 sid=SCALP name=scalp_re px=3845 alert=1045500200I +[13:18:07] [ls_cond_hist] AFR 이탈 411080 sid=SCALP name=scalp_re px=3845 alert=1045500200I +[13:18:07] 💾 [SCALP] universe=93 saved=93 +[13:18:07] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:18:26] AFR 이탈 005010 sid=SCALP name=scalp_re px=3715 alert=1045500200I +[13:18:26] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3715 alert=1045500200I +[13:18:26] 💾 [SCALP] universe=92 saved=92 +[13:18:26] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:18:47] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22500 alert=1045500200I +[13:18:47] [ls_cond_hist] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22500 alert=1045500200I +[13:18:47] 💾 [SCALP] universe=91 saved=91 +[13:18:47] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:18:53] AFR 이탈 331920 sid=SCALP name=scalp_re px=9350 alert=1045500200I +[13:18:53] [ls_cond_hist] AFR 이탈 331920 sid=SCALP name=scalp_re px=9350 alert=1045500200I +[13:18:53] 💾 [SCALP] universe=90 saved=90 +[13:18:53] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:19:00] AFR 재진입 331920 sid=SCALP name=scalp_re px=9250 alert=1045500200I +[13:19:00] [ls_cond_hist] AFR 재진입 331920 sid=SCALP name=scalp_re px=9250 alert=1045500200I +[13:19:00] 💾 [SCALP] universe=91 saved=91 +[13:19:00] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:19:25] AFR 이탈 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[13:19:25] [ls_cond_hist] AFR 이탈 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[13:19:25] 💾 [SCALP] universe=90 saved=90 +[13:19:25] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:19:30] AFR 이탈 338840 sid=SCALP name=scalp_re px=9320 alert=1045500200I +[13:19:30] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9320 alert=1045500200I +[13:19:30] 💾 [SCALP] universe=89 saved=89 +[13:19:30] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:19:38] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[13:19:38] [ls_cond_hist] AFR 재진입 290550 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[13:19:38] 💾 [SCALP] universe=90 saved=90 +[13:19:38] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:19:42] AFR 재진입 338840 sid=SCALP name=scalp_re px=9250 alert=1045500200I +[13:19:42] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9250 alert=1045500200I +[13:19:42] 💾 [SCALP] universe=91 saved=91 +[13:19:42] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:19:45] AFR 이탈 403550 sid=SCALP name=scalp_re px=9660 alert=1045500200I +[13:19:45] [ls_cond_hist] AFR 이탈 403550 sid=SCALP name=scalp_re px=9660 alert=1045500200I +[13:19:45] 💾 [SCALP] universe=90 saved=90 +[13:19:45] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:19:49] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[13:19:49] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[13:19:50] 💾 [SCALP] universe=89 saved=89 +[13:19:50] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:19:52] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[13:19:52] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[13:19:52] 💾 [SCALP] universe=90 saved=90 +[13:19:52] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:19:53] AFR 이탈 488900 sid=SCALP name=scalp_re px=7620 alert=1045500200I +[13:19:53] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7620 alert=1045500200I +[13:19:53] 💾 [SCALP] universe=89 saved=89 +[13:19:53] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:20:01] AFR 이탈 338840 sid=SCALP name=scalp_re px=9360 alert=1045500200I +[13:20:01] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9360 alert=1045500200I +[13:20:01] 💾 [SCALP] universe=88 saved=88 +[13:20:01] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:20:03] AFR 이탈 041910 sid=SCALP name=scalp_re px=5530 alert=1045500200I +[13:20:03] [ls_cond_hist] AFR 이탈 041910 sid=SCALP name=scalp_re px=5530 alert=1045500200I +[13:20:03] 💾 [SCALP] universe=87 saved=87 +[13:20:03] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:20:07] AFR 재진입 064850 sid=SCALP name=scalp_re px=18500 alert=1045500200I +[13:20:07] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18500 alert=1045500200I +[13:20:07] 💾 [SCALP] universe=88 saved=88 +[13:20:07] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:20:09] AFR 재진입 488900 sid=SCALP name=scalp_re px=7660 alert=1045500200I +[13:20:09] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7660 alert=1045500200I +[13:20:09] 💾 [SCALP] universe=89 saved=89 +[13:20:09] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:20:15] AFR 재진입 338840 sid=SCALP name=scalp_re px=9250 alert=1045500200I +[13:20:15] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9250 alert=1045500200I +[13:20:15] 💾 [SCALP] universe=90 saved=90 +[13:20:15] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:20:32] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22300 alert=1045500200I +[13:20:32] [ls_cond_hist] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22300 alert=1045500200I +[13:20:32] 💾 [SCALP] universe=91 saved=91 +[13:20:32] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:20:34] AFR 재진입 000225 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[13:20:34] [ls_cond_hist] AFR 재진입 000225 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[13:20:34] 💾 [SCALP] universe=92 saved=92 +[13:20:34] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:20:38] AFR 이탈 105740 sid=SCALP name=scalp_re px=6990 alert=1045500200I +[13:20:38] [ls_cond_hist] AFR 이탈 105740 sid=SCALP name=scalp_re px=6990 alert=1045500200I +[13:20:38] 💾 [SCALP] universe=91 saved=91 +[13:20:38] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:20:44] AFR 재진입 411080 sid=SCALP name=scalp_re px=3820 alert=1045500200I +[13:20:44] [ls_cond_hist] AFR 재진입 411080 sid=SCALP name=scalp_re px=3820 alert=1045500200I +[13:20:44] 💾 [SCALP] universe=92 saved=92 +[13:20:44] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:20:57] AFR 이탈 064850 sid=SCALP name=scalp_re px=18400 alert=1045500200I +[13:20:57] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18400 alert=1045500200I +[13:20:57] 💾 [SCALP] universe=91 saved=91 +[13:20:57] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:20:58] AFR 재진입 064850 sid=SCALP name=scalp_re px=18500 alert=1045500200I +[13:20:58] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18500 alert=1045500200I +[13:20:59] 💾 [SCALP] universe=92 saved=92 +[13:20:59] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:21:01] AFR 이탈 051600 sid=SCALP name=scalp_re px=47050 alert=1045500200I +[13:21:01] [ls_cond_hist] AFR 이탈 051600 sid=SCALP name=scalp_re px=47050 alert=1045500200I +[13:21:02] 💾 [SCALP] universe=91 saved=91 +[13:21:02] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:21:02] AFR 이탈 338840 sid=SCALP name=scalp_re px=9360 alert=1045500200I +[13:21:02] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9360 alert=1045500200I +[13:21:02] 💾 [SCALP] universe=90 saved=90 +[13:21:02] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:21:03] AFR 이탈 181710 sid=SCALP name=scalp_re px=39400 alert=1045500200I +[13:21:03] [ls_cond_hist] AFR 이탈 181710 sid=SCALP name=scalp_re px=39400 alert=1045500200I +[13:21:03] 💾 [SCALP] universe=89 saved=89 +[13:21:03] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:21:15] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22500 alert=1045500200I +[13:21:15] [ls_cond_hist] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22500 alert=1045500200I +[13:21:15] 💾 [SCALP] universe=88 saved=88 +[13:21:15] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:21:17] AFR 이탈 064850 sid=SCALP name=scalp_re px=18400 alert=1045500200I +[13:21:17] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=18400 alert=1045500200I +[13:21:17] 💾 [SCALP] universe=87 saved=87 +[13:21:17] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:21:26] AFR 이탈 488900 sid=SCALP name=scalp_re px=7630 alert=1045500200I +[13:21:26] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7630 alert=1045500200I +[13:21:26] 💾 [SCALP] universe=86 saved=86 +[13:21:26] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:21:30] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22300 alert=1045500200I +[13:21:30] [ls_cond_hist] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22300 alert=1045500200I +[13:21:30] 💾 [SCALP] universe=87 saved=87 +[13:21:30] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:21:37] AFR 재진입 488900 sid=SCALP name=scalp_re px=7670 alert=1045500200I +[13:21:37] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7670 alert=1045500200I +[13:21:37] 💾 [SCALP] universe=88 saved=88 +[13:21:37] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:21:46] AFR 재진입 064850 sid=SCALP name=scalp_re px=18500 alert=1045500200I +[13:21:46] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18500 alert=1045500200I +[13:21:46] 💾 [SCALP] universe=89 saved=89 +[13:21:46] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:21:51] AFR 재진입 005010 sid=SCALP name=scalp_re px=3715 alert=1045500200I +[13:21:51] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3715 alert=1045500200I +[13:21:51] 💾 [SCALP] universe=90 saved=90 +[13:21:51] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:22:04] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:22:04] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:22:04] 💾 [SCALP] universe=89 saved=89 +[13:22:04] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:22:11] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[13:22:11] [ls_cond_hist] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[13:22:11] 💾 [SCALP] universe=90 saved=90 +[13:22:11] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:22:34] AFR 재진입 181710 sid=SCALP name=scalp_re px=39250 alert=1045500200I +[13:22:34] [ls_cond_hist] AFR 재진입 181710 sid=SCALP name=scalp_re px=39250 alert=1045500200I +[13:22:34] 💾 [SCALP] universe=91 saved=91 +[13:22:34] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:22:43] AFR 이탈 317830 sid=SCALP name=scalp_re px=4550 alert=1045500200I +[13:22:43] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4550 alert=1045500200I +[13:22:43] 💾 [SCALP] universe=90 saved=90 +[13:22:43] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:22:46] AFR 재진입 458650 sid=SCALP name=scalp_re px=7950 alert=1045500200I +[13:22:46] [ls_cond_hist] AFR 재진입 458650 sid=SCALP name=scalp_re px=7950 alert=1045500200I +[13:22:46] 💾 [SCALP] universe=91 saved=91 +[13:22:46] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:22:52] AFR 이탈 005010 sid=SCALP name=scalp_re px=3710 alert=1045500200I +[13:22:52] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3710 alert=1045500200I +[13:22:52] 💾 [SCALP] universe=90 saved=90 +[13:22:52] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:23:19] AFR 이탈 387570 sid=SCALP name=scalp_re px=4100 alert=1045500200I +[13:23:19] [ls_cond_hist] AFR 이탈 387570 sid=SCALP name=scalp_re px=4100 alert=1045500200I +[13:23:19] 💾 [SCALP] universe=89 saved=89 +[13:23:19] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:23:35] AFR 재진입 387570 sid=SCALP name=scalp_re px=4095 alert=1045500200I +[13:23:35] [ls_cond_hist] AFR 재진입 387570 sid=SCALP name=scalp_re px=4095 alert=1045500200I +[13:23:35] 💾 [SCALP] universe=90 saved=90 +[13:23:35] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:23:48] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:23:48] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:23:48] 💾 [SCALP] universe=89 saved=89 +[13:23:48] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:23:54] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[13:23:54] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[13:23:54] 💾 [SCALP] universe=88 saved=88 +[13:23:54] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:24:00] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[13:24:00] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[13:24:00] 💾 [SCALP] universe=89 saved=89 +[13:24:00] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:24:01] AFR 이탈 181710 sid=SCALP name=scalp_re px=39350 alert=1045500200I +[13:24:01] [ls_cond_hist] AFR 이탈 181710 sid=SCALP name=scalp_re px=39350 alert=1045500200I +[13:24:01] 💾 [SCALP] universe=88 saved=88 +[13:24:01] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:24:03] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[13:24:03] [ls_cond_hist] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[13:24:03] 💾 [SCALP] universe=87 saved=87 +[13:24:03] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:24:09] AFR 재진입 101140 sid=SCALP name=scalp_re px=5230 alert=1045500200I +[13:24:09] [ls_cond_hist] AFR 재진입 101140 sid=SCALP name=scalp_re px=5230 alert=1045500200I +[13:24:09] 💾 [SCALP] universe=88 saved=88 +[13:24:09] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:24:10] AFR 재진입 181710 sid=SCALP name=scalp_re px=39300 alert=1045500200I +[13:24:10] [ls_cond_hist] AFR 재진입 181710 sid=SCALP name=scalp_re px=39300 alert=1045500200I +[13:24:10] 💾 [SCALP] universe=89 saved=89 +[13:24:10] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:24:16] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[13:24:16] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[13:24:16] 💾 [SCALP] universe=88 saved=88 +[13:24:16] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:24:35] AFR 이탈 488900 sid=SCALP name=scalp_re px=7620 alert=1045500200I +[13:24:35] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7620 alert=1045500200I +[13:24:35] 💾 [SCALP] universe=87 saved=87 +[13:24:35] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:24:46] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[13:24:46] [ls_cond_hist] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[13:24:46] 💾 [SCALP] universe=88 saved=88 +[13:24:46] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:24:50] AFR 이탈 411080 sid=SCALP name=scalp_re px=3850 alert=1045500200I +[13:24:50] [ls_cond_hist] AFR 이탈 411080 sid=SCALP name=scalp_re px=3850 alert=1045500200I +[13:24:50] 💾 [SCALP] universe=87 saved=87 +[13:24:50] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:24:53] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[13:24:53] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[13:24:53] 💾 [SCALP] universe=88 saved=88 +[13:24:53] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:24:55] AFR 이탈 387570 sid=SCALP name=scalp_re px=4090 alert=1045500200I +[13:24:55] [ls_cond_hist] AFR 이탈 387570 sid=SCALP name=scalp_re px=4090 alert=1045500200I +[13:24:55] 💾 [SCALP] universe=87 saved=87 +[13:24:55] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:25:03] AFR 재진입 387570 sid=SCALP name=scalp_re px=4095 alert=1045500200I +[13:25:03] [ls_cond_hist] AFR 재진입 387570 sid=SCALP name=scalp_re px=4095 alert=1045500200I +[13:25:03] 💾 [SCALP] universe=88 saved=88 +[13:25:03] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:25:04] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[13:25:04] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[13:25:05] 💾 [SCALP] universe=87 saved=87 +[13:25:05] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:25:05] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[13:25:05] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[13:25:05] 💾 [SCALP] universe=88 saved=88 +[13:25:05] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:25:08] AFR 진입 083650 sid=SCALP name=scalp_re px=43800 alert=1045500200I +[13:25:08] [ls_cond_hist] AFR 진입 083650 sid=SCALP name=scalp_re px=43800 alert=1045500200I +[13:25:08] 💾 [SCALP] universe=89 saved=89 +[13:25:08] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:25:13] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:25:13] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:25:13] 💾 [SCALP] universe=88 saved=88 +[13:25:13] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:25:20] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:25:20] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:25:20] 💾 [SCALP] universe=89 saved=89 +[13:25:20] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:25:21] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:25:21] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:25:21] 💾 [SCALP] universe=88 saved=88 +[13:25:21] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:25:45] AFR 이탈 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[13:25:45] [ls_cond_hist] AFR 이탈 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[13:25:45] 💾 [SCALP] universe=87 saved=87 +[13:25:45] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:25:47] AFR 재진입 005010 sid=SCALP name=scalp_re px=3705 alert=1045500200I +[13:25:47] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3705 alert=1045500200I +[13:25:47] 💾 [SCALP] universe=88 saved=88 +[13:25:47] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:25:51] AFR 이탈 101140 sid=SCALP name=scalp_re px=5270 alert=1045500200I +[13:25:51] [ls_cond_hist] AFR 이탈 101140 sid=SCALP name=scalp_re px=5270 alert=1045500200I +[13:25:52] 💾 [SCALP] universe=87 saved=87 +[13:25:52] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:26:11] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22300 alert=1045500200I +[13:26:11] [ls_cond_hist] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22300 alert=1045500200I +[13:26:11] 💾 [SCALP] universe=88 saved=88 +[13:26:11] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:26:15] AFR 재진입 338840 sid=SCALP name=scalp_re px=9270 alert=1045500200I +[13:26:15] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9270 alert=1045500200I +[13:26:15] 💾 [SCALP] universe=89 saved=89 +[13:26:15] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:26:24] AFR 이탈 016250 sid=SCALP name=scalp_re px=11800 alert=1045500200I +[13:26:24] [ls_cond_hist] AFR 이탈 016250 sid=SCALP name=scalp_re px=11800 alert=1045500200I +[13:26:24] 💾 [SCALP] universe=88 saved=88 +[13:26:24] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:26:39] AFR 재진입 488900 sid=SCALP name=scalp_re px=7670 alert=1045500200I +[13:26:39] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7670 alert=1045500200I +[13:26:39] 💾 [SCALP] universe=89 saved=89 +[13:26:39] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:26:41] AFR 이탈 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[13:26:41] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[13:26:41] 💾 [SCALP] universe=88 saved=88 +[13:26:41] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:26:41] AFR 재진입 059270 sid=SCALP name=scalp_re px=5210 alert=1045500200I +[13:26:41] [ls_cond_hist] AFR 재진입 059270 sid=SCALP name=scalp_re px=5210 alert=1045500200I +[13:26:41] 💾 [SCALP] universe=89 saved=89 +[13:26:41] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:26:44] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[13:26:44] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[13:26:45] 💾 [SCALP] universe=88 saved=88 +[13:26:45] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:26:45] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[13:26:45] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[13:26:45] 💾 [SCALP] universe=89 saved=89 +[13:26:45] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:26:49] AFR 재진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[13:26:49] [ls_cond_hist] AFR 재진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[13:26:49] 💾 [SCALP] universe=90 saved=90 +[13:26:49] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:26:54] AFR 재진입 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[13:26:54] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4535 alert=1045500200I +[13:26:54] 💾 [SCALP] universe=91 saved=91 +[13:26:54] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:26:56] AFR 이탈 156100 sid=SCALP name=scalp_re px=3960 alert=1045500200I +[13:26:56] [ls_cond_hist] AFR 이탈 156100 sid=SCALP name=scalp_re px=3960 alert=1045500200I +[13:26:56] 💾 [SCALP] universe=90 saved=90 +[13:26:56] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:27:01] AFR 이탈 338840 sid=SCALP name=scalp_re px=9330 alert=1045500200I +[13:27:01] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9330 alert=1045500200I +[13:27:01] 💾 [SCALP] universe=89 saved=89 +[13:27:01] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:27:01] AFR 이탈 181710 sid=SCALP name=scalp_re px=39350 alert=1045500200I +[13:27:01] [ls_cond_hist] AFR 이탈 181710 sid=SCALP name=scalp_re px=39350 alert=1045500200I +[13:27:01] 💾 [SCALP] universe=88 saved=88 +[13:27:01] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:27:02] AFR 재진입 016250 sid=SCALP name=scalp_re px=11680 alert=1045500200I +[13:27:02] [ls_cond_hist] AFR 재진입 016250 sid=SCALP name=scalp_re px=11680 alert=1045500200I +[13:27:02] 💾 [SCALP] universe=89 saved=89 +[13:27:02] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:27:11] AFR 재진입 338840 sid=SCALP name=scalp_re px=9230 alert=1045500200I +[13:27:11] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9230 alert=1045500200I +[13:27:12] 💾 [SCALP] universe=90 saved=90 +[13:27:12] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:27:14] AFR 재진입 004430 sid=SCALP name=scalp_re px=12830 alert=1045500200I +[13:27:14] [ls_cond_hist] AFR 재진입 004430 sid=SCALP name=scalp_re px=12830 alert=1045500200I +[13:27:14] 💾 [SCALP] universe=91 saved=91 +[13:27:14] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:27:18] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:27:18] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:27:18] 💾 [SCALP] universe=90 saved=90 +[13:27:18] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:27:21] AFR 재진입 181710 sid=SCALP name=scalp_re px=39300 alert=1045500200I +[13:27:21] [ls_cond_hist] AFR 재진입 181710 sid=SCALP name=scalp_re px=39300 alert=1045500200I +[13:27:21] 💾 [SCALP] universe=91 saved=91 +[13:27:21] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:27:28] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:27:28] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:27:28] 💾 [SCALP] universe=90 saved=90 +[13:27:28] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:27:33] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:27:33] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:27:33] 💾 [SCALP] universe=91 saved=91 +[13:27:33] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:27:35] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:27:35] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:27:35] 💾 [SCALP] universe=90 saved=90 +[13:27:35] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:27:54] AFR 진입 088340 sid=SCALP name=scalp_re px=6730 alert=1045500200I +[13:27:54] [ls_cond_hist] AFR 진입 088340 sid=SCALP name=scalp_re px=6730 alert=1045500200I +[13:27:54] 💾 [SCALP] universe=91 saved=91 +[13:27:54] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:27:54] AFR 이탈 250000 sid=SCALP name=scalp_re px=5190 alert=1045500200I +[13:27:54] [ls_cond_hist] AFR 이탈 250000 sid=SCALP name=scalp_re px=5190 alert=1045500200I +[13:27:54] 💾 [SCALP] universe=90 saved=90 +[13:27:54] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:28:01] AFR 재진입 156100 sid=SCALP name=scalp_re px=3965 alert=1045500200I +[13:28:01] [ls_cond_hist] AFR 재진입 156100 sid=SCALP name=scalp_re px=3965 alert=1045500200I +[13:28:01] 💾 [SCALP] universe=91 saved=91 +[13:28:01] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:28:04] AFR 이탈 181710 sid=SCALP name=scalp_re px=39400 alert=1045500200I +[13:28:04] [ls_cond_hist] AFR 이탈 181710 sid=SCALP name=scalp_re px=39400 alert=1045500200I +[13:28:04] 💾 [SCALP] universe=90 saved=90 +[13:28:04] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:28:05] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[13:28:05] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[13:28:05] 💾 [SCALP] universe=91 saved=91 +[13:28:05] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:28:06] AFR 이탈 004430 sid=SCALP name=scalp_re px=12850 alert=1045500200I +[13:28:06] [ls_cond_hist] AFR 이탈 004430 sid=SCALP name=scalp_re px=12850 alert=1045500200I +[13:28:06] 💾 [SCALP] universe=90 saved=90 +[13:28:06] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:28:07] AFR 진입 353810 sid=SCALP name=scalp_re px=6150 alert=1045500200I +[13:28:07] [ls_cond_hist] AFR 진입 353810 sid=SCALP name=scalp_re px=6150 alert=1045500200I +[13:28:07] 💾 [SCALP] universe=91 saved=91 +[13:28:07] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:28:09] AFR 이탈 155660 sid=SCALP name=scalp_re px=4590 alert=1045500200I +[13:28:09] [ls_cond_hist] AFR 이탈 155660 sid=SCALP name=scalp_re px=4590 alert=1045500200I +[13:28:09] 💾 [SCALP] universe=90 saved=90 +[13:28:09] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:28:10] AFR 재진입 155660 sid=SCALP name=scalp_re px=4595 alert=1045500200I +[13:28:10] [ls_cond_hist] AFR 재진입 155660 sid=SCALP name=scalp_re px=4595 alert=1045500200I +[13:28:10] 💾 [SCALP] universe=91 saved=91 +[13:28:10] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:28:16] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:28:16] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:28:17] 💾 [SCALP] universe=92 saved=92 +[13:28:17] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:28:17] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:28:17] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:28:17] 💾 [SCALP] universe=91 saved=91 +[13:28:17] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:28:19] AFR 이탈 156100 sid=SCALP name=scalp_re px=3955 alert=1045500200I +[13:28:19] [ls_cond_hist] AFR 이탈 156100 sid=SCALP name=scalp_re px=3955 alert=1045500200I +[13:28:19] 💾 [SCALP] universe=90 saved=90 +[13:28:19] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:28:25] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:28:25] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:28:25] 💾 [SCALP] universe=91 saved=91 +[13:28:25] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:28:33] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:28:33] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:28:33] 💾 [SCALP] universe=90 saved=90 +[13:28:33] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:28:42] AFR 재진입 181710 sid=SCALP name=scalp_re px=39300 alert=1045500200I +[13:28:42] [ls_cond_hist] AFR 재진입 181710 sid=SCALP name=scalp_re px=39300 alert=1045500200I +[13:28:42] 💾 [SCALP] universe=91 saved=91 +[13:28:42] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:28:51] AFR 이탈 353810 sid=SCALP name=scalp_re px=6100 alert=1045500200I +[13:28:51] [ls_cond_hist] AFR 이탈 353810 sid=SCALP name=scalp_re px=6100 alert=1045500200I +[13:28:51] 💾 [SCALP] universe=90 saved=90 +[13:28:51] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:28:57] AFR 재진입 156100 sid=SCALP name=scalp_re px=3955 alert=1045500200I +[13:28:57] [ls_cond_hist] AFR 재진입 156100 sid=SCALP name=scalp_re px=3955 alert=1045500200I +[13:28:57] 💾 [SCALP] universe=91 saved=91 +[13:28:57] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:29:05] AFR 이탈 156100 sid=SCALP name=scalp_re px=3945 alert=1045500200I +[13:29:05] [ls_cond_hist] AFR 이탈 156100 sid=SCALP name=scalp_re px=3945 alert=1045500200I +[13:29:05] 💾 [SCALP] universe=90 saved=90 +[13:29:05] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:29:16] AFR 재진입 156100 sid=SCALP name=scalp_re px=3945 alert=1045500200I +[13:29:16] [ls_cond_hist] AFR 재진입 156100 sid=SCALP name=scalp_re px=3945 alert=1045500200I +[13:29:16] 💾 [SCALP] universe=91 saved=91 +[13:29:16] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:29:29] AFR 이탈 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[13:29:29] [ls_cond_hist] AFR 이탈 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[13:29:29] 💾 [SCALP] universe=90 saved=90 +[13:29:29] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:29:31] AFR 재진입 059270 sid=SCALP name=scalp_re px=5240 alert=1045500200I +[13:29:31] [ls_cond_hist] AFR 재진입 059270 sid=SCALP name=scalp_re px=5240 alert=1045500200I +[13:29:31] 💾 [SCALP] universe=91 saved=91 +[13:29:31] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:29:37] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:29:37] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:29:37] 💾 [SCALP] universe=92 saved=92 +[13:29:37] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:29:42] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:29:42] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:29:42] 💾 [SCALP] universe=91 saved=91 +[13:29:42] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:29:46] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:29:46] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:29:46] 💾 [SCALP] universe=90 saved=90 +[13:29:46] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:29:46] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:29:46] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:29:46] 💾 [SCALP] universe=91 saved=91 +[13:29:46] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:29:47] AFR 재진입 285130 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[13:29:47] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[13:29:47] 💾 [SCALP] universe=92 saved=92 +[13:29:47] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:29:48] AFR 재진입 009520 sid=SCALP name=scalp_re px=10530 alert=1045500200I +[13:29:48] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10530 alert=1045500200I +[13:29:48] 💾 [SCALP] universe=93 saved=93 +[13:29:48] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:29:48] AFR 재진입 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[13:29:48] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[13:29:48] 💾 [SCALP] universe=94 saved=94 +[13:29:48] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:30:05] AFR 이탈 488900 sid=SCALP name=scalp_re px=7620 alert=1045500200I +[13:30:05] [ls_cond_hist] AFR 이탈 488900 sid=SCALP name=scalp_re px=7620 alert=1045500200I +[13:30:05] 💾 [SCALP] universe=93 saved=93 +[13:30:05] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:30:06] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[13:30:06] [ls_cond_hist] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[13:30:06] 💾 [SCALP] universe=94 saved=94 +[13:30:06] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:30:07] AFR 이탈 181710 sid=SCALP name=scalp_re px=39350 alert=1045500200I +[13:30:07] [ls_cond_hist] AFR 이탈 181710 sid=SCALP name=scalp_re px=39350 alert=1045500200I +[13:30:07] 💾 [SCALP] universe=93 saved=93 +[13:30:07] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:30:09] AFR 재진입 353810 sid=SCALP name=scalp_re px=6090 alert=1045500200I +[13:30:09] [ls_cond_hist] AFR 재진입 353810 sid=SCALP name=scalp_re px=6090 alert=1045500200I +[13:30:09] 💾 [SCALP] universe=94 saved=94 +[13:30:09] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:30:10] AFR 재진입 041910 sid=SCALP name=scalp_re px=5490 alert=1045500200I +[13:30:10] [ls_cond_hist] AFR 재진입 041910 sid=SCALP name=scalp_re px=5490 alert=1045500200I +[13:30:10] 💾 [SCALP] universe=95 saved=95 +[13:30:10] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[13:30:12] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:30:12] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:30:12] 💾 [SCALP] universe=94 saved=94 +[13:30:12] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:30:13] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:30:13] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:30:13] 💾 [SCALP] universe=93 saved=93 +[13:30:13] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:30:13] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:30:13] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:30:14] 💾 [SCALP] universe=92 saved=92 +[13:30:14] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:30:14] AFR 이탈 353810 sid=SCALP name=scalp_re px=6080 alert=1045500200I +[13:30:14] [ls_cond_hist] AFR 이탈 353810 sid=SCALP name=scalp_re px=6080 alert=1045500200I +[13:30:14] 💾 [SCALP] universe=91 saved=91 +[13:30:14] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:30:15] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:30:15] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:30:15] 💾 [SCALP] universe=92 saved=92 +[13:30:15] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:30:26] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:30:26] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:30:26] 💾 [SCALP] universe=91 saved=91 +[13:30:26] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:30:32] AFR 재진입 353810 sid=SCALP name=scalp_re px=6100 alert=1045500200I +[13:30:32] [ls_cond_hist] AFR 재진입 353810 sid=SCALP name=scalp_re px=6100 alert=1045500200I +[13:30:32] 💾 [SCALP] universe=92 saved=92 +[13:30:32] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:30:36] AFR 재진입 181710 sid=SCALP name=scalp_re px=39300 alert=1045500200I +[13:30:36] [ls_cond_hist] AFR 재진입 181710 sid=SCALP name=scalp_re px=39300 alert=1045500200I +[13:30:36] 💾 [SCALP] universe=93 saved=93 +[13:30:36] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:30:49] AFR 이탈 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[13:30:49] [ls_cond_hist] AFR 이탈 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[13:30:49] 💾 [SCALP] universe=92 saved=92 +[13:30:49] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:30:54] AFR 이탈 353810 sid=SCALP name=scalp_re px=6070 alert=1045500200I +[13:30:54] [ls_cond_hist] AFR 이탈 353810 sid=SCALP name=scalp_re px=6070 alert=1045500200I +[13:30:54] 💾 [SCALP] universe=91 saved=91 +[13:30:54] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:30:55] AFR 재진입 488900 sid=SCALP name=scalp_re px=7630 alert=1045500200I +[13:30:55] [ls_cond_hist] AFR 재진입 488900 sid=SCALP name=scalp_re px=7630 alert=1045500200I +[13:30:55] 💾 [SCALP] universe=92 saved=92 +[13:30:55] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:30:59] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:30:59] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:30:59] 💾 [SCALP] universe=91 saved=91 +[13:30:59] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:31:04] AFR 재진입 353810 sid=SCALP name=scalp_re px=6090 alert=1045500200I +[13:31:04] [ls_cond_hist] AFR 재진입 353810 sid=SCALP name=scalp_re px=6090 alert=1045500200I +[13:31:05] 💾 [SCALP] universe=92 saved=92 +[13:31:05] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:31:05] AFR 이탈 456070 sid=SCALP name=scalp_re px=5790 alert=1045500200I +[13:31:05] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5790 alert=1045500200I +[13:31:05] 💾 [SCALP] universe=91 saved=91 +[13:31:05] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:31:05] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:31:05] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:31:05] 💾 [SCALP] universe=92 saved=92 +[13:31:05] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:31:07] AFR 재진입 456070 sid=SCALP name=scalp_re px=5800 alert=1045500200I +[13:31:07] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5800 alert=1045500200I +[13:31:07] 💾 [SCALP] universe=93 saved=93 +[13:31:07] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:31:08] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[13:31:08] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[13:31:08] 💾 [SCALP] universe=92 saved=92 +[13:31:08] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:31:09] AFR 이탈 353810 sid=SCALP name=scalp_re px=6070 alert=1045500200I +[13:31:09] [ls_cond_hist] AFR 이탈 353810 sid=SCALP name=scalp_re px=6070 alert=1045500200I +[13:31:09] 💾 [SCALP] universe=91 saved=91 +[13:31:09] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:31:09] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[13:31:09] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[13:31:09] 💾 [SCALP] universe=92 saved=92 +[13:31:09] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:31:10] AFR 이탈 181710 sid=SCALP name=scalp_re px=39350 alert=1045500200I +[13:31:10] [ls_cond_hist] AFR 이탈 181710 sid=SCALP name=scalp_re px=39350 alert=1045500200I +[13:31:10] 💾 [SCALP] universe=91 saved=91 +[13:31:10] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:31:12] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:31:12] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:31:12] 💾 [SCALP] universe=90 saved=90 +[13:31:12] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:31:12] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:31:12] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:31:13] 💾 [SCALP] universe=91 saved=91 +[13:31:13] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:31:13] AFR 재진입 353810 sid=SCALP name=scalp_re px=6090 alert=1045500200I +[13:31:13] [ls_cond_hist] AFR 재진입 353810 sid=SCALP name=scalp_re px=6090 alert=1045500200I +[13:31:13] 💾 [SCALP] universe=92 saved=92 +[13:31:13] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:31:14] AFR 이탈 353810 sid=SCALP name=scalp_re px=6070 alert=1045500200I +[13:31:14] [ls_cond_hist] AFR 이탈 353810 sid=SCALP name=scalp_re px=6070 alert=1045500200I +[13:31:14] 💾 [SCALP] universe=91 saved=91 +[13:31:14] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:31:16] AFR 이탈 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[13:31:16] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[13:31:16] 💾 [SCALP] universe=90 saved=90 +[13:31:16] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:31:23] AFR 이탈 456070 sid=SCALP name=scalp_re px=5790 alert=1045500200I +[13:31:23] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5790 alert=1045500200I +[13:31:23] 💾 [SCALP] universe=89 saved=89 +[13:31:23] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:31:25] AFR 재진입 181710 sid=SCALP name=scalp_re px=39300 alert=1045500200I +[13:31:25] [ls_cond_hist] AFR 재진입 181710 sid=SCALP name=scalp_re px=39300 alert=1045500200I +[13:31:25] 💾 [SCALP] universe=90 saved=90 +[13:31:25] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:31:35] AFR 재진입 456070 sid=SCALP name=scalp_re px=5810 alert=1045500200I +[13:31:35] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5810 alert=1045500200I +[13:31:35] 💾 [SCALP] universe=91 saved=91 +[13:31:35] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:31:36] AFR 이탈 041910 sid=SCALP name=scalp_re px=5500 alert=1045500200I +[13:31:36] [ls_cond_hist] AFR 이탈 041910 sid=SCALP name=scalp_re px=5500 alert=1045500200I +[13:31:36] 💾 [SCALP] universe=90 saved=90 +[13:31:36] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:31:39] AFR 이탈 155660 sid=SCALP name=scalp_re px=4590 alert=1045500200I +[13:31:39] [ls_cond_hist] AFR 이탈 155660 sid=SCALP name=scalp_re px=4590 alert=1045500200I +[13:31:39] 💾 [SCALP] universe=89 saved=89 +[13:31:39] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:31:44] AFR 이탈 030530 sid=SCALP name=scalp_re px=16680 alert=1045500200I +[13:31:44] [ls_cond_hist] AFR 이탈 030530 sid=SCALP name=scalp_re px=16680 alert=1045500200I +[13:31:45] 💾 [SCALP] universe=88 saved=88 +[13:31:45] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:31:47] AFR 이탈 456070 sid=SCALP name=scalp_re px=5790 alert=1045500200I +[13:31:47] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5790 alert=1045500200I +[13:31:47] 💾 [SCALP] universe=87 saved=87 +[13:31:47] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:31:47] AFR 재진입 456070 sid=SCALP name=scalp_re px=5830 alert=1045500200I +[13:31:47] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5830 alert=1045500200I +[13:31:48] 💾 [SCALP] universe=88 saved=88 +[13:31:48] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:31:48] AFR 이탈 456070 sid=SCALP name=scalp_re px=5790 alert=1045500200I +[13:31:48] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5790 alert=1045500200I +[13:31:48] 💾 [SCALP] universe=87 saved=87 +[13:31:48] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:31:48] AFR 재진입 456070 sid=SCALP name=scalp_re px=5820 alert=1045500200I +[13:31:48] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5820 alert=1045500200I +[13:31:48] 💾 [SCALP] universe=88 saved=88 +[13:31:48] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:31:51] AFR 재진입 030530 sid=SCALP name=scalp_re px=16690 alert=1045500200I +[13:31:51] [ls_cond_hist] AFR 재진입 030530 sid=SCALP name=scalp_re px=16690 alert=1045500200I +[13:31:51] 💾 [SCALP] universe=89 saved=89 +[13:31:51] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:31:57] AFR 이탈 456070 sid=SCALP name=scalp_re px=5780 alert=1045500200I +[13:31:57] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5780 alert=1045500200I +[13:31:57] 💾 [SCALP] universe=88 saved=88 +[13:31:57] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:31:57] AFR 재진입 456070 sid=SCALP name=scalp_re px=5820 alert=1045500200I +[13:31:57] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5820 alert=1045500200I +[13:31:57] 💾 [SCALP] universe=89 saved=89 +[13:31:57] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:31:58] AFR 재진입 353810 sid=SCALP name=scalp_re px=6090 alert=1045500200I +[13:31:58] [ls_cond_hist] AFR 재진입 353810 sid=SCALP name=scalp_re px=6090 alert=1045500200I +[13:31:58] 💾 [SCALP] universe=90 saved=90 +[13:31:58] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:32:00] AFR 이탈 456070 sid=SCALP name=scalp_re px=5770 alert=1045500200I +[13:32:00] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5770 alert=1045500200I +[13:32:00] 💾 [SCALP] universe=89 saved=89 +[13:32:00] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:32:02] AFR 재진입 036670 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[13:32:02] [ls_cond_hist] AFR 재진입 036670 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[13:32:02] 💾 [SCALP] universe=90 saved=90 +[13:32:02] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:32:04] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:32:04] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:32:04] 💾 [SCALP] universe=89 saved=89 +[13:32:04] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:32:11] AFR 이탈 353810 sid=SCALP name=scalp_re px=6080 alert=1045500200I +[13:32:11] [ls_cond_hist] AFR 이탈 353810 sid=SCALP name=scalp_re px=6080 alert=1045500200I +[13:32:11] 💾 [SCALP] universe=88 saved=88 +[13:32:11] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:32:12] AFR 이탈 181710 sid=SCALP name=scalp_re px=39350 alert=1045500200I +[13:32:12] [ls_cond_hist] AFR 이탈 181710 sid=SCALP name=scalp_re px=39350 alert=1045500200I +[13:32:12] 💾 [SCALP] universe=87 saved=87 +[13:32:12] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:32:14] AFR 재진입 004365 sid=SCALP name=scalp_re px=9270 alert=1045500200I +[13:32:14] [ls_cond_hist] AFR 재진입 004365 sid=SCALP name=scalp_re px=9270 alert=1045500200I +[13:32:14] 💾 [SCALP] universe=88 saved=88 +[13:32:14] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:32:20] AFR 재진입 181710 sid=SCALP name=scalp_re px=39300 alert=1045500200I +[13:32:20] [ls_cond_hist] AFR 재진입 181710 sid=SCALP name=scalp_re px=39300 alert=1045500200I +[13:32:20] 💾 [SCALP] universe=89 saved=89 +[13:32:20] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:32:23] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[13:32:23] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[13:32:24] 💾 [SCALP] universe=90 saved=90 +[13:32:24] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:32:26] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:32:26] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:32:26] 💾 [SCALP] universe=91 saved=91 +[13:32:26] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:32:27] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:32:27] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:32:27] 💾 [SCALP] universe=90 saved=90 +[13:32:27] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:32:28] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:32:28] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:32:28] 💾 [SCALP] universe=89 saved=89 +[13:32:28] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:32:29] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:32:29] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:32:29] 💾 [SCALP] universe=90 saved=90 +[13:32:29] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:32:33] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[13:32:33] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[13:32:33] 💾 [SCALP] universe=91 saved=91 +[13:32:33] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:32:34] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:32:34] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:32:34] 💾 [SCALP] universe=90 saved=90 +[13:32:34] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:32:36] AFR 이탈 036670 sid=SCALP name=scalp_re px=5100 alert=1045500200I +[13:32:36] [ls_cond_hist] AFR 이탈 036670 sid=SCALP name=scalp_re px=5100 alert=1045500200I +[13:32:36] 💾 [SCALP] universe=89 saved=89 +[13:32:36] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:32:38] AFR 재진입 456070 sid=SCALP name=scalp_re px=5790 alert=1045500200I +[13:32:38] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5790 alert=1045500200I +[13:32:38] 💾 [SCALP] universe=90 saved=90 +[13:32:38] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:32:42] AFR 재진입 005010 sid=SCALP name=scalp_re px=3705 alert=1045500200I +[13:32:42] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3705 alert=1045500200I +[13:32:42] 💾 [SCALP] universe=91 saved=91 +[13:32:42] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:32:47] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:32:47] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:32:47] 💾 [SCALP] universe=92 saved=92 +[13:32:47] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:32:48] AFR 재진입 353810 sid=SCALP name=scalp_re px=6100 alert=1045500200I +[13:32:48] [ls_cond_hist] AFR 재진입 353810 sid=SCALP name=scalp_re px=6100 alert=1045500200I +[13:32:48] 💾 [SCALP] universe=93 saved=93 +[13:32:48] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:32:52] AFR 이탈 353810 sid=SCALP name=scalp_re px=6080 alert=1045500200I +[13:32:52] [ls_cond_hist] AFR 이탈 353810 sid=SCALP name=scalp_re px=6080 alert=1045500200I +[13:32:52] 💾 [SCALP] universe=92 saved=92 +[13:32:52] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:33:04] AFR 이탈 456070 sid=SCALP name=scalp_re px=5770 alert=1045500200I +[13:33:04] [ls_cond_hist] AFR 이탈 456070 sid=SCALP name=scalp_re px=5770 alert=1045500200I +[13:33:04] 💾 [SCALP] universe=91 saved=91 +[13:33:04] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:33:07] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:33:07] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:33:07] 💾 [SCALP] universe=92 saved=92 +[13:33:07] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:33:10] AFR 이탈 181710 sid=SCALP name=scalp_re px=39450 alert=1045500200I +[13:33:10] [ls_cond_hist] AFR 이탈 181710 sid=SCALP name=scalp_re px=39450 alert=1045500200I +[13:33:10] 💾 [SCALP] universe=91 saved=91 +[13:33:10] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:33:11] AFR 재진입 285130 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[13:33:11] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[13:33:12] 💾 [SCALP] universe=92 saved=92 +[13:33:12] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:33:12] AFR 이탈 338840 sid=SCALP name=scalp_re px=9320 alert=1045500200I +[13:33:12] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9320 alert=1045500200I +[13:33:12] 💾 [SCALP] universe=91 saved=91 +[13:33:12] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:33:12] AFR 재진입 338840 sid=SCALP name=scalp_re px=9250 alert=1045500200I +[13:33:12] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9250 alert=1045500200I +[13:33:12] 💾 [SCALP] universe=92 saved=92 +[13:33:12] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:33:21] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:33:21] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:33:21] 💾 [SCALP] universe=91 saved=91 +[13:33:21] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:33:27] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:33:27] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:33:27] 💾 [SCALP] universe=90 saved=90 +[13:33:27] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:33:31] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:33:31] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:33:31] 💾 [SCALP] universe=89 saved=89 +[13:33:31] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:33:31] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:33:31] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:33:31] 💾 [SCALP] universe=90 saved=90 +[13:33:31] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:33:33] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:33:33] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:33:33] 💾 [SCALP] universe=89 saved=89 +[13:33:33] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:33:38] AFR 재진입 041910 sid=SCALP name=scalp_re px=5480 alert=1045500200I +[13:33:38] [ls_cond_hist] AFR 재진입 041910 sid=SCALP name=scalp_re px=5480 alert=1045500200I +[13:33:38] 💾 [SCALP] universe=90 saved=90 +[13:33:38] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:33:38] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:33:38] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:33:38] 💾 [SCALP] universe=91 saved=91 +[13:33:38] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:33:39] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[13:33:39] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[13:33:39] 💾 [SCALP] universe=90 saved=90 +[13:33:39] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:33:40] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[13:33:40] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[13:33:40] 💾 [SCALP] universe=91 saved=91 +[13:33:40] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:33:45] AFR 재진입 353810 sid=SCALP name=scalp_re px=6110 alert=1045500200I +[13:33:45] [ls_cond_hist] AFR 재진입 353810 sid=SCALP name=scalp_re px=6110 alert=1045500200I +[13:33:45] 💾 [SCALP] universe=92 saved=92 +[13:33:45] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:33:45] AFR 이탈 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[13:33:45] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[13:33:46] 💾 [SCALP] universe=91 saved=91 +[13:33:46] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:33:47] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:33:47] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:33:47] 💾 [SCALP] universe=90 saved=90 +[13:33:47] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:33:47] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:33:47] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:33:47] 💾 [SCALP] universe=91 saved=91 +[13:33:47] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:33:49] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:33:49] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:33:49] 💾 [SCALP] universe=90 saved=90 +[13:33:49] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:33:51] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:33:51] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:33:51] 💾 [SCALP] universe=91 saved=91 +[13:33:51] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:33:52] AFR 재진입 005010 sid=SCALP name=scalp_re px=3705 alert=1045500200I +[13:33:52] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3705 alert=1045500200I +[13:33:52] 💾 [SCALP] universe=92 saved=92 +[13:33:52] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:33:55] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:33:55] [ls_cond_hist] AFR 이탈 393890 sid=SCALP name=scalp_re px=7100 alert=1045500200I +[13:33:55] 💾 [SCALP] universe=91 saved=91 +[13:33:55] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:33:55] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:33:55] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:33:55] 💾 [SCALP] universe=90 saved=90 +[13:33:55] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:33:56] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:33:56] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:33:56] 💾 [SCALP] universe=89 saved=89 +[13:33:56] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:34:03] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:34:03] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:34:03] 💾 [SCALP] universe=90 saved=90 +[13:34:03] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:34:05] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:34:05] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:34:06] 💾 [SCALP] universe=89 saved=89 +[13:34:06] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:34:06] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[13:34:06] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[13:34:07] 💾 [SCALP] universe=90 saved=90 +[13:34:07] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:34:08] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:34:08] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:34:08] 💾 [SCALP] universe=89 saved=89 +[13:34:08] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:34:09] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[13:34:09] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[13:34:09] 💾 [SCALP] universe=90 saved=90 +[13:34:09] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:34:09] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:34:09] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:34:10] 💾 [SCALP] universe=89 saved=89 +[13:34:10] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:34:10] AFR 이탈 061250 sid=SCALP name=scalp_re px=9060 alert=1045500200I +[13:34:10] [ls_cond_hist] AFR 이탈 061250 sid=SCALP name=scalp_re px=9060 alert=1045500200I +[13:34:10] 💾 [SCALP] universe=88 saved=88 +[13:34:10] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:34:16] AFR 이탈 338840 sid=SCALP name=scalp_re px=9360 alert=1045500200I +[13:34:16] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9360 alert=1045500200I +[13:34:16] 💾 [SCALP] universe=87 saved=87 +[13:34:16] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:34:16] AFR 진입 048910 sid=SCALP name=scalp_re px=4680 alert=1045500200I +[13:34:16] [ls_cond_hist] AFR 진입 048910 sid=SCALP name=scalp_re px=4680 alert=1045500200I +[13:34:16] 💾 [SCALP] universe=88 saved=88 +[13:34:16] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:34:19] AFR 재진입 017960 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[13:34:19] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[13:34:19] 💾 [SCALP] universe=89 saved=89 +[13:34:19] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:34:32] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:34:32] [ls_cond_hist] AFR 재진입 393890 sid=SCALP name=scalp_re px=7110 alert=1045500200I +[13:34:32] 💾 [SCALP] universe=90 saved=90 +[13:34:32] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:34:33] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:34:33] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:34:33] 💾 [SCALP] universe=89 saved=89 +[13:34:33] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:34:34] AFR 재진입 017960 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[13:34:34] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[13:34:34] 💾 [SCALP] universe=90 saved=90 +[13:34:34] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:34:39] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:34:39] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[13:34:39] 💾 [SCALP] universe=89 saved=89 +[13:34:39] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:34:40] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:34:40] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39950 alert=1045500200I +[13:34:41] 💾 [SCALP] universe=88 saved=88 +[13:34:41] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:34:42] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:34:42] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:34:42] 💾 [SCALP] universe=89 saved=89 +[13:34:42] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:34:44] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[13:34:44] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[13:34:44] 💾 [SCALP] universe=90 saved=90 +[13:34:44] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:34:45] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:34:45] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:34:45] 💾 [SCALP] universe=91 saved=91 +[13:34:45] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:34:48] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:34:48] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:34:48] 💾 [SCALP] universe=90 saved=90 +[13:34:48] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:34:49] AFR 이탈 048910 sid=SCALP name=scalp_re px=4620 alert=1045500200I +[13:34:49] [ls_cond_hist] AFR 이탈 048910 sid=SCALP name=scalp_re px=4620 alert=1045500200I +[13:34:49] 💾 [SCALP] universe=89 saved=89 +[13:34:49] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:34:49] AFR 재진입 048910 sid=SCALP name=scalp_re px=4620 alert=1045500200I +[13:34:49] [ls_cond_hist] AFR 재진입 048910 sid=SCALP name=scalp_re px=4620 alert=1045500200I +[13:34:49] 💾 [SCALP] universe=90 saved=90 +[13:34:49] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:34:52] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:34:52] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:34:52] 💾 [SCALP] universe=89 saved=89 +[13:34:52] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:34:58] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:34:58] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:34:59] 💾 [SCALP] universe=90 saved=90 +[13:34:59] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:34:59] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:34:59] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:34:59] 💾 [SCALP] universe=91 saved=91 +[13:34:59] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:35:03] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:35:03] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:35:03] 💾 [SCALP] universe=90 saved=90 +[13:35:03] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:35:05] AFR 재진입 285130 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[13:35:05] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[13:35:05] 💾 [SCALP] universe=91 saved=91 +[13:35:05] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:35:08] AFR 재진입 338840 sid=SCALP name=scalp_re px=9260 alert=1045500200I +[13:35:08] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9260 alert=1045500200I +[13:35:08] 💾 [SCALP] universe=92 saved=92 +[13:35:08] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:35:12] AFR 이탈 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[13:35:12] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[13:35:12] 💾 [SCALP] universe=91 saved=91 +[13:35:12] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:35:21] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:35:21] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:35:21] 💾 [SCALP] universe=90 saved=90 +[13:35:21] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:35:22] AFR 이탈 285130 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[13:35:22] [ls_cond_hist] AFR 이탈 285130 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[13:35:22] 💾 [SCALP] universe=89 saved=89 +[13:35:22] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:35:28] AFR 이탈 051600 sid=SCALP name=scalp_re px=47050 alert=1045500200I +[13:35:28] [ls_cond_hist] AFR 이탈 051600 sid=SCALP name=scalp_re px=47050 alert=1045500200I +[13:35:28] 💾 [SCALP] universe=88 saved=88 +[13:35:28] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:35:36] AFR 재진입 005010 sid=SCALP name=scalp_re px=3705 alert=1045500200I +[13:35:36] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3705 alert=1045500200I +[13:35:36] 💾 [SCALP] universe=89 saved=89 +[13:35:36] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:35:36] AFR 이탈 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[13:35:36] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[13:35:36] 💾 [SCALP] universe=88 saved=88 +[13:35:36] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:35:37] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:35:37] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:35:38] 💾 [SCALP] universe=89 saved=89 +[13:35:38] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:35:42] AFR 재진입 285130 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[13:35:42] [ls_cond_hist] AFR 재진입 285130 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[13:35:42] 💾 [SCALP] universe=90 saved=90 +[13:35:42] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:35:48] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:35:48] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:35:48] 💾 [SCALP] universe=91 saved=91 +[13:35:48] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:35:53] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:35:53] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:35:54] 💾 [SCALP] universe=90 saved=90 +[13:35:54] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:35:58] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[13:35:58] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[13:35:58] 💾 [SCALP] universe=91 saved=91 +[13:35:58] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:35:58] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:35:58] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:35:58] 💾 [SCALP] universe=92 saved=92 +[13:35:58] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:36:00] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:36:00] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:36:00] 💾 [SCALP] universe=91 saved=91 +[13:36:00] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:36:02] AFR 이탈 041910 sid=SCALP name=scalp_re px=5490 alert=1045500200I +[13:36:02] [ls_cond_hist] AFR 이탈 041910 sid=SCALP name=scalp_re px=5490 alert=1045500200I +[13:36:02] 💾 [SCALP] universe=90 saved=90 +[13:36:02] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:36:04] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:36:04] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:36:04] 💾 [SCALP] universe=89 saved=89 +[13:36:04] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:36:04] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:36:04] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:36:04] 💾 [SCALP] universe=90 saved=90 +[13:36:04] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:36:06] AFR 이탈 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[13:36:06] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[13:36:06] 💾 [SCALP] universe=89 saved=89 +[13:36:06] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:36:12] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:36:12] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:36:12] 💾 [SCALP] universe=88 saved=88 +[13:36:12] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:36:14] AFR 재진입 005010 sid=SCALP name=scalp_re px=3705 alert=1045500200I +[13:36:14] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3705 alert=1045500200I +[13:36:14] 💾 [SCALP] universe=89 saved=89 +[13:36:14] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:36:19] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:36:19] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:36:20] 💾 [SCALP] universe=90 saved=90 +[13:36:20] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:36:24] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:36:24] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:36:24] 💾 [SCALP] universe=89 saved=89 +[13:36:24] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:36:29] AFR 재진입 181710 sid=SCALP name=scalp_re px=39350 alert=1045500200I +[13:36:29] [ls_cond_hist] AFR 재진입 181710 sid=SCALP name=scalp_re px=39350 alert=1045500200I +[13:36:29] 💾 [SCALP] universe=90 saved=90 +[13:36:29] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:36:34] AFR 이탈 048910 sid=SCALP name=scalp_re px=4620 alert=1045500200I +[13:36:34] [ls_cond_hist] AFR 이탈 048910 sid=SCALP name=scalp_re px=4620 alert=1045500200I +[13:36:34] 💾 [SCALP] universe=89 saved=89 +[13:36:34] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:36:35] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:36:35] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:36:35] 💾 [SCALP] universe=90 saved=90 +[13:36:35] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:36:38] AFR 재진입 136540 sid=SCALP name=scalp_re px=10420 alert=1045500200I +[13:36:38] [ls_cond_hist] AFR 재진입 136540 sid=SCALP name=scalp_re px=10420 alert=1045500200I +[13:36:38] 💾 [SCALP] universe=91 saved=91 +[13:36:38] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:36:41] AFR 재진입 088340 sid=SCALP name=scalp_re px=6710 alert=1045500200I +[13:36:41] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6710 alert=1045500200I +[13:36:41] 💾 [SCALP] universe=92 saved=92 +[13:36:41] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:36:46] AFR 이탈 001940 sid=SCALP name=scalp_re px=25300 alert=1045500200I +[13:36:46] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25300 alert=1045500200I +[13:36:46] 💾 [SCALP] universe=91 saved=91 +[13:36:46] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:36:48] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:36:48] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:36:48] 💾 [SCALP] universe=90 saved=90 +[13:36:48] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:37:02] AFR 이탈 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[13:37:02] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[13:37:02] 💾 [SCALP] universe=89 saved=89 +[13:37:02] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:37:03] AFR 이탈 181710 sid=SCALP name=scalp_re px=39350 alert=1045500200I +[13:37:03] [ls_cond_hist] AFR 이탈 181710 sid=SCALP name=scalp_re px=39350 alert=1045500200I +[13:37:03] 💾 [SCALP] universe=88 saved=88 +[13:37:03] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:37:15] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:37:15] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:37:15] 💾 [SCALP] universe=87 saved=87 +[13:37:15] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:37:20] AFR 이탈 460860 sid=SCALP name=scalp_re px=9120 alert=1045500200I +[13:37:20] [ls_cond_hist] AFR 이탈 460860 sid=SCALP name=scalp_re px=9120 alert=1045500200I +[13:37:20] 💾 [SCALP] universe=86 saved=86 +[13:37:20] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:37:20] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:37:20] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:37:20] 💾 [SCALP] universe=87 saved=87 +[13:37:20] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:37:20] AFR 재진입 041910 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[13:37:20] [ls_cond_hist] AFR 재진입 041910 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[13:37:21] 💾 [SCALP] universe=88 saved=88 +[13:37:21] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:37:27] AFR 재진입 456070 sid=SCALP name=scalp_re px=5790 alert=1045500200I +[13:37:27] [ls_cond_hist] AFR 재진입 456070 sid=SCALP name=scalp_re px=5790 alert=1045500200I +[13:37:27] 💾 [SCALP] universe=89 saved=89 +[13:37:27] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:37:39] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:37:39] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:37:40] 💾 [SCALP] universe=90 saved=90 +[13:37:40] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:37:41] AFR 재진입 005010 sid=SCALP name=scalp_re px=3705 alert=1045500200I +[13:37:41] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3705 alert=1045500200I +[13:37:41] 💾 [SCALP] universe=91 saved=91 +[13:37:41] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:37:48] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:37:48] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:37:48] 💾 [SCALP] universe=90 saved=90 +[13:37:48] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:37:50] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:37:50] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:37:50] 💾 [SCALP] universe=89 saved=89 +[13:37:50] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:37:51] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:37:51] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[13:37:52] 💾 [SCALP] universe=90 saved=90 +[13:37:52] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:37:52] AFR 재진입 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[13:37:52] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25350 alert=1045500200I +[13:37:52] 💾 [SCALP] universe=91 saved=91 +[13:37:52] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:37:55] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:37:55] [ls_cond_hist] AFR 이탈 017960 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[13:37:55] 💾 [SCALP] universe=90 saved=90 +[13:37:55] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:37:58] AFR 재진입 460860 sid=SCALP name=scalp_re px=9130 alert=1045500200I +[13:37:58] [ls_cond_hist] AFR 재진입 460860 sid=SCALP name=scalp_re px=9130 alert=1045500200I +[13:37:58] 💾 [SCALP] universe=91 saved=91 +[13:37:58] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:38:03] AFR 재진입 048910 sid=SCALP name=scalp_re px=4615 alert=1045500200I +[13:38:03] [ls_cond_hist] AFR 재진입 048910 sid=SCALP name=scalp_re px=4615 alert=1045500200I +[13:38:03] 💾 [SCALP] universe=92 saved=92 +[13:38:03] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:38:04] AFR 재진입 017960 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[13:38:04] [ls_cond_hist] AFR 재진입 017960 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[13:38:04] 💾 [SCALP] universe=93 saved=93 +[13:38:04] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:38:13] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[13:38:13] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[13:38:13] 💾 [SCALP] universe=94 saved=94 +[13:38:13] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:38:18] AFR 이탈 048910 sid=SCALP name=scalp_re px=4590 alert=1045500200I +[13:38:18] [ls_cond_hist] AFR 이탈 048910 sid=SCALP name=scalp_re px=4590 alert=1045500200I +[13:38:18] 💾 [SCALP] universe=93 saved=93 +[13:38:18] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:38:19] AFR 이탈 140670 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[13:38:19] [ls_cond_hist] AFR 이탈 140670 sid=SCALP name=scalp_re px=8880 alert=1045500200I +[13:38:19] 💾 [SCALP] universe=92 saved=92 +[13:38:19] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:38:20] AFR 재진입 059270 sid=SCALP name=scalp_re px=5200 alert=1045500200I +[13:38:20] [ls_cond_hist] AFR 재진입 059270 sid=SCALP name=scalp_re px=5200 alert=1045500200I +[13:38:20] 💾 [SCALP] universe=93 saved=93 +[13:38:20] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:38:29] AFR 이탈 217590 sid=SCALP name=scalp_re px=12030 alert=1045500200I +[13:38:29] [ls_cond_hist] AFR 이탈 217590 sid=SCALP name=scalp_re px=12030 alert=1045500200I +[13:38:30] 💾 [SCALP] universe=92 saved=92 +[13:38:30] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:38:31] AFR 이탈 041910 sid=SCALP name=scalp_re px=5480 alert=1045500200I +[13:38:31] [ls_cond_hist] AFR 이탈 041910 sid=SCALP name=scalp_re px=5480 alert=1045500200I +[13:38:31] 💾 [SCALP] universe=91 saved=91 +[13:38:31] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:38:36] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:38:36] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:38:36] 💾 [SCALP] universe=90 saved=90 +[13:38:36] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:38:36] AFR 재진입 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[13:38:36] [ls_cond_hist] AFR 재진입 217590 sid=SCALP name=scalp_re px=12040 alert=1045500200I +[13:38:36] 💾 [SCALP] universe=91 saved=91 +[13:38:36] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:38:47] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[13:38:47] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[13:38:47] 💾 [SCALP] universe=92 saved=92 +[13:38:47] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:38:51] AFR 이탈 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[13:38:51] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[13:38:51] 💾 [SCALP] universe=91 saved=91 +[13:38:51] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:38:57] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:38:57] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:38:57] 💾 [SCALP] universe=92 saved=92 +[13:38:57] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:39:06] AFR 재진입 005010 sid=SCALP name=scalp_re px=3710 alert=1045500200I +[13:39:06] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3710 alert=1045500200I +[13:39:06] 💾 [SCALP] universe=93 saved=93 +[13:39:06] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:39:07] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:39:07] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:39:07] 💾 [SCALP] universe=92 saved=92 +[13:39:07] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:39:10] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:39:10] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:39:10] 💾 [SCALP] universe=93 saved=93 +[13:39:10] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:39:31] AFR 재진입 143240 sid=SCALP name=scalp_re px=16280 alert=1045500200I +[13:39:31] [ls_cond_hist] AFR 재진입 143240 sid=SCALP name=scalp_re px=16280 alert=1045500200I +[13:39:31] 💾 [SCALP] universe=94 saved=94 +[13:39:31] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:39:34] AFR 이탈 101970 sid=SCALP name=scalp_re px=9620 alert=1045500200I +[13:39:34] [ls_cond_hist] AFR 이탈 101970 sid=SCALP name=scalp_re px=9620 alert=1045500200I +[13:39:34] 💾 [SCALP] universe=93 saved=93 +[13:39:34] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:39:35] AFR 재진입 101970 sid=SCALP name=scalp_re px=9730 alert=1045500200I +[13:39:35] [ls_cond_hist] AFR 재진입 101970 sid=SCALP name=scalp_re px=9730 alert=1045500200I +[13:39:35] 💾 [SCALP] universe=94 saved=94 +[13:39:35] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:39:41] AFR 재진입 041910 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[13:39:41] [ls_cond_hist] AFR 재진입 041910 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[13:39:41] 💾 [SCALP] universe=95 saved=95 +[13:39:41] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[13:39:42] AFR 이탈 120240 sid=SCALP name=scalp_re px=14830 alert=1045500200I +[13:39:42] [ls_cond_hist] AFR 이탈 120240 sid=SCALP name=scalp_re px=14830 alert=1045500200I +[13:39:42] 💾 [SCALP] universe=94 saved=94 +[13:39:42] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:40:00] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:40:00] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[13:40:00] 💾 [SCALP] universe=93 saved=93 +[13:40:00] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:40:00] AFR 이탈 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[13:40:00] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[13:40:00] 💾 [SCALP] universe=92 saved=92 +[13:40:00] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:40:05] AFR 이탈 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[13:40:05] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[13:40:05] 💾 [SCALP] universe=91 saved=91 +[13:40:05] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:40:42] AFR 이탈 136540 sid=SCALP name=scalp_re px=10460 alert=1045500200I +[13:40:42] [ls_cond_hist] AFR 이탈 136540 sid=SCALP name=scalp_re px=10460 alert=1045500200I +[13:40:42] 💾 [SCALP] universe=90 saved=90 +[13:40:42] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:40:42] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:40:42] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[13:40:42] 💾 [SCALP] universe=91 saved=91 +[13:40:42] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:40:59] AFR 이탈 041910 sid=SCALP name=scalp_re px=5490 alert=1045500200I +[13:40:59] [ls_cond_hist] AFR 이탈 041910 sid=SCALP name=scalp_re px=5490 alert=1045500200I +[13:40:59] 💾 [SCALP] universe=90 saved=90 +[13:40:59] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:41:24] AFR 재진입 041910 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[13:41:24] [ls_cond_hist] AFR 재진입 041910 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[13:41:24] 💾 [SCALP] universe=91 saved=91 +[13:41:24] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:41:37] AFR 재진입 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[13:41:37] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[13:41:37] 💾 [SCALP] universe=92 saved=92 +[13:41:37] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:42:10] AFR 이탈 031430 sid=SCALP name=scalp_re px=11280 alert=1045500200I +[13:42:10] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11280 alert=1045500200I +[13:42:10] 💾 [SCALP] universe=91 saved=91 +[13:42:10] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:42:26] AFR 재진입 031430 sid=SCALP name=scalp_re px=11250 alert=1045500200I +[13:42:26] [ls_cond_hist] AFR 재진입 031430 sid=SCALP name=scalp_re px=11250 alert=1045500200I +[13:42:26] 💾 [SCALP] universe=92 saved=92 +[13:42:26] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:42:32] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:42:32] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:42:32] 💾 [SCALP] universe=91 saved=91 +[13:42:32] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:42:44] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:42:44] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:42:44] 💾 [SCALP] universe=92 saved=92 +[13:42:44] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:42:50] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:42:50] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:42:50] 💾 [SCALP] universe=91 saved=91 +[13:42:50] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:42:55] AFR 재진입 067370 sid=SCALP name=scalp_re px=6280 alert=1045500200I +[13:42:55] [ls_cond_hist] AFR 재진입 067370 sid=SCALP name=scalp_re px=6280 alert=1045500200I +[13:42:56] 💾 [SCALP] universe=92 saved=92 +[13:42:56] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:42:58] AFR 재진입 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[13:42:58] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[13:42:58] 💾 [SCALP] universe=93 saved=93 +[13:42:58] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:43:00] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:43:00] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:43:00] 💾 [SCALP] universe=94 saved=94 +[13:43:00] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:43:02] AFR 이탈 192400 sid=SCALP name=scalp_re px=26100 alert=1045500200I +[13:43:02] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26100 alert=1045500200I +[13:43:02] 💾 [SCALP] universe=93 saved=93 +[13:43:02] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:43:05] AFR 재진입 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[13:43:05] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[13:43:05] 💾 [SCALP] universe=94 saved=94 +[13:43:05] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:43:06] AFR 이탈 317830 sid=SCALP name=scalp_re px=4555 alert=1045500200I +[13:43:06] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4555 alert=1045500200I +[13:43:06] 💾 [SCALP] universe=93 saved=93 +[13:43:06] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:43:07] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[13:43:07] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[13:43:07] 💾 [SCALP] universe=92 saved=92 +[13:43:07] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:43:07] AFR 재진입 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[13:43:07] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[13:43:08] 💾 [SCALP] universe=93 saved=93 +[13:43:08] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:43:08] AFR 이탈 041910 sid=SCALP name=scalp_re px=5500 alert=1045500200I +[13:43:08] [ls_cond_hist] AFR 이탈 041910 sid=SCALP name=scalp_re px=5500 alert=1045500200I +[13:43:08] 💾 [SCALP] universe=92 saved=92 +[13:43:08] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:43:10] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[13:43:10] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[13:43:10] 💾 [SCALP] universe=91 saved=91 +[13:43:10] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:43:12] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[13:43:12] [ls_cond_hist] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[13:43:12] 💾 [SCALP] universe=92 saved=92 +[13:43:12] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:43:12] AFR 재진입 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[13:43:12] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[13:43:12] 💾 [SCALP] universe=93 saved=93 +[13:43:12] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:43:35] AFR 재진입 419080 sid=SCALP name=scalp_re px=4310 alert=1045500200I +[13:43:35] [ls_cond_hist] AFR 재진입 419080 sid=SCALP name=scalp_re px=4310 alert=1045500200I +[13:43:35] 💾 [SCALP] universe=94 saved=94 +[13:43:35] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:43:38] AFR 이탈 348030 sid=SCALP name=scalp_re px=3080 alert=1045500200I +[13:43:38] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=3080 alert=1045500200I +[13:43:38] 💾 [SCALP] universe=93 saved=93 +[13:43:38] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:43:39] AFR 재진입 348030 sid=SCALP name=scalp_re px=3060 alert=1045500200I +[13:43:39] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3060 alert=1045500200I +[13:43:39] 💾 [SCALP] universe=94 saved=94 +[13:43:39] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:43:53] AFR 이탈 348030 sid=SCALP name=scalp_re px=3045 alert=1045500200I +[13:43:53] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=3045 alert=1045500200I +[13:43:53] 💾 [SCALP] universe=93 saved=93 +[13:43:53] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:43:53] AFR 재진입 348030 sid=SCALP name=scalp_re px=3025 alert=1045500200I +[13:43:53] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3025 alert=1045500200I +[13:43:53] 💾 [SCALP] universe=94 saved=94 +[13:43:53] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:44:01] AFR 이탈 192400 sid=SCALP name=scalp_re px=26100 alert=1045500200I +[13:44:01] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26100 alert=1045500200I +[13:44:01] 💾 [SCALP] universe=93 saved=93 +[13:44:01] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:44:01] AFR 이탈 348030 sid=SCALP name=scalp_re px=3005 alert=1045500200I +[13:44:01] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=3005 alert=1045500200I +[13:44:01] 💾 [SCALP] universe=92 saved=92 +[13:44:01] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:44:01] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[13:44:01] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[13:44:01] 💾 [SCALP] universe=93 saved=93 +[13:44:01] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:44:02] AFR 재진입 348030 sid=SCALP name=scalp_re px=3035 alert=1045500200I +[13:44:02] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3035 alert=1045500200I +[13:44:02] 💾 [SCALP] universe=94 saved=94 +[13:44:02] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:44:04] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[13:44:04] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[13:44:04] 💾 [SCALP] universe=93 saved=93 +[13:44:04] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:44:06] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[13:44:06] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[13:44:06] 💾 [SCALP] universe=94 saved=94 +[13:44:06] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:44:07] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[13:44:07] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[13:44:07] 💾 [SCALP] universe=93 saved=93 +[13:44:07] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:44:10] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[13:44:10] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[13:44:10] 💾 [SCALP] universe=94 saved=94 +[13:44:10] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:44:10] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[13:44:10] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[13:44:10] 💾 [SCALP] universe=93 saved=93 +[13:44:10] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:44:18] AFR 이탈 005440 sid=SCALP name=scalp_re px=12340 alert=1045500200I +[13:44:18] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12340 alert=1045500200I +[13:44:18] 💾 [SCALP] universe=92 saved=92 +[13:44:18] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:44:20] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[13:44:20] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[13:44:21] 💾 [SCALP] universe=93 saved=93 +[13:44:21] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:44:21] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[13:44:21] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[13:44:21] 💾 [SCALP] universe=92 saved=92 +[13:44:21] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:44:21] AFR 재진입 005440 sid=SCALP name=scalp_re px=12330 alert=1045500200I +[13:44:21] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12330 alert=1045500200I +[13:44:22] 💾 [SCALP] universe=93 saved=93 +[13:44:22] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:44:22] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[13:44:22] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[13:44:23] 💾 [SCALP] universe=92 saved=92 +[13:44:23] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:44:38] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:44:38] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:44:38] 💾 [SCALP] universe=91 saved=91 +[13:44:38] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:44:38] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:44:38] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:44:38] 💾 [SCALP] universe=92 saved=92 +[13:44:38] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:44:39] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:44:39] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:44:39] 💾 [SCALP] universe=91 saved=91 +[13:44:39] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:44:47] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[13:44:47] [ls_cond_hist] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[13:44:47] 💾 [SCALP] universe=92 saved=92 +[13:44:47] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:44:49] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[13:44:49] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[13:44:49] 💾 [SCALP] universe=93 saved=93 +[13:44:49] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:44:50] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[13:44:50] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[13:44:50] 💾 [SCALP] universe=92 saved=92 +[13:44:50] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:44:51] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:44:51] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:44:51] 💾 [SCALP] universe=91 saved=91 +[13:44:51] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:44:52] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:44:52] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:44:52] 💾 [SCALP] universe=92 saved=92 +[13:44:52] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:44:57] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[13:44:57] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[13:44:57] 💾 [SCALP] universe=93 saved=93 +[13:44:57] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:45:00] AFR 재진입 022100 sid=SCALP name=scalp_re px=19450 alert=1045500200I +[13:45:00] [ls_cond_hist] AFR 재진입 022100 sid=SCALP name=scalp_re px=19450 alert=1045500200I +[13:45:01] 💾 [SCALP] universe=94 saved=94 +[13:45:01] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[13:45:01] AFR 이탈 476830 sid=SCALP name=scalp_re px=27050 alert=1045500200I +[13:45:01] [ls_cond_hist] AFR 이탈 476830 sid=SCALP name=scalp_re px=27050 alert=1045500200I +[13:45:02] 💾 [SCALP] universe=93 saved=93 +[13:45:02] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:45:05] AFR 이탈 005440 sid=SCALP name=scalp_re px=12350 alert=1045500200I +[13:45:05] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12350 alert=1045500200I +[13:45:05] 💾 [SCALP] universe=92 saved=92 +[13:45:05] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:45:05] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:45:05] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:45:05] 💾 [SCALP] universe=91 saved=91 +[13:45:05] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:45:08] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:45:08] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:45:08] 💾 [SCALP] universe=92 saved=92 +[13:45:08] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:45:09] AFR 재진입 476830 sid=SCALP name=scalp_re px=26950 alert=1045500200I +[13:45:09] [ls_cond_hist] AFR 재진입 476830 sid=SCALP name=scalp_re px=26950 alert=1045500200I +[13:45:09] 💾 [SCALP] universe=93 saved=93 +[13:45:09] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:45:09] AFR 이탈 022100 sid=SCALP name=scalp_re px=19520 alert=1045500200I +[13:45:09] [ls_cond_hist] AFR 이탈 022100 sid=SCALP name=scalp_re px=19520 alert=1045500200I +[13:45:10] 💾 [SCALP] universe=92 saved=92 +[13:45:10] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:45:10] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:45:10] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:45:11] 💾 [SCALP] universe=91 saved=91 +[13:45:11] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:45:15] AFR 이탈 067370 sid=SCALP name=scalp_re px=6300 alert=1045500200I +[13:45:15] [ls_cond_hist] AFR 이탈 067370 sid=SCALP name=scalp_re px=6300 alert=1045500200I +[13:45:15] 💾 [SCALP] universe=90 saved=90 +[13:45:15] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:45:18] AFR 이탈 348030 sid=SCALP name=scalp_re px=3005 alert=1045500200I +[13:45:18] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=3005 alert=1045500200I +[13:45:18] 💾 [SCALP] universe=89 saved=89 +[13:45:18] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:45:19] AFR 재진입 348030 sid=SCALP name=scalp_re px=3030 alert=1045500200I +[13:45:19] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3030 alert=1045500200I +[13:45:19] 💾 [SCALP] universe=90 saved=90 +[13:45:19] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:45:44] AFR 재진입 005440 sid=SCALP name=scalp_re px=12330 alert=1045500200I +[13:45:44] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12330 alert=1045500200I +[13:45:44] 💾 [SCALP] universe=91 saved=91 +[13:45:44] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:46:06] AFR 재진입 192400 sid=SCALP name=scalp_re px=26100 alert=1045500200I +[13:46:06] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26100 alert=1045500200I +[13:46:06] 💾 [SCALP] universe=92 saved=92 +[13:46:06] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:46:06] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[13:46:06] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[13:46:06] 💾 [SCALP] universe=91 saved=91 +[13:46:06] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:46:08] AFR 재진입 192400 sid=SCALP name=scalp_re px=26100 alert=1045500200I +[13:46:08] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26100 alert=1045500200I +[13:46:08] 💾 [SCALP] universe=92 saved=92 +[13:46:08] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:46:56] AFR 이탈 458650 sid=SCALP name=scalp_re px=7920 alert=1045500200I +[13:46:56] [ls_cond_hist] AFR 이탈 458650 sid=SCALP name=scalp_re px=7920 alert=1045500200I +[13:46:56] 💾 [SCALP] universe=91 saved=91 +[13:46:56] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:46:57] AFR 이탈 101970 sid=SCALP name=scalp_re px=9610 alert=1045500200I +[13:46:57] [ls_cond_hist] AFR 이탈 101970 sid=SCALP name=scalp_re px=9610 alert=1045500200I +[13:46:57] 💾 [SCALP] universe=90 saved=90 +[13:46:57] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:47:06] AFR 이탈 005440 sid=SCALP name=scalp_re px=12350 alert=1045500200I +[13:47:06] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12350 alert=1045500200I +[13:47:06] 💾 [SCALP] universe=89 saved=89 +[13:47:06] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:47:07] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[13:47:07] [ls_cond_hist] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[13:47:07] 💾 [SCALP] universe=90 saved=90 +[13:47:07] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:47:17] AFR 재진입 005440 sid=SCALP name=scalp_re px=12330 alert=1045500200I +[13:47:17] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12330 alert=1045500200I +[13:47:17] 💾 [SCALP] universe=91 saved=91 +[13:47:17] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:47:36] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:47:36] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:47:36] 💾 [SCALP] universe=90 saved=90 +[13:47:36] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:47:43] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[13:47:43] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[13:47:44] 💾 [SCALP] universe=89 saved=89 +[13:47:44] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:47:45] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:47:45] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:47:45] 💾 [SCALP] universe=90 saved=90 +[13:47:45] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:47:46] AFR 이탈 353810 sid=SCALP name=scalp_re px=6130 alert=1045500200I +[13:47:46] [ls_cond_hist] AFR 이탈 353810 sid=SCALP name=scalp_re px=6130 alert=1045500200I +[13:47:46] 💾 [SCALP] universe=89 saved=89 +[13:47:46] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:47:49] AFR 재진입 353810 sid=SCALP name=scalp_re px=6110 alert=1045500200I +[13:47:49] [ls_cond_hist] AFR 재진입 353810 sid=SCALP name=scalp_re px=6110 alert=1045500200I +[13:47:49] 💾 [SCALP] universe=90 saved=90 +[13:47:49] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:47:57] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:47:57] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:47:57] 💾 [SCALP] universe=89 saved=89 +[13:47:57] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:47:59] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:47:59] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:48:00] 💾 [SCALP] universe=90 saved=90 +[13:48:00] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:48:04] AFR 이탈 005440 sid=SCALP name=scalp_re px=12410 alert=1045500200I +[13:48:04] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12410 alert=1045500200I +[13:48:04] 💾 [SCALP] universe=89 saved=89 +[13:48:04] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:48:09] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:48:09] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:48:10] 💾 [SCALP] universe=88 saved=88 +[13:48:10] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:48:17] AFR 재진입 031430 sid=SCALP name=scalp_re px=11250 alert=1045500200I +[13:48:17] [ls_cond_hist] AFR 재진입 031430 sid=SCALP name=scalp_re px=11250 alert=1045500200I +[13:48:17] 💾 [SCALP] universe=89 saved=89 +[13:48:17] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:48:20] AFR 이탈 338840 sid=SCALP name=scalp_re px=9320 alert=1045500200I +[13:48:20] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9320 alert=1045500200I +[13:48:20] 💾 [SCALP] universe=88 saved=88 +[13:48:20] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:48:32] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:48:32] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:48:32] 💾 [SCALP] universe=87 saved=87 +[13:48:32] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:48:40] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:48:40] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:48:40] 💾 [SCALP] universe=88 saved=88 +[13:48:40] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:48:43] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:48:43] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[13:48:43] 💾 [SCALP] universe=87 saved=87 +[13:48:43] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:48:47] AFR 이탈 348030 sid=SCALP name=scalp_re px=3020 alert=1045500200I +[13:48:47] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=3020 alert=1045500200I +[13:48:47] 💾 [SCALP] universe=86 saved=86 +[13:48:47] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[13:48:50] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:48:50] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[13:48:50] 💾 [SCALP] universe=87 saved=87 +[13:48:50] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:48:57] AFR 재진입 348030 sid=SCALP name=scalp_re px=3010 alert=1045500200I +[13:48:57] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3010 alert=1045500200I +[13:48:57] 💾 [SCALP] universe=88 saved=88 +[13:48:57] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:49:01] AFR 이탈 348030 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[13:49:01] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[13:49:01] 💾 [SCALP] universe=87 saved=87 +[13:49:01] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[13:49:06] AFR 재진입 338840 sid=SCALP name=scalp_re px=9280 alert=1045500200I +[13:49:06] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9280 alert=1045500200I +[13:49:06] 💾 [SCALP] universe=88 saved=88 +[13:49:06] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:49:15] AFR 재진입 348030 sid=SCALP name=scalp_re px=3005 alert=1045500200I +[13:49:15] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3005 alert=1045500200I +[13:49:15] 💾 [SCALP] universe=89 saved=89 +[13:49:15] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:50:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:50:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:50:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:50:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:50:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:50:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:50:15] ⏱️ flush [SCALP/scalp_re] n=89 univ=89 +[13:50:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=89 univ=89 +[13:50:18] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:50:18] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:50:18] 💾 [SCALP] universe=88 saved=88 +[13:50:18] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:50:38] AFR 재진입 031430 sid=SCALP name=scalp_re px=11250 alert=1045500200I +[13:50:38] [ls_cond_hist] AFR 재진입 031430 sid=SCALP name=scalp_re px=11250 alert=1045500200I +[13:50:38] 💾 [SCALP] universe=89 saved=89 +[13:50:38] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:50:44] AFR 재진입 088340 sid=SCALP name=scalp_re px=6690 alert=1045500200I +[13:50:44] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6690 alert=1045500200I +[13:50:44] 💾 [SCALP] universe=90 saved=90 +[13:50:44] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:51:08] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15250 alert=1045500200I +[13:51:08] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15250 alert=1045500200I +[13:51:08] 💾 [SCALP] universe=89 saved=89 +[13:51:08] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:51:08] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:51:08] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:51:08] 💾 [SCALP] universe=88 saved=88 +[13:51:08] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:51:25] AFR 재진입 458650 sid=SCALP name=scalp_re px=7960 alert=1045500200I +[13:51:25] [ls_cond_hist] AFR 재진입 458650 sid=SCALP name=scalp_re px=7960 alert=1045500200I +[13:51:25] 💾 [SCALP] universe=89 saved=89 +[13:51:25] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:51:42] AFR 이탈 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[13:51:42] [ls_cond_hist] AFR 이탈 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[13:51:43] 💾 [SCALP] universe=88 saved=88 +[13:51:43] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:51:45] AFR 재진입 317830 sid=SCALP name=scalp_re px=4540 alert=1045500200I +[13:51:45] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4540 alert=1045500200I +[13:51:45] 💾 [SCALP] universe=89 saved=89 +[13:51:45] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:51:48] AFR 재진입 031430 sid=SCALP name=scalp_re px=11250 alert=1045500200I +[13:51:48] [ls_cond_hist] AFR 재진입 031430 sid=SCALP name=scalp_re px=11250 alert=1045500200I +[13:51:48] 💾 [SCALP] universe=90 saved=90 +[13:51:48] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:52:13] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15200 alert=1045500200I +[13:52:13] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15200 alert=1045500200I +[13:52:13] 💾 [SCALP] universe=91 saved=91 +[13:52:13] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:52:31] AFR 이탈 317830 sid=SCALP name=scalp_re px=4555 alert=1045500200I +[13:52:31] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4555 alert=1045500200I +[13:52:31] 💾 [SCALP] universe=90 saved=90 +[13:52:31] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:52:49] AFR 이탈 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[13:52:49] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[13:52:49] 💾 [SCALP] universe=89 saved=89 +[13:52:49] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:52:49] AFR 재진입 380550 sid=SCALP name=scalp_re px=7890 alert=1045500200I +[13:52:49] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7890 alert=1045500200I +[13:52:49] 💾 [SCALP] universe=90 saved=90 +[13:52:49] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:53:35] AFR 이탈 001940 sid=SCALP name=scalp_re px=25800 alert=1045500200I +[13:53:35] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25800 alert=1045500200I +[13:53:35] 💾 [SCALP] universe=89 saved=89 +[13:53:35] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:53:37] AFR 재진입 005440 sid=SCALP name=scalp_re px=12320 alert=1045500200I +[13:53:37] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12320 alert=1045500200I +[13:53:37] 💾 [SCALP] universe=90 saved=90 +[13:53:37] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:53:40] AFR 재진입 001940 sid=SCALP name=scalp_re px=25700 alert=1045500200I +[13:53:40] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25700 alert=1045500200I +[13:53:40] 💾 [SCALP] universe=91 saved=91 +[13:53:40] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:53:49] AFR 이탈 088340 sid=SCALP name=scalp_re px=6670 alert=1045500200I +[13:53:49] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6670 alert=1045500200I +[13:53:49] 💾 [SCALP] universe=90 saved=90 +[13:53:49] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:53:51] AFR 재진입 088340 sid=SCALP name=scalp_re px=6700 alert=1045500200I +[13:53:51] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6700 alert=1045500200I +[13:53:51] 💾 [SCALP] universe=91 saved=91 +[13:53:51] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:54:02] AFR 이탈 005440 sid=SCALP name=scalp_re px=12340 alert=1045500200I +[13:54:02] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12340 alert=1045500200I +[13:54:02] 💾 [SCALP] universe=90 saved=90 +[13:54:02] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:54:05] AFR 재진입 005440 sid=SCALP name=scalp_re px=12330 alert=1045500200I +[13:54:05] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12330 alert=1045500200I +[13:54:05] 💾 [SCALP] universe=91 saved=91 +[13:54:05] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:54:10] AFR 재진입 101970 sid=SCALP name=scalp_re px=9630 alert=1045500200I +[13:54:10] [ls_cond_hist] AFR 재진입 101970 sid=SCALP name=scalp_re px=9630 alert=1045500200I +[13:54:10] 💾 [SCALP] universe=92 saved=92 +[13:54:10] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:54:34] AFR 재진입 317830 sid=SCALP name=scalp_re px=4545 alert=1045500200I +[13:54:34] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4545 alert=1045500200I +[13:54:34] 💾 [SCALP] universe=93 saved=93 +[13:54:34] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[13:55:04] AFR 이탈 005440 sid=SCALP name=scalp_re px=12360 alert=1045500200I +[13:55:04] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12360 alert=1045500200I +[13:55:04] 💾 [SCALP] universe=92 saved=92 +[13:55:04] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:55:41] AFR 이탈 317830 sid=SCALP name=scalp_re px=4570 alert=1045500200I +[13:55:41] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4570 alert=1045500200I +[13:55:41] 💾 [SCALP] universe=91 saved=91 +[13:55:41] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:56:01] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[13:56:01] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[13:56:01] 💾 [SCALP] universe=92 saved=92 +[13:56:01] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:56:17] AFR 이탈 088340 sid=SCALP name=scalp_re px=6670 alert=1045500200I +[13:56:17] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6670 alert=1045500200I +[13:56:17] 💾 [SCALP] universe=91 saved=91 +[13:56:17] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:56:54] AFR 재진입 067370 sid=SCALP name=scalp_re px=6250 alert=1045500200I +[13:56:54] [ls_cond_hist] AFR 재진입 067370 sid=SCALP name=scalp_re px=6250 alert=1045500200I +[13:56:54] 💾 [SCALP] universe=92 saved=92 +[13:56:54] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:57:07] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:57:07] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[13:57:07] 💾 [SCALP] universe=91 saved=91 +[13:57:07] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:57:10] AFR 이탈 001940 sid=SCALP name=scalp_re px=25800 alert=1045500200I +[13:57:10] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25800 alert=1045500200I +[13:57:10] 💾 [SCALP] universe=90 saved=90 +[13:57:10] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:57:16] AFR 이탈 215000 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[13:57:16] [ls_cond_hist] AFR 이탈 215000 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[13:57:16] 💾 [SCALP] universe=89 saved=89 +[13:57:16] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:57:31] AFR 이탈 078935 sid=SCALP name=scalp_re px=58200 alert=1045500200I +[13:57:31] [ls_cond_hist] AFR 이탈 078935 sid=SCALP name=scalp_re px=58200 alert=1045500200I +[13:57:31] 💾 [SCALP] universe=88 saved=88 +[13:57:31] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[13:57:39] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[13:57:39] [ls_cond_hist] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[13:57:39] 💾 [SCALP] universe=89 saved=89 +[13:57:39] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[13:57:53] AFR 재진입 001940 sid=SCALP name=scalp_re px=25700 alert=1045500200I +[13:57:53] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25700 alert=1045500200I +[13:57:53] 💾 [SCALP] universe=90 saved=90 +[13:57:53] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[13:57:57] AFR 재진입 088340 sid=SCALP name=scalp_re px=6700 alert=1045500200I +[13:57:57] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6700 alert=1045500200I +[13:57:57] 💾 [SCALP] universe=91 saved=91 +[13:57:57] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:58:14] AFR 재진입 215000 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[13:58:14] [ls_cond_hist] AFR 재진입 215000 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[13:58:14] 💾 [SCALP] universe=92 saved=92 +[13:58:14] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:59:03] AFR 이탈 120240 sid=SCALP name=scalp_re px=14830 alert=1045500200I +[13:59:03] [ls_cond_hist] AFR 이탈 120240 sid=SCALP name=scalp_re px=14830 alert=1045500200I +[13:59:03] 💾 [SCALP] universe=91 saved=91 +[13:59:03] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:59:19] AFR 재진입 059270 sid=SCALP name=scalp_re px=5240 alert=1045500200I +[13:59:19] [ls_cond_hist] AFR 재진입 059270 sid=SCALP name=scalp_re px=5240 alert=1045500200I +[13:59:20] 💾 [SCALP] universe=92 saved=92 +[13:59:20] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[13:59:22] AFR 이탈 215000 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[13:59:22] [ls_cond_hist] AFR 이탈 215000 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[13:59:22] 💾 [SCALP] universe=91 saved=91 +[13:59:22] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[13:59:39] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:59:39] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[13:59:39] 💾 [SCALP] universe=90 saved=90 +[13:59:39] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:00:00] AFR 이탈 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[14:00:00] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[14:00:00] 💾 [SCALP] universe=89 saved=89 +[14:00:00] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:00:00] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[14:00:00] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[14:00:00] 💾 [SCALP] universe=90 saved=90 +[14:00:00] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:00:00] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[14:00:00] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[14:00:00] 💾 [SCALP] universe=89 saved=89 +[14:00:00] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:00:04] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[14:00:04] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[14:00:04] 💾 [SCALP] universe=88 saved=88 +[14:00:04] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:00:11] AFR 이탈 059270 sid=SCALP name=scalp_re px=5290 alert=1045500200I +[14:00:11] [ls_cond_hist] AFR 이탈 059270 sid=SCALP name=scalp_re px=5290 alert=1045500200I +[14:00:11] 💾 [SCALP] universe=87 saved=87 +[14:00:11] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[14:00:17] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[14:00:17] [ls_cond_hist] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[14:00:17] 💾 [SCALP] universe=88 saved=88 +[14:00:17] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:00:17] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[14:00:17] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[14:00:17] 💾 [SCALP] universe=87 saved=87 +[14:00:17] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[14:00:20] AFR 진입 267290 sid=SCALP name=scalp_re px=20250 alert=1045500200I +[14:00:20] [ls_cond_hist] AFR 진입 267290 sid=SCALP name=scalp_re px=20250 alert=1045500200I +[14:00:21] 💾 [SCALP] universe=88 saved=88 +[14:00:21] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:00:24] AFR 재진입 411080 sid=SCALP name=scalp_re px=3830 alert=1045500200I +[14:00:24] [ls_cond_hist] AFR 재진입 411080 sid=SCALP name=scalp_re px=3830 alert=1045500200I +[14:00:24] 💾 [SCALP] universe=89 saved=89 +[14:00:24] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:00:56] AFR 이탈 001940 sid=SCALP name=scalp_re px=25800 alert=1045500200I +[14:00:56] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25800 alert=1045500200I +[14:00:56] 💾 [SCALP] universe=88 saved=88 +[14:00:56] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:00:59] AFR 이탈 049830 sid=SCALP name=scalp_re px=6200 alert=1045500200I +[14:00:59] [ls_cond_hist] AFR 이탈 049830 sid=SCALP name=scalp_re px=6200 alert=1045500200I +[14:00:59] 💾 [SCALP] universe=87 saved=87 +[14:00:59] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[14:01:24] AFR 재진입 009520 sid=SCALP name=scalp_re px=10530 alert=1045500200I +[14:01:24] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10530 alert=1045500200I +[14:01:24] 💾 [SCALP] universe=88 saved=88 +[14:01:24] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:01:42] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[14:01:42] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[14:01:42] 💾 [SCALP] universe=87 saved=87 +[14:01:42] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[14:01:42] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:01:42] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:01:42] 💾 [SCALP] universe=88 saved=88 +[14:01:42] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:01:43] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[14:01:43] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[14:01:43] 💾 [SCALP] universe=87 saved=87 +[14:01:43] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[14:01:47] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:01:47] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:01:47] 💾 [SCALP] universe=88 saved=88 +[14:01:47] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:01:47] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[14:01:47] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[14:01:47] 💾 [SCALP] universe=87 saved=87 +[14:01:47] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[14:01:52] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[14:01:52] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[14:01:52] 💾 [SCALP] universe=88 saved=88 +[14:01:52] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:01:54] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:01:54] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:01:54] 💾 [SCALP] universe=89 saved=89 +[14:01:54] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:01:54] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[14:01:54] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[14:01:54] 💾 [SCALP] universe=88 saved=88 +[14:01:54] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:01:55] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:01:55] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:01:55] 💾 [SCALP] universe=89 saved=89 +[14:01:55] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:01:57] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[14:01:57] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[14:01:57] 💾 [SCALP] universe=88 saved=88 +[14:01:57] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:02:02] AFR 진입 108380 sid=SCALP name=scalp_re px=17470 alert=1045500200I +[14:02:02] [ls_cond_hist] AFR 진입 108380 sid=SCALP name=scalp_re px=17470 alert=1045500200I +[14:02:02] 💾 [SCALP] universe=89 saved=89 +[14:02:02] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:02:02] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:02:02] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:02:03] 💾 [SCALP] universe=90 saved=90 +[14:02:03] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:02:10] AFR 이탈 348030 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[14:02:10] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[14:02:10] 💾 [SCALP] universe=89 saved=89 +[14:02:10] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:02:10] AFR 재진입 348030 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[14:02:10] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[14:02:10] 💾 [SCALP] universe=90 saved=90 +[14:02:10] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:02:17] AFR 재진입 078935 sid=SCALP name=scalp_re px=58100 alert=1045500200I +[14:02:17] [ls_cond_hist] AFR 재진입 078935 sid=SCALP name=scalp_re px=58100 alert=1045500200I +[14:02:17] 💾 [SCALP] universe=91 saved=91 +[14:02:17] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:02:37] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[14:02:37] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[14:02:38] 💾 [SCALP] universe=92 saved=92 +[14:02:38] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:03:05] AFR 이탈 348030 sid=SCALP name=scalp_re px=2990 alert=1045500200I +[14:03:05] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=2990 alert=1045500200I +[14:03:05] 💾 [SCALP] universe=91 saved=91 +[14:03:05] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:03:06] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[14:03:06] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[14:03:07] 💾 [SCALP] universe=90 saved=90 +[14:03:07] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:03:18] AFR 이탈 098070 sid=SCALP name=scalp_re px=26450 alert=1045500200I +[14:03:18] [ls_cond_hist] AFR 이탈 098070 sid=SCALP name=scalp_re px=26450 alert=1045500200I +[14:03:18] 💾 [SCALP] universe=89 saved=89 +[14:03:18] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:03:20] AFR 재진입 348030 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[14:03:20] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[14:03:21] 💾 [SCALP] universe=90 saved=90 +[14:03:21] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:03:22] AFR 진입 045660 sid=SCALP name=scalp_re px=8040 alert=1045500200I +[14:03:22] [ls_cond_hist] AFR 진입 045660 sid=SCALP name=scalp_re px=8040 alert=1045500200I +[14:03:22] 💾 [SCALP] universe=91 saved=91 +[14:03:22] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:03:47] AFR 이탈 300080 sid=SCALP name=scalp_re px=8070 alert=1045500200I +[14:03:47] [ls_cond_hist] AFR 이탈 300080 sid=SCALP name=scalp_re px=8070 alert=1045500200I +[14:03:47] 💾 [SCALP] universe=90 saved=90 +[14:03:47] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:03:54] AFR 재진입 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[14:03:54] [ls_cond_hist] AFR 재진입 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[14:03:54] 💾 [SCALP] universe=91 saved=91 +[14:03:54] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:04:17] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[14:04:17] [ls_cond_hist] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[14:04:17] 💾 [SCALP] universe=92 saved=92 +[14:04:17] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:04:21] AFR 이탈 348030 sid=SCALP name=scalp_re px=2990 alert=1045500200I +[14:04:21] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=2990 alert=1045500200I +[14:04:21] 💾 [SCALP] universe=91 saved=91 +[14:04:21] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:04:25] AFR 재진입 348030 sid=SCALP name=scalp_re px=3005 alert=1045500200I +[14:04:25] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3005 alert=1045500200I +[14:04:26] 💾 [SCALP] universe=92 saved=92 +[14:04:26] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:04:38] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[14:04:38] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[14:04:38] 💾 [SCALP] universe=91 saved=91 +[14:04:38] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:05:21] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[14:05:21] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[14:05:21] 💾 [SCALP] universe=90 saved=90 +[14:05:21] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:05:21] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:05:21] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:05:21] 💾 [SCALP] universe=91 saved=91 +[14:05:21] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:05:21] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[14:05:21] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[14:05:21] 💾 [SCALP] universe=92 saved=92 +[14:05:21] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:05:24] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[14:05:24] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[14:05:24] 💾 [SCALP] universe=91 saved=91 +[14:05:24] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:05:43] AFR 이탈 067370 sid=SCALP name=scalp_re px=6280 alert=1045500200I +[14:05:43] [ls_cond_hist] AFR 이탈 067370 sid=SCALP name=scalp_re px=6280 alert=1045500200I +[14:05:43] 💾 [SCALP] universe=90 saved=90 +[14:05:43] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:05:47] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[14:05:47] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[14:05:47] 💾 [SCALP] universe=89 saved=89 +[14:05:47] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:05:52] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[14:05:52] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[14:05:52] 💾 [SCALP] universe=88 saved=88 +[14:05:52] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:06:01] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[14:06:01] [ls_cond_hist] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[14:06:01] 💾 [SCALP] universe=89 saved=89 +[14:06:01] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:06:14] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[14:06:14] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[14:06:14] 💾 [SCALP] universe=90 saved=90 +[14:06:14] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:06:23] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[14:06:23] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[14:06:23] 💾 [SCALP] universe=89 saved=89 +[14:06:23] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:06:31] AFR 재진입 009520 sid=SCALP name=scalp_re px=10530 alert=1045500200I +[14:06:31] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10530 alert=1045500200I +[14:06:31] 💾 [SCALP] universe=90 saved=90 +[14:06:31] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:06:34] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:06:34] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:06:34] 💾 [SCALP] universe=91 saved=91 +[14:06:34] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:06:34] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[14:06:34] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[14:06:34] 💾 [SCALP] universe=90 saved=90 +[14:06:34] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:06:41] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[14:06:41] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[14:06:41] 💾 [SCALP] universe=91 saved=91 +[14:06:41] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:07:02] AFR 이탈 215000 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[14:07:02] [ls_cond_hist] AFR 이탈 215000 sid=SCALP name=scalp_re px=39900 alert=1045500200I +[14:07:02] 💾 [SCALP] universe=90 saved=90 +[14:07:02] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:07:04] AFR 이탈 348030 sid=SCALP name=scalp_re px=2990 alert=1045500200I +[14:07:04] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=2990 alert=1045500200I +[14:07:04] 💾 [SCALP] universe=89 saved=89 +[14:07:04] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:07:07] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[14:07:07] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[14:07:07] 💾 [SCALP] universe=88 saved=88 +[14:07:07] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:07:14] AFR 이탈 088340 sid=SCALP name=scalp_re px=6670 alert=1045500200I +[14:07:14] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6670 alert=1045500200I +[14:07:14] 💾 [SCALP] universe=87 saved=87 +[14:07:14] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[14:07:18] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[14:07:18] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[14:07:18] 💾 [SCALP] universe=88 saved=88 +[14:07:18] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:07:30] AFR 재진입 348030 sid=SCALP name=scalp_re px=3010 alert=1045500200I +[14:07:30] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3010 alert=1045500200I +[14:07:30] 💾 [SCALP] universe=89 saved=89 +[14:07:30] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:07:32] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[14:07:32] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[14:07:32] 💾 [SCALP] universe=88 saved=88 +[14:07:32] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:07:32] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[14:07:32] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[14:07:32] 💾 [SCALP] universe=87 saved=87 +[14:07:32] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[14:07:36] AFR 이탈 101970 sid=SCALP name=scalp_re px=9620 alert=1045500200I +[14:07:36] [ls_cond_hist] AFR 이탈 101970 sid=SCALP name=scalp_re px=9620 alert=1045500200I +[14:07:36] 💾 [SCALP] universe=86 saved=86 +[14:07:36] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[14:07:49] AFR 재진입 088340 sid=SCALP name=scalp_re px=6700 alert=1045500200I +[14:07:49] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6700 alert=1045500200I +[14:07:49] 💾 [SCALP] universe=87 saved=87 +[14:07:49] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[14:08:06] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:08:06] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:08:06] 💾 [SCALP] universe=86 saved=86 +[14:08:06] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[14:08:09] AFR 진입 014830 sid=SCALP name=scalp_re px=62700 alert=1045500200I +[14:08:09] [ls_cond_hist] AFR 진입 014830 sid=SCALP name=scalp_re px=62700 alert=1045500200I +[14:08:09] 💾 [SCALP] universe=87 saved=87 +[14:08:09] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[14:08:09] AFR 이탈 014830 sid=SCALP name=scalp_re px=62600 alert=1045500200I +[14:08:09] [ls_cond_hist] AFR 이탈 014830 sid=SCALP name=scalp_re px=62600 alert=1045500200I +[14:08:09] 💾 [SCALP] universe=86 saved=86 +[14:08:09] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[14:08:09] AFR 재진입 014830 sid=SCALP name=scalp_re px=62800 alert=1045500200I +[14:08:09] [ls_cond_hist] AFR 재진입 014830 sid=SCALP name=scalp_re px=62800 alert=1045500200I +[14:08:09] 💾 [SCALP] universe=87 saved=87 +[14:08:09] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[14:08:12] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[14:08:12] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[14:08:12] 💾 [SCALP] universe=86 saved=86 +[14:08:12] [ls_cond_hist] 💾 [SCALP] universe=86 saved=86 +[14:08:14] AFR 재진입 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[14:08:14] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[14:08:14] 💾 [SCALP] universe=87 saved=87 +[14:08:14] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[14:08:18] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[14:08:18] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10550 alert=1045500200I +[14:08:18] 💾 [SCALP] universe=88 saved=88 +[14:08:18] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:08:30] AFR 이탈 014830 sid=SCALP name=scalp_re px=62700 alert=1045500200I +[14:08:30] [ls_cond_hist] AFR 이탈 014830 sid=SCALP name=scalp_re px=62700 alert=1045500200I +[14:08:30] 💾 [SCALP] universe=87 saved=87 +[14:08:30] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[14:08:30] AFR 재진입 014830 sid=SCALP name=scalp_re px=62500 alert=1045500200I +[14:08:30] [ls_cond_hist] AFR 재진입 014830 sid=SCALP name=scalp_re px=62500 alert=1045500200I +[14:08:30] 💾 [SCALP] universe=88 saved=88 +[14:08:30] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:09:07] AFR 이탈 411080 sid=SCALP name=scalp_re px=3835 alert=1045500200I +[14:09:07] [ls_cond_hist] AFR 이탈 411080 sid=SCALP name=scalp_re px=3835 alert=1045500200I +[14:09:07] 💾 [SCALP] universe=87 saved=87 +[14:09:07] [ls_cond_hist] 💾 [SCALP] universe=87 saved=87 +[14:09:09] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:09:09] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:09:09] 💾 [SCALP] universe=88 saved=88 +[14:09:09] [ls_cond_hist] 💾 [SCALP] universe=88 saved=88 +[14:09:20] AFR 재진입 061250 sid=SCALP name=scalp_re px=8950 alert=1045500200I +[14:09:20] [ls_cond_hist] AFR 재진입 061250 sid=SCALP name=scalp_re px=8950 alert=1045500200I +[14:09:20] 💾 [SCALP] universe=89 saved=89 +[14:09:20] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:09:31] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:09:31] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:09:31] 💾 [SCALP] universe=90 saved=90 +[14:09:31] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:09:37] AFR 재진입 411080 sid=SCALP name=scalp_re px=3820 alert=1045500200I +[14:09:37] [ls_cond_hist] AFR 재진입 411080 sid=SCALP name=scalp_re px=3820 alert=1045500200I +[14:09:37] 💾 [SCALP] universe=91 saved=91 +[14:09:37] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:09:44] AFR 이탈 331920 sid=SCALP name=scalp_re px=9300 alert=1045500200I +[14:09:44] [ls_cond_hist] AFR 이탈 331920 sid=SCALP name=scalp_re px=9300 alert=1045500200I +[14:09:44] 💾 [SCALP] universe=90 saved=90 +[14:09:44] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:10:13] AFR 재진입 101970 sid=SCALP name=scalp_re px=9700 alert=1045500200I +[14:10:13] [ls_cond_hist] AFR 재진입 101970 sid=SCALP name=scalp_re px=9700 alert=1045500200I +[14:10:13] 💾 [SCALP] universe=91 saved=91 +[14:10:13] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:10:24] AFR 재진입 331920 sid=SCALP name=scalp_re px=9270 alert=1045500200I +[14:10:24] [ls_cond_hist] AFR 재진입 331920 sid=SCALP name=scalp_re px=9270 alert=1045500200I +[14:10:24] 💾 [SCALP] universe=92 saved=92 +[14:10:24] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:10:27] AFR 재진입 036670 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[14:10:27] [ls_cond_hist] AFR 재진입 036670 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[14:10:27] 💾 [SCALP] universe=93 saved=93 +[14:10:27] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:10:30] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:10:30] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:10:31] 💾 [SCALP] universe=92 saved=92 +[14:10:31] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:10:31] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:10:31] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:10:31] 💾 [SCALP] universe=93 saved=93 +[14:10:31] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:10:31] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[14:10:31] [ls_cond_hist] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[14:10:31] 💾 [SCALP] universe=94 saved=94 +[14:10:31] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:10:40] AFR 재진입 143160 sid=SCALP name=scalp_re px=15920 alert=1045500200I +[14:10:40] [ls_cond_hist] AFR 재진입 143160 sid=SCALP name=scalp_re px=15920 alert=1045500200I +[14:10:40] 💾 [SCALP] universe=95 saved=95 +[14:10:40] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:11:00] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15240 alert=1045500200I +[14:11:00] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15240 alert=1045500200I +[14:11:00] 💾 [SCALP] universe=94 saved=94 +[14:11:00] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:11:10] AFR 이탈 348030 sid=SCALP name=scalp_re px=2990 alert=1045500200I +[14:11:10] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=2990 alert=1045500200I +[14:11:10] 💾 [SCALP] universe=93 saved=93 +[14:11:10] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:11:11] AFR 재진입 348030 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[14:11:11] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[14:11:11] 💾 [SCALP] universe=94 saved=94 +[14:11:11] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:11:24] AFR 이탈 101330 sid=SCALP name=scalp_re px=3340 alert=1045500200I +[14:11:24] [ls_cond_hist] AFR 이탈 101330 sid=SCALP name=scalp_re px=3340 alert=1045500200I +[14:11:24] 💾 [SCALP] universe=93 saved=93 +[14:11:24] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:11:25] AFR 이탈 215000 sid=SCALP name=scalp_re px=39850 alert=1045500200I +[14:11:25] [ls_cond_hist] AFR 이탈 215000 sid=SCALP name=scalp_re px=39850 alert=1045500200I +[14:11:25] 💾 [SCALP] universe=92 saved=92 +[14:11:25] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:11:47] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15200 alert=1045500200I +[14:11:47] [ls_cond_hist] AFR 재진입 0007C0 sid=SCALP name=scalp_re px=15200 alert=1045500200I +[14:11:47] 💾 [SCALP] universe=93 saved=93 +[14:11:47] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:12:04] AFR 이탈 014830 sid=SCALP name=scalp_re px=63100 alert=1045500200I +[14:12:04] [ls_cond_hist] AFR 이탈 014830 sid=SCALP name=scalp_re px=63100 alert=1045500200I +[14:12:04] 💾 [SCALP] universe=92 saved=92 +[14:12:04] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:12:43] AFR 재진입 001940 sid=SCALP name=scalp_re px=25750 alert=1045500200I +[14:12:43] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25750 alert=1045500200I +[14:12:43] 💾 [SCALP] universe=93 saved=93 +[14:12:43] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:12:56] AFR 재진입 041910 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[14:12:56] [ls_cond_hist] AFR 재진입 041910 sid=SCALP name=scalp_re px=5470 alert=1045500200I +[14:12:56] 💾 [SCALP] universe=94 saved=94 +[14:12:56] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:13:00] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[14:13:00] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[14:13:00] 💾 [SCALP] universe=93 saved=93 +[14:13:00] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:13:03] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[14:13:03] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[14:13:03] 💾 [SCALP] universe=94 saved=94 +[14:13:03] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:13:06] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15260 alert=1045500200I +[14:13:06] [ls_cond_hist] AFR 이탈 0007C0 sid=SCALP name=scalp_re px=15260 alert=1045500200I +[14:13:06] 💾 [SCALP] universe=93 saved=93 +[14:13:06] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:13:12] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[14:13:12] [ls_cond_hist] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[14:13:12] 💾 [SCALP] universe=94 saved=94 +[14:13:12] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:13:12] AFR 이탈 001940 sid=SCALP name=scalp_re px=25800 alert=1045500200I +[14:13:12] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25800 alert=1045500200I +[14:13:12] 💾 [SCALP] universe=93 saved=93 +[14:13:12] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:13:16] AFR 재진입 004430 sid=SCALP name=scalp_re px=12820 alert=1045500200I +[14:13:16] [ls_cond_hist] AFR 재진입 004430 sid=SCALP name=scalp_re px=12820 alert=1045500200I +[14:13:16] 💾 [SCALP] universe=94 saved=94 +[14:13:16] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:13:30] AFR 재진입 067370 sid=SCALP name=scalp_re px=6210 alert=1045500200I +[14:13:30] [ls_cond_hist] AFR 재진입 067370 sid=SCALP name=scalp_re px=6210 alert=1045500200I +[14:13:30] 💾 [SCALP] universe=95 saved=95 +[14:13:30] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:14:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:14:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:14:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:14:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:14:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:14:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:14:31] ⏱️ flush [SCALP/scalp_re] n=95 univ=95 +[14:14:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=95 univ=95 +[14:15:03] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[14:15:03] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[14:15:04] 💾 [SCALP] universe=94 saved=94 +[14:15:04] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:15:53] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[14:15:53] [ls_cond_hist] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22400 alert=1045500200I +[14:15:53] 💾 [SCALP] universe=93 saved=93 +[14:15:53] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:16:39] AFR 재진입 101330 sid=SCALP name=scalp_re px=3315 alert=1045500200I +[14:16:39] [ls_cond_hist] AFR 재진입 101330 sid=SCALP name=scalp_re px=3315 alert=1045500200I +[14:16:39] 💾 [SCALP] universe=94 saved=94 +[14:16:39] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:17:14] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[14:17:14] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[14:17:14] 💾 [SCALP] universe=93 saved=93 +[14:17:14] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:18:00] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:18:00] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:18:00] 💾 [SCALP] universe=94 saved=94 +[14:18:00] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:18:07] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:18:07] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:18:07] 💾 [SCALP] universe=93 saved=93 +[14:18:07] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:18:07] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[14:18:07] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[14:18:07] 💾 [SCALP] universe=94 saved=94 +[14:18:07] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:18:10] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[14:18:10] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[14:18:10] 💾 [SCALP] universe=93 saved=93 +[14:18:10] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:18:29] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[14:18:29] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[14:18:29] 💾 [SCALP] universe=92 saved=92 +[14:18:29] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:18:34] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[14:18:34] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[14:18:34] 💾 [SCALP] universe=93 saved=93 +[14:18:34] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:18:36] AFR 이탈 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[14:18:36] [ls_cond_hist] AFR 이탈 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[14:18:36] 💾 [SCALP] universe=92 saved=92 +[14:18:36] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:18:37] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[14:18:37] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[14:18:37] 💾 [SCALP] universe=91 saved=91 +[14:18:37] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:18:37] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:18:37] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:18:37] 💾 [SCALP] universe=92 saved=92 +[14:18:37] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:18:39] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[14:18:39] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[14:18:39] 💾 [SCALP] universe=91 saved=91 +[14:18:39] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:18:48] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[14:18:48] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[14:18:49] 💾 [SCALP] universe=92 saved=92 +[14:18:49] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:19:02] AFR 진입 296640 sid=SCALP name=scalp_re px=4640 alert=1045500200I +[14:19:02] [ls_cond_hist] AFR 진입 296640 sid=SCALP name=scalp_re px=4640 alert=1045500200I +[14:19:02] 💾 [SCALP] universe=93 saved=93 +[14:19:02] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:19:03] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[14:19:03] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[14:19:03] 💾 [SCALP] universe=92 saved=92 +[14:19:03] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:19:06] AFR 이탈 004365 sid=SCALP name=scalp_re px=9380 alert=1045500200I +[14:19:06] [ls_cond_hist] AFR 이탈 004365 sid=SCALP name=scalp_re px=9380 alert=1045500200I +[14:19:06] 💾 [SCALP] universe=91 saved=91 +[14:19:06] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:19:22] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[14:19:22] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[14:19:22] 💾 [SCALP] universe=92 saved=92 +[14:19:22] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:19:22] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:19:22] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:19:22] 💾 [SCALP] universe=93 saved=93 +[14:19:22] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:19:23] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[14:19:23] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[14:19:23] 💾 [SCALP] universe=92 saved=92 +[14:19:23] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:19:56] AFR 진입 008370 sid=SCALP name=scalp_re px=4745 alert=1045500200I +[14:19:56] [ls_cond_hist] AFR 진입 008370 sid=SCALP name=scalp_re px=4745 alert=1045500200I +[14:19:56] 💾 [SCALP] universe=93 saved=93 +[14:19:56] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:20:00] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[14:20:00] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[14:20:00] 💾 [SCALP] universe=94 saved=94 +[14:20:00] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:20:00] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[14:20:00] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[14:20:00] 💾 [SCALP] universe=93 saved=93 +[14:20:00] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:20:02] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[14:20:02] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[14:20:02] 💾 [SCALP] universe=94 saved=94 +[14:20:02] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:20:08] AFR 이탈 476830 sid=SCALP name=scalp_re px=27050 alert=1045500200I +[14:20:08] [ls_cond_hist] AFR 이탈 476830 sid=SCALP name=scalp_re px=27050 alert=1045500200I +[14:20:08] 💾 [SCALP] universe=93 saved=93 +[14:20:08] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:20:08] AFR 진입 082270 sid=SCALP name=scalp_re px=10410 alert=1045500200I +[14:20:08] [ls_cond_hist] AFR 진입 082270 sid=SCALP name=scalp_re px=10410 alert=1045500200I +[14:20:08] 💾 [SCALP] universe=94 saved=94 +[14:20:08] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:20:15] AFR 재진입 300080 sid=SCALP name=scalp_re px=8070 alert=1045500200I +[14:20:15] [ls_cond_hist] AFR 재진입 300080 sid=SCALP name=scalp_re px=8070 alert=1045500200I +[14:20:15] 💾 [SCALP] universe=95 saved=95 +[14:20:15] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:20:31] AFR 이탈 045660 sid=SCALP name=scalp_re px=8010 alert=1045500200I +[14:20:31] [ls_cond_hist] AFR 이탈 045660 sid=SCALP name=scalp_re px=8010 alert=1045500200I +[14:20:31] 💾 [SCALP] universe=94 saved=94 +[14:20:31] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:21:05] AFR 이탈 064850 sid=SCALP name=scalp_re px=19030 alert=1045500200I +[14:21:05] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=19030 alert=1045500200I +[14:21:05] 💾 [SCALP] universe=93 saved=93 +[14:21:05] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:21:05] AFR 재진입 064850 sid=SCALP name=scalp_re px=19000 alert=1045500200I +[14:21:05] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=19000 alert=1045500200I +[14:21:05] 💾 [SCALP] universe=94 saved=94 +[14:21:05] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:21:15] AFR 이탈 009520 sid=SCALP name=scalp_re px=10610 alert=1045500200I +[14:21:15] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10610 alert=1045500200I +[14:21:15] 💾 [SCALP] universe=93 saved=93 +[14:21:15] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:21:20] AFR 이탈 101970 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[14:21:20] [ls_cond_hist] AFR 이탈 101970 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[14:21:20] 💾 [SCALP] universe=92 saved=92 +[14:21:20] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:21:27] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[14:21:27] [ls_cond_hist] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[14:21:27] 💾 [SCALP] universe=93 saved=93 +[14:21:27] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:21:28] AFR 이탈 082270 sid=SCALP name=scalp_re px=10500 alert=1045500200I +[14:21:28] [ls_cond_hist] AFR 이탈 082270 sid=SCALP name=scalp_re px=10500 alert=1045500200I +[14:21:28] 💾 [SCALP] universe=92 saved=92 +[14:21:28] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:21:32] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[14:21:32] [ls_cond_hist] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[14:21:32] 💾 [SCALP] universe=91 saved=91 +[14:21:32] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:21:41] AFR 이탈 101330 sid=SCALP name=scalp_re px=3335 alert=1045500200I +[14:21:41] [ls_cond_hist] AFR 이탈 101330 sid=SCALP name=scalp_re px=3335 alert=1045500200I +[14:21:41] 💾 [SCALP] universe=90 saved=90 +[14:21:41] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:21:48] AFR 진입 049520 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[14:21:48] [ls_cond_hist] AFR 진입 049520 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[14:21:48] 💾 [SCALP] universe=91 saved=91 +[14:21:48] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:22:03] AFR 이탈 064850 sid=SCALP name=scalp_re px=19050 alert=1045500200I +[14:22:03] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=19050 alert=1045500200I +[14:22:03] 💾 [SCALP] universe=90 saved=90 +[14:22:03] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:22:10] AFR 이탈 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[14:22:10] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[14:22:10] 💾 [SCALP] universe=89 saved=89 +[14:22:10] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:22:10] AFR 재진입 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[14:22:10] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[14:22:11] 💾 [SCALP] universe=90 saved=90 +[14:22:11] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:22:18] AFR 재진입 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[14:22:18] [ls_cond_hist] AFR 재진입 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[14:22:19] 💾 [SCALP] universe=91 saved=91 +[14:22:19] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:22:25] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[14:22:25] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10600 alert=1045500200I +[14:22:25] 💾 [SCALP] universe=92 saved=92 +[14:22:25] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:22:35] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[14:22:35] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[14:22:35] 💾 [SCALP] universe=91 saved=91 +[14:22:35] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:22:42] AFR 이탈 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[14:22:42] [ls_cond_hist] AFR 이탈 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[14:22:42] 💾 [SCALP] universe=90 saved=90 +[14:22:42] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:22:54] AFR 이탈 067370 sid=SCALP name=scalp_re px=6270 alert=1045500200I +[14:22:54] [ls_cond_hist] AFR 이탈 067370 sid=SCALP name=scalp_re px=6270 alert=1045500200I +[14:22:54] 💾 [SCALP] universe=89 saved=89 +[14:22:54] [ls_cond_hist] 💾 [SCALP] universe=89 saved=89 +[14:23:08] AFR 재진입 064850 sid=SCALP name=scalp_re px=19000 alert=1045500200I +[14:23:08] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=19000 alert=1045500200I +[14:23:08] 💾 [SCALP] universe=90 saved=90 +[14:23:08] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:23:16] AFR 재진입 300080 sid=SCALP name=scalp_re px=8070 alert=1045500200I +[14:23:16] [ls_cond_hist] AFR 재진입 300080 sid=SCALP name=scalp_re px=8070 alert=1045500200I +[14:23:16] 💾 [SCALP] universe=91 saved=91 +[14:23:16] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:23:31] AFR 재진입 476830 sid=SCALP name=scalp_re px=26950 alert=1045500200I +[14:23:31] [ls_cond_hist] AFR 재진입 476830 sid=SCALP name=scalp_re px=26950 alert=1045500200I +[14:23:31] 💾 [SCALP] universe=92 saved=92 +[14:23:31] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:23:41] AFR 재진입 101970 sid=SCALP name=scalp_re px=9910 alert=1045500200I +[14:23:41] [ls_cond_hist] AFR 재진입 101970 sid=SCALP name=scalp_re px=9910 alert=1045500200I +[14:23:41] 💾 [SCALP] universe=93 saved=93 +[14:23:41] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:23:44] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[14:23:44] [ls_cond_hist] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[14:23:44] 💾 [SCALP] universe=94 saved=94 +[14:23:44] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:23:48] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:23:48] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:23:48] 💾 [SCALP] universe=93 saved=93 +[14:23:48] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:23:50] AFR 재진입 045660 sid=SCALP name=scalp_re px=8030 alert=1045500200I +[14:23:50] [ls_cond_hist] AFR 재진입 045660 sid=SCALP name=scalp_re px=8030 alert=1045500200I +[14:23:50] 💾 [SCALP] universe=94 saved=94 +[14:23:50] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:23:53] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:23:53] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:23:53] 💾 [SCALP] universe=95 saved=95 +[14:23:53] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:24:03] AFR 이탈 476830 sid=SCALP name=scalp_re px=27050 alert=1045500200I +[14:24:03] [ls_cond_hist] AFR 이탈 476830 sid=SCALP name=scalp_re px=27050 alert=1045500200I +[14:24:03] 💾 [SCALP] universe=94 saved=94 +[14:24:03] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:24:08] AFR 재진입 476830 sid=SCALP name=scalp_re px=26950 alert=1045500200I +[14:24:08] [ls_cond_hist] AFR 재진입 476830 sid=SCALP name=scalp_re px=26950 alert=1045500200I +[14:24:08] 💾 [SCALP] universe=95 saved=95 +[14:24:08] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:24:39] AFR 이탈 353810 sid=SCALP name=scalp_re px=6130 alert=1045500200I +[14:24:39] [ls_cond_hist] AFR 이탈 353810 sid=SCALP name=scalp_re px=6130 alert=1045500200I +[14:24:39] 💾 [SCALP] universe=94 saved=94 +[14:24:39] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:24:41] AFR 이탈 215000 sid=SCALP name=scalp_re px=39775 alert=1045500200I +[14:24:41] [ls_cond_hist] AFR 이탈 215000 sid=SCALP name=scalp_re px=39775 alert=1045500200I +[14:24:41] 💾 [SCALP] universe=93 saved=93 +[14:24:41] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:24:43] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[14:24:43] [ls_cond_hist] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[14:24:43] 💾 [SCALP] universe=94 saved=94 +[14:24:43] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:24:43] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[14:24:43] [ls_cond_hist] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[14:24:43] 💾 [SCALP] universe=93 saved=93 +[14:24:43] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:24:44] AFR 재진입 353810 sid=SCALP name=scalp_re px=6120 alert=1045500200I +[14:24:44] [ls_cond_hist] AFR 재진입 353810 sid=SCALP name=scalp_re px=6120 alert=1045500200I +[14:24:44] 💾 [SCALP] universe=94 saved=94 +[14:24:44] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:24:57] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[14:24:57] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[14:24:57] 💾 [SCALP] universe=95 saved=95 +[14:24:57] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:25:06] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:25:06] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:25:06] 💾 [SCALP] universe=94 saved=94 +[14:25:06] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:25:08] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[14:25:08] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[14:25:09] 💾 [SCALP] universe=95 saved=95 +[14:25:09] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:25:30] AFR 이탈 101970 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[14:25:30] [ls_cond_hist] AFR 이탈 101970 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[14:25:30] 💾 [SCALP] universe=94 saved=94 +[14:25:30] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:25:59] AFR 이탈 045660 sid=SCALP name=scalp_re px=8010 alert=1045500200I +[14:25:59] [ls_cond_hist] AFR 이탈 045660 sid=SCALP name=scalp_re px=8010 alert=1045500200I +[14:25:59] 💾 [SCALP] universe=93 saved=93 +[14:25:59] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:26:05] AFR 이탈 064850 sid=SCALP name=scalp_re px=19050 alert=1045500200I +[14:26:05] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=19050 alert=1045500200I +[14:26:05] 💾 [SCALP] universe=92 saved=92 +[14:26:05] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:26:10] AFR 재진입 064850 sid=SCALP name=scalp_re px=18990 alert=1045500200I +[14:26:10] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18990 alert=1045500200I +[14:26:10] 💾 [SCALP] universe=93 saved=93 +[14:26:10] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:26:31] AFR 이탈 101330 sid=SCALP name=scalp_re px=3335 alert=1045500200I +[14:26:31] [ls_cond_hist] AFR 이탈 101330 sid=SCALP name=scalp_re px=3335 alert=1045500200I +[14:26:31] 💾 [SCALP] universe=92 saved=92 +[14:26:31] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:26:41] AFR 이탈 296640 sid=SCALP name=scalp_re px=4650 alert=1045500200I +[14:26:41] [ls_cond_hist] AFR 이탈 296640 sid=SCALP name=scalp_re px=4650 alert=1045500200I +[14:26:41] 💾 [SCALP] universe=91 saved=91 +[14:26:41] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:26:41] AFR 재진입 296640 sid=SCALP name=scalp_re px=4630 alert=1045500200I +[14:26:41] [ls_cond_hist] AFR 재진입 296640 sid=SCALP name=scalp_re px=4630 alert=1045500200I +[14:26:41] 💾 [SCALP] universe=92 saved=92 +[14:26:41] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:27:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:27:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:27:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:27:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:27:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:27:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:27:43] ⏱️ flush [SCALP/scalp_re] n=92 univ=92 +[14:27:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=92 univ=92 +[14:28:10] AFR 이탈 064850 sid=SCALP name=scalp_re px=19070 alert=1045500200I +[14:28:10] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=19070 alert=1045500200I +[14:28:10] 💾 [SCALP] universe=91 saved=91 +[14:28:10] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:28:16] AFR 재진입 064850 sid=SCALP name=scalp_re px=18980 alert=1045500200I +[14:28:16] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18980 alert=1045500200I +[14:28:16] 💾 [SCALP] universe=92 saved=92 +[14:28:16] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:28:59] AFR 재진입 101970 sid=SCALP name=scalp_re px=9910 alert=1045500200I +[14:28:59] [ls_cond_hist] AFR 재진입 101970 sid=SCALP name=scalp_re px=9910 alert=1045500200I +[14:28:59] 💾 [SCALP] universe=93 saved=93 +[14:28:59] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:28:59] AFR 재진입 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[14:28:59] [ls_cond_hist] AFR 재진입 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[14:28:59] 💾 [SCALP] universe=94 saved=94 +[14:28:59] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:29:04] AFR 이탈 064850 sid=SCALP name=scalp_re px=19070 alert=1045500200I +[14:29:04] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=19070 alert=1045500200I +[14:29:04] 💾 [SCALP] universe=93 saved=93 +[14:29:04] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:29:10] AFR 재진입 064850 sid=SCALP name=scalp_re px=18990 alert=1045500200I +[14:29:10] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=18990 alert=1045500200I +[14:29:10] 💾 [SCALP] universe=94 saved=94 +[14:29:10] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:29:13] AFR 이탈 348030 sid=SCALP name=scalp_re px=2990 alert=1045500200I +[14:29:13] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=2990 alert=1045500200I +[14:29:13] 💾 [SCALP] universe=93 saved=93 +[14:29:13] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:29:27] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[14:29:27] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[14:29:27] 💾 [SCALP] universe=92 saved=92 +[14:29:27] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:29:27] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[14:29:27] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[14:29:27] 💾 [SCALP] universe=93 saved=93 +[14:29:27] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:29:46] AFR 진입 450950 sid=SCALP name=scalp_re px=5700 alert=1045500200I +[14:29:46] [ls_cond_hist] AFR 진입 450950 sid=SCALP name=scalp_re px=5700 alert=1045500200I +[14:29:46] 💾 [SCALP] universe=94 saved=94 +[14:29:46] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:29:47] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[14:29:47] [ls_cond_hist] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[14:29:47] 💾 [SCALP] universe=93 saved=93 +[14:29:47] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:30:01] AFR 이탈 064850 sid=SCALP name=scalp_re px=19010 alert=1045500200I +[14:30:01] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=19010 alert=1045500200I +[14:30:01] 💾 [SCALP] universe=92 saved=92 +[14:30:01] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:30:01] AFR 이탈 101970 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[14:30:01] [ls_cond_hist] AFR 이탈 101970 sid=SCALP name=scalp_re px=9970 alert=1045500200I +[14:30:01] 💾 [SCALP] universe=91 saved=91 +[14:30:01] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:30:03] AFR 이탈 215000 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[14:30:03] [ls_cond_hist] AFR 이탈 215000 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[14:30:03] 💾 [SCALP] universe=90 saved=90 +[14:30:03] [ls_cond_hist] 💾 [SCALP] universe=90 saved=90 +[14:30:06] AFR 재진입 064850 sid=SCALP name=scalp_re px=19000 alert=1045500200I +[14:30:06] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=19000 alert=1045500200I +[14:30:06] 💾 [SCALP] universe=91 saved=91 +[14:30:06] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:30:14] AFR 재진입 101970 sid=SCALP name=scalp_re px=9770 alert=1045500200I +[14:30:14] [ls_cond_hist] AFR 재진입 101970 sid=SCALP name=scalp_re px=9770 alert=1045500200I +[14:30:14] 💾 [SCALP] universe=92 saved=92 +[14:30:14] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:31:02] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[14:31:02] [ls_cond_hist] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[14:31:02] 💾 [SCALP] universe=93 saved=93 +[14:31:02] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:31:06] AFR 진입 481070 sid=SCALP name=scalp_re px=17440 alert=1045500200I +[14:31:06] [ls_cond_hist] AFR 진입 481070 sid=SCALP name=scalp_re px=17440 alert=1045500200I +[14:31:06] 💾 [SCALP] universe=94 saved=94 +[14:31:06] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:31:07] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[14:31:07] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[14:31:07] 💾 [SCALP] universe=93 saved=93 +[14:31:07] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:31:33] AFR 진입 148930 sid=SCALP name=scalp_re px=3440 alert=1045500200I +[14:31:33] [ls_cond_hist] AFR 진입 148930 sid=SCALP name=scalp_re px=3440 alert=1045500200I +[14:31:33] 💾 [SCALP] universe=94 saved=94 +[14:31:33] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:31:34] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[14:31:34] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[14:31:34] 💾 [SCALP] universe=95 saved=95 +[14:31:34] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:31:34] AFR 재진입 082270 sid=SCALP name=scalp_re px=10390 alert=1045500200I +[14:31:34] [ls_cond_hist] AFR 재진입 082270 sid=SCALP name=scalp_re px=10390 alert=1045500200I +[14:31:34] 💾 [SCALP] universe=96 saved=96 +[14:31:34] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[14:31:46] AFR 이탈 458650 sid=SCALP name=scalp_re px=8000 alert=1045500200I +[14:31:46] [ls_cond_hist] AFR 이탈 458650 sid=SCALP name=scalp_re px=8000 alert=1045500200I +[14:31:46] 💾 [SCALP] universe=95 saved=95 +[14:31:46] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:32:01] AFR 이탈 474650 sid=SCALP name=scalp_re px=20800 alert=1045500200I +[14:32:01] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20800 alert=1045500200I +[14:32:02] 💾 [SCALP] universe=94 saved=94 +[14:32:02] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:32:02] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[14:32:02] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[14:32:02] 💾 [SCALP] universe=95 saved=95 +[14:32:02] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:32:05] AFR 이탈 450950 sid=SCALP name=scalp_re px=5660 alert=1045500200I +[14:32:05] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5660 alert=1045500200I +[14:32:05] 💾 [SCALP] universe=94 saved=94 +[14:32:05] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:32:05] AFR 재진입 450950 sid=SCALP name=scalp_re px=5700 alert=1045500200I +[14:32:05] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5700 alert=1045500200I +[14:32:05] 💾 [SCALP] universe=95 saved=95 +[14:32:05] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:32:07] AFR 이탈 143160 sid=SCALP name=scalp_re px=15910 alert=1045500200I +[14:32:07] [ls_cond_hist] AFR 이탈 143160 sid=SCALP name=scalp_re px=15910 alert=1045500200I +[14:32:07] 💾 [SCALP] universe=94 saved=94 +[14:32:07] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:32:24] AFR 재진입 143160 sid=SCALP name=scalp_re px=15830 alert=1045500200I +[14:32:24] [ls_cond_hist] AFR 재진입 143160 sid=SCALP name=scalp_re px=15830 alert=1045500200I +[14:32:24] 💾 [SCALP] universe=95 saved=95 +[14:32:24] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:32:52] AFR 재진입 120110 sid=SCALP name=scalp_re px=54300 alert=1045500200I +[14:32:52] [ls_cond_hist] AFR 재진입 120110 sid=SCALP name=scalp_re px=54300 alert=1045500200I +[14:32:52] 💾 [SCALP] universe=96 saved=96 +[14:32:52] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[14:32:52] AFR 재진입 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[14:32:52] [ls_cond_hist] AFR 재진입 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[14:32:52] 💾 [SCALP] universe=97 saved=97 +[14:32:52] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:32:59] AFR 재진입 006620 sid=SCALP name=scalp_re px=3835 alert=1045500200I +[14:32:59] [ls_cond_hist] AFR 재진입 006620 sid=SCALP name=scalp_re px=3835 alert=1045500200I +[14:32:59] 💾 [SCALP] universe=98 saved=98 +[14:32:59] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[14:33:01] AFR 이탈 064850 sid=SCALP name=scalp_re px=19040 alert=1045500200I +[14:33:01] [ls_cond_hist] AFR 이탈 064850 sid=SCALP name=scalp_re px=19040 alert=1045500200I +[14:33:01] 💾 [SCALP] universe=97 saved=97 +[14:33:01] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:33:05] AFR 이탈 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[14:33:05] [ls_cond_hist] AFR 이탈 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[14:33:05] 💾 [SCALP] universe=96 saved=96 +[14:33:05] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[14:33:08] AFR 이탈 088340 sid=SCALP name=scalp_re px=6670 alert=1045500200I +[14:33:08] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6670 alert=1045500200I +[14:33:08] 💾 [SCALP] universe=95 saved=95 +[14:33:08] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:33:17] AFR 이탈 143160 sid=SCALP name=scalp_re px=15990 alert=1045500200I +[14:33:17] [ls_cond_hist] AFR 이탈 143160 sid=SCALP name=scalp_re px=15990 alert=1045500200I +[14:33:17] 💾 [SCALP] universe=94 saved=94 +[14:33:17] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:33:32] AFR 진입 0030R0 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[14:33:32] [ls_cond_hist] AFR 진입 0030R0 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[14:33:32] 💾 [SCALP] universe=95 saved=95 +[14:33:32] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:33:40] AFR 이탈 082270 sid=SCALP name=scalp_re px=10400 alert=1045500200I +[14:33:40] [ls_cond_hist] AFR 이탈 082270 sid=SCALP name=scalp_re px=10400 alert=1045500200I +[14:33:40] 💾 [SCALP] universe=94 saved=94 +[14:33:40] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:33:44] AFR 재진입 082270 sid=SCALP name=scalp_re px=10390 alert=1045500200I +[14:33:44] [ls_cond_hist] AFR 재진입 082270 sid=SCALP name=scalp_re px=10390 alert=1045500200I +[14:33:44] 💾 [SCALP] universe=95 saved=95 +[14:33:44] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:33:46] AFR 이탈 006620 sid=SCALP name=scalp_re px=3830 alert=1045500200I +[14:33:46] [ls_cond_hist] AFR 이탈 006620 sid=SCALP name=scalp_re px=3830 alert=1045500200I +[14:33:46] 💾 [SCALP] universe=94 saved=94 +[14:33:46] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:34:03] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[14:34:03] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20750 alert=1045500200I +[14:34:03] 💾 [SCALP] universe=93 saved=93 +[14:34:03] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:34:03] AFR 재진입 317830 sid=SCALP name=scalp_re px=4545 alert=1045500200I +[14:34:03] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4545 alert=1045500200I +[14:34:04] 💾 [SCALP] universe=94 saved=94 +[14:34:04] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:34:04] AFR 이탈 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[14:34:04] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[14:34:04] 💾 [SCALP] universe=93 saved=93 +[14:34:04] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:34:04] AFR 재진입 450950 sid=SCALP name=scalp_re px=5650 alert=1045500200I +[14:34:04] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5650 alert=1045500200I +[14:34:04] 💾 [SCALP] universe=94 saved=94 +[14:34:04] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:34:43] AFR 재진입 155660 sid=SCALP name=scalp_re px=4550 alert=1045500200I +[14:34:43] [ls_cond_hist] AFR 재진입 155660 sid=SCALP name=scalp_re px=4550 alert=1045500200I +[14:34:43] 💾 [SCALP] universe=95 saved=95 +[14:34:43] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:34:45] AFR 이탈 267290 sid=SCALP name=scalp_re px=20150 alert=1045500200I +[14:34:45] [ls_cond_hist] AFR 이탈 267290 sid=SCALP name=scalp_re px=20150 alert=1045500200I +[14:34:45] 💾 [SCALP] universe=94 saved=94 +[14:34:45] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:34:55] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[14:34:55] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[14:34:55] 💾 [SCALP] universe=93 saved=93 +[14:34:55] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:35:02] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[14:35:02] [ls_cond_hist] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[14:35:02] 💾 [SCALP] universe=92 saved=92 +[14:35:02] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:35:06] AFR 이탈 082270 sid=SCALP name=scalp_re px=10400 alert=1045500200I +[14:35:06] [ls_cond_hist] AFR 이탈 082270 sid=SCALP name=scalp_re px=10400 alert=1045500200I +[14:35:06] 💾 [SCALP] universe=91 saved=91 +[14:35:06] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:35:17] AFR 재진입 023800 sid=SCALP name=scalp_re px=5360 alert=1045500200I +[14:35:17] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5360 alert=1045500200I +[14:35:17] 💾 [SCALP] universe=92 saved=92 +[14:35:17] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:35:20] AFR 이탈 101970 sid=SCALP name=scalp_re px=9940 alert=1045500200I +[14:35:20] [ls_cond_hist] AFR 이탈 101970 sid=SCALP name=scalp_re px=9940 alert=1045500200I +[14:35:20] 💾 [SCALP] universe=91 saved=91 +[14:35:20] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:35:41] AFR 재진입 059270 sid=SCALP name=scalp_re px=5240 alert=1045500200I +[14:35:41] [ls_cond_hist] AFR 재진입 059270 sid=SCALP name=scalp_re px=5240 alert=1045500200I +[14:35:41] 💾 [SCALP] universe=92 saved=92 +[14:35:41] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:35:57] AFR 이탈 296640 sid=SCALP name=scalp_re px=4655 alert=1045500200I +[14:35:57] [ls_cond_hist] AFR 이탈 296640 sid=SCALP name=scalp_re px=4655 alert=1045500200I +[14:35:57] 💾 [SCALP] universe=91 saved=91 +[14:35:57] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:36:18] AFR 재진입 101970 sid=SCALP name=scalp_re px=9790 alert=1045500200I +[14:36:18] [ls_cond_hist] AFR 재진입 101970 sid=SCALP name=scalp_re px=9790 alert=1045500200I +[14:36:18] 💾 [SCALP] universe=92 saved=92 +[14:36:18] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:36:22] AFR 재진입 064850 sid=SCALP name=scalp_re px=19010 alert=1045500200I +[14:36:22] [ls_cond_hist] AFR 재진입 064850 sid=SCALP name=scalp_re px=19010 alert=1045500200I +[14:36:22] 💾 [SCALP] universe=93 saved=93 +[14:36:22] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:36:28] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[14:36:28] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[14:36:28] 💾 [SCALP] universe=92 saved=92 +[14:36:28] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:37:03] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[14:37:03] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[14:37:03] 💾 [SCALP] universe=93 saved=93 +[14:37:03] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:37:24] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[14:37:24] [ls_cond_hist] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[14:37:24] 💾 [SCALP] universe=94 saved=94 +[14:37:24] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:37:31] AFR 이탈 004430 sid=SCALP name=scalp_re px=12850 alert=1045500200I +[14:37:31] [ls_cond_hist] AFR 이탈 004430 sid=SCALP name=scalp_re px=12850 alert=1045500200I +[14:37:31] 💾 [SCALP] universe=93 saved=93 +[14:37:31] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:37:33] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[14:37:33] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[14:37:33] 💾 [SCALP] universe=92 saved=92 +[14:37:33] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:37:34] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[14:37:34] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[14:37:34] 💾 [SCALP] universe=93 saved=93 +[14:37:34] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:37:42] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[14:37:42] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[14:37:42] 💾 [SCALP] universe=92 saved=92 +[14:37:42] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:37:43] AFR 재진입 300080 sid=SCALP name=scalp_re px=8070 alert=1045500200I +[14:37:43] [ls_cond_hist] AFR 재진입 300080 sid=SCALP name=scalp_re px=8070 alert=1045500200I +[14:37:43] 💾 [SCALP] universe=93 saved=93 +[14:37:43] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:37:51] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[14:37:51] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[14:37:51] 💾 [SCALP] universe=94 saved=94 +[14:37:51] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:37:59] AFR 재진입 474650 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[14:37:59] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[14:37:59] 💾 [SCALP] universe=95 saved=95 +[14:37:59] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:38:03] AFR 이탈 120110 sid=SCALP name=scalp_re px=54300 alert=1045500200I +[14:38:03] [ls_cond_hist] AFR 이탈 120110 sid=SCALP name=scalp_re px=54300 alert=1045500200I +[14:38:04] 💾 [SCALP] universe=94 saved=94 +[14:38:04] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:38:05] AFR 이탈 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[14:38:05] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[14:38:05] 💾 [SCALP] universe=93 saved=93 +[14:38:05] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:38:06] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:38:06] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:38:06] 💾 [SCALP] universe=92 saved=92 +[14:38:06] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:38:08] AFR 재진입 450950 sid=SCALP name=scalp_re px=5650 alert=1045500200I +[14:38:08] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5650 alert=1045500200I +[14:38:08] 💾 [SCALP] universe=93 saved=93 +[14:38:08] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:38:36] AFR 재진입 143160 sid=SCALP name=scalp_re px=15920 alert=1045500200I +[14:38:36] [ls_cond_hist] AFR 재진입 143160 sid=SCALP name=scalp_re px=15920 alert=1045500200I +[14:38:36] 💾 [SCALP] universe=94 saved=94 +[14:38:36] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:38:47] AFR 이탈 317830 sid=SCALP name=scalp_re px=4550 alert=1045500200I +[14:38:47] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4550 alert=1045500200I +[14:38:47] 💾 [SCALP] universe=93 saved=93 +[14:38:47] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:39:00] AFR 재진입 136540 sid=SCALP name=scalp_re px=10420 alert=1045500200I +[14:39:00] [ls_cond_hist] AFR 재진입 136540 sid=SCALP name=scalp_re px=10420 alert=1045500200I +[14:39:00] 💾 [SCALP] universe=94 saved=94 +[14:39:00] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:39:01] AFR 이탈 136540 sid=SCALP name=scalp_re px=10470 alert=1045500200I +[14:39:01] [ls_cond_hist] AFR 이탈 136540 sid=SCALP name=scalp_re px=10470 alert=1045500200I +[14:39:01] 💾 [SCALP] universe=93 saved=93 +[14:39:01] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:39:02] AFR 진입 077970 sid=SCALP name=scalp_re px=24100 alert=1045500200I +[14:39:02] [ls_cond_hist] AFR 진입 077970 sid=SCALP name=scalp_re px=24100 alert=1045500200I +[14:39:02] 💾 [SCALP] universe=94 saved=94 +[14:39:02] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:39:32] AFR 재진입 474650 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[14:39:32] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[14:39:32] 💾 [SCALP] universe=95 saved=95 +[14:39:32] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:40:00] AFR 이탈 474650 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[14:40:00] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[14:40:00] 💾 [SCALP] universe=94 saved=94 +[14:40:00] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:40:06] AFR 재진입 474650 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[14:40:06] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20550 alert=1045500200I +[14:40:06] 💾 [SCALP] universe=95 saved=95 +[14:40:06] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:40:07] AFR 이탈 143160 sid=SCALP name=scalp_re px=15980 alert=1045500200I +[14:40:07] [ls_cond_hist] AFR 이탈 143160 sid=SCALP name=scalp_re px=15980 alert=1045500200I +[14:40:07] 💾 [SCALP] universe=94 saved=94 +[14:40:07] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:40:11] AFR 이탈 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[14:40:11] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[14:40:11] 💾 [SCALP] universe=93 saved=93 +[14:40:11] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:40:11] AFR 재진입 450950 sid=SCALP name=scalp_re px=5680 alert=1045500200I +[14:40:11] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5680 alert=1045500200I +[14:40:11] 💾 [SCALP] universe=94 saved=94 +[14:40:11] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:40:12] AFR 이탈 059270 sid=SCALP name=scalp_re px=5260 alert=1045500200I +[14:40:12] [ls_cond_hist] AFR 이탈 059270 sid=SCALP name=scalp_re px=5260 alert=1045500200I +[14:40:12] 💾 [SCALP] universe=93 saved=93 +[14:40:12] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:40:13] AFR 이탈 450950 sid=SCALP name=scalp_re px=5630 alert=1045500200I +[14:40:13] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5630 alert=1045500200I +[14:40:13] 💾 [SCALP] universe=92 saved=92 +[14:40:13] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:40:13] AFR 재진입 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[14:40:13] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[14:40:13] 💾 [SCALP] universe=93 saved=93 +[14:40:13] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:40:28] AFR 재진입 101330 sid=SCALP name=scalp_re px=3325 alert=1045500200I +[14:40:28] [ls_cond_hist] AFR 재진입 101330 sid=SCALP name=scalp_re px=3325 alert=1045500200I +[14:40:28] 💾 [SCALP] universe=94 saved=94 +[14:40:28] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:40:28] AFR 이탈 078935 sid=SCALP name=scalp_re px=58200 alert=1045500200I +[14:40:28] [ls_cond_hist] AFR 이탈 078935 sid=SCALP name=scalp_re px=58200 alert=1045500200I +[14:40:29] 💾 [SCALP] universe=93 saved=93 +[14:40:29] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:40:30] AFR 이탈 353810 sid=SCALP name=scalp_re px=6140 alert=1045500200I +[14:40:30] [ls_cond_hist] AFR 이탈 353810 sid=SCALP name=scalp_re px=6140 alert=1045500200I +[14:40:30] 💾 [SCALP] universe=92 saved=92 +[14:40:30] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:40:31] AFR 이탈 338840 sid=SCALP name=scalp_re px=9310 alert=1045500200I +[14:40:31] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9310 alert=1045500200I +[14:40:32] 💾 [SCALP] universe=91 saved=91 +[14:40:32] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:40:46] AFR 재진입 088340 sid=SCALP name=scalp_re px=6710 alert=1045500200I +[14:40:46] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6710 alert=1045500200I +[14:40:46] 💾 [SCALP] universe=92 saved=92 +[14:40:46] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:40:46] AFR 이탈 088340 sid=SCALP name=scalp_re px=6660 alert=1045500200I +[14:40:46] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6660 alert=1045500200I +[14:40:46] 💾 [SCALP] universe=91 saved=91 +[14:40:46] [ls_cond_hist] 💾 [SCALP] universe=91 saved=91 +[14:40:54] AFR 진입 007700 sid=SCALP name=scalp_re px=14010 alert=1045500200I +[14:40:54] [ls_cond_hist] AFR 진입 007700 sid=SCALP name=scalp_re px=14010 alert=1045500200I +[14:40:54] 💾 [SCALP] universe=92 saved=92 +[14:40:54] [ls_cond_hist] 💾 [SCALP] universe=92 saved=92 +[14:41:22] AFR 재진입 014830 sid=SCALP name=scalp_re px=62700 alert=1045500200I +[14:41:22] [ls_cond_hist] AFR 재진입 014830 sid=SCALP name=scalp_re px=62700 alert=1045500200I +[14:41:23] 💾 [SCALP] universe=93 saved=93 +[14:41:23] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:41:24] AFR 재진입 338840 sid=SCALP name=scalp_re px=9230 alert=1045500200I +[14:41:24] [ls_cond_hist] AFR 재진입 338840 sid=SCALP name=scalp_re px=9230 alert=1045500200I +[14:41:24] 💾 [SCALP] universe=94 saved=94 +[14:41:24] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:41:26] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[14:41:26] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[14:41:27] 💾 [SCALP] universe=95 saved=95 +[14:41:27] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:41:29] AFR 이탈 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[14:41:29] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[14:41:29] 💾 [SCALP] universe=94 saved=94 +[14:41:29] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:41:47] AFR 재진입 353810 sid=SCALP name=scalp_re px=6120 alert=1045500200I +[14:41:47] [ls_cond_hist] AFR 재진입 353810 sid=SCALP name=scalp_re px=6120 alert=1045500200I +[14:41:47] 💾 [SCALP] universe=95 saved=95 +[14:41:47] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:42:02] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:42:02] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:42:02] 💾 [SCALP] universe=94 saved=94 +[14:42:02] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:42:02] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:42:02] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:42:02] 💾 [SCALP] universe=95 saved=95 +[14:42:02] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:42:05] AFR 이탈 101970 sid=SCALP name=scalp_re px=10180 alert=1045500200I +[14:42:05] [ls_cond_hist] AFR 이탈 101970 sid=SCALP name=scalp_re px=10180 alert=1045500200I +[14:42:05] 💾 [SCALP] universe=94 saved=94 +[14:42:05] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:42:11] AFR 이탈 353810 sid=SCALP name=scalp_re px=6140 alert=1045500200I +[14:42:11] [ls_cond_hist] AFR 이탈 353810 sid=SCALP name=scalp_re px=6140 alert=1045500200I +[14:42:11] 💾 [SCALP] universe=93 saved=93 +[14:42:11] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:42:21] AFR 재진입 088340 sid=SCALP name=scalp_re px=6700 alert=1045500200I +[14:42:21] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6700 alert=1045500200I +[14:42:21] 💾 [SCALP] universe=94 saved=94 +[14:42:21] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:42:34] AFR 이탈 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[14:42:34] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[14:42:34] 💾 [SCALP] universe=93 saved=93 +[14:42:34] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:42:34] AFR 재진입 450950 sid=SCALP name=scalp_re px=5680 alert=1045500200I +[14:42:34] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5680 alert=1045500200I +[14:42:34] 💾 [SCALP] universe=94 saved=94 +[14:42:34] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:42:36] AFR 이탈 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[14:42:36] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[14:42:36] 💾 [SCALP] universe=93 saved=93 +[14:42:36] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:42:50] AFR 재진입 004365 sid=SCALP name=scalp_re px=9300 alert=1045500200I +[14:42:50] [ls_cond_hist] AFR 재진입 004365 sid=SCALP name=scalp_re px=9300 alert=1045500200I +[14:42:50] 💾 [SCALP] universe=94 saved=94 +[14:42:50] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:42:53] AFR 재진입 353810 sid=SCALP name=scalp_re px=6140 alert=1045500200I +[14:42:53] [ls_cond_hist] AFR 재진입 353810 sid=SCALP name=scalp_re px=6140 alert=1045500200I +[14:42:53] 💾 [SCALP] universe=95 saved=95 +[14:42:53] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:43:03] AFR 이탈 353810 sid=SCALP name=scalp_re px=6140 alert=1045500200I +[14:43:03] [ls_cond_hist] AFR 이탈 353810 sid=SCALP name=scalp_re px=6140 alert=1045500200I +[14:43:03] 💾 [SCALP] universe=94 saved=94 +[14:43:03] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:43:03] AFR 이탈 481070 sid=SCALP name=scalp_re px=17550 alert=1045500200I +[14:43:03] [ls_cond_hist] AFR 이탈 481070 sid=SCALP name=scalp_re px=17550 alert=1045500200I +[14:43:03] 💾 [SCALP] universe=93 saved=93 +[14:43:03] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:43:14] AFR 재진입 088340 sid=SCALP name=scalp_re px=6700 alert=1045500200I +[14:43:14] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6700 alert=1045500200I +[14:43:15] 💾 [SCALP] universe=94 saved=94 +[14:43:15] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:43:17] AFR 재진입 067370 sid=SCALP name=scalp_re px=6260 alert=1045500200I +[14:43:17] [ls_cond_hist] AFR 재진입 067370 sid=SCALP name=scalp_re px=6260 alert=1045500200I +[14:43:18] 💾 [SCALP] universe=95 saved=95 +[14:43:18] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:43:42] AFR 이탈 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[14:43:42] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[14:43:42] 💾 [SCALP] universe=94 saved=94 +[14:43:42] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:43:43] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:43:43] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:43:43] 💾 [SCALP] universe=93 saved=93 +[14:43:43] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:43:44] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:43:44] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:43:44] 💾 [SCALP] universe=94 saved=94 +[14:43:44] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:44:02] AFR 이탈 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[14:44:02] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[14:44:02] 💾 [SCALP] universe=93 saved=93 +[14:44:02] [ls_cond_hist] 💾 [SCALP] universe=93 saved=93 +[14:44:02] AFR 재진입 296640 sid=SCALP name=scalp_re px=4625 alert=1045500200I +[14:44:02] [ls_cond_hist] AFR 재진입 296640 sid=SCALP name=scalp_re px=4625 alert=1045500200I +[14:44:02] 💾 [SCALP] universe=94 saved=94 +[14:44:02] [ls_cond_hist] 💾 [SCALP] universe=94 saved=94 +[14:44:02] AFR 재진입 450950 sid=SCALP name=scalp_re px=5670 alert=1045500200I +[14:44:02] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5670 alert=1045500200I +[14:44:02] 💾 [SCALP] universe=95 saved=95 +[14:44:02] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:44:03] AFR 재진입 088340 sid=SCALP name=scalp_re px=6700 alert=1045500200I +[14:44:03] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6700 alert=1045500200I +[14:44:03] 💾 [SCALP] universe=96 saved=96 +[14:44:03] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[14:44:08] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:44:08] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:44:08] 💾 [SCALP] universe=95 saved=95 +[14:44:08] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:44:10] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:44:10] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:44:10] 💾 [SCALP] universe=96 saved=96 +[14:44:10] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[14:44:13] AFR 재진입 101970 sid=SCALP name=scalp_re px=9930 alert=1045500200I +[14:44:13] [ls_cond_hist] AFR 재진입 101970 sid=SCALP name=scalp_re px=9930 alert=1045500200I +[14:44:13] 💾 [SCALP] universe=97 saved=97 +[14:44:13] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:44:38] AFR 재진입 481070 sid=SCALP name=scalp_re px=17530 alert=1045500200I +[14:44:38] [ls_cond_hist] AFR 재진입 481070 sid=SCALP name=scalp_re px=17530 alert=1045500200I +[14:44:38] 💾 [SCALP] universe=98 saved=98 +[14:44:38] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[14:44:50] AFR 재진입 082270 sid=SCALP name=scalp_re px=10390 alert=1045500200I +[14:44:50] [ls_cond_hist] AFR 재진입 082270 sid=SCALP name=scalp_re px=10390 alert=1045500200I +[14:44:50] 💾 [SCALP] universe=99 saved=99 +[14:44:50] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[14:44:58] AFR 이탈 004365 sid=SCALP name=scalp_re px=9350 alert=1045500200I +[14:44:58] [ls_cond_hist] AFR 이탈 004365 sid=SCALP name=scalp_re px=9350 alert=1045500200I +[14:44:58] 💾 [SCALP] universe=98 saved=98 +[14:44:58] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[14:45:04] AFR 이탈 101970 sid=SCALP name=scalp_re px=9960 alert=1045500200I +[14:45:04] [ls_cond_hist] AFR 이탈 101970 sid=SCALP name=scalp_re px=9960 alert=1045500200I +[14:45:04] 💾 [SCALP] universe=97 saved=97 +[14:45:04] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:45:07] AFR 재진입 143160 sid=SCALP name=scalp_re px=15950 alert=1045500200I +[14:45:07] [ls_cond_hist] AFR 재진입 143160 sid=SCALP name=scalp_re px=15950 alert=1045500200I +[14:45:07] 💾 [SCALP] universe=98 saved=98 +[14:45:07] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[14:45:14] AFR 이탈 143160 sid=SCALP name=scalp_re px=15760 alert=1045500200I +[14:45:14] [ls_cond_hist] AFR 이탈 143160 sid=SCALP name=scalp_re px=15760 alert=1045500200I +[14:45:14] 💾 [SCALP] universe=97 saved=97 +[14:45:14] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:45:19] AFR 이탈 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[14:45:19] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[14:45:19] 💾 [SCALP] universe=96 saved=96 +[14:45:19] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[14:45:22] AFR 이탈 296640 sid=SCALP name=scalp_re px=4665 alert=1045500200I +[14:45:22] [ls_cond_hist] AFR 이탈 296640 sid=SCALP name=scalp_re px=4665 alert=1045500200I +[14:45:22] 💾 [SCALP] universe=95 saved=95 +[14:45:22] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:45:26] AFR 재진입 101970 sid=SCALP name=scalp_re px=9930 alert=1045500200I +[14:45:26] [ls_cond_hist] AFR 재진입 101970 sid=SCALP name=scalp_re px=9930 alert=1045500200I +[14:45:26] 💾 [SCALP] universe=96 saved=96 +[14:45:26] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[14:45:33] AFR 재진입 458650 sid=SCALP name=scalp_re px=7980 alert=1045500200I +[14:45:33] [ls_cond_hist] AFR 재진입 458650 sid=SCALP name=scalp_re px=7980 alert=1045500200I +[14:45:33] 💾 [SCALP] universe=97 saved=97 +[14:45:33] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:46:06] AFR 이탈 101970 sid=SCALP name=scalp_re px=9980 alert=1045500200I +[14:46:06] [ls_cond_hist] AFR 이탈 101970 sid=SCALP name=scalp_re px=9980 alert=1045500200I +[14:46:06] 💾 [SCALP] universe=96 saved=96 +[14:46:06] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[14:46:06] AFR 재진입 004430 sid=SCALP name=scalp_re px=12830 alert=1045500200I +[14:46:06] [ls_cond_hist] AFR 재진입 004430 sid=SCALP name=scalp_re px=12830 alert=1045500200I +[14:46:07] 💾 [SCALP] universe=97 saved=97 +[14:46:07] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:46:18] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[14:46:18] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[14:46:18] 💾 [SCALP] universe=96 saved=96 +[14:46:18] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[14:46:20] AFR 이탈 069730 sid=SCALP name=scalp_re px=5710 alert=1045500200I +[14:46:20] [ls_cond_hist] AFR 이탈 069730 sid=SCALP name=scalp_re px=5710 alert=1045500200I +[14:46:20] 💾 [SCALP] universe=95 saved=95 +[14:46:20] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:46:23] AFR 재진입 069730 sid=SCALP name=scalp_re px=5710 alert=1045500200I +[14:46:23] [ls_cond_hist] AFR 재진입 069730 sid=SCALP name=scalp_re px=5710 alert=1045500200I +[14:46:23] 💾 [SCALP] universe=96 saved=96 +[14:46:23] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[14:46:24] AFR 재진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[14:46:24] [ls_cond_hist] AFR 재진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[14:46:24] 💾 [SCALP] universe=97 saved=97 +[14:46:24] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:46:34] AFR 이탈 101330 sid=SCALP name=scalp_re px=3330 alert=1045500200I +[14:46:34] [ls_cond_hist] AFR 이탈 101330 sid=SCALP name=scalp_re px=3330 alert=1045500200I +[14:46:34] 💾 [SCALP] universe=96 saved=96 +[14:46:34] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[14:46:34] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:46:34] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:46:34] 💾 [SCALP] universe=95 saved=95 +[14:46:34] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:46:51] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[14:46:51] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[14:46:51] 💾 [SCALP] universe=96 saved=96 +[14:46:51] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[14:46:57] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[14:46:57] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[14:46:57] 💾 [SCALP] universe=95 saved=95 +[14:46:57] [ls_cond_hist] 💾 [SCALP] universe=95 saved=95 +[14:47:05] AFR 재진입 101970 sid=SCALP name=scalp_re px=9950 alert=1045500200I +[14:47:05] [ls_cond_hist] AFR 재진입 101970 sid=SCALP name=scalp_re px=9950 alert=1045500200I +[14:47:05] 💾 [SCALP] universe=96 saved=96 +[14:47:05] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[14:47:11] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:47:11] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:47:11] 💾 [SCALP] universe=97 saved=97 +[14:47:11] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:47:15] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[14:47:15] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[14:47:15] 💾 [SCALP] universe=98 saved=98 +[14:47:15] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[14:47:19] AFR 재진입 088340 sid=SCALP name=scalp_re px=6690 alert=1045500200I +[14:47:19] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6690 alert=1045500200I +[14:47:19] 💾 [SCALP] universe=99 saved=99 +[14:47:19] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[14:47:20] AFR 이탈 004430 sid=SCALP name=scalp_re px=12840 alert=1045500200I +[14:47:20] [ls_cond_hist] AFR 이탈 004430 sid=SCALP name=scalp_re px=12840 alert=1045500200I +[14:47:20] 💾 [SCALP] universe=98 saved=98 +[14:47:20] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[14:47:20] AFR 이탈 051600 sid=SCALP name=scalp_re px=47050 alert=1045500200I +[14:47:20] [ls_cond_hist] AFR 이탈 051600 sid=SCALP name=scalp_re px=47050 alert=1045500200I +[14:47:20] 💾 [SCALP] universe=97 saved=97 +[14:47:20] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:47:33] AFR 재진입 004430 sid=SCALP name=scalp_re px=12830 alert=1045500200I +[14:47:33] [ls_cond_hist] AFR 재진입 004430 sid=SCALP name=scalp_re px=12830 alert=1045500200I +[14:47:33] 💾 [SCALP] universe=98 saved=98 +[14:47:33] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[14:47:34] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[14:47:34] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[14:47:34] 💾 [SCALP] universe=97 saved=97 +[14:47:34] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:47:35] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[14:47:35] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31600 alert=1045500200I +[14:47:35] 💾 [SCALP] universe=98 saved=98 +[14:47:35] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[14:47:47] AFR 진입 004985 sid=SCALP name=scalp_re px=8320 alert=1045500200I +[14:47:47] [ls_cond_hist] AFR 진입 004985 sid=SCALP name=scalp_re px=8320 alert=1045500200I +[14:47:48] 💾 [SCALP] universe=99 saved=99 +[14:47:48] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[14:47:51] AFR 이탈 088340 sid=SCALP name=scalp_re px=6660 alert=1045500200I +[14:47:51] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6660 alert=1045500200I +[14:47:51] 💾 [SCALP] universe=98 saved=98 +[14:47:51] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[14:48:37] AFR 이탈 004985 sid=SCALP name=scalp_re px=8310 alert=1045500200I +[14:48:37] [ls_cond_hist] AFR 이탈 004985 sid=SCALP name=scalp_re px=8310 alert=1045500200I +[14:48:37] 💾 [SCALP] universe=97 saved=97 +[14:48:37] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:48:42] AFR 재진입 088340 sid=SCALP name=scalp_re px=6690 alert=1045500200I +[14:48:42] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6690 alert=1045500200I +[14:48:42] 💾 [SCALP] universe=98 saved=98 +[14:48:42] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[14:48:42] AFR 이탈 088340 sid=SCALP name=scalp_re px=6660 alert=1045500200I +[14:48:42] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6660 alert=1045500200I +[14:48:42] 💾 [SCALP] universe=97 saved=97 +[14:48:42] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:49:06] AFR 재진입 004985 sid=SCALP name=scalp_re px=8310 alert=1045500200I +[14:49:06] [ls_cond_hist] AFR 재진입 004985 sid=SCALP name=scalp_re px=8310 alert=1045500200I +[14:49:06] 💾 [SCALP] universe=98 saved=98 +[14:49:06] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[14:49:19] AFR 이탈 004430 sid=SCALP name=scalp_re px=12840 alert=1045500200I +[14:49:19] [ls_cond_hist] AFR 이탈 004430 sid=SCALP name=scalp_re px=12840 alert=1045500200I +[14:49:19] 💾 [SCALP] universe=97 saved=97 +[14:49:19] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:49:42] AFR 진입 26490K sid=SCALP name=scalp_re px=7480 alert=1045500200I +[14:49:42] [ls_cond_hist] AFR 진입 26490K sid=SCALP name=scalp_re px=7480 alert=1045500200I +[14:49:42] 💾 [SCALP] universe=98 saved=98 +[14:49:42] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[14:49:43] AFR 재진입 088340 sid=SCALP name=scalp_re px=6690 alert=1045500200I +[14:49:43] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6690 alert=1045500200I +[14:49:43] 💾 [SCALP] universe=99 saved=99 +[14:49:43] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[14:49:43] AFR 이탈 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[14:49:43] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[14:49:43] 💾 [SCALP] universe=98 saved=98 +[14:49:43] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[14:49:45] AFR 재진입 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[14:49:45] [ls_cond_hist] AFR 재진입 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[14:49:45] 💾 [SCALP] universe=99 saved=99 +[14:49:45] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[14:49:47] AFR 재진입 088340 sid=SCALP name=scalp_re px=6690 alert=1045500200I +[14:49:47] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6690 alert=1045500200I +[14:49:47] 💾 [SCALP] universe=100 saved=100 +[14:49:47] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[14:50:05] AFR 이탈 215000 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[14:50:05] [ls_cond_hist] AFR 이탈 215000 sid=SCALP name=scalp_re px=39800 alert=1045500200I +[14:50:05] 💾 [SCALP] universe=99 saved=99 +[14:50:05] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[14:50:07] AFR 이탈 088340 sid=SCALP name=scalp_re px=6660 alert=1045500200I +[14:50:07] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6660 alert=1045500200I +[14:50:07] 💾 [SCALP] universe=98 saved=98 +[14:50:07] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[14:50:14] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[14:50:14] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[14:50:14] 💾 [SCALP] universe=97 saved=97 +[14:50:14] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:50:18] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:50:18] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:50:18] 💾 [SCALP] universe=96 saved=96 +[14:50:18] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[14:50:18] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:50:18] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[14:50:18] 💾 [SCALP] universe=97 saved=97 +[14:50:18] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:50:25] AFR 이탈 411080 sid=SCALP name=scalp_re px=3775 alert=1045500200I +[14:50:25] [ls_cond_hist] AFR 이탈 411080 sid=SCALP name=scalp_re px=3775 alert=1045500200I +[14:50:25] 💾 [SCALP] universe=96 saved=96 +[14:50:25] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[14:50:26] AFR 재진입 411080 sid=SCALP name=scalp_re px=3790 alert=1045500200I +[14:50:26] [ls_cond_hist] AFR 재진입 411080 sid=SCALP name=scalp_re px=3790 alert=1045500200I +[14:50:26] 💾 [SCALP] universe=97 saved=97 +[14:50:26] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[14:50:38] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[14:50:38] [ls_cond_hist] AFR 재진입 031430 sid=SCALP name=scalp_re px=11260 alert=1045500200I +[14:50:38] 💾 [SCALP] universe=98 saved=98 +[14:50:38] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[14:50:44] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[14:50:44] [ls_cond_hist] AFR 재진입 215000 sid=SCALP name=scalp_re px=39750 alert=1045500200I +[14:50:44] 💾 [SCALP] universe=99 saved=99 +[14:50:44] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[14:50:45] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[14:50:45] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[14:50:45] 💾 [SCALP] universe=100 saved=100 +[14:50:45] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[14:50:54] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[14:50:54] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[14:50:54] 💾 [SCALP] universe=99 saved=99 +[14:50:54] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[14:51:14] AFR 재진입 001940 sid=SCALP name=scalp_re px=25750 alert=1045500200I +[14:51:14] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25750 alert=1045500200I +[14:51:14] 💾 [SCALP] universe=100 saved=100 +[14:51:14] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[14:51:15] AFR 재진입 143160 sid=SCALP name=scalp_re px=15820 alert=1045500200I +[14:51:15] [ls_cond_hist] AFR 재진입 143160 sid=SCALP name=scalp_re px=15820 alert=1045500200I +[14:51:15] 💾 [SCALP] universe=101 saved=101 +[14:51:15] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[14:51:37] AFR 재진입 004430 sid=SCALP name=scalp_re px=12840 alert=1045500200I +[14:51:37] [ls_cond_hist] AFR 재진입 004430 sid=SCALP name=scalp_re px=12840 alert=1045500200I +[14:51:37] 💾 [SCALP] universe=102 saved=102 +[14:51:37] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[14:51:41] AFR 이탈 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[14:51:41] [ls_cond_hist] AFR 이탈 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[14:51:41] 💾 [SCALP] universe=101 saved=101 +[14:51:41] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[14:51:45] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[14:51:45] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[14:51:45] 💾 [SCALP] universe=102 saved=102 +[14:51:45] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[14:51:49] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[14:51:49] [ls_cond_hist] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[14:51:49] 💾 [SCALP] universe=101 saved=101 +[14:51:49] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[14:52:01] AFR 이탈 244920 sid=SCALP name=scalp_re px=11330 alert=1045500200I +[14:52:01] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11330 alert=1045500200I +[14:52:01] 💾 [SCALP] universe=100 saved=100 +[14:52:01] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[14:52:03] AFR 재진입 244920 sid=SCALP name=scalp_re px=11350 alert=1045500200I +[14:52:03] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11350 alert=1045500200I +[14:52:03] 💾 [SCALP] universe=101 saved=101 +[14:52:03] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[14:52:04] AFR 이탈 244920 sid=SCALP name=scalp_re px=11300 alert=1045500200I +[14:52:04] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11300 alert=1045500200I +[14:52:04] 💾 [SCALP] universe=100 saved=100 +[14:52:04] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[14:52:09] AFR 재진입 051600 sid=SCALP name=scalp_re px=46950 alert=1045500200I +[14:52:09] [ls_cond_hist] AFR 재진입 051600 sid=SCALP name=scalp_re px=46950 alert=1045500200I +[14:52:09] 💾 [SCALP] universe=101 saved=101 +[14:52:09] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[14:52:12] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[14:52:12] [ls_cond_hist] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[14:52:12] 💾 [SCALP] universe=102 saved=102 +[14:52:12] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[14:52:13] AFR 이탈 411080 sid=SCALP name=scalp_re px=3755 alert=1045500200I +[14:52:13] [ls_cond_hist] AFR 이탈 411080 sid=SCALP name=scalp_re px=3755 alert=1045500200I +[14:52:14] 💾 [SCALP] universe=101 saved=101 +[14:52:14] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[14:52:22] AFR 재진입 317830 sid=SCALP name=scalp_re px=4545 alert=1045500200I +[14:52:22] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4545 alert=1045500200I +[14:52:22] 💾 [SCALP] universe=102 saved=102 +[14:52:22] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[14:52:23] AFR 재진입 411080 sid=SCALP name=scalp_re px=3785 alert=1045500200I +[14:52:23] [ls_cond_hist] AFR 재진입 411080 sid=SCALP name=scalp_re px=3785 alert=1045500200I +[14:52:23] 💾 [SCALP] universe=103 saved=103 +[14:52:23] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:52:27] AFR 재진입 244920 sid=SCALP name=scalp_re px=11240 alert=1045500200I +[14:52:27] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11240 alert=1045500200I +[14:52:27] 💾 [SCALP] universe=104 saved=104 +[14:52:27] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:52:42] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[14:52:42] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[14:52:42] 💾 [SCALP] universe=105 saved=105 +[14:52:42] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:52:56] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[14:52:56] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[14:52:56] 💾 [SCALP] universe=104 saved=104 +[14:52:56] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:53:02] AFR 이탈 143160 sid=SCALP name=scalp_re px=15750 alert=1045500200I +[14:53:02] [ls_cond_hist] AFR 이탈 143160 sid=SCALP name=scalp_re px=15750 alert=1045500200I +[14:53:02] 💾 [SCALP] universe=103 saved=103 +[14:53:02] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:53:02] AFR 재진입 143160 sid=SCALP name=scalp_re px=15850 alert=1045500200I +[14:53:02] [ls_cond_hist] AFR 재진입 143160 sid=SCALP name=scalp_re px=15850 alert=1045500200I +[14:53:02] 💾 [SCALP] universe=104 saved=104 +[14:53:02] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:53:18] AFR 이탈 120110 sid=SCALP name=scalp_re px=54200 alert=1045500200I +[14:53:18] [ls_cond_hist] AFR 이탈 120110 sid=SCALP name=scalp_re px=54200 alert=1045500200I +[14:53:18] 💾 [SCALP] universe=103 saved=103 +[14:53:18] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:53:18] AFR 이탈 067370 sid=SCALP name=scalp_re px=6280 alert=1045500200I +[14:53:18] [ls_cond_hist] AFR 이탈 067370 sid=SCALP name=scalp_re px=6280 alert=1045500200I +[14:53:18] 💾 [SCALP] universe=102 saved=102 +[14:53:18] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[14:53:30] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:53:30] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:53:30] 💾 [SCALP] universe=101 saved=101 +[14:53:30] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[14:53:32] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:53:32] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:53:32] 💾 [SCALP] universe=102 saved=102 +[14:53:32] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[14:53:34] AFR 이탈 450950 sid=SCALP name=scalp_re px=5630 alert=1045500200I +[14:53:34] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5630 alert=1045500200I +[14:53:34] 💾 [SCALP] universe=101 saved=101 +[14:53:34] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[14:53:34] AFR 재진입 450950 sid=SCALP name=scalp_re px=5630 alert=1045500200I +[14:53:34] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5630 alert=1045500200I +[14:53:35] 💾 [SCALP] universe=102 saved=102 +[14:53:35] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[14:53:39] AFR 이탈 244920 sid=SCALP name=scalp_re px=11190 alert=1045500200I +[14:53:39] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11190 alert=1045500200I +[14:53:39] 💾 [SCALP] universe=101 saved=101 +[14:53:39] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[14:53:39] AFR 재진입 244920 sid=SCALP name=scalp_re px=11290 alert=1045500200I +[14:53:39] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11290 alert=1045500200I +[14:53:39] 💾 [SCALP] universe=102 saved=102 +[14:53:39] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[14:53:40] AFR 이탈 244920 sid=SCALP name=scalp_re px=11190 alert=1045500200I +[14:53:40] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11190 alert=1045500200I +[14:53:40] 💾 [SCALP] universe=101 saved=101 +[14:53:40] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[14:53:42] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:53:42] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:53:42] 💾 [SCALP] universe=100 saved=100 +[14:53:42] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[14:53:42] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[14:53:42] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[14:53:42] 💾 [SCALP] universe=101 saved=101 +[14:53:42] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[14:53:43] AFR 이탈 450950 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[14:53:43] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[14:53:43] 💾 [SCALP] universe=100 saved=100 +[14:53:43] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[14:53:43] AFR 재진입 450950 sid=SCALP name=scalp_re px=5630 alert=1045500200I +[14:53:43] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5630 alert=1045500200I +[14:53:44] 💾 [SCALP] universe=101 saved=101 +[14:53:44] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[14:53:47] AFR 이탈 069730 sid=SCALP name=scalp_re px=5710 alert=1045500200I +[14:53:47] [ls_cond_hist] AFR 이탈 069730 sid=SCALP name=scalp_re px=5710 alert=1045500200I +[14:53:47] 💾 [SCALP] universe=100 saved=100 +[14:53:47] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[14:53:47] AFR 재진입 069730 sid=SCALP name=scalp_re px=5690 alert=1045500200I +[14:53:47] [ls_cond_hist] AFR 재진입 069730 sid=SCALP name=scalp_re px=5690 alert=1045500200I +[14:53:47] 💾 [SCALP] universe=101 saved=101 +[14:53:47] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[14:53:54] AFR 재진입 067370 sid=SCALP name=scalp_re px=6260 alert=1045500200I +[14:53:54] [ls_cond_hist] AFR 재진입 067370 sid=SCALP name=scalp_re px=6260 alert=1045500200I +[14:53:54] 💾 [SCALP] universe=102 saved=102 +[14:53:54] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[14:53:58] AFR 재진입 088340 sid=SCALP name=scalp_re px=6660 alert=1045500200I +[14:53:58] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6660 alert=1045500200I +[14:53:58] 💾 [SCALP] universe=103 saved=103 +[14:53:58] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:53:59] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:53:59] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:54:00] 💾 [SCALP] universe=102 saved=102 +[14:54:00] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[14:54:00] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[14:54:00] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[14:54:01] 💾 [SCALP] universe=101 saved=101 +[14:54:01] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[14:54:02] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[14:54:02] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[14:54:03] 💾 [SCALP] universe=102 saved=102 +[14:54:03] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[14:54:03] AFR 재진입 244920 sid=SCALP name=scalp_re px=11290 alert=1045500200I +[14:54:03] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11290 alert=1045500200I +[14:54:03] 💾 [SCALP] universe=103 saved=103 +[14:54:03] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:54:17] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:54:17] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:54:18] 💾 [SCALP] universe=102 saved=102 +[14:54:18] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[14:54:24] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:54:24] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:54:24] 💾 [SCALP] universe=103 saved=103 +[14:54:24] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:54:28] AFR 재진입 045660 sid=SCALP name=scalp_re px=8020 alert=1045500200I +[14:54:28] [ls_cond_hist] AFR 재진입 045660 sid=SCALP name=scalp_re px=8020 alert=1045500200I +[14:54:29] 💾 [SCALP] universe=104 saved=104 +[14:54:29] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:54:30] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[14:54:30] [ls_cond_hist] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[14:54:30] 💾 [SCALP] universe=105 saved=105 +[14:54:30] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:54:36] AFR 이탈 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[14:54:36] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[14:54:36] 💾 [SCALP] universe=104 saved=104 +[14:54:36] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:54:36] AFR 재진입 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[14:54:36] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[14:54:37] 💾 [SCALP] universe=105 saved=105 +[14:54:37] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:54:37] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:54:37] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:54:38] 💾 [SCALP] universe=104 saved=104 +[14:54:38] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:54:38] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:54:38] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:54:38] 💾 [SCALP] universe=105 saved=105 +[14:54:38] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:54:51] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[14:54:51] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[14:54:51] 💾 [SCALP] universe=106 saved=106 +[14:54:51] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[14:55:03] AFR 이탈 244920 sid=SCALP name=scalp_re px=11190 alert=1045500200I +[14:55:03] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11190 alert=1045500200I +[14:55:03] 💾 [SCALP] universe=105 saved=105 +[14:55:03] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:55:04] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:55:04] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:55:04] 💾 [SCALP] universe=104 saved=104 +[14:55:04] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:55:04] AFR 이탈 101330 sid=SCALP name=scalp_re px=3330 alert=1045500200I +[14:55:04] [ls_cond_hist] AFR 이탈 101330 sid=SCALP name=scalp_re px=3330 alert=1045500200I +[14:55:04] 💾 [SCALP] universe=103 saved=103 +[14:55:04] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:55:07] AFR 이탈 148930 sid=SCALP name=scalp_re px=3445 alert=1045500200I +[14:55:07] [ls_cond_hist] AFR 이탈 148930 sid=SCALP name=scalp_re px=3445 alert=1045500200I +[14:55:07] 💾 [SCALP] universe=102 saved=102 +[14:55:07] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[14:55:14] AFR 재진입 244920 sid=SCALP name=scalp_re px=11290 alert=1045500200I +[14:55:14] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11290 alert=1045500200I +[14:55:15] 💾 [SCALP] universe=103 saved=103 +[14:55:15] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:55:15] AFR 재진입 300080 sid=SCALP name=scalp_re px=8080 alert=1045500200I +[14:55:15] [ls_cond_hist] AFR 재진입 300080 sid=SCALP name=scalp_re px=8080 alert=1045500200I +[14:55:15] 💾 [SCALP] universe=104 saved=104 +[14:55:15] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:55:18] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[14:55:18] [ls_cond_hist] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[14:55:19] 💾 [SCALP] universe=105 saved=105 +[14:55:19] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:55:24] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:55:24] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:55:24] 💾 [SCALP] universe=104 saved=104 +[14:55:24] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:55:25] AFR 이탈 031430 sid=SCALP name=scalp_re px=11280 alert=1045500200I +[14:55:25] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11280 alert=1045500200I +[14:55:25] 💾 [SCALP] universe=103 saved=103 +[14:55:25] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:55:26] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[14:55:26] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[14:55:26] 💾 [SCALP] universe=104 saved=104 +[14:55:26] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:55:46] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[14:55:46] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20650 alert=1045500200I +[14:55:47] 💾 [SCALP] universe=105 saved=105 +[14:55:47] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:55:54] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:55:54] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:55:54] 💾 [SCALP] universe=104 saved=104 +[14:55:54] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:55:54] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[14:55:54] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26250 alert=1045500200I +[14:55:55] 💾 [SCALP] universe=105 saved=105 +[14:55:55] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:55:58] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:55:58] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:55:58] 💾 [SCALP] universe=104 saved=104 +[14:55:58] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:55:59] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:55:59] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20500 alert=1045500200I +[14:55:59] 💾 [SCALP] universe=103 saved=103 +[14:55:59] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:56:01] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[14:56:01] [ls_cond_hist] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[14:56:02] 💾 [SCALP] universe=104 saved=104 +[14:56:02] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:56:03] AFR 이탈 450950 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[14:56:03] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[14:56:03] 💾 [SCALP] universe=103 saved=103 +[14:56:03] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:56:03] AFR 재진입 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[14:56:03] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[14:56:03] 💾 [SCALP] universe=104 saved=104 +[14:56:03] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:56:05] AFR 이탈 051600 sid=SCALP name=scalp_re px=46950 alert=1045500200I +[14:56:05] [ls_cond_hist] AFR 이탈 051600 sid=SCALP name=scalp_re px=46950 alert=1045500200I +[14:56:05] 💾 [SCALP] universe=103 saved=103 +[14:56:05] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:56:05] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[14:56:05] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[14:56:05] 💾 [SCALP] universe=104 saved=104 +[14:56:05] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:56:11] AFR 재진입 031430 sid=SCALP name=scalp_re px=11240 alert=1045500200I +[14:56:11] [ls_cond_hist] AFR 재진입 031430 sid=SCALP name=scalp_re px=11240 alert=1045500200I +[14:56:12] 💾 [SCALP] universe=105 saved=105 +[14:56:12] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:56:15] AFR 이탈 244920 sid=SCALP name=scalp_re px=11200 alert=1045500200I +[14:56:15] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11200 alert=1045500200I +[14:56:15] 💾 [SCALP] universe=104 saved=104 +[14:56:15] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:56:18] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:56:18] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[14:56:18] 💾 [SCALP] universe=103 saved=103 +[14:56:18] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:56:22] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[14:56:22] [ls_cond_hist] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[14:56:22] 💾 [SCALP] universe=104 saved=104 +[14:56:22] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:56:25] AFR 이탈 101330 sid=SCALP name=scalp_re px=3340 alert=1045500200I +[14:56:25] [ls_cond_hist] AFR 이탈 101330 sid=SCALP name=scalp_re px=3340 alert=1045500200I +[14:56:25] 💾 [SCALP] universe=103 saved=103 +[14:56:25] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:56:31] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:56:31] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20600 alert=1045500200I +[14:56:31] 💾 [SCALP] universe=104 saved=104 +[14:56:31] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:56:34] AFR 재진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[14:56:34] [ls_cond_hist] AFR 재진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[14:56:34] 💾 [SCALP] universe=105 saved=105 +[14:56:34] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:56:46] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[14:56:46] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[14:56:46] 💾 [SCALP] universe=106 saved=106 +[14:56:46] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[14:56:46] AFR 이탈 450950 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[14:56:46] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[14:56:46] 💾 [SCALP] universe=105 saved=105 +[14:56:46] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:56:46] AFR 재진입 450950 sid=SCALP name=scalp_re px=5650 alert=1045500200I +[14:56:46] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5650 alert=1045500200I +[14:56:46] 💾 [SCALP] universe=106 saved=106 +[14:56:46] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[14:56:49] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:56:49] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:56:49] 💾 [SCALP] universe=105 saved=105 +[14:56:49] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:56:51] AFR 이탈 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[14:56:51] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[14:56:51] 💾 [SCALP] universe=104 saved=104 +[14:56:51] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:56:51] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:56:51] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:56:51] 💾 [SCALP] universe=105 saved=105 +[14:56:51] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:56:52] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:56:52] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:56:53] 💾 [SCALP] universe=104 saved=104 +[14:56:53] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:56:55] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:56:55] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:56:55] 💾 [SCALP] universe=105 saved=105 +[14:56:55] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:57:00] AFR 재진입 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[14:57:00] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[14:57:00] 💾 [SCALP] universe=106 saved=106 +[14:57:00] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[14:57:01] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:57:01] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:57:01] 💾 [SCALP] universe=105 saved=105 +[14:57:01] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:57:10] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:57:10] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:57:10] 💾 [SCALP] universe=106 saved=106 +[14:57:10] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[14:57:12] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:57:12] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:57:13] 💾 [SCALP] universe=105 saved=105 +[14:57:13] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:57:14] AFR 재진입 244920 sid=SCALP name=scalp_re px=11290 alert=1045500200I +[14:57:14] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11290 alert=1045500200I +[14:57:15] 💾 [SCALP] universe=106 saved=106 +[14:57:15] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[14:57:15] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:57:15] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:57:15] 💾 [SCALP] universe=107 saved=107 +[14:57:15] [ls_cond_hist] 💾 [SCALP] universe=107 saved=107 +[14:57:17] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:57:17] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:57:18] 💾 [SCALP] universe=106 saved=106 +[14:57:18] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[14:57:20] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:57:20] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:57:20] 💾 [SCALP] universe=107 saved=107 +[14:57:20] [ls_cond_hist] 💾 [SCALP] universe=107 saved=107 +[14:57:24] AFR 이탈 023800 sid=SCALP name=scalp_re px=5330 alert=1045500200I +[14:57:24] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5330 alert=1045500200I +[14:57:24] 💾 [SCALP] universe=106 saved=106 +[14:57:24] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[14:57:30] AFR 이탈 014830 sid=SCALP name=scalp_re px=62800 alert=1045500200I +[14:57:30] [ls_cond_hist] AFR 이탈 014830 sid=SCALP name=scalp_re px=62800 alert=1045500200I +[14:57:30] 💾 [SCALP] universe=105 saved=105 +[14:57:30] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:57:35] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:57:35] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:57:35] 💾 [SCALP] universe=104 saved=104 +[14:57:35] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:57:36] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:57:36] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:57:36] 💾 [SCALP] universe=105 saved=105 +[14:57:36] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:57:39] AFR 이탈 458650 sid=SCALP name=scalp_re px=8000 alert=1045500200I +[14:57:39] [ls_cond_hist] AFR 이탈 458650 sid=SCALP name=scalp_re px=8000 alert=1045500200I +[14:57:39] 💾 [SCALP] universe=104 saved=104 +[14:57:39] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:57:43] AFR 재진입 458650 sid=SCALP name=scalp_re px=7990 alert=1045500200I +[14:57:43] [ls_cond_hist] AFR 재진입 458650 sid=SCALP name=scalp_re px=7990 alert=1045500200I +[14:57:44] 💾 [SCALP] universe=105 saved=105 +[14:57:44] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:57:46] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:57:46] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:57:46] 💾 [SCALP] universe=104 saved=104 +[14:57:46] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:57:48] AFR 이탈 045660 sid=SCALP name=scalp_re px=8000 alert=1045500200I +[14:57:48] [ls_cond_hist] AFR 이탈 045660 sid=SCALP name=scalp_re px=8000 alert=1045500200I +[14:57:48] 💾 [SCALP] universe=103 saved=103 +[14:57:48] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:57:53] AFR 재진입 148930 sid=SCALP name=scalp_re px=3440 alert=1045500200I +[14:57:53] [ls_cond_hist] AFR 재진입 148930 sid=SCALP name=scalp_re px=3440 alert=1045500200I +[14:57:53] 💾 [SCALP] universe=104 saved=104 +[14:57:53] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:57:53] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:57:53] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:57:53] 💾 [SCALP] universe=105 saved=105 +[14:57:53] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:58:00] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:58:00] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:58:00] 💾 [SCALP] universe=104 saved=104 +[14:58:00] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:58:02] AFR 이탈 120110 sid=SCALP name=scalp_re px=54300 alert=1045500200I +[14:58:02] [ls_cond_hist] AFR 이탈 120110 sid=SCALP name=scalp_re px=54300 alert=1045500200I +[14:58:02] 💾 [SCALP] universe=103 saved=103 +[14:58:02] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:58:10] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[14:58:10] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22800 alert=1045500200I +[14:58:10] 💾 [SCALP] universe=104 saved=104 +[14:58:10] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:58:42] AFR 재진입 348030 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[14:58:42] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3000 alert=1045500200I +[14:58:42] 💾 [SCALP] universe=105 saved=105 +[14:58:42] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:58:48] AFR 이탈 051600 sid=SCALP name=scalp_re px=46950 alert=1045500200I +[14:58:48] [ls_cond_hist] AFR 이탈 051600 sid=SCALP name=scalp_re px=46950 alert=1045500200I +[14:58:48] 💾 [SCALP] universe=104 saved=104 +[14:58:48] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:58:51] AFR 재진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[14:58:51] [ls_cond_hist] AFR 재진입 051600 sid=SCALP name=scalp_re px=46900 alert=1045500200I +[14:58:51] 💾 [SCALP] universe=105 saved=105 +[14:58:51] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:58:53] AFR 이탈 067370 sid=SCALP name=scalp_re px=6290 alert=1045500200I +[14:58:53] [ls_cond_hist] AFR 이탈 067370 sid=SCALP name=scalp_re px=6290 alert=1045500200I +[14:58:53] 💾 [SCALP] universe=104 saved=104 +[14:58:53] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:59:03] AFR 이탈 474650 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[14:59:03] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[14:59:03] 💾 [SCALP] universe=103 saved=103 +[14:59:03] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:59:06] AFR 이탈 051600 sid=SCALP name=scalp_re px=47000 alert=1045500200I +[14:59:06] [ls_cond_hist] AFR 이탈 051600 sid=SCALP name=scalp_re px=47000 alert=1045500200I +[14:59:06] 💾 [SCALP] universe=102 saved=102 +[14:59:06] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[14:59:07] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:59:07] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:59:07] 💾 [SCALP] universe=101 saved=101 +[14:59:07] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[14:59:07] AFR 재진입 051600 sid=SCALP name=scalp_re px=47450 alert=1045500200I +[14:59:07] [ls_cond_hist] AFR 재진입 051600 sid=SCALP name=scalp_re px=47450 alert=1045500200I +[14:59:08] 💾 [SCALP] universe=102 saved=102 +[14:59:08] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[14:59:10] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[14:59:10] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[14:59:10] 💾 [SCALP] universe=103 saved=103 +[14:59:10] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[14:59:13] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:59:13] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:59:13] 💾 [SCALP] universe=104 saved=104 +[14:59:13] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[14:59:14] AFR 재진입 014830 sid=SCALP name=scalp_re px=62700 alert=1045500200I +[14:59:14] [ls_cond_hist] AFR 재진입 014830 sid=SCALP name=scalp_re px=62700 alert=1045500200I +[14:59:14] 💾 [SCALP] universe=105 saved=105 +[14:59:14] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:59:26] AFR 재진입 120110 sid=SCALP name=scalp_re px=53900 alert=1045500200I +[14:59:26] [ls_cond_hist] AFR 재진입 120110 sid=SCALP name=scalp_re px=53900 alert=1045500200I +[14:59:26] 💾 [SCALP] universe=106 saved=106 +[14:59:26] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[14:59:31] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:59:31] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[14:59:31] 💾 [SCALP] universe=105 saved=105 +[14:59:31] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[14:59:41] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:59:41] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[14:59:41] 💾 [SCALP] universe=106 saved=106 +[14:59:41] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:00:01] AFR 이탈 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[15:00:01] [ls_cond_hist] AFR 이탈 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[15:00:01] 💾 [SCALP] universe=105 saved=105 +[15:00:01] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:00:10] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:00:10] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:00:11] 💾 [SCALP] universe=104 saved=104 +[15:00:11] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:00:12] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[15:00:12] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[15:00:12] 💾 [SCALP] universe=103 saved=103 +[15:00:12] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:00:16] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[15:00:16] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[15:00:16] 💾 [SCALP] universe=104 saved=104 +[15:00:16] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:00:18] AFR 재진입 005440 sid=SCALP name=scalp_re px=12340 alert=1045500200I +[15:00:18] [ls_cond_hist] AFR 재진입 005440 sid=SCALP name=scalp_re px=12340 alert=1045500200I +[15:00:18] 💾 [SCALP] universe=105 saved=105 +[15:00:18] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:00:18] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:00:18] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:00:18] 💾 [SCALP] universe=104 saved=104 +[15:00:18] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:00:24] AFR 재진입 101330 sid=SCALP name=scalp_re px=3325 alert=1045500200I +[15:00:24] [ls_cond_hist] AFR 재진입 101330 sid=SCALP name=scalp_re px=3325 alert=1045500200I +[15:00:24] 💾 [SCALP] universe=105 saved=105 +[15:00:24] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:00:24] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[15:00:24] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[15:00:24] 💾 [SCALP] universe=106 saved=106 +[15:00:24] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:00:25] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:00:25] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:00:25] 💾 [SCALP] universe=105 saved=105 +[15:00:25] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:00:25] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[15:00:25] [ls_cond_hist] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[15:00:25] 💾 [SCALP] universe=104 saved=104 +[15:00:25] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:00:26] AFR 이탈 244920 sid=SCALP name=scalp_re px=11200 alert=1045500200I +[15:00:26] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11200 alert=1045500200I +[15:00:26] 💾 [SCALP] universe=103 saved=103 +[15:00:26] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:00:26] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:00:26] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:00:26] 💾 [SCALP] universe=102 saved=102 +[15:00:26] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:00:26] AFR 이탈 001940 sid=SCALP name=scalp_re px=25800 alert=1045500200I +[15:00:26] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=25800 alert=1045500200I +[15:00:26] 💾 [SCALP] universe=101 saved=101 +[15:00:26] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:00:27] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[15:00:27] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22750 alert=1045500200I +[15:00:27] 💾 [SCALP] universe=102 saved=102 +[15:00:27] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:00:28] AFR 재진입 001940 sid=SCALP name=scalp_re px=25700 alert=1045500200I +[15:00:28] [ls_cond_hist] AFR 재진입 001940 sid=SCALP name=scalp_re px=25700 alert=1045500200I +[15:00:28] 💾 [SCALP] universe=103 saved=103 +[15:00:28] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:00:31] AFR 재진입 078935 sid=SCALP name=scalp_re px=58100 alert=1045500200I +[15:00:31] [ls_cond_hist] AFR 재진입 078935 sid=SCALP name=scalp_re px=58100 alert=1045500200I +[15:00:31] 💾 [SCALP] universe=104 saved=104 +[15:00:31] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:00:35] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:00:35] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:00:36] 💾 [SCALP] universe=105 saved=105 +[15:00:36] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:00:39] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:00:39] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:00:40] 💾 [SCALP] universe=104 saved=104 +[15:00:40] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:00:45] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[15:00:45] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26150 alert=1045500200I +[15:00:45] 💾 [SCALP] universe=105 saved=105 +[15:00:45] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:00:45] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:00:45] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:00:45] 💾 [SCALP] universe=104 saved=104 +[15:00:45] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:01:00] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[15:01:00] [ls_cond_hist] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22350 alert=1045500200I +[15:01:00] 💾 [SCALP] universe=105 saved=105 +[15:01:00] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:01:03] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[15:01:03] [ls_cond_hist] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[15:01:03] 💾 [SCALP] universe=106 saved=106 +[15:01:03] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:01:03] AFR 재진입 474650 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[15:01:03] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[15:01:04] 💾 [SCALP] universe=107 saved=107 +[15:01:04] [ls_cond_hist] 💾 [SCALP] universe=107 saved=107 +[15:01:05] AFR 이탈 031430 sid=SCALP name=scalp_re px=11280 alert=1045500200I +[15:01:05] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11280 alert=1045500200I +[15:01:05] 💾 [SCALP] universe=106 saved=106 +[15:01:05] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:01:11] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:01:11] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:01:11] 💾 [SCALP] universe=107 saved=107 +[15:01:11] [ls_cond_hist] 💾 [SCALP] universe=107 saved=107 +[15:01:13] AFR 재진입 244920 sid=SCALP name=scalp_re px=11280 alert=1045500200I +[15:01:13] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11280 alert=1045500200I +[15:01:14] 💾 [SCALP] universe=108 saved=108 +[15:01:14] [ls_cond_hist] 💾 [SCALP] universe=108 saved=108 +[15:01:14] AFR 이탈 038500 sid=SCALP name=scalp_re px=7390 alert=1045500200I +[15:01:14] [ls_cond_hist] AFR 이탈 038500 sid=SCALP name=scalp_re px=7390 alert=1045500200I +[15:01:14] 💾 [SCALP] universe=107 saved=107 +[15:01:14] [ls_cond_hist] 💾 [SCALP] universe=107 saved=107 +[15:01:17] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:01:17] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:01:17] 💾 [SCALP] universe=106 saved=106 +[15:01:17] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:01:17] AFR 이탈 474650 sid=SCALP name=scalp_re px=20300 alert=1045500200I +[15:01:17] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20300 alert=1045500200I +[15:01:17] 💾 [SCALP] universe=105 saved=105 +[15:01:17] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:01:21] AFR 이탈 049520 sid=SCALP name=scalp_re px=3710 alert=1045500200I +[15:01:21] [ls_cond_hist] AFR 이탈 049520 sid=SCALP name=scalp_re px=3710 alert=1045500200I +[15:01:21] 💾 [SCALP] universe=104 saved=104 +[15:01:21] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:01:24] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[15:01:24] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[15:01:24] 💾 [SCALP] universe=103 saved=103 +[15:01:24] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:01:26] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:01:26] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:01:26] 💾 [SCALP] universe=104 saved=104 +[15:01:26] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:01:37] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:01:37] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:01:37] 💾 [SCALP] universe=103 saved=103 +[15:01:37] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:01:39] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:01:39] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:01:39] 💾 [SCALP] universe=102 saved=102 +[15:01:39] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:01:41] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:01:41] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:01:41] 💾 [SCALP] universe=103 saved=103 +[15:01:41] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:01:45] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:01:45] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:01:45] 💾 [SCALP] universe=102 saved=102 +[15:01:45] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:01:58] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:01:58] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:01:58] 💾 [SCALP] universe=103 saved=103 +[15:01:58] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:02:01] AFR 이탈 005440 sid=SCALP name=scalp_re px=12360 alert=1045500200I +[15:02:01] [ls_cond_hist] AFR 이탈 005440 sid=SCALP name=scalp_re px=12360 alert=1045500200I +[15:02:01] 💾 [SCALP] universe=102 saved=102 +[15:02:01] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:02:06] AFR 이탈 120110 sid=SCALP name=scalp_re px=54200 alert=1045500200I +[15:02:06] [ls_cond_hist] AFR 이탈 120110 sid=SCALP name=scalp_re px=54200 alert=1045500200I +[15:02:06] 💾 [SCALP] universe=101 saved=101 +[15:02:06] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:02:13] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:02:13] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:02:13] 💾 [SCALP] universe=100 saved=100 +[15:02:13] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:02:16] AFR 재진입 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[15:02:16] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[15:02:16] 💾 [SCALP] universe=101 saved=101 +[15:02:16] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:02:16] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:02:16] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:02:16] 💾 [SCALP] universe=100 saved=100 +[15:02:16] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:02:23] AFR 이탈 101330 sid=SCALP name=scalp_re px=3340 alert=1045500200I +[15:02:23] [ls_cond_hist] AFR 이탈 101330 sid=SCALP name=scalp_re px=3340 alert=1045500200I +[15:02:24] 💾 [SCALP] universe=99 saved=99 +[15:02:24] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:02:26] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:02:26] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:02:26] 💾 [SCALP] universe=100 saved=100 +[15:02:26] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:02:28] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:02:28] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:02:28] 💾 [SCALP] universe=99 saved=99 +[15:02:28] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:02:34] AFR 재진입 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[15:02:34] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[15:02:34] 💾 [SCALP] universe=100 saved=100 +[15:02:34] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:02:35] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:02:35] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:02:35] 💾 [SCALP] universe=99 saved=99 +[15:02:35] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:02:39] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:02:39] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:02:39] 💾 [SCALP] universe=100 saved=100 +[15:02:39] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:02:42] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:02:42] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:02:43] 💾 [SCALP] universe=99 saved=99 +[15:02:43] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:02:51] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:02:51] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:02:51] 💾 [SCALP] universe=100 saved=100 +[15:02:51] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:02:55] AFR 이탈 244920 sid=SCALP name=scalp_re px=11220 alert=1045500200I +[15:02:55] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11220 alert=1045500200I +[15:02:56] 💾 [SCALP] universe=99 saved=99 +[15:02:56] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:02:58] AFR 재진입 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[15:02:58] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[15:02:58] 💾 [SCALP] universe=100 saved=100 +[15:02:58] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:02:58] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:02:58] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:02:59] 💾 [SCALP] universe=99 saved=99 +[15:02:59] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:03:04] AFR 재진입 031430 sid=SCALP name=scalp_re px=11250 alert=1045500200I +[15:03:04] [ls_cond_hist] AFR 재진입 031430 sid=SCALP name=scalp_re px=11250 alert=1045500200I +[15:03:04] 💾 [SCALP] universe=100 saved=100 +[15:03:04] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:03:07] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[15:03:07] [ls_cond_hist] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[15:03:07] 💾 [SCALP] universe=101 saved=101 +[15:03:07] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:03:08] AFR 재진입 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[15:03:08] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[15:03:08] 💾 [SCALP] universe=102 saved=102 +[15:03:08] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:03:08] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:03:08] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:03:08] 💾 [SCALP] universe=101 saved=101 +[15:03:08] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:03:08] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[15:03:08] [ls_cond_hist] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[15:03:08] 💾 [SCALP] universe=100 saved=100 +[15:03:08] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:03:09] AFR 이탈 143160 sid=SCALP name=scalp_re px=15770 alert=1045500200I +[15:03:09] [ls_cond_hist] AFR 이탈 143160 sid=SCALP name=scalp_re px=15770 alert=1045500200I +[15:03:09] 💾 [SCALP] universe=99 saved=99 +[15:03:09] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:03:09] AFR 재진입 143160 sid=SCALP name=scalp_re px=15880 alert=1045500200I +[15:03:09] [ls_cond_hist] AFR 재진입 143160 sid=SCALP name=scalp_re px=15880 alert=1045500200I +[15:03:09] 💾 [SCALP] universe=100 saved=100 +[15:03:09] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:03:10] AFR 재진입 244920 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[15:03:10] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[15:03:10] 💾 [SCALP] universe=101 saved=101 +[15:03:10] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:03:12] AFR 이탈 244920 sid=SCALP name=scalp_re px=11220 alert=1045500200I +[15:03:12] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11220 alert=1045500200I +[15:03:12] 💾 [SCALP] universe=100 saved=100 +[15:03:12] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:03:13] AFR 재진입 244920 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[15:03:13] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11270 alert=1045500200I +[15:03:13] 💾 [SCALP] universe=101 saved=101 +[15:03:13] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:03:13] AFR 이탈 143160 sid=SCALP name=scalp_re px=15780 alert=1045500200I +[15:03:13] [ls_cond_hist] AFR 이탈 143160 sid=SCALP name=scalp_re px=15780 alert=1045500200I +[15:03:13] 💾 [SCALP] universe=100 saved=100 +[15:03:13] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:03:13] AFR 이탈 244920 sid=SCALP name=scalp_re px=11230 alert=1045500200I +[15:03:13] [ls_cond_hist] AFR 이탈 244920 sid=SCALP name=scalp_re px=11230 alert=1045500200I +[15:03:13] 💾 [SCALP] universe=99 saved=99 +[15:03:13] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:03:13] AFR 재진입 244920 sid=SCALP name=scalp_re px=11420 alert=1045500200I +[15:03:13] [ls_cond_hist] AFR 재진입 244920 sid=SCALP name=scalp_re px=11420 alert=1045500200I +[15:03:13] 💾 [SCALP] universe=100 saved=100 +[15:03:13] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:03:16] AFR 재진입 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[15:03:16] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[15:03:16] 💾 [SCALP] universe=101 saved=101 +[15:03:16] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:03:23] AFR 진입 005990 sid=SCALP name=scalp_re px=10840 alert=1045500200I +[15:03:23] [ls_cond_hist] AFR 진입 005990 sid=SCALP name=scalp_re px=10840 alert=1045500200I +[15:03:23] 💾 [SCALP] universe=102 saved=102 +[15:03:23] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:03:26] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[15:03:26] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[15:03:26] 💾 [SCALP] universe=103 saved=103 +[15:03:26] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:03:28] AFR 이탈 009520 sid=SCALP name=scalp_re px=10525 alert=1045500200I +[15:03:28] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10525 alert=1045500200I +[15:03:28] 💾 [SCALP] universe=102 saved=102 +[15:03:28] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:03:35] AFR 재진입 009520 sid=SCALP name=scalp_re px=10530 alert=1045500200I +[15:03:35] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10530 alert=1045500200I +[15:03:35] 💾 [SCALP] universe=103 saved=103 +[15:03:35] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:03:38] AFR 재진입 038500 sid=SCALP name=scalp_re px=7340 alert=1045500200I +[15:03:38] [ls_cond_hist] AFR 재진입 038500 sid=SCALP name=scalp_re px=7340 alert=1045500200I +[15:03:38] 💾 [SCALP] universe=104 saved=104 +[15:03:38] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:03:39] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:03:39] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:03:39] 💾 [SCALP] universe=103 saved=103 +[15:03:39] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:03:40] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22300 alert=1045500200I +[15:03:40] [ls_cond_hist] AFR 재진입 0008Z0 sid=SCALP name=scalp_re px=22300 alert=1045500200I +[15:03:40] 💾 [SCALP] universe=104 saved=104 +[15:03:40] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:03:57] AFR 이탈 159910 sid=SCALP name=scalp_re px=3120 alert=1045500200I +[15:03:57] [ls_cond_hist] AFR 이탈 159910 sid=SCALP name=scalp_re px=3120 alert=1045500200I +[15:03:57] 💾 [SCALP] universe=103 saved=103 +[15:03:57] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:04:06] AFR 이탈 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[15:04:06] [ls_cond_hist] AFR 이탈 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[15:04:06] 💾 [SCALP] universe=102 saved=102 +[15:04:06] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:04:09] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[15:04:09] [ls_cond_hist] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[15:04:09] 💾 [SCALP] universe=103 saved=103 +[15:04:09] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:04:12] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[15:04:12] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26300 alert=1045500200I +[15:04:12] 💾 [SCALP] universe=102 saved=102 +[15:04:12] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:04:14] AFR 재진입 049520 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[15:04:14] [ls_cond_hist] AFR 재진입 049520 sid=SCALP name=scalp_re px=3725 alert=1045500200I +[15:04:14] 💾 [SCALP] universe=103 saved=103 +[15:04:14] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:04:25] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:04:25] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:04:25] 💾 [SCALP] universe=102 saved=102 +[15:04:25] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:04:29] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:04:29] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:04:29] 💾 [SCALP] universe=103 saved=103 +[15:04:29] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:04:30] AFR 이탈 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[15:04:30] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[15:04:30] 💾 [SCALP] universe=102 saved=102 +[15:04:30] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:04:32] AFR 이탈 380550 sid=SCALP name=scalp_re px=7790 alert=1045500200I +[15:04:32] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7790 alert=1045500200I +[15:04:32] 💾 [SCALP] universe=101 saved=101 +[15:04:32] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:04:36] AFR 재진입 474650 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[15:04:36] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[15:04:36] 💾 [SCALP] universe=102 saved=102 +[15:04:36] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:04:40] AFR 재진입 159910 sid=SCALP name=scalp_re px=3125 alert=1045500200I +[15:04:40] [ls_cond_hist] AFR 재진입 159910 sid=SCALP name=scalp_re px=3125 alert=1045500200I +[15:04:40] 💾 [SCALP] universe=103 saved=103 +[15:04:40] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:04:41] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[15:04:41] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[15:04:41] 💾 [SCALP] universe=104 saved=104 +[15:04:41] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:04:50] AFR 이탈 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[15:04:50] [ls_cond_hist] AFR 이탈 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[15:04:50] 💾 [SCALP] universe=103 saved=103 +[15:04:50] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:04:55] AFR 이탈 348030 sid=SCALP name=scalp_re px=2990 alert=1045500200I +[15:04:55] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=2990 alert=1045500200I +[15:04:55] 💾 [SCALP] universe=102 saved=102 +[15:04:55] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:04:55] AFR 재진입 348030 sid=SCALP name=scalp_re px=3010 alert=1045500200I +[15:04:55] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3010 alert=1045500200I +[15:04:55] 💾 [SCALP] universe=103 saved=103 +[15:04:55] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:04:57] AFR 재진입 380550 sid=SCALP name=scalp_re px=7800 alert=1045500200I +[15:04:57] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7800 alert=1045500200I +[15:04:57] 💾 [SCALP] universe=104 saved=104 +[15:04:57] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:04:59] AFR 이탈 049520 sid=SCALP name=scalp_re px=3710 alert=1045500200I +[15:04:59] [ls_cond_hist] AFR 이탈 049520 sid=SCALP name=scalp_re px=3710 alert=1045500200I +[15:04:59] 💾 [SCALP] universe=103 saved=103 +[15:04:59] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:05:00] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[15:05:00] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[15:05:00] 💾 [SCALP] universe=104 saved=104 +[15:05:00] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:05:00] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:05:00] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:05:00] 💾 [SCALP] universe=103 saved=103 +[15:05:00] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:05:04] AFR 이탈 031430 sid=SCALP name=scalp_re px=11280 alert=1045500200I +[15:05:04] [ls_cond_hist] AFR 이탈 031430 sid=SCALP name=scalp_re px=11280 alert=1045500200I +[15:05:04] 💾 [SCALP] universe=102 saved=102 +[15:05:04] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:05:09] AFR 이탈 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[15:05:09] [ls_cond_hist] AFR 이탈 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[15:05:09] 💾 [SCALP] universe=101 saved=101 +[15:05:09] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:05:12] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:05:12] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:05:12] 💾 [SCALP] universe=100 saved=100 +[15:05:12] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:05:12] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:05:12] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:05:12] 💾 [SCALP] universe=101 saved=101 +[15:05:12] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:05:12] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[15:05:12] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[15:05:13] 💾 [SCALP] universe=102 saved=102 +[15:05:13] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:05:13] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:05:13] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:05:13] 💾 [SCALP] universe=101 saved=101 +[15:05:13] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:05:13] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[15:05:13] [ls_cond_hist] AFR 재진입 120110 sid=SCALP name=scalp_re px=54000 alert=1045500200I +[15:05:13] 💾 [SCALP] universe=102 saved=102 +[15:05:13] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:05:14] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:05:14] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:05:14] 💾 [SCALP] universe=101 saved=101 +[15:05:14] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:05:16] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:05:16] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:05:16] 💾 [SCALP] universe=102 saved=102 +[15:05:16] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:05:16] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:05:16] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:05:17] 💾 [SCALP] universe=101 saved=101 +[15:05:17] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:05:21] AFR 재진입 353810 sid=SCALP name=scalp_re px=6120 alert=1045500200I +[15:05:21] [ls_cond_hist] AFR 재진입 353810 sid=SCALP name=scalp_re px=6120 alert=1045500200I +[15:05:21] 💾 [SCALP] universe=102 saved=102 +[15:05:21] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:05:22] AFR 재진입 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[15:05:22] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[15:05:22] 💾 [SCALP] universe=103 saved=103 +[15:05:22] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:05:24] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:05:24] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:05:24] 💾 [SCALP] universe=104 saved=104 +[15:05:24] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:05:28] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:05:28] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:05:28] 💾 [SCALP] universe=103 saved=103 +[15:05:28] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:05:29] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:05:29] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:05:29] 💾 [SCALP] universe=102 saved=102 +[15:05:29] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:05:32] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:05:32] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:05:32] 💾 [SCALP] universe=103 saved=103 +[15:05:32] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:05:33] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:05:33] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:05:33] 💾 [SCALP] universe=102 saved=102 +[15:05:33] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:05:34] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:05:34] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:05:34] 💾 [SCALP] universe=103 saved=103 +[15:05:34] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:05:34] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:05:34] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:05:34] 💾 [SCALP] universe=102 saved=102 +[15:05:34] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:05:40] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:05:40] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:05:41] 💾 [SCALP] universe=103 saved=103 +[15:05:41] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:05:41] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:05:41] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:05:41] 💾 [SCALP] universe=104 saved=104 +[15:05:41] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:05:44] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:05:44] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:05:44] 💾 [SCALP] universe=103 saved=103 +[15:05:44] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:05:45] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:05:45] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:05:45] 💾 [SCALP] universe=102 saved=102 +[15:05:45] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:05:47] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:05:47] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:05:47] 💾 [SCALP] universe=103 saved=103 +[15:05:47] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:06:01] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:06:01] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:06:01] 💾 [SCALP] universe=102 saved=102 +[15:06:01] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:06:05] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:06:05] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:06:05] 💾 [SCALP] universe=103 saved=103 +[15:06:05] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:06:06] AFR 이탈 353810 sid=SCALP name=scalp_re px=6130 alert=1045500200I +[15:06:06] [ls_cond_hist] AFR 이탈 353810 sid=SCALP name=scalp_re px=6130 alert=1045500200I +[15:06:06] 💾 [SCALP] universe=102 saved=102 +[15:06:06] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:06:10] AFR 이탈 047820 sid=SCALP name=scalp_re px=3110 alert=1045500200I +[15:06:10] [ls_cond_hist] AFR 이탈 047820 sid=SCALP name=scalp_re px=3110 alert=1045500200I +[15:06:10] 💾 [SCALP] universe=101 saved=101 +[15:06:10] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:06:10] AFR 재진입 101330 sid=SCALP name=scalp_re px=3315 alert=1045500200I +[15:06:10] [ls_cond_hist] AFR 재진입 101330 sid=SCALP name=scalp_re px=3315 alert=1045500200I +[15:06:11] 💾 [SCALP] universe=102 saved=102 +[15:06:11] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:06:13] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:06:13] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:06:13] 💾 [SCALP] universe=103 saved=103 +[15:06:13] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:06:13] AFR 이탈 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[15:06:13] [ls_cond_hist] AFR 이탈 120110 sid=SCALP name=scalp_re px=54100 alert=1045500200I +[15:06:14] 💾 [SCALP] universe=102 saved=102 +[15:06:14] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:06:17] AFR 재진입 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[15:06:17] [ls_cond_hist] AFR 재진입 300080 sid=SCALP name=scalp_re px=8060 alert=1045500200I +[15:06:17] 💾 [SCALP] universe=103 saved=103 +[15:06:17] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:06:23] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[15:06:23] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26350 alert=1045500200I +[15:06:23] 💾 [SCALP] universe=102 saved=102 +[15:06:23] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:06:25] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[15:06:25] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26200 alert=1045500200I +[15:06:26] 💾 [SCALP] universe=103 saved=103 +[15:06:26] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:06:36] AFR 이탈 023160 sid=SCALP name=scalp_re px=22600 alert=1045500200I +[15:06:36] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22600 alert=1045500200I +[15:06:36] 💾 [SCALP] universe=102 saved=102 +[15:06:36] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:06:41] AFR 이탈 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[15:06:41] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[15:06:41] 💾 [SCALP] universe=101 saved=101 +[15:06:41] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:06:42] AFR 재진입 143160 sid=SCALP name=scalp_re px=15890 alert=1045500200I +[15:06:42] [ls_cond_hist] AFR 재진입 143160 sid=SCALP name=scalp_re px=15890 alert=1045500200I +[15:06:43] 💾 [SCALP] universe=102 saved=102 +[15:06:43] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:06:48] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:06:48] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:06:48] 💾 [SCALP] universe=103 saved=103 +[15:06:48] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:06:49] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:06:49] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:06:49] 💾 [SCALP] universe=102 saved=102 +[15:06:49] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:06:49] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:06:49] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:06:49] 💾 [SCALP] universe=103 saved=103 +[15:06:49] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:06:54] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[15:06:54] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[15:06:54] 💾 [SCALP] universe=104 saved=104 +[15:06:54] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:06:54] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:06:54] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:06:55] 💾 [SCALP] universe=103 saved=103 +[15:06:55] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:06:55] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:06:55] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:06:55] 💾 [SCALP] universe=102 saved=102 +[15:06:55] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:06:55] AFR 재진입 353810 sid=SCALP name=scalp_re px=6120 alert=1045500200I +[15:06:55] [ls_cond_hist] AFR 재진입 353810 sid=SCALP name=scalp_re px=6120 alert=1045500200I +[15:06:56] 💾 [SCALP] universe=103 saved=103 +[15:06:56] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:07:00] AFR 재진입 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[15:07:00] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[15:07:00] 💾 [SCALP] universe=104 saved=104 +[15:07:00] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:07:00] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:07:00] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:07:00] 💾 [SCALP] universe=105 saved=105 +[15:07:00] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:07:02] AFR 이탈 380550 sid=SCALP name=scalp_re px=7790 alert=1045500200I +[15:07:02] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7790 alert=1045500200I +[15:07:02] 💾 [SCALP] universe=104 saved=104 +[15:07:02] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:07:05] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[15:07:05] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[15:07:05] 💾 [SCALP] universe=105 saved=105 +[15:07:05] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:07:09] AFR 이탈 137950 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[15:07:09] [ls_cond_hist] AFR 이탈 137950 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[15:07:09] 💾 [SCALP] universe=104 saved=104 +[15:07:09] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:07:12] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:07:12] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:07:12] 💾 [SCALP] universe=103 saved=103 +[15:07:12] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:07:18] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:07:18] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:07:18] 💾 [SCALP] universe=102 saved=102 +[15:07:18] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:07:18] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:07:18] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:07:18] 💾 [SCALP] universe=103 saved=103 +[15:07:18] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:07:23] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:07:23] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:07:23] 💾 [SCALP] universe=102 saved=102 +[15:07:23] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:07:24] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[15:07:24] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[15:07:24] 💾 [SCALP] universe=103 saved=103 +[15:07:24] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:07:25] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:07:25] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:07:25] 💾 [SCALP] universe=104 saved=104 +[15:07:25] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:07:52] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:07:52] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:07:52] 💾 [SCALP] universe=103 saved=103 +[15:07:52] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:07:54] AFR 이탈 101330 sid=SCALP name=scalp_re px=3340 alert=1045500200I +[15:07:54] [ls_cond_hist] AFR 이탈 101330 sid=SCALP name=scalp_re px=3340 alert=1045500200I +[15:07:54] 💾 [SCALP] universe=102 saved=102 +[15:07:54] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:08:12] AFR 이탈 317830 sid=SCALP name=scalp_re px=4515 alert=1045500200I +[15:08:12] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4515 alert=1045500200I +[15:08:12] 💾 [SCALP] universe=101 saved=101 +[15:08:12] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:08:17] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:08:17] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:08:17] 💾 [SCALP] universe=100 saved=100 +[15:08:17] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:08:20] AFR 재진입 137950 sid=SCALP name=scalp_re px=3005 alert=1045500200I +[15:08:20] [ls_cond_hist] AFR 재진입 137950 sid=SCALP name=scalp_re px=3005 alert=1045500200I +[15:08:20] 💾 [SCALP] universe=101 saved=101 +[15:08:20] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:08:20] AFR 재진입 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:08:20] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:08:20] 💾 [SCALP] universe=102 saved=102 +[15:08:20] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:08:20] AFR 이탈 013030 sid=SCALP name=scalp_re px=31400 alert=1045500200I +[15:08:20] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31400 alert=1045500200I +[15:08:20] 💾 [SCALP] universe=101 saved=101 +[15:08:20] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:08:24] AFR 재진입 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[15:08:24] [ls_cond_hist] AFR 재진입 059270 sid=SCALP name=scalp_re px=5250 alert=1045500200I +[15:08:24] 💾 [SCALP] universe=102 saved=102 +[15:08:24] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:08:33] AFR 재진입 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:08:33] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:08:33] 💾 [SCALP] universe=103 saved=103 +[15:08:33] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:08:38] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:08:38] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:08:38] 💾 [SCALP] universe=102 saved=102 +[15:08:38] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:08:40] AFR 이탈 013030 sid=SCALP name=scalp_re px=31400 alert=1045500200I +[15:08:40] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31400 alert=1045500200I +[15:08:40] 💾 [SCALP] universe=101 saved=101 +[15:08:40] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:08:47] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[15:08:47] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[15:08:47] 💾 [SCALP] universe=102 saved=102 +[15:08:47] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:08:47] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:08:47] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:08:48] 💾 [SCALP] universe=101 saved=101 +[15:08:48] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:08:49] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[15:08:49] [ls_cond_hist] AFR 이탈 009520 sid=SCALP name=scalp_re px=10520 alert=1045500200I +[15:08:49] 💾 [SCALP] universe=100 saved=100 +[15:08:49] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:08:49] AFR 이탈 353810 sid=SCALP name=scalp_re px=6130 alert=1045500200I +[15:08:49] [ls_cond_hist] AFR 이탈 353810 sid=SCALP name=scalp_re px=6130 alert=1045500200I +[15:08:49] 💾 [SCALP] universe=99 saved=99 +[15:08:49] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:08:51] AFR 이탈 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[15:08:51] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[15:08:51] 💾 [SCALP] universe=98 saved=98 +[15:08:51] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[15:08:51] AFR 재진입 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[15:08:51] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[15:08:52] 💾 [SCALP] universe=99 saved=99 +[15:08:52] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:08:56] AFR 이탈 380550 sid=SCALP name=scalp_re px=7790 alert=1045500200I +[15:08:56] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7790 alert=1045500200I +[15:08:57] 💾 [SCALP] universe=98 saved=98 +[15:08:57] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[15:08:57] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[15:08:57] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[15:08:57] 💾 [SCALP] universe=99 saved=99 +[15:08:57] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:08:59] AFR 이탈 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[15:08:59] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[15:08:59] 💾 [SCALP] universe=98 saved=98 +[15:08:59] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[15:08:59] AFR 재진입 450950 sid=SCALP name=scalp_re px=5630 alert=1045500200I +[15:08:59] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5630 alert=1045500200I +[15:08:59] 💾 [SCALP] universe=99 saved=99 +[15:08:59] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:08:59] AFR 이탈 148930 sid=SCALP name=scalp_re px=3445 alert=1045500200I +[15:08:59] [ls_cond_hist] AFR 이탈 148930 sid=SCALP name=scalp_re px=3445 alert=1045500200I +[15:09:00] 💾 [SCALP] universe=98 saved=98 +[15:09:00] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[15:09:00] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:09:00] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:09:00] 💾 [SCALP] universe=99 saved=99 +[15:09:00] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:09:03] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:09:03] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:09:03] 💾 [SCALP] universe=100 saved=100 +[15:09:03] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:09:05] AFR 재진입 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:09:05] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:09:05] 💾 [SCALP] universe=101 saved=101 +[15:09:05] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:09:06] AFR 이탈 023160 sid=SCALP name=scalp_re px=22600 alert=1045500200I +[15:09:06] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22600 alert=1045500200I +[15:09:06] 💾 [SCALP] universe=100 saved=100 +[15:09:06] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:09:12] AFR 재진입 140670 sid=SCALP name=scalp_re px=8870 alert=1045500200I +[15:09:12] [ls_cond_hist] AFR 재진입 140670 sid=SCALP name=scalp_re px=8870 alert=1045500200I +[15:09:12] 💾 [SCALP] universe=101 saved=101 +[15:09:12] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:09:13] AFR 이탈 013030 sid=SCALP name=scalp_re px=31350 alert=1045500200I +[15:09:13] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31350 alert=1045500200I +[15:09:13] 💾 [SCALP] universe=100 saved=100 +[15:09:13] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:09:19] AFR 재진입 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:09:19] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:09:19] 💾 [SCALP] universe=101 saved=101 +[15:09:19] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:09:20] AFR 이탈 013030 sid=SCALP name=scalp_re px=31350 alert=1045500200I +[15:09:20] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31350 alert=1045500200I +[15:09:20] 💾 [SCALP] universe=100 saved=100 +[15:09:20] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:09:21] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:09:21] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:09:21] 💾 [SCALP] universe=99 saved=99 +[15:09:21] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:09:24] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:09:24] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:09:24] 💾 [SCALP] universe=100 saved=100 +[15:09:24] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:09:26] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:09:26] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:09:26] 💾 [SCALP] universe=99 saved=99 +[15:09:26] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:09:27] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:09:27] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:09:27] 💾 [SCALP] universe=100 saved=100 +[15:09:27] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:09:28] AFR 진입 005810 sid=SCALP name=scalp_re px=34400 alert=1045500200I +[15:09:28] [ls_cond_hist] AFR 진입 005810 sid=SCALP name=scalp_re px=34400 alert=1045500200I +[15:09:28] 💾 [SCALP] universe=101 saved=101 +[15:09:28] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:09:29] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[15:09:29] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[15:09:29] 💾 [SCALP] universe=100 saved=100 +[15:09:29] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:09:31] AFR 이탈 380550 sid=SCALP name=scalp_re px=7790 alert=1045500200I +[15:09:31] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7790 alert=1045500200I +[15:09:31] 💾 [SCALP] universe=99 saved=99 +[15:09:31] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:09:32] AFR 이탈 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[15:09:32] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[15:09:32] 💾 [SCALP] universe=98 saved=98 +[15:09:32] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[15:09:35] AFR 이탈 411080 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[15:09:35] [ls_cond_hist] AFR 이탈 411080 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[15:09:35] 💾 [SCALP] universe=97 saved=97 +[15:09:35] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[15:09:36] AFR 재진입 049520 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[15:09:36] [ls_cond_hist] AFR 재진입 049520 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[15:09:36] 💾 [SCALP] universe=98 saved=98 +[15:09:36] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[15:09:39] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:09:39] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:09:39] 💾 [SCALP] universe=99 saved=99 +[15:09:39] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:09:40] AFR 재진입 317830 sid=SCALP name=scalp_re px=4530 alert=1045500200I +[15:09:40] [ls_cond_hist] AFR 재진입 317830 sid=SCALP name=scalp_re px=4530 alert=1045500200I +[15:09:40] 💾 [SCALP] universe=100 saved=100 +[15:09:40] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:09:44] AFR 재진입 045660 sid=SCALP name=scalp_re px=8020 alert=1045500200I +[15:09:44] [ls_cond_hist] AFR 재진입 045660 sid=SCALP name=scalp_re px=8020 alert=1045500200I +[15:09:44] 💾 [SCALP] universe=101 saved=101 +[15:09:44] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:09:44] AFR 이탈 143160 sid=SCALP name=scalp_re px=15770 alert=1045500200I +[15:09:44] [ls_cond_hist] AFR 이탈 143160 sid=SCALP name=scalp_re px=15770 alert=1045500200I +[15:09:45] 💾 [SCALP] universe=100 saved=100 +[15:09:45] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:09:45] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[15:09:45] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[15:09:45] 💾 [SCALP] universe=101 saved=101 +[15:09:45] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:09:47] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:09:47] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:09:47] 💾 [SCALP] universe=100 saved=100 +[15:09:47] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:09:48] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:09:48] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:09:48] 💾 [SCALP] universe=101 saved=101 +[15:09:48] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:09:50] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:09:50] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:09:50] 💾 [SCALP] universe=100 saved=100 +[15:09:50] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:09:55] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:09:55] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:09:55] 💾 [SCALP] universe=101 saved=101 +[15:09:55] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:10:00] AFR 이탈 049520 sid=SCALP name=scalp_re px=3705 alert=1045500200I +[15:10:00] [ls_cond_hist] AFR 이탈 049520 sid=SCALP name=scalp_re px=3705 alert=1045500200I +[15:10:00] 💾 [SCALP] universe=100 saved=100 +[15:10:00] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:10:00] AFR 재진입 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[15:10:00] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[15:10:00] 💾 [SCALP] universe=101 saved=101 +[15:10:00] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:10:01] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[15:10:01] [ls_cond_hist] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[15:10:01] 💾 [SCALP] universe=102 saved=102 +[15:10:01] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:10:01] AFR 이탈 450950 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[15:10:01] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[15:10:01] 💾 [SCALP] universe=101 saved=101 +[15:10:01] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:10:01] AFR 이탈 474650 sid=SCALP name=scalp_re px=20300 alert=1045500200I +[15:10:01] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20300 alert=1045500200I +[15:10:01] 💾 [SCALP] universe=100 saved=100 +[15:10:01] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:10:02] AFR 재진입 136540 sid=SCALP name=scalp_re px=10420 alert=1045500200I +[15:10:02] [ls_cond_hist] AFR 재진입 136540 sid=SCALP name=scalp_re px=10420 alert=1045500200I +[15:10:02] 💾 [SCALP] universe=101 saved=101 +[15:10:02] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:10:03] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:10:03] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:10:03] 💾 [SCALP] universe=100 saved=100 +[15:10:03] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:10:03] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:10:03] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:10:03] 💾 [SCALP] universe=99 saved=99 +[15:10:03] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:10:03] AFR 재진입 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:10:03] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:10:03] 💾 [SCALP] universe=100 saved=100 +[15:10:03] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:10:04] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:10:04] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:10:05] 💾 [SCALP] universe=101 saved=101 +[15:10:05] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:10:05] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:10:05] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:10:05] 💾 [SCALP] universe=102 saved=102 +[15:10:05] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:10:05] AFR 이탈 140670 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[15:10:05] [ls_cond_hist] AFR 이탈 140670 sid=SCALP name=scalp_re px=8890 alert=1045500200I +[15:10:06] 💾 [SCALP] universe=101 saved=101 +[15:10:06] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:10:07] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:10:07] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:10:07] 💾 [SCALP] universe=100 saved=100 +[15:10:07] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:10:07] AFR 재진입 474650 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[15:10:07] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20450 alert=1045500200I +[15:10:07] 💾 [SCALP] universe=101 saved=101 +[15:10:07] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:10:10] AFR 이탈 474650 sid=SCALP name=scalp_re px=20300 alert=1045500200I +[15:10:10] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20300 alert=1045500200I +[15:10:10] 💾 [SCALP] universe=100 saved=100 +[15:10:10] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:10:12] AFR 재진입 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[15:10:12] [ls_cond_hist] AFR 재진입 009520 sid=SCALP name=scalp_re px=10540 alert=1045500200I +[15:10:12] 💾 [SCALP] universe=101 saved=101 +[15:10:12] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:10:13] AFR 재진입 140670 sid=SCALP name=scalp_re px=8870 alert=1045500200I +[15:10:13] [ls_cond_hist] AFR 재진입 140670 sid=SCALP name=scalp_re px=8870 alert=1045500200I +[15:10:13] 💾 [SCALP] universe=102 saved=102 +[15:10:13] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:10:15] AFR 진입 093190 sid=SCALP name=scalp_re px=8530 alert=1045500200I +[15:10:15] [ls_cond_hist] AFR 진입 093190 sid=SCALP name=scalp_re px=8530 alert=1045500200I +[15:10:15] 💾 [SCALP] universe=103 saved=103 +[15:10:15] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:10:16] AFR 이탈 380550 sid=SCALP name=scalp_re px=7790 alert=1045500200I +[15:10:16] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7790 alert=1045500200I +[15:10:17] 💾 [SCALP] universe=102 saved=102 +[15:10:17] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:10:18] AFR 이탈 045660 sid=SCALP name=scalp_re px=7990 alert=1045500200I +[15:10:18] [ls_cond_hist] AFR 이탈 045660 sid=SCALP name=scalp_re px=7990 alert=1045500200I +[15:10:18] 💾 [SCALP] universe=101 saved=101 +[15:10:18] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:10:19] AFR 이탈 041910 sid=SCALP name=scalp_re px=5390 alert=1045500200I +[15:10:19] [ls_cond_hist] AFR 이탈 041910 sid=SCALP name=scalp_re px=5390 alert=1045500200I +[15:10:19] 💾 [SCALP] universe=100 saved=100 +[15:10:19] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:10:20] AFR 재진입 067370 sid=SCALP name=scalp_re px=6260 alert=1045500200I +[15:10:20] [ls_cond_hist] AFR 재진입 067370 sid=SCALP name=scalp_re px=6260 alert=1045500200I +[15:10:20] 💾 [SCALP] universe=101 saved=101 +[15:10:20] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:10:24] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[15:10:24] [ls_cond_hist] AFR 재진입 120240 sid=SCALP name=scalp_re px=14790 alert=1045500200I +[15:10:24] 💾 [SCALP] universe=102 saved=102 +[15:10:24] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:10:25] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[15:10:25] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[15:10:25] 💾 [SCALP] universe=103 saved=103 +[15:10:25] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:10:25] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:10:25] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:10:26] 💾 [SCALP] universe=102 saved=102 +[15:10:26] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:10:28] AFR 진입 272210 sid=SCALP name=scalp_re px=63000 alert=1045500200I +[15:10:28] [ls_cond_hist] AFR 진입 272210 sid=SCALP name=scalp_re px=63000 alert=1045500200I +[15:10:28] 💾 [SCALP] universe=103 saved=103 +[15:10:28] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:10:30] AFR 재진입 474650 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[15:10:30] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20400 alert=1045500200I +[15:10:30] 💾 [SCALP] universe=104 saved=104 +[15:10:30] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:10:31] AFR 재진입 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[15:10:31] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[15:10:31] 💾 [SCALP] universe=105 saved=105 +[15:10:31] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:10:39] AFR 이탈 120240 sid=SCALP name=scalp_re px=14780 alert=1045500200I +[15:10:39] [ls_cond_hist] AFR 이탈 120240 sid=SCALP name=scalp_re px=14780 alert=1045500200I +[15:10:39] 💾 [SCALP] universe=104 saved=104 +[15:10:39] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:10:42] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[15:10:42] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7810 alert=1045500200I +[15:10:43] 💾 [SCALP] universe=105 saved=105 +[15:10:43] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:10:46] AFR 이탈 013030 sid=SCALP name=scalp_re px=31400 alert=1045500200I +[15:10:46] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31400 alert=1045500200I +[15:10:46] 💾 [SCALP] universe=104 saved=104 +[15:10:46] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:10:49] AFR 재진입 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:10:49] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:10:49] 💾 [SCALP] universe=105 saved=105 +[15:10:49] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:10:56] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:10:56] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:10:56] 💾 [SCALP] universe=106 saved=106 +[15:10:56] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:10:57] AFR 이탈 013030 sid=SCALP name=scalp_re px=31400 alert=1045500200I +[15:10:57] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31400 alert=1045500200I +[15:10:57] 💾 [SCALP] universe=105 saved=105 +[15:10:57] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:10:57] AFR 재진입 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:10:57] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:10:57] 💾 [SCALP] universe=106 saved=106 +[15:10:57] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:10:58] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[15:10:58] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5340 alert=1045500200I +[15:10:58] 💾 [SCALP] universe=105 saved=105 +[15:10:58] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:11:01] AFR 이탈 101330 sid=SCALP name=scalp_re px=3325 alert=1045500200I +[15:11:01] [ls_cond_hist] AFR 이탈 101330 sid=SCALP name=scalp_re px=3325 alert=1045500200I +[15:11:01] 💾 [SCALP] universe=104 saved=104 +[15:11:01] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:11:05] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:11:05] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:11:05] 💾 [SCALP] universe=105 saved=105 +[15:11:05] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:11:09] AFR 재진입 120240 sid=SCALP name=scalp_re px=14810 alert=1045500200I +[15:11:09] [ls_cond_hist] AFR 재진입 120240 sid=SCALP name=scalp_re px=14810 alert=1045500200I +[15:11:09] 💾 [SCALP] universe=106 saved=106 +[15:11:09] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:11:11] AFR 이탈 093190 sid=SCALP name=scalp_re px=8570 alert=1045500200I +[15:11:11] [ls_cond_hist] AFR 이탈 093190 sid=SCALP name=scalp_re px=8570 alert=1045500200I +[15:11:11] 💾 [SCALP] universe=105 saved=105 +[15:11:11] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:11:12] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[15:11:12] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6650 alert=1045500200I +[15:11:12] 💾 [SCALP] universe=106 saved=106 +[15:11:12] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:11:13] AFR 이탈 092460 sid=SCALP name=scalp_re px=16920 alert=1045500200I +[15:11:13] [ls_cond_hist] AFR 이탈 092460 sid=SCALP name=scalp_re px=16920 alert=1045500200I +[15:11:13] 💾 [SCALP] universe=105 saved=105 +[15:11:13] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:11:13] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:11:13] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:11:14] 💾 [SCALP] universe=104 saved=104 +[15:11:14] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:11:14] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:11:14] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:11:14] 💾 [SCALP] universe=105 saved=105 +[15:11:14] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:11:14] AFR 이탈 013030 sid=SCALP name=scalp_re px=31400 alert=1045500200I +[15:11:14] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31400 alert=1045500200I +[15:11:14] 💾 [SCALP] universe=104 saved=104 +[15:11:14] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:11:18] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:11:18] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:11:18] 💾 [SCALP] universe=103 saved=103 +[15:11:18] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:11:19] AFR 재진입 092460 sid=SCALP name=scalp_re px=16900 alert=1045500200I +[15:11:19] [ls_cond_hist] AFR 재진입 092460 sid=SCALP name=scalp_re px=16900 alert=1045500200I +[15:11:19] 💾 [SCALP] universe=104 saved=104 +[15:11:19] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:11:21] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:11:21] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:11:21] 💾 [SCALP] universe=105 saved=105 +[15:11:21] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:11:23] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:11:23] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:11:23] 💾 [SCALP] universe=104 saved=104 +[15:11:23] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:11:23] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:11:23] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:11:23] 💾 [SCALP] universe=103 saved=103 +[15:11:23] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:11:24] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:11:24] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:11:24] 💾 [SCALP] universe=104 saved=104 +[15:11:24] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:11:24] AFR 이탈 474650 sid=SCALP name=scalp_re px=20300 alert=1045500200I +[15:11:24] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20300 alert=1045500200I +[15:11:24] 💾 [SCALP] universe=103 saved=103 +[15:11:24] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:11:25] AFR 재진입 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:11:25] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31500 alert=1045500200I +[15:11:25] 💾 [SCALP] universe=104 saved=104 +[15:11:25] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:11:29] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:11:29] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:11:29] 💾 [SCALP] universe=105 saved=105 +[15:11:29] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:11:29] AFR 이탈 013030 sid=SCALP name=scalp_re px=31400 alert=1045500200I +[15:11:29] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31400 alert=1045500200I +[15:11:29] 💾 [SCALP] universe=104 saved=104 +[15:11:29] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:11:35] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:11:35] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31550 alert=1045500200I +[15:11:35] 💾 [SCALP] universe=105 saved=105 +[15:11:35] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:11:36] AFR 이탈 450950 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[15:11:36] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[15:11:36] 💾 [SCALP] universe=104 saved=104 +[15:11:36] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:11:37] AFR 재진입 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[15:11:37] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[15:11:37] 💾 [SCALP] universe=105 saved=105 +[15:11:37] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:11:43] AFR 재진입 474650 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[15:11:43] [ls_cond_hist] AFR 재진입 474650 sid=SCALP name=scalp_re px=20350 alert=1045500200I +[15:11:43] 💾 [SCALP] universe=106 saved=106 +[15:11:43] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:11:50] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:11:50] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:11:50] 💾 [SCALP] universe=105 saved=105 +[15:11:50] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:11:50] AFR 이탈 380550 sid=SCALP name=scalp_re px=7800 alert=1045500200I +[15:11:50] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7800 alert=1045500200I +[15:11:50] 💾 [SCALP] universe=104 saved=104 +[15:11:50] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:11:50] AFR 재진입 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[15:11:50] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7870 alert=1045500200I +[15:11:51] 💾 [SCALP] universe=105 saved=105 +[15:11:51] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:11:52] AFR 이탈 088340 sid=SCALP name=scalp_re px=6640 alert=1045500200I +[15:11:52] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6640 alert=1045500200I +[15:11:52] 💾 [SCALP] universe=104 saved=104 +[15:11:52] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:11:52] AFR 재진입 143160 sid=SCALP name=scalp_re px=15920 alert=1045500200I +[15:11:52] [ls_cond_hist] AFR 재진입 143160 sid=SCALP name=scalp_re px=15920 alert=1045500200I +[15:11:52] 💾 [SCALP] universe=105 saved=105 +[15:11:52] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:11:53] AFR 이탈 450950 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[15:11:53] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[15:11:53] 💾 [SCALP] universe=104 saved=104 +[15:11:53] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:11:54] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:11:54] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:11:54] 💾 [SCALP] universe=103 saved=103 +[15:11:54] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:11:54] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:11:54] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:11:54] 💾 [SCALP] universe=104 saved=104 +[15:11:54] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:11:59] AFR 이탈 012200 sid=SCALP name=scalp_re px=4015 alert=1045500200I +[15:11:59] [ls_cond_hist] AFR 이탈 012200 sid=SCALP name=scalp_re px=4015 alert=1045500200I +[15:11:59] 💾 [SCALP] universe=103 saved=103 +[15:11:59] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:12:00] AFR 재진입 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[15:12:00] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5640 alert=1045500200I +[15:12:00] 💾 [SCALP] universe=104 saved=104 +[15:12:00] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:12:01] AFR 이탈 380550 sid=SCALP name=scalp_re px=7790 alert=1045500200I +[15:12:01] [ls_cond_hist] AFR 이탈 380550 sid=SCALP name=scalp_re px=7790 alert=1045500200I +[15:12:01] 💾 [SCALP] universe=103 saved=103 +[15:12:01] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:12:04] AFR 이탈 331920 sid=SCALP name=scalp_re px=9390 alert=1045500200I +[15:12:04] [ls_cond_hist] AFR 이탈 331920 sid=SCALP name=scalp_re px=9390 alert=1045500200I +[15:12:04] 💾 [SCALP] universe=102 saved=102 +[15:12:04] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:12:05] AFR 재진입 088340 sid=SCALP name=scalp_re px=6670 alert=1045500200I +[15:12:05] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6670 alert=1045500200I +[15:12:05] 💾 [SCALP] universe=103 saved=103 +[15:12:05] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:12:12] AFR 이탈 059270 sid=SCALP name=scalp_re px=5260 alert=1045500200I +[15:12:12] [ls_cond_hist] AFR 이탈 059270 sid=SCALP name=scalp_re px=5260 alert=1045500200I +[15:12:12] 💾 [SCALP] universe=102 saved=102 +[15:12:12] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:12:16] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:12:16] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:12:16] 💾 [SCALP] universe=101 saved=101 +[15:12:16] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:12:18] AFR 진입 037030 sid=SCALP name=scalp_re px=3635 alert=1045500200I +[15:12:18] [ls_cond_hist] AFR 진입 037030 sid=SCALP name=scalp_re px=3635 alert=1045500200I +[15:12:18] 💾 [SCALP] universe=102 saved=102 +[15:12:18] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:12:24] AFR 이탈 120240 sid=SCALP name=scalp_re px=14810 alert=1045500200I +[15:12:24] [ls_cond_hist] AFR 이탈 120240 sid=SCALP name=scalp_re px=14810 alert=1045500200I +[15:12:24] 💾 [SCALP] universe=101 saved=101 +[15:12:24] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:12:27] AFR 재진입 331920 sid=SCALP name=scalp_re px=9250 alert=1045500200I +[15:12:27] [ls_cond_hist] AFR 재진입 331920 sid=SCALP name=scalp_re px=9250 alert=1045500200I +[15:12:27] 💾 [SCALP] universe=102 saved=102 +[15:12:27] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:12:28] AFR 재진입 088340 sid=SCALP name=scalp_re px=6670 alert=1045500200I +[15:12:28] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6670 alert=1045500200I +[15:12:28] 💾 [SCALP] universe=103 saved=103 +[15:12:28] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:12:28] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:12:28] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:12:29] 💾 [SCALP] universe=102 saved=102 +[15:12:29] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:12:40] AFR 이탈 140670 sid=SCALP name=scalp_re px=8900 alert=1045500200I +[15:12:40] [ls_cond_hist] AFR 이탈 140670 sid=SCALP name=scalp_re px=8900 alert=1045500200I +[15:12:41] 💾 [SCALP] universe=101 saved=101 +[15:12:41] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:12:41] AFR 이탈 348030 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[15:12:41] [ls_cond_hist] AFR 이탈 348030 sid=SCALP name=scalp_re px=2995 alert=1045500200I +[15:12:41] 💾 [SCALP] universe=100 saved=100 +[15:12:41] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:12:42] AFR 이탈 136540 sid=SCALP name=scalp_re px=10460 alert=1045500200I +[15:12:42] [ls_cond_hist] AFR 이탈 136540 sid=SCALP name=scalp_re px=10460 alert=1045500200I +[15:12:42] 💾 [SCALP] universe=99 saved=99 +[15:12:42] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:12:42] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:12:42] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:12:42] 💾 [SCALP] universe=98 saved=98 +[15:12:42] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[15:12:43] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:12:43] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:12:43] 💾 [SCALP] universe=99 saved=99 +[15:12:43] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:12:44] AFR 재진입 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[15:12:44] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6680 alert=1045500200I +[15:12:44] 💾 [SCALP] universe=100 saved=100 +[15:12:44] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:12:44] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:12:44] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:12:44] 💾 [SCALP] universe=99 saved=99 +[15:12:44] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:12:44] AFR 재진입 045660 sid=SCALP name=scalp_re px=8020 alert=1045500200I +[15:12:44] [ls_cond_hist] AFR 재진입 045660 sid=SCALP name=scalp_re px=8020 alert=1045500200I +[15:12:44] 💾 [SCALP] universe=100 saved=100 +[15:12:44] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:12:46] AFR 재진입 348030 sid=SCALP name=scalp_re px=3025 alert=1045500200I +[15:12:46] [ls_cond_hist] AFR 재진입 348030 sid=SCALP name=scalp_re px=3025 alert=1045500200I +[15:12:46] 💾 [SCALP] universe=101 saved=101 +[15:12:46] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:12:53] AFR 이탈 045660 sid=SCALP name=scalp_re px=8000 alert=1045500200I +[15:12:53] [ls_cond_hist] AFR 이탈 045660 sid=SCALP name=scalp_re px=8000 alert=1045500200I +[15:12:53] 💾 [SCALP] universe=100 saved=100 +[15:12:53] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:12:53] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[15:12:53] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[15:12:53] 💾 [SCALP] universe=101 saved=101 +[15:12:53] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:12:56] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:12:56] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:12:56] 💾 [SCALP] universe=100 saved=100 +[15:12:56] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:12:59] AFR 재진입 088340 sid=SCALP name=scalp_re px=6690 alert=1045500200I +[15:12:59] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6690 alert=1045500200I +[15:12:59] 💾 [SCALP] universe=101 saved=101 +[15:12:59] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:12:59] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:12:59] [ls_cond_hist] AFR 이탈 088340 sid=SCALP name=scalp_re px=6630 alert=1045500200I +[15:12:59] 💾 [SCALP] universe=100 saved=100 +[15:12:59] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:13:00] AFR 재진입 012200 sid=SCALP name=scalp_re px=4015 alert=1045500200I +[15:13:00] [ls_cond_hist] AFR 재진입 012200 sid=SCALP name=scalp_re px=4015 alert=1045500200I +[15:13:00] 💾 [SCALP] universe=101 saved=101 +[15:13:00] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:13:03] AFR 이탈 082270 sid=SCALP name=scalp_re px=10420 alert=1045500200I +[15:13:03] [ls_cond_hist] AFR 이탈 082270 sid=SCALP name=scalp_re px=10420 alert=1045500200I +[15:13:03] 💾 [SCALP] universe=100 saved=100 +[15:13:03] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:13:10] AFR 재진입 088340 sid=SCALP name=scalp_re px=6690 alert=1045500200I +[15:13:10] [ls_cond_hist] AFR 재진입 088340 sid=SCALP name=scalp_re px=6690 alert=1045500200I +[15:13:11] 💾 [SCALP] universe=101 saved=101 +[15:13:11] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:13:17] AFR 재진입 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[15:13:17] [ls_cond_hist] AFR 재진입 380550 sid=SCALP name=scalp_re px=7850 alert=1045500200I +[15:13:17] 💾 [SCALP] universe=102 saved=102 +[15:13:17] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:13:28] AFR 재진입 049520 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[15:13:28] [ls_cond_hist] AFR 재진입 049520 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[15:13:28] 💾 [SCALP] universe=103 saved=103 +[15:13:28] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:13:42] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:13:42] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:13:42] 💾 [SCALP] universe=104 saved=104 +[15:13:42] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:13:45] AFR 재진입 411080 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[15:13:45] [ls_cond_hist] AFR 재진입 411080 sid=SCALP name=scalp_re px=3735 alert=1045500200I +[15:13:45] 💾 [SCALP] universe=105 saved=105 +[15:13:45] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:13:46] AFR 이탈 068290 sid=SCALP name=scalp_re px=6240 alert=1045500200I +[15:13:46] [ls_cond_hist] AFR 이탈 068290 sid=SCALP name=scalp_re px=6240 alert=1045500200I +[15:13:46] 💾 [SCALP] universe=104 saved=104 +[15:13:46] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:13:51] AFR 재진입 082270 sid=SCALP name=scalp_re px=10390 alert=1045500200I +[15:13:51] [ls_cond_hist] AFR 재진입 082270 sid=SCALP name=scalp_re px=10390 alert=1045500200I +[15:13:51] 💾 [SCALP] universe=105 saved=105 +[15:13:51] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:13:53] AFR 재진입 006620 sid=SCALP name=scalp_re px=3820 alert=1045500200I +[15:13:53] [ls_cond_hist] AFR 재진입 006620 sid=SCALP name=scalp_re px=3820 alert=1045500200I +[15:13:53] 💾 [SCALP] universe=106 saved=106 +[15:13:53] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:13:58] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[15:13:58] [ls_cond_hist] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[15:13:58] 💾 [SCALP] universe=107 saved=107 +[15:13:58] [ls_cond_hist] 💾 [SCALP] universe=107 saved=107 +[15:14:02] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[15:14:02] [ls_cond_hist] AFR 이탈 0008Z0 sid=SCALP name=scalp_re px=22450 alert=1045500200I +[15:14:03] 💾 [SCALP] universe=106 saved=106 +[15:14:03] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:14:03] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:14:03] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:14:03] 💾 [SCALP] universe=105 saved=105 +[15:14:03] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:14:12] AFR 이탈 006620 sid=SCALP name=scalp_re px=3810 alert=1045500200I +[15:14:12] [ls_cond_hist] AFR 이탈 006620 sid=SCALP name=scalp_re px=3810 alert=1045500200I +[15:14:12] 💾 [SCALP] universe=104 saved=104 +[15:14:12] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:14:18] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:14:18] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:14:18] 💾 [SCALP] universe=105 saved=105 +[15:14:18] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:14:19] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:14:19] [ls_cond_hist] AFR 이탈 023160 sid=SCALP name=scalp_re px=22650 alert=1045500200I +[15:14:19] 💾 [SCALP] universe=104 saved=104 +[15:14:19] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:14:19] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:14:19] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:14:19] 💾 [SCALP] universe=105 saved=105 +[15:14:19] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:14:21] AFR 재진입 296640 sid=SCALP name=scalp_re px=4615 alert=1045500200I +[15:14:21] [ls_cond_hist] AFR 재진입 296640 sid=SCALP name=scalp_re px=4615 alert=1045500200I +[15:14:21] 💾 [SCALP] universe=106 saved=106 +[15:14:21] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:14:23] AFR 재진입 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[15:14:23] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26050 alert=1045500200I +[15:14:23] 💾 [SCALP] universe=107 saved=107 +[15:14:23] [ls_cond_hist] 💾 [SCALP] universe=107 saved=107 +[15:14:24] AFR 진입 216080 sid=SCALP name=scalp_re px=4160 alert=1045500200I +[15:14:24] [ls_cond_hist] AFR 진입 216080 sid=SCALP name=scalp_re px=4160 alert=1045500200I +[15:14:24] 💾 [SCALP] universe=108 saved=108 +[15:14:24] [ls_cond_hist] 💾 [SCALP] universe=108 saved=108 +[15:14:28] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:14:28] [ls_cond_hist] AFR 재진입 023160 sid=SCALP name=scalp_re px=22700 alert=1045500200I +[15:14:28] 💾 [SCALP] universe=109 saved=109 +[15:14:28] [ls_cond_hist] 💾 [SCALP] universe=109 saved=109 +[15:14:29] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:14:29] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:14:29] 💾 [SCALP] universe=108 saved=108 +[15:14:29] [ls_cond_hist] 💾 [SCALP] universe=108 saved=108 +[15:14:41] AFR 이탈 061250 sid=SCALP name=scalp_re px=9040 alert=1045500200I +[15:14:41] [ls_cond_hist] AFR 이탈 061250 sid=SCALP name=scalp_re px=9040 alert=1045500200I +[15:14:41] 💾 [SCALP] universe=107 saved=107 +[15:14:41] [ls_cond_hist] 💾 [SCALP] universe=107 saved=107 +[15:15:00] AFR 재진입 004365 sid=SCALP name=scalp_re px=9290 alert=1045500200I +[15:15:00] [ls_cond_hist] AFR 재진입 004365 sid=SCALP name=scalp_re px=9290 alert=1045500200I +[15:15:00] 💾 [SCALP] universe=108 saved=108 +[15:15:00] [ls_cond_hist] 💾 [SCALP] universe=108 saved=108 +[15:15:00] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[15:15:00] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[15:15:00] 💾 [SCALP] universe=107 saved=107 +[15:15:00] [ls_cond_hist] 💾 [SCALP] universe=107 saved=107 +[15:15:00] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:15:00] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:15:00] 💾 [SCALP] universe=108 saved=108 +[15:15:00] [ls_cond_hist] 💾 [SCALP] universe=108 saved=108 +[15:15:01] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:15:01] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:15:01] 💾 [SCALP] universe=107 saved=107 +[15:15:01] [ls_cond_hist] 💾 [SCALP] universe=107 saved=107 +[15:15:02] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:15:02] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:15:02] 💾 [SCALP] universe=108 saved=108 +[15:15:02] [ls_cond_hist] 💾 [SCALP] universe=108 saved=108 +[15:15:04] AFR 이탈 082270 sid=SCALP name=scalp_re px=10400 alert=1045500200I +[15:15:04] [ls_cond_hist] AFR 이탈 082270 sid=SCALP name=scalp_re px=10400 alert=1045500200I +[15:15:04] 💾 [SCALP] universe=107 saved=107 +[15:15:04] [ls_cond_hist] 💾 [SCALP] universe=107 saved=107 +[15:15:05] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:15:05] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:15:05] 💾 [SCALP] universe=106 saved=106 +[15:15:05] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:15:08] AFR 이탈 004365 sid=SCALP name=scalp_re px=9210 alert=1045500200I +[15:15:08] [ls_cond_hist] AFR 이탈 004365 sid=SCALP name=scalp_re px=9210 alert=1045500200I +[15:15:08] 💾 [SCALP] universe=105 saved=105 +[15:15:08] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:15:10] AFR 이탈 452400 sid=SCALP name=scalp_re px=5550 alert=1045500200I +[15:15:10] [ls_cond_hist] AFR 이탈 452400 sid=SCALP name=scalp_re px=5550 alert=1045500200I +[15:15:10] 💾 [SCALP] universe=104 saved=104 +[15:15:10] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:15:13] AFR 재진입 082270 sid=SCALP name=scalp_re px=10380 alert=1045500200I +[15:15:13] [ls_cond_hist] AFR 재진입 082270 sid=SCALP name=scalp_re px=10380 alert=1045500200I +[15:15:13] 💾 [SCALP] universe=105 saved=105 +[15:15:13] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:15:17] AFR 재진입 045660 sid=SCALP name=scalp_re px=8020 alert=1045500200I +[15:15:17] [ls_cond_hist] AFR 재진입 045660 sid=SCALP name=scalp_re px=8020 alert=1045500200I +[15:15:17] 💾 [SCALP] universe=106 saved=106 +[15:15:17] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:15:22] AFR 재진입 452400 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[15:15:22] [ls_cond_hist] AFR 재진입 452400 sid=SCALP name=scalp_re px=5560 alert=1045500200I +[15:15:23] 💾 [SCALP] universe=107 saved=107 +[15:15:23] [ls_cond_hist] 💾 [SCALP] universe=107 saved=107 +[15:15:24] AFR 이탈 012200 sid=SCALP name=scalp_re px=4010 alert=1045500200I +[15:15:24] [ls_cond_hist] AFR 이탈 012200 sid=SCALP name=scalp_re px=4010 alert=1045500200I +[15:15:24] 💾 [SCALP] universe=106 saved=106 +[15:15:24] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:15:43] AFR 이탈 023800 sid=SCALP name=scalp_re px=5330 alert=1045500200I +[15:15:43] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5330 alert=1045500200I +[15:15:43] 💾 [SCALP] universe=105 saved=105 +[15:15:43] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:15:48] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[15:15:48] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[15:15:48] 💾 [SCALP] universe=106 saved=106 +[15:15:48] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:15:59] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:15:59] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:15:59] 💾 [SCALP] universe=105 saved=105 +[15:15:59] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:15:59] AFR 이탈 143160 sid=SCALP name=scalp_re px=15690 alert=1045500200I +[15:15:59] [ls_cond_hist] AFR 이탈 143160 sid=SCALP name=scalp_re px=15690 alert=1045500200I +[15:16:00] 💾 [SCALP] universe=104 saved=104 +[15:16:00] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:16:00] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:16:00] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:16:00] 💾 [SCALP] universe=105 saved=105 +[15:16:00] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:16:01] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:16:01] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:16:01] 💾 [SCALP] universe=106 saved=106 +[15:16:01] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:16:01] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:16:01] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:16:01] 💾 [SCALP] universe=105 saved=105 +[15:16:01] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:16:06] AFR 이탈 216080 sid=SCALP name=scalp_re px=4195 alert=1045500200I +[15:16:06] [ls_cond_hist] AFR 이탈 216080 sid=SCALP name=scalp_re px=4195 alert=1045500200I +[15:16:06] 💾 [SCALP] universe=104 saved=104 +[15:16:06] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:16:11] AFR 재진입 216080 sid=SCALP name=scalp_re px=4180 alert=1045500200I +[15:16:11] [ls_cond_hist] AFR 재진입 216080 sid=SCALP name=scalp_re px=4180 alert=1045500200I +[15:16:11] 💾 [SCALP] universe=105 saved=105 +[15:16:11] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:16:15] AFR 이탈 331920 sid=SCALP name=scalp_re px=9360 alert=1045500200I +[15:16:15] [ls_cond_hist] AFR 이탈 331920 sid=SCALP name=scalp_re px=9360 alert=1045500200I +[15:16:15] 💾 [SCALP] universe=104 saved=104 +[15:16:15] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:16:18] AFR 재진입 006620 sid=SCALP name=scalp_re px=3815 alert=1045500200I +[15:16:18] [ls_cond_hist] AFR 재진입 006620 sid=SCALP name=scalp_re px=3815 alert=1045500200I +[15:16:18] 💾 [SCALP] universe=105 saved=105 +[15:16:18] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:16:30] AFR 이탈 296640 sid=SCALP name=scalp_re px=4660 alert=1045500200I +[15:16:30] [ls_cond_hist] AFR 이탈 296640 sid=SCALP name=scalp_re px=4660 alert=1045500200I +[15:16:31] 💾 [SCALP] universe=104 saved=104 +[15:16:31] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:16:39] AFR 이탈 411080 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[15:16:39] [ls_cond_hist] AFR 이탈 411080 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[15:16:39] 💾 [SCALP] universe=103 saved=103 +[15:16:39] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:16:46] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:16:46] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:16:46] 💾 [SCALP] universe=102 saved=102 +[15:16:46] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:16:55] AFR 재진입 012200 sid=SCALP name=scalp_re px=4015 alert=1045500200I +[15:16:55] [ls_cond_hist] AFR 재진입 012200 sid=SCALP name=scalp_re px=4015 alert=1045500200I +[15:16:55] 💾 [SCALP] universe=103 saved=103 +[15:16:55] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:16:56] AFR 이탈 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[15:16:56] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[15:16:56] 💾 [SCALP] universe=102 saved=102 +[15:16:56] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:16:58] AFR 재진입 120240 sid=SCALP name=scalp_re px=14810 alert=1045500200I +[15:16:58] [ls_cond_hist] AFR 재진입 120240 sid=SCALP name=scalp_re px=14810 alert=1045500200I +[15:16:58] 💾 [SCALP] universe=103 saved=103 +[15:16:58] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:16:58] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:16:58] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:16:59] 💾 [SCALP] universe=104 saved=104 +[15:16:59] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:17:03] AFR 이탈 036670 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[15:17:03] [ls_cond_hist] AFR 이탈 036670 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[15:17:03] 💾 [SCALP] universe=103 saved=103 +[15:17:03] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:17:06] AFR 재진입 331920 sid=SCALP name=scalp_re px=9260 alert=1045500200I +[15:17:06] [ls_cond_hist] AFR 재진입 331920 sid=SCALP name=scalp_re px=9260 alert=1045500200I +[15:17:07] 💾 [SCALP] universe=104 saved=104 +[15:17:07] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:17:14] AFR 이탈 082270 sid=SCALP name=scalp_re px=10420 alert=1045500200I +[15:17:14] [ls_cond_hist] AFR 이탈 082270 sid=SCALP name=scalp_re px=10420 alert=1045500200I +[15:17:14] 💾 [SCALP] universe=103 saved=103 +[15:17:14] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:17:15] AFR 이탈 045660 sid=SCALP name=scalp_re px=8010 alert=1045500200I +[15:17:15] [ls_cond_hist] AFR 이탈 045660 sid=SCALP name=scalp_re px=8010 alert=1045500200I +[15:17:15] 💾 [SCALP] universe=102 saved=102 +[15:17:15] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:17:16] AFR 이탈 120240 sid=SCALP name=scalp_re px=14830 alert=1045500200I +[15:17:16] [ls_cond_hist] AFR 이탈 120240 sid=SCALP name=scalp_re px=14830 alert=1045500200I +[15:17:17] 💾 [SCALP] universe=101 saved=101 +[15:17:17] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:17:17] AFR 재진입 136540 sid=SCALP name=scalp_re px=10400 alert=1045500200I +[15:17:17] [ls_cond_hist] AFR 재진입 136540 sid=SCALP name=scalp_re px=10400 alert=1045500200I +[15:17:17] 💾 [SCALP] universe=102 saved=102 +[15:17:17] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:17:30] AFR 재진입 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[15:17:30] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[15:17:30] 💾 [SCALP] universe=103 saved=103 +[15:17:30] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:17:31] AFR 이탈 192400 sid=SCALP name=scalp_re px=25950 alert=1045500200I +[15:17:31] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=25950 alert=1045500200I +[15:17:31] 💾 [SCALP] universe=102 saved=102 +[15:17:31] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:17:42] AFR 이탈 005990 sid=SCALP name=scalp_re px=10850 alert=1045500200I +[15:17:42] [ls_cond_hist] AFR 이탈 005990 sid=SCALP name=scalp_re px=10850 alert=1045500200I +[15:17:42] 💾 [SCALP] universe=101 saved=101 +[15:17:42] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:17:46] AFR 재진입 411080 sid=SCALP name=scalp_re px=3780 alert=1045500200I +[15:17:46] [ls_cond_hist] AFR 재진입 411080 sid=SCALP name=scalp_re px=3780 alert=1045500200I +[15:17:46] 💾 [SCALP] universe=102 saved=102 +[15:17:46] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:18:04] AFR 이탈 331920 sid=SCALP name=scalp_re px=9340 alert=1045500200I +[15:18:04] [ls_cond_hist] AFR 이탈 331920 sid=SCALP name=scalp_re px=9340 alert=1045500200I +[15:18:05] 💾 [SCALP] universe=101 saved=101 +[15:18:05] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:18:06] AFR 이탈 216080 sid=SCALP name=scalp_re px=4185 alert=1045500200I +[15:18:06] [ls_cond_hist] AFR 이탈 216080 sid=SCALP name=scalp_re px=4185 alert=1045500200I +[15:18:06] 💾 [SCALP] universe=100 saved=100 +[15:18:06] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:18:08] AFR 재진입 005990 sid=SCALP name=scalp_re px=10840 alert=1045500200I +[15:18:08] [ls_cond_hist] AFR 재진입 005990 sid=SCALP name=scalp_re px=10840 alert=1045500200I +[15:18:09] 💾 [SCALP] universe=101 saved=101 +[15:18:09] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:18:11] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:18:11] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:18:11] 💾 [SCALP] universe=100 saved=100 +[15:18:11] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:18:11] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:18:11] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:18:11] 💾 [SCALP] universe=101 saved=101 +[15:18:11] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:18:13] AFR 재진입 216080 sid=SCALP name=scalp_re px=4165 alert=1045500200I +[15:18:13] [ls_cond_hist] AFR 재진입 216080 sid=SCALP name=scalp_re px=4165 alert=1045500200I +[15:18:13] 💾 [SCALP] universe=102 saved=102 +[15:18:13] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:18:14] AFR 재진입 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[15:18:14] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5610 alert=1045500200I +[15:18:14] 💾 [SCALP] universe=103 saved=103 +[15:18:14] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:18:14] AFR 이탈 450950 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[15:18:14] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5600 alert=1045500200I +[15:18:15] 💾 [SCALP] universe=102 saved=102 +[15:18:15] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:18:18] AFR 재진입 061250 sid=SCALP name=scalp_re px=8900 alert=1045500200I +[15:18:18] [ls_cond_hist] AFR 재진입 061250 sid=SCALP name=scalp_re px=8900 alert=1045500200I +[15:18:18] 💾 [SCALP] universe=103 saved=103 +[15:18:18] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:18:23] AFR 이탈 023800 sid=SCALP name=scalp_re px=5330 alert=1045500200I +[15:18:23] [ls_cond_hist] AFR 이탈 023800 sid=SCALP name=scalp_re px=5330 alert=1045500200I +[15:18:23] 💾 [SCALP] universe=102 saved=102 +[15:18:23] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:18:45] AFR 재진입 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:18:45] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:18:45] 💾 [SCALP] universe=103 saved=103 +[15:18:45] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:18:46] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:18:46] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3690 alert=1045500200I +[15:18:46] 💾 [SCALP] universe=102 saved=102 +[15:18:46] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:18:49] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:18:49] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:18:49] 💾 [SCALP] universe=103 saved=103 +[15:18:49] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:18:49] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:18:49] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:18:49] 💾 [SCALP] universe=102 saved=102 +[15:18:49] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:18:50] AFR 재진입 120240 sid=SCALP name=scalp_re px=14780 alert=1045500200I +[15:18:50] [ls_cond_hist] AFR 재진입 120240 sid=SCALP name=scalp_re px=14780 alert=1045500200I +[15:18:50] 💾 [SCALP] universe=103 saved=103 +[15:18:50] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:18:52] AFR 재진입 353810 sid=SCALP name=scalp_re px=6120 alert=1045500200I +[15:18:52] [ls_cond_hist] AFR 재진입 353810 sid=SCALP name=scalp_re px=6120 alert=1045500200I +[15:18:52] 💾 [SCALP] universe=104 saved=104 +[15:18:52] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:18:56] AFR 재진입 068290 sid=SCALP name=scalp_re px=6220 alert=1045500200I +[15:18:56] [ls_cond_hist] AFR 재진입 068290 sid=SCALP name=scalp_re px=6220 alert=1045500200I +[15:18:56] 💾 [SCALP] universe=105 saved=105 +[15:18:56] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:18:56] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:18:56] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:18:56] 💾 [SCALP] universe=106 saved=106 +[15:18:56] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:18:56] AFR 재진입 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[15:18:56] [ls_cond_hist] AFR 재진입 450950 sid=SCALP name=scalp_re px=5620 alert=1045500200I +[15:18:57] 💾 [SCALP] universe=107 saved=107 +[15:18:57] [ls_cond_hist] 💾 [SCALP] universe=107 saved=107 +[15:18:58] AFR 이탈 068290 sid=SCALP name=scalp_re px=6200 alert=1045500200I +[15:18:58] [ls_cond_hist] AFR 이탈 068290 sid=SCALP name=scalp_re px=6200 alert=1045500200I +[15:18:58] 💾 [SCALP] universe=106 saved=106 +[15:18:58] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:19:00] AFR 이탈 101330 sid=SCALP name=scalp_re px=3340 alert=1045500200I +[15:19:00] [ls_cond_hist] AFR 이탈 101330 sid=SCALP name=scalp_re px=3340 alert=1045500200I +[15:19:00] 💾 [SCALP] universe=105 saved=105 +[15:19:00] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:19:03] AFR 이탈 452400 sid=SCALP name=scalp_re px=5550 alert=1045500200I +[15:19:03] [ls_cond_hist] AFR 이탈 452400 sid=SCALP name=scalp_re px=5550 alert=1045500200I +[15:19:03] 💾 [SCALP] universe=104 saved=104 +[15:19:03] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:19:04] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[15:19:04] [ls_cond_hist] AFR 재진입 101330 sid=SCALP name=scalp_re px=3320 alert=1045500200I +[15:19:05] 💾 [SCALP] universe=105 saved=105 +[15:19:05] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:19:05] AFR 이탈 092460 sid=SCALP name=scalp_re px=16940 alert=1045500200I +[15:19:05] [ls_cond_hist] AFR 이탈 092460 sid=SCALP name=scalp_re px=16940 alert=1045500200I +[15:19:05] 💾 [SCALP] universe=104 saved=104 +[15:19:05] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:19:10] AFR 재진입 452400 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[15:19:10] [ls_cond_hist] AFR 재진입 452400 sid=SCALP name=scalp_re px=5570 alert=1045500200I +[15:19:10] 💾 [SCALP] universe=105 saved=105 +[15:19:10] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:19:13] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:19:13] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:19:13] 💾 [SCALP] universe=104 saved=104 +[15:19:13] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:19:15] AFR 재진입 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[15:19:15] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[15:19:15] 💾 [SCALP] universe=105 saved=105 +[15:19:15] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:19:17] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:19:17] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:19:18] 💾 [SCALP] universe=104 saved=104 +[15:19:18] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:19:23] AFR 재진입 143160 sid=SCALP name=scalp_re px=15750 alert=1045500200I +[15:19:23] [ls_cond_hist] AFR 재진입 143160 sid=SCALP name=scalp_re px=15750 alert=1045500200I +[15:19:24] 💾 [SCALP] universe=105 saved=105 +[15:19:24] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:19:24] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[15:19:24] [ls_cond_hist] AFR 이탈 300080 sid=SCALP name=scalp_re px=8050 alert=1045500200I +[15:19:24] 💾 [SCALP] universe=104 saved=104 +[15:19:24] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:19:30] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:19:30] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:19:31] 💾 [SCALP] universe=103 saved=103 +[15:19:31] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:19:31] AFR 이탈 006620 sid=SCALP name=scalp_re px=3810 alert=1045500200I +[15:19:31] [ls_cond_hist] AFR 이탈 006620 sid=SCALP name=scalp_re px=3810 alert=1045500200I +[15:19:31] 💾 [SCALP] universe=102 saved=102 +[15:19:31] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:19:33] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:19:33] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:19:33] 💾 [SCALP] universe=103 saved=103 +[15:19:33] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:19:34] AFR 재진입 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[15:19:34] [ls_cond_hist] AFR 재진입 192400 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[15:19:34] 💾 [SCALP] universe=104 saved=104 +[15:19:34] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:19:34] AFR 이탈 049520 sid=SCALP name=scalp_re px=3710 alert=1045500200I +[15:19:34] [ls_cond_hist] AFR 이탈 049520 sid=SCALP name=scalp_re px=3710 alert=1045500200I +[15:19:34] 💾 [SCALP] universe=103 saved=103 +[15:19:34] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:19:35] AFR 이탈 143160 sid=SCALP name=scalp_re px=15630 alert=1045500200I +[15:19:35] [ls_cond_hist] AFR 이탈 143160 sid=SCALP name=scalp_re px=15630 alert=1045500200I +[15:19:35] 💾 [SCALP] universe=102 saved=102 +[15:19:35] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:19:35] AFR 재진입 143160 sid=SCALP name=scalp_re px=15830 alert=1045500200I +[15:19:35] [ls_cond_hist] AFR 재진입 143160 sid=SCALP name=scalp_re px=15830 alert=1045500200I +[15:19:35] 💾 [SCALP] universe=103 saved=103 +[15:19:35] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:19:36] AFR 진입 039340 sid=SCALP name=scalp_re px=4780 alert=1045500200I +[15:19:36] [ls_cond_hist] AFR 진입 039340 sid=SCALP name=scalp_re px=4780 alert=1045500200I +[15:19:36] 💾 [SCALP] universe=104 saved=104 +[15:19:36] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:19:36] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:19:36] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:19:36] 💾 [SCALP] universe=103 saved=103 +[15:19:36] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:19:38] AFR 진입 462310 sid=SCALP name=scalp_re px=3620 alert=1045500200I +[15:19:38] [ls_cond_hist] AFR 진입 462310 sid=SCALP name=scalp_re px=3620 alert=1045500200I +[15:19:38] 💾 [SCALP] universe=104 saved=104 +[15:19:38] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:19:39] AFR 이탈 192400 sid=SCALP name=scalp_re px=25950 alert=1045500200I +[15:19:39] [ls_cond_hist] AFR 이탈 192400 sid=SCALP name=scalp_re px=25950 alert=1045500200I +[15:19:39] 💾 [SCALP] universe=103 saved=103 +[15:19:39] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:19:41] AFR 재진입 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[15:19:41] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3700 alert=1045500200I +[15:19:41] 💾 [SCALP] universe=104 saved=104 +[15:19:41] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:19:42] AFR 재진입 068290 sid=SCALP name=scalp_re px=6180 alert=1045500200I +[15:19:42] [ls_cond_hist] AFR 재진입 068290 sid=SCALP name=scalp_re px=6180 alert=1045500200I +[15:19:42] 💾 [SCALP] universe=105 saved=105 +[15:19:42] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:19:43] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:19:43] [ls_cond_hist] AFR 이탈 005010 sid=SCALP name=scalp_re px=3685 alert=1045500200I +[15:19:43] 💾 [SCALP] universe=104 saved=104 +[15:19:43] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:19:45] AFR 재진입 296640 sid=SCALP name=scalp_re px=4635 alert=1045500200I +[15:19:45] [ls_cond_hist] AFR 재진입 296640 sid=SCALP name=scalp_re px=4635 alert=1045500200I +[15:19:45] 💾 [SCALP] universe=105 saved=105 +[15:19:45] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:19:45] AFR 재진입 148930 sid=SCALP name=scalp_re px=3440 alert=1045500200I +[15:19:45] [ls_cond_hist] AFR 재진입 148930 sid=SCALP name=scalp_re px=3440 alert=1045500200I +[15:19:45] 💾 [SCALP] universe=106 saved=106 +[15:19:45] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:19:47] AFR 이탈 012200 sid=SCALP name=scalp_re px=4010 alert=1045500200I +[15:19:47] [ls_cond_hist] AFR 이탈 012200 sid=SCALP name=scalp_re px=4010 alert=1045500200I +[15:19:47] 💾 [SCALP] universe=105 saved=105 +[15:19:47] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:19:49] AFR 재진입 331920 sid=SCALP name=scalp_re px=9280 alert=1045500200I +[15:19:49] [ls_cond_hist] AFR 재진입 331920 sid=SCALP name=scalp_re px=9280 alert=1045500200I +[15:19:50] 💾 [SCALP] universe=106 saved=106 +[15:19:50] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:19:50] AFR 이탈 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:19:50] [ls_cond_hist] AFR 이탈 013030 sid=SCALP name=scalp_re px=31450 alert=1045500200I +[15:19:50] 💾 [SCALP] universe=105 saved=105 +[15:19:50] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:19:53] AFR 이탈 004985 sid=SCALP name=scalp_re px=8300 alert=1045500200I +[15:19:53] [ls_cond_hist] AFR 이탈 004985 sid=SCALP name=scalp_re px=8300 alert=1045500200I +[15:19:53] 💾 [SCALP] universe=104 saved=104 +[15:19:53] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:19:55] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:19:55] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:19:55] 💾 [SCALP] universe=105 saved=105 +[15:19:55] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:19:58] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:19:58] [ls_cond_hist] AFR 이탈 012630 sid=SCALP name=scalp_re px=21550 alert=1045500200I +[15:19:58] 💾 [SCALP] universe=104 saved=104 +[15:19:58] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:19:58] AFR 재진입 004985 sid=SCALP name=scalp_re px=8380 alert=1045500200I +[15:19:58] [ls_cond_hist] AFR 재진입 004985 sid=SCALP name=scalp_re px=8380 alert=1045500200I +[15:19:58] 💾 [SCALP] universe=105 saved=105 +[15:19:58] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:19:58] AFR 이탈 000225 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[15:19:58] [ls_cond_hist] AFR 이탈 000225 sid=SCALP name=scalp_re px=3730 alert=1045500200I +[15:19:58] 💾 [SCALP] universe=104 saved=104 +[15:19:58] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:19:59] AFR 재진입 049520 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[15:19:59] [ls_cond_hist] AFR 재진입 049520 sid=SCALP name=scalp_re px=3720 alert=1045500200I +[15:19:59] 💾 [SCALP] universe=105 saved=105 +[15:19:59] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:20:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:20:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:20:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:20:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:20:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:20:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:20:59] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:20:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:22:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:22:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:22:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:22:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:22:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:22:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:22:00] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:22:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:23:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:23:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:23:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:23:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:23:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:23:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:23:00] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:23:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:24:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:24:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:24:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:24:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:24:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:24:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:24:00] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:24:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:25:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:25:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:25:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:25:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:25:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:25:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:25:00] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:25:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:26:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:26:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:26:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:26:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:26:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:26:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:26:00] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:26:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:27:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:27:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:27:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:27:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:27:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:27:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:27:00] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:27:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:28:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:28:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:28:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:28:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:28:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:28:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:28:01] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:28:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:29:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:29:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:29:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:29:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:29:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:29:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:29:01] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:29:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=105 univ=105 +[15:30:01] AFR 이탈 353810 sid=SCALP name=scalp_re px=6130 alert=1045500200I +[15:30:01] [ls_cond_hist] AFR 이탈 353810 sid=SCALP name=scalp_re px=6130 alert=1045500200I +[15:30:01] 💾 [SCALP] universe=104 saved=104 +[15:30:01] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:30:07] AFR 진입 153890 sid=SCALP name=scalp_re px=6920 alert=1045500200I +[15:30:07] [ls_cond_hist] AFR 진입 153890 sid=SCALP name=scalp_re px=6920 alert=1045500200I +[15:30:07] 💾 [SCALP] universe=105 saved=105 +[15:30:07] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:30:10] AFR 재진입 300080 sid=SCALP name=scalp_re px=8070 alert=1045500200I +[15:30:10] [ls_cond_hist] AFR 재진입 300080 sid=SCALP name=scalp_re px=8070 alert=1045500200I +[15:30:10] 💾 [SCALP] universe=106 saved=106 +[15:30:10] [ls_cond_hist] 💾 [SCALP] universe=106 saved=106 +[15:30:21] AFR 이탈 317830 sid=SCALP name=scalp_re px=4680 alert=1045500200I +[15:30:21] [ls_cond_hist] AFR 이탈 317830 sid=SCALP name=scalp_re px=4680 alert=1045500200I +[15:30:21] 💾 [SCALP] universe=105 saved=105 +[15:30:21] [ls_cond_hist] 💾 [SCALP] universe=105 saved=105 +[15:30:23] AFR 이탈 068290 sid=SCALP name=scalp_re px=6150 alert=1045500200I +[15:30:23] [ls_cond_hist] AFR 이탈 068290 sid=SCALP name=scalp_re px=6150 alert=1045500200I +[15:30:23] 💾 [SCALP] universe=104 saved=104 +[15:30:23] [ls_cond_hist] 💾 [SCALP] universe=104 saved=104 +[15:30:24] AFR 이탈 071280 sid=SCALP name=scalp_re px=6820 alert=1045500200I +[15:30:24] [ls_cond_hist] AFR 이탈 071280 sid=SCALP name=scalp_re px=6820 alert=1045500200I +[15:30:24] 💾 [SCALP] universe=103 saved=103 +[15:30:24] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:30:25] AFR 이탈 148930 sid=SCALP name=scalp_re px=3435 alert=1045500200I +[15:30:25] [ls_cond_hist] AFR 이탈 148930 sid=SCALP name=scalp_re px=3435 alert=1045500200I +[15:30:25] 💾 [SCALP] universe=102 saved=102 +[15:30:25] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:30:26] AFR 이탈 290650 sid=SCALP name=scalp_re px=58100 alert=1045500200I +[15:30:26] [ls_cond_hist] AFR 이탈 290650 sid=SCALP name=scalp_re px=58100 alert=1045500200I +[15:30:26] 💾 [SCALP] universe=101 saved=101 +[15:30:26] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:30:28] AFR 재진입 092460 sid=SCALP name=scalp_re px=16750 alert=1045500200I +[15:30:28] [ls_cond_hist] AFR 재진입 092460 sid=SCALP name=scalp_re px=16750 alert=1045500200I +[15:30:28] 💾 [SCALP] universe=102 saved=102 +[15:30:28] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:30:30] AFR 재진입 013030 sid=SCALP name=scalp_re px=31650 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 재진입 013030 sid=SCALP name=scalp_re px=31650 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=103 saved=103 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:30:30] AFR 이탈 016250 sid=SCALP name=scalp_re px=12060 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 이탈 016250 sid=SCALP name=scalp_re px=12060 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=102 saved=102 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:30:30] AFR 이탈 001940 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 이탈 001940 sid=SCALP name=scalp_re px=26000 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=101 saved=101 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:30:30] AFR 재진입 036670 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 재진입 036670 sid=SCALP name=scalp_re px=5110 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=102 saved=102 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:30:30] AFR 이탈 039340 sid=SCALP name=scalp_re px=4810 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 이탈 039340 sid=SCALP name=scalp_re px=4810 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=101 saved=101 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:30:30] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 재진입 005010 sid=SCALP name=scalp_re px=3695 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=102 saved=102 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:30:30] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 재진입 012630 sid=SCALP name=scalp_re px=21600 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=103 saved=103 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=103 saved=103 +[15:30:30] AFR 이탈 067370 sid=SCALP name=scalp_re px=6290 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 이탈 067370 sid=SCALP name=scalp_re px=6290 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=102 saved=102 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:30:30] AFR 이탈 072990 sid=SCALP name=scalp_re px=3450 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 이탈 072990 sid=SCALP name=scalp_re px=3450 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=101 saved=101 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:30:30] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 재진입 023800 sid=SCALP name=scalp_re px=5350 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=102 saved=102 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=102 saved=102 +[15:30:30] AFR 이탈 120240 sid=SCALP name=scalp_re px=14760 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 이탈 120240 sid=SCALP name=scalp_re px=14760 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=101 saved=101 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=101 saved=101 +[15:30:30] AFR 이탈 137950 sid=SCALP name=scalp_re px=3095 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 이탈 137950 sid=SCALP name=scalp_re px=3095 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=100 saved=100 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=100 saved=100 +[15:30:30] AFR 이탈 338840 sid=SCALP name=scalp_re px=9330 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 이탈 338840 sid=SCALP name=scalp_re px=9330 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=99 saved=99 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=99 saved=99 +[15:30:30] AFR 이탈 450950 sid=SCALP name=scalp_re px=5590 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 이탈 450950 sid=SCALP name=scalp_re px=5590 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=98 saved=98 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=98 saved=98 +[15:30:30] AFR 이탈 458650 sid=SCALP name=scalp_re px=8070 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 이탈 458650 sid=SCALP name=scalp_re px=8070 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=97 saved=97 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=97 saved=97 +[15:30:30] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[15:30:30] [ls_cond_hist] AFR 이탈 474650 sid=SCALP name=scalp_re px=20700 alert=1045500200I +[15:30:30] 💾 [SCALP] universe=96 saved=96 +[15:30:30] [ls_cond_hist] 💾 [SCALP] universe=96 saved=96 +[15:31:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:31:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:31:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:31:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:31:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:31:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:31:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:31:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:32:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:32:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:32:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:32:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:32:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:32:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:32:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:32:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:33:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:33:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:33:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:33:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:33:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:33:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:33:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:33:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:34:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:34:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:34:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:34:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:34:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:34:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:34:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:34:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:35:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:35:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:35:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:35:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:35:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:35:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:35:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:35:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:36:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:36:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:36:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:36:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:36:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:36:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:36:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:36:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:37:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:37:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:37:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:37:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:37:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:37:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:37:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:37:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:38:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:38:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:38:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:38:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:38:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:38:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:38:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:38:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:39:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:39:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:39:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:39:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:39:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:39:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:39:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:39:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:40:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:40:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:40:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:40:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:40:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:40:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:40:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:40:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:41:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:41:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:41:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:41:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:41:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:41:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:41:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:41:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:42:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:42:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:42:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:42:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:42:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:42:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:42:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:42:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:43:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:43:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:43:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:43:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:43:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:43:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:43:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:43:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:44:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:44:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:44:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:44:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:44:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:44:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:44:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:44:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:45:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:45:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:45:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:45:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:45:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:45:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:45:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:45:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:46:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:46:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:46:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:46:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:46:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:46:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:46:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:46:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:47:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:47:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:47:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:47:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:47:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:47:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:47:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:47:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:48:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:48:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:48:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:48:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:48:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:48:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:48:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:48:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:49:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:49:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:49:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:49:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:49:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:49:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:49:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:49:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:50:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:50:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:50:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:50:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:50:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:50:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:50:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:50:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:51:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:51:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:51:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:51:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:51:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:51:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:51:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:51:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:52:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:52:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:52:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:52:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:52:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:52:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:52:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:52:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:53:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:53:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:53:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:53:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:53:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:53:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:53:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:53:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:54:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:54:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:54:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:54:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:54:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:54:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:54:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:54:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:55:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:55:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:55:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:55:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:55:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:55:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:55:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:55:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:56:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:56:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:56:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:56:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:56:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:56:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:56:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:56:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:57:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:57:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:57:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:57:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:57:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:57:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:57:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:57:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:58:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:58:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:58:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:58:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:58:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:58:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:58:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:58:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:59:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:59:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:59:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:59:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:59:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:59:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:59:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:59:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:00:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:00:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:00:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:00:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:00:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:00:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:00:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:00:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:01:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:01:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:01:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:01:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:01:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:01:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:01:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:01:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:02:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:02:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:02:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:02:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:02:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:02:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:02:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:02:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:03:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:03:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:03:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:03:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:03:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:03:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:03:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:03:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:04:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:04:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:04:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:04:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:04:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:04:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:04:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:04:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:05:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:05:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:05:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:05:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:05:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:05:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:05:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:05:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:06:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:06:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:06:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:06:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:06:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:06:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:06:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:06:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:07:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:07:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:07:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:07:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:07:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:07:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:07:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:07:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:08:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:08:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:08:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:08:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:08:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:08:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:08:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:08:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:09:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:09:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:09:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:09:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:09:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:09:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:09:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:09:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:10:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:10:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:10:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:10:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:10:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:10:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:10:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:10:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:11:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:11:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:11:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:11:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:11:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:11:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:11:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:11:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:12:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:12:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:12:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:12:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:12:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:12:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:12:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:12:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:13:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:13:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:13:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:13:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:13:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:13:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:13:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:13:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:14:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:14:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:14:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:14:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:14:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:14:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:14:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:14:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:15:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:15:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:15:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:15:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:15:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:15:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:15:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:15:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:16:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:16:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:16:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:16:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:16:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:16:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:16:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:16:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:17:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:17:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:17:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:17:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:17:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:17:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:17:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:17:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:18:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:18:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:18:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:18:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:18:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:18:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:18:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:18:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:19:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:19:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:19:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:19:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:19:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:19:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:19:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:19:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:20:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:20:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:20:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:20:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:20:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:20:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:20:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:20:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:21:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:21:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:21:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:21:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:21:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:21:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:21:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:21:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:22:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:22:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:22:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:22:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:22:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:22:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:22:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:22:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:23:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:23:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:23:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:23:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:23:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:23:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:23:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:23:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:24:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:24:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:24:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:24:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:24:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:24:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:24:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:24:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:25:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:25:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:25:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:25:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:25:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:25:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:25:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:25:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:26:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:26:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:26:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:26:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:26:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:26:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:26:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:26:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:27:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:27:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:27:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:27:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:27:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:27:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:27:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:27:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:28:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:28:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:28:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:28:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:28:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:28:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:28:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:28:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:29:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:29:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:29:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:29:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:29:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:29:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:29:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:29:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:30:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:30:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:30:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:30:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:30:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:30:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:30:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:30:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:31:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:31:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:31:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:31:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:31:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:31:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:31:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:31:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:32:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:32:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:32:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:32:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:32:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:32:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:32:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:32:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:33:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:33:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:33:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:33:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:33:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:33:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:33:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:33:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:34:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:34:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:34:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:34:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:34:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:34:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:34:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:34:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:35:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:35:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:35:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:35:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:35:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:35:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:35:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:35:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:36:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:36:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:36:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:36:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:36:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:36:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:36:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:36:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:37:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:37:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:37:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:37:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:37:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:37:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:37:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:37:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:38:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:38:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:38:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:38:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:38:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:38:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:38:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:38:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:39:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:39:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:39:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:39:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:39:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:39:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:39:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:39:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:40:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:40:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:40:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:40:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:40:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:40:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:40:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:40:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:41:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:41:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:41:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:41:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:41:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:41:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:41:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:41:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:42:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:42:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:42:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:42:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:42:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:42:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:42:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:42:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:43:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:43:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:43:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:43:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:43:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:43:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:43:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:43:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:44:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:44:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:44:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:44:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:44:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:44:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:44:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:44:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:45:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:45:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:45:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:45:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:45:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:45:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:45:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:45:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:46:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:46:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:46:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:46:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:46:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:46:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:46:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:46:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:47:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:47:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:47:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:47:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:47:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:47:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:47:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:47:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:48:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:48:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:48:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:48:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:48:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:48:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:48:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:48:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:49:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:49:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:49:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:49:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:49:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:49:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:49:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:49:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:50:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:50:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:50:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:50:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:50:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:50:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:50:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:50:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:51:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:51:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:51:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:51:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:51:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:51:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:51:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:51:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:52:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:52:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:52:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:52:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:52:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:52:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:52:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:52:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:53:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:53:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:53:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:53:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:53:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:53:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:53:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:53:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:54:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:54:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:54:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:54:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:54:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:54:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:54:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:54:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:55:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:55:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:55:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:55:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:55:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:55:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:55:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:55:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:56:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:56:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:56:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:56:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:56:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:56:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:56:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:56:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:57:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:57:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:57:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:57:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:57:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:57:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:57:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:57:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:58:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:58:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:58:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:58:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:58:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:58:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:58:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:58:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:59:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:59:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:59:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:59:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:59:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:59:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:59:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:59:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:00:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:00:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:00:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:00:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:00:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:00:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:00:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:00:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:01:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:01:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:01:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:01:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:01:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:01:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:01:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:01:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:02:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:02:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:02:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:02:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:02:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:02:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:02:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:02:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:03:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:03:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:03:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:03:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:03:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:03:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:03:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:03:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:04:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:04:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:04:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:04:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:04:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:04:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:04:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:04:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:05:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:05:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:05:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:05:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:05:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:05:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:05:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:05:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:06:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:06:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:06:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:06:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:06:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:06:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:06:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:06:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:07:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:07:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:07:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:07:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:07:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:07:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:07:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:07:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:08:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:08:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:08:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:08:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:08:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:08:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:08:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:08:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:09:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:09:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:09:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:09:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:09:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:09:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:09:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:09:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:10:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:10:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:10:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:10:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:10:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:10:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:10:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:10:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:11:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:11:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:11:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:11:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:11:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:11:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:11:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:11:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:12:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:12:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:12:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:12:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:12:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:12:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:12:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:12:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:13:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:13:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:13:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:13:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:13:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:13:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:13:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:13:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:14:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:14:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:14:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:14:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:14:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:14:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:14:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:14:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:15:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:15:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:15:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:15:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:15:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:15:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:15:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:15:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:16:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:16:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:16:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:16:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:16:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:16:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:16:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:16:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:17:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:17:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:17:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:17:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:17:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:17:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:17:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:17:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:18:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:18:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:18:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:18:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:18:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:18:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:18:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:18:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:19:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:19:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:19:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:19:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:19:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:19:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:19:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:19:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:20:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:20:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:20:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:20:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:20:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:20:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:20:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:20:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:21:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:21:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:21:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:21:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:21:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:21:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:21:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:21:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:22:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:22:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:22:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:22:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:22:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:22:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:22:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:22:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:23:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:23:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:23:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:23:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:23:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:23:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:23:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:23:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:24:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:24:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:24:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:24:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:24:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:24:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:24:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:24:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:25:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:25:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:25:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:25:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:25:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:25:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:25:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:25:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:26:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:26:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:26:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:26:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:26:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:26:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:26:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:26:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:27:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:27:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:27:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:27:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:27:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:27:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:27:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:27:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:28:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:28:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:28:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:28:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:28:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:28:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:28:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:28:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:29:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:29:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:29:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:29:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:29:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:29:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:29:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:29:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:30:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:30:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:30:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:30:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:30:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:30:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:30:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:30:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:31:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:31:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:31:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:31:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:31:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:31:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:31:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:31:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:32:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:32:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:32:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:32:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:32:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:32:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:32:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:32:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:33:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:33:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:33:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:33:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:33:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:33:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:33:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:33:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:34:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:34:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:34:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:34:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:34:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:34:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:34:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:34:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:35:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:35:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:35:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:35:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:35:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:35:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:35:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:35:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:36:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:36:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:36:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:36:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:36:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:36:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:36:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:36:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:37:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:37:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:37:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:37:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:37:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:37:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:37:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:37:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:38:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:38:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:38:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:38:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:38:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:38:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:38:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:38:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:39:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:39:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:39:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:39:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:39:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:39:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:39:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:39:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:40:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:40:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:40:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:40:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:40:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:40:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:40:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:40:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:41:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:41:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:41:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:41:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:41:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:41:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:41:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:41:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:42:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:42:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:42:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:42:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:42:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:42:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:42:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:42:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:43:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:43:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:43:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:43:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:43:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:43:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:43:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:43:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:44:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:44:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:44:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:44:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:44:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:44:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:44:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:44:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:45:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:45:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:45:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:45:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:45:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:45:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:45:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:45:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:46:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:46:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:46:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:46:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:46:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:46:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:46:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:46:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:47:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:47:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:47:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:47:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:47:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:47:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:47:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:47:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:48:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:48:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:48:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:48:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:48:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:48:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:48:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:48:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:49:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:49:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:49:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:49:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:49:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:49:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:49:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:49:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:50:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:50:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:50:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:50:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:50:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:50:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:50:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:50:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:51:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:51:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:51:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:51:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:51:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:51:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:51:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:51:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:52:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:52:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:52:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:52:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:52:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:52:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:52:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:52:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:53:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:53:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:53:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:53:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:53:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:53:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:53:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:53:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:54:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:54:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:54:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:54:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:54:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:54:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:54:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:54:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:55:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:55:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:55:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:55:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:55:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:55:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:55:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:55:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:56:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:56:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:56:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:56:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:56:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:56:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:56:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:56:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:57:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:57:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:57:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:57:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:57:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:57:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:57:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:57:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:58:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:58:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:58:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:58:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:58:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:58:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:58:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:58:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:59:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:59:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:59:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:59:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:59:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:59:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:59:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:59:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:00:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:00:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:00:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:00:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:00:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:00:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:00:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:00:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:01:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:01:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:01:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:01:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:01:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:01:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:01:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:01:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:02:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:02:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:02:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:02:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:02:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:02:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:02:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:02:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:03:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:03:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:03:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:03:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:03:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:03:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:03:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:03:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:04:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:04:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:04:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:04:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:04:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:04:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:04:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:04:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:05:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:05:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:05:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:05:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:05:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:05:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:05:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:05:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:06:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:06:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:06:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:06:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:06:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:06:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:06:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:06:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:07:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:07:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:07:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:07:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:07:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:07:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:07:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:07:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:08:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:08:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:08:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:08:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:08:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:08:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:08:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:08:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:09:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:09:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:09:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:09:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:09:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:09:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:09:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:09:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:10:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:10:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:10:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:10:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:10:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:10:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:10:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:10:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:11:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:11:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:11:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:11:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:11:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:11:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:11:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:11:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:12:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:12:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:12:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:12:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:12:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:12:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:12:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:12:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:13:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:13:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:13:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:13:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:13:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:13:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:13:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:13:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:14:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:14:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:14:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:14:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:14:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:14:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:14:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:14:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:15:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:15:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:15:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:15:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:15:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:15:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:15:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:15:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:16:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:16:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:16:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:16:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:16:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:16:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:16:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:16:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:17:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:17:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:17:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:17:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:17:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:17:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:17:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:17:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:18:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:18:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:18:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:18:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:18:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:18:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:18:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:18:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:19:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:19:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:19:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:19:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:19:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:19:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:19:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:19:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:20:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:20:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:20:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:20:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:20:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:20:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:20:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:20:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:21:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:21:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:21:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:21:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:21:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:21:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:21:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:21:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:22:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:22:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:22:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:22:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:22:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:22:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:22:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:22:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:23:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:23:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:23:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:23:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:23:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:23:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:23:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:23:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:24:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:24:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:24:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:24:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:24:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:24:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:24:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:24:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:25:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:25:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:25:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:25:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:25:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:25:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:25:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:25:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:26:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:26:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:26:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:26:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:26:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:26:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:26:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:26:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:27:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:27:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:27:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:27:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:27:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:27:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:27:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:27:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:28:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:28:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:28:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:28:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:28:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:28:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:28:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:28:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:29:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:29:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:29:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:29:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:29:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:29:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:29:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:29:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:30:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:30:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:30:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:30:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:30:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:30:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:30:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:30:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:31:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:31:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:31:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:31:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:31:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:31:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:31:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:31:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:32:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:32:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:32:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:32:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:32:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:32:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:32:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:32:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:33:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:33:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:33:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:33:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:33:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:33:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:33:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:33:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:34:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:34:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:34:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:34:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:34:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:34:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:34:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:34:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:35:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:35:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:35:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:35:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:35:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:35:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:35:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:35:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:36:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:36:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:36:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:36:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:36:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:36:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:36:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:36:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:37:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:37:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:37:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:37:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:37:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:37:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:37:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:37:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:38:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:38:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:38:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:38:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:38:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:38:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:38:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:38:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:39:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:39:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:39:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:39:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:39:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:39:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:39:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:39:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:40:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:40:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:40:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:40:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:40:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:40:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:40:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:40:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:41:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:41:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:41:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:41:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:41:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:41:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:41:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:41:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:42:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:42:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:42:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:42:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:42:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:42:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:42:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:42:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:43:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:43:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:43:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:43:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:43:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:43:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:43:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:43:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:44:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:44:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:44:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:44:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:44:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:44:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:44:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:44:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:45:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:45:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:45:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:45:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:45:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:45:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:45:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:45:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:46:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:46:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:46:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:46:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:46:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:46:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:46:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:46:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:47:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:47:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:47:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:47:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:47:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:47:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:47:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:47:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:48:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:48:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:48:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:48:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:48:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:48:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:48:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:48:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:49:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:49:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:49:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:49:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:49:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:49:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:49:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:49:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:50:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:50:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:50:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:50:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:50:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:50:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:50:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:50:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:51:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:51:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:51:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:51:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:51:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:51:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:51:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:51:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:52:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:52:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:52:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:52:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:52:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:52:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:52:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:52:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:53:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:53:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:53:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:53:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:53:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:53:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:53:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:53:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:54:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:54:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:54:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:54:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:54:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:54:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:54:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:54:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:55:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:55:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:55:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:55:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:55:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:55:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:55:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:55:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:56:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:56:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:56:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:56:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:56:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:56:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:56:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:56:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:57:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:57:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:57:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:57:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:57:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:57:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:57:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:57:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:58:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:58:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:58:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:58:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:58:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:58:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:58:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:58:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:59:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:59:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:59:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:59:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:59:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:59:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:59:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:59:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:00:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:00:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:00:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:00:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:00:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:00:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:00:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:00:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:01:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:01:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:01:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:01:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:01:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:01:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:01:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:01:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:02:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:02:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:02:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:02:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:02:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:02:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:02:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:02:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:03:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:03:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:03:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:03:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:03:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:03:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:03:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:03:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:04:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:04:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:04:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:04:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:04:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:04:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:04:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:04:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:05:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:05:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:05:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:05:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:05:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:05:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:05:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:05:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:06:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:06:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:06:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:06:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:06:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:06:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:06:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:06:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:07:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:07:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:07:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:07:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:07:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:07:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:07:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:07:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:08:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:08:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:08:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:08:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:08:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:08:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:08:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:08:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:09:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:09:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:09:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:09:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:09:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:09:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:09:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:09:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:10:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:10:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:10:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:10:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:10:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:10:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:10:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:10:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:11:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:11:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:11:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:11:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:11:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:11:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:11:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:11:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:12:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:12:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:12:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:12:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:12:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:12:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:12:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:12:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:13:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:13:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:13:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:13:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:13:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:13:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:13:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:13:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:14:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:14:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:14:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:14:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:14:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:14:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:14:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:14:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:15:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:15:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:15:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:15:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:15:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:15:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:15:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:15:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:16:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:16:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:16:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:16:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:16:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:16:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:16:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:16:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:17:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:17:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:17:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:17:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:17:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:17:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:17:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:17:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:18:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:18:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:18:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:18:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:18:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:18:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:18:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:18:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:19:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:19:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:19:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:19:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:19:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:19:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:19:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:19:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:20:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:20:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:20:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:20:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:20:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:20:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:20:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:20:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:21:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:21:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:21:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:21:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:21:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:21:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:21:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:21:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:22:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:22:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:22:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:22:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:22:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:22:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:22:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:22:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:23:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:23:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:23:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:23:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:23:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:23:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:23:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:23:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:24:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:24:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:24:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:24:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:24:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:24:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:24:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:24:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:25:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:25:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:25:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:25:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:25:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:25:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:25:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:25:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:26:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:26:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:26:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:26:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:26:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:26:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:26:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:26:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:27:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:27:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:27:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:27:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:27:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:27:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:27:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:27:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:28:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:28:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:28:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:28:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:28:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:28:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:28:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:28:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:29:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:29:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:29:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:29:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:29:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:29:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:29:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:29:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:30:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:30:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:30:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:30:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:30:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:30:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:30:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:30:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:31:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:31:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:31:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:31:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:31:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:31:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:31:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:31:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:32:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:32:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:32:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:32:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:32:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:32:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:32:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:32:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:33:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:33:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:33:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:33:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:33:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:33:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:33:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:33:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:34:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:34:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:34:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:34:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:34:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:34:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:34:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:34:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:35:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:35:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:35:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:35:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:35:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:35:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:35:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:35:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:36:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:36:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:36:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:36:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:36:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:36:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:36:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:36:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:37:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:37:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:37:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:37:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:37:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:37:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:37:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:37:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:38:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:38:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:38:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:38:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:38:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:38:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:38:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:38:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:40:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:40:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:40:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:40:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:40:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:40:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:40:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:40:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:41:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:41:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:41:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:41:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:41:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:41:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:41:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:41:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:42:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:42:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:42:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:42:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:42:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:42:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:42:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:42:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:43:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:43:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:43:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:43:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:43:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:43:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:43:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:43:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:44:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:44:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:44:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:44:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:44:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:44:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:44:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:44:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:45:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:45:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:45:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:45:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:45:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:45:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:45:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:45:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:46:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:46:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:46:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:46:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:46:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:46:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:46:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:46:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:47:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:47:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:47:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:47:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:47:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:47:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:47:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:47:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:48:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:48:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:48:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:48:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:48:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:48:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:48:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:48:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:49:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:49:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:49:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:49:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:49:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:49:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:49:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:49:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:50:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:50:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:50:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:50:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:50:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:50:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:50:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:50:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:51:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:51:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:51:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:51:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:51:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:51:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:51:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:51:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:52:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:52:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:52:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:52:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:52:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:52:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:52:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:52:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:53:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:53:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:53:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:53:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:53:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:53:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:53:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:53:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:54:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:54:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:54:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:54:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:54:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:54:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:54:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:54:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:55:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:55:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:55:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:55:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:55:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:55:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:55:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:55:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:56:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:56:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:56:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:56:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:56:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:56:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:56:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:56:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:57:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:57:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:57:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:57:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:57:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:57:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:57:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:57:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:58:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:58:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:58:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:58:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:58:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:58:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:58:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:58:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:59:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:59:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:59:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:59:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:59:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:59:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:59:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:59:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:00:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:00:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:00:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:00:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:00:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:00:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:00:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:00:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:01:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:01:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:01:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:01:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:01:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:01:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:01:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:01:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:02:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:02:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:02:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:02:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:02:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:02:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:02:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:02:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:03:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:03:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:03:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:03:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:03:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:03:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:03:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:03:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:04:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:04:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:04:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:04:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:04:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:04:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:04:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:04:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:05:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:05:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:05:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:05:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:05:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:05:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:05:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:05:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:06:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:06:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:06:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:06:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:06:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:06:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:06:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:06:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:07:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:07:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:07:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:07:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:07:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:07:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:07:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:07:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:08:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:08:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:08:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:08:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:08:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:08:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:08:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:08:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:09:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:09:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:09:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:09:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:09:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:09:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:09:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:09:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:10:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:10:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:10:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:10:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:10:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:10:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:10:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:10:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:11:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:11:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:11:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:11:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:11:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:11:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:11:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:11:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:12:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:12:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:12:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:12:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:12:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:12:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:12:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:12:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:13:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:13:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:13:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:13:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:13:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:13:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:13:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:13:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:14:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:14:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:14:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:14:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:14:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:14:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:14:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:14:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:15:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:15:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:15:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:15:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:15:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:15:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:15:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:15:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:16:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:16:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:16:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:16:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:16:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:16:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:16:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:16:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:17:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:17:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:17:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:17:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:17:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:17:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:17:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:17:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:18:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:18:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:18:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:18:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:18:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:18:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:18:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:18:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:19:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:19:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:19:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:19:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:19:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:19:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:19:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:19:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:20:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:20:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:20:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:20:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:20:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:20:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:20:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:20:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:21:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:21:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:21:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:21:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:21:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:21:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:21:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:21:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:22:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:22:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:22:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:22:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:22:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:22:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:22:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:22:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:23:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:23:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:23:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:23:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:23:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:23:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:23:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:23:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:24:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:24:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:24:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:24:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:24:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:24:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:24:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:24:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:25:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:25:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:25:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:25:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:25:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:25:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:25:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:25:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:26:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:26:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:26:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:26:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:26:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:26:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:26:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:26:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:27:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:27:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:27:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:27:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:27:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:27:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:27:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:27:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:28:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:28:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:28:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:28:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:28:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:28:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:28:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:28:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:29:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:29:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:29:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:29:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:29:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:29:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:29:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:29:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:30:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:30:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:30:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:30:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:30:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:30:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:30:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:30:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:31:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:31:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:31:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:31:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:31:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:31:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:31:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:31:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:32:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:32:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:32:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:32:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:32:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:32:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:32:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:32:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:33:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:33:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:33:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:33:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:33:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:33:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:33:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:33:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:34:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:34:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:34:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:34:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:34:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:34:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:34:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:34:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:35:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:35:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:35:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:35:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:35:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:35:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:35:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:35:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:36:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:36:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:36:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:36:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:36:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:36:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:36:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:36:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:37:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:37:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:37:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:37:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:37:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:37:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:37:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:37:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:38:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:38:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:38:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:38:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:38:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:38:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:38:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:38:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:39:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:39:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:39:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:39:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:39:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:39:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:39:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:39:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:40:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:40:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:40:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:40:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:40:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:40:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:40:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:40:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:41:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:41:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:41:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:41:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:41:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:41:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:41:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:41:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:42:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:42:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:42:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:42:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:42:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:42:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:42:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:42:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:43:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:43:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:43:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:43:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:43:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:43:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:43:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:43:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:44:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:44:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:44:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:44:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:44:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:44:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:44:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:44:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:45:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:45:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:45:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:45:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:45:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:45:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:45:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:45:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:46:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:46:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:46:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:46:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:46:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:46:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:46:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:46:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:47:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:47:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:47:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:47:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:47:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:47:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:47:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:47:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:48:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:48:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:48:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:48:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:48:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:48:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:48:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:48:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:49:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:49:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:49:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:49:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:49:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:49:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:49:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:49:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:50:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:50:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:50:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:50:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:50:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:50:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:50:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:50:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:51:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:51:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:51:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:51:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:51:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:51:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:51:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:51:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:52:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:52:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:52:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:52:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:52:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:52:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:52:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:52:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:53:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:53:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:53:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:53:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:53:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:53:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:53:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:53:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:54:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:54:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:54:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:54:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:54:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:54:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:54:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:54:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:55:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:55:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:55:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:55:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:55:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:55:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:55:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:55:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:56:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:56:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:56:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:56:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:56:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:56:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:56:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:56:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:57:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:57:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:57:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:57:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:57:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:57:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:57:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:57:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:58:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:58:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:58:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:58:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:58:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:58:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:58:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:58:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:59:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:59:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:59:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:59:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:59:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:59:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:59:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:59:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:00:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:00:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:00:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:00:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:00:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:00:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:00:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:00:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:01:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:01:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:01:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:01:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:01:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:01:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:01:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:01:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:02:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:02:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:02:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:02:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:02:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:02:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:02:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:02:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:03:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:03:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:03:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:03:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:03:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:03:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:03:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:03:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:04:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:04:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:04:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:04:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:04:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:04:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:04:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:04:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:05:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:05:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:05:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:05:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:05:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:05:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:05:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:05:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:06:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:06:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:06:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:06:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:06:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:06:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:06:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:06:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:07:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:07:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:07:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:07:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:07:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:07:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:07:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:07:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:08:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:08:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:08:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:08:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:08:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:08:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:08:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:08:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:09:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:09:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:09:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:09:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:09:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:09:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:09:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:09:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:10:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:10:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:10:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:10:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:10:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:10:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:10:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:10:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:11:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:11:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:11:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:11:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:11:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:11:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:11:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:11:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:12:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:12:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:12:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:12:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:12:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:12:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:12:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:12:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:13:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:13:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:13:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:13:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:13:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:13:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:13:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:13:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:14:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:14:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:14:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:14:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:14:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:14:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:14:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:14:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:15:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:15:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:15:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:15:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:15:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:15:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:15:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:15:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:16:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:16:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:16:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:16:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:16:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:16:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:16:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:16:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:17:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:17:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:17:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:17:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:17:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:17:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:17:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:17:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:18:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:18:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:18:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:18:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:18:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:18:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:18:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:18:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:19:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:19:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:19:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:19:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:19:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:19:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:19:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:19:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:20:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:20:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:20:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:20:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:20:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:20:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:20:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:20:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:21:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:21:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:21:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:21:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:21:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:21:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:21:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:21:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:22:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:22:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:22:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:22:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:22:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:22:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:22:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:22:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:23:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:23:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:23:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:23:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:23:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:23:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:23:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:23:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:24:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:24:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:24:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:24:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:24:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:24:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:24:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:24:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:25:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:25:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:25:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:25:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:25:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:25:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:25:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:25:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:26:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:26:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:26:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:26:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:26:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:26:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:26:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:26:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:27:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:27:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:27:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:27:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:27:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:27:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:27:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:27:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:28:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:28:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:28:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:28:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:28:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:28:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:28:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:28:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:29:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:29:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:29:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:29:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:29:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:29:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:29:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:29:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:30:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:30:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:30:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:30:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:30:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:30:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:30:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:30:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:31:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:31:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:31:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:31:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:31:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:31:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:31:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:31:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:32:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:32:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:32:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:32:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:32:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:32:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:32:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:32:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:33:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:33:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:33:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:33:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:33:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:33:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:33:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:33:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:34:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:34:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:34:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:34:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:34:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:34:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:34:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:34:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:35:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:35:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:35:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:35:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:35:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:35:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:35:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:35:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:36:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:36:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:36:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:36:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:36:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:36:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:36:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:36:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:37:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:37:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:37:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:37:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:37:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:37:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:37:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:37:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:38:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:38:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:38:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:38:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:38:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:38:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:38:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:38:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:39:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:39:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:39:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:39:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:39:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:39:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:39:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:39:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:40:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:40:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:40:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:40:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:40:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:40:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:40:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:40:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:41:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:41:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:41:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:41:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:41:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:41:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:41:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:41:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:42:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:42:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:42:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:42:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:42:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:42:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:42:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:42:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:43:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:43:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:43:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:43:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:43:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:43:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:43:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:43:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:44:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:44:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:44:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:44:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:44:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:44:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:44:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:44:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:45:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:45:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:45:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:45:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:45:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:45:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:45:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:45:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:46:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:46:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:46:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:46:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:46:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:46:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:46:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:46:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:47:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:47:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:47:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:47:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:47:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:47:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:47:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:47:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:48:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:48:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:48:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:48:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:48:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:48:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:48:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:48:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:49:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:49:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:49:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:49:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:49:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:49:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:49:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:49:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:50:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:50:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:50:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:50:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:50:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:50:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:50:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:50:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:51:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:51:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:51:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:51:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:51:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:51:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:51:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:51:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:52:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:52:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:52:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:52:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:52:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:52:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:52:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:52:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:53:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:53:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:53:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:53:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:53:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:53:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:53:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:53:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:54:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:54:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:54:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:54:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:54:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:54:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:54:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:54:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:55:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:55:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:55:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:55:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:55:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:55:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:55:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:55:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:56:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:56:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:56:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:56:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:56:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:56:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:56:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:56:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:57:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:57:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:57:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:57:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:57:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:57:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:57:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:57:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:58:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:58:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:58:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:58:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:58:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:58:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:58:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:58:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:59:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:59:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:59:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:59:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:59:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:59:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:59:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:59:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:00:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:00:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:00:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:00:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:00:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:00:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:00:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:00:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:01:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:01:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:01:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:01:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:01:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:01:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:01:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:01:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:02:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:02:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:02:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:02:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:02:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:02:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:02:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:02:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:03:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:03:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:03:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:03:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:03:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:03:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:03:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:03:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:04:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:04:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:04:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:04:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:04:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:04:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:04:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:04:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:05:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:05:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:05:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:05:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:05:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:05:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:05:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:05:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:06:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:06:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:06:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:06:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:06:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:06:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:06:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:06:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:07:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:07:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:07:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:07:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:07:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:07:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:07:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:07:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:08:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:08:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:08:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:08:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:08:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:08:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:08:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:08:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:09:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:09:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:09:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:09:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:09:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:09:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:09:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:09:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:10:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:10:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:10:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:10:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:10:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:10:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:10:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:10:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:11:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:11:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:11:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:11:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:11:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:11:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:11:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:11:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:12:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:12:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:12:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:12:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:12:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:12:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:12:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:12:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:13:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:13:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:13:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:13:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:13:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:13:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:13:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:13:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:14:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:14:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:14:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:14:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:14:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:14:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:14:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:14:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:15:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:15:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:15:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:15:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:15:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:15:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:15:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:15:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:16:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:16:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:16:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:16:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:16:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:16:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:16:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:16:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:17:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:17:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:17:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:17:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:17:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:17:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:17:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:17:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:18:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:18:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:18:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:18:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:18:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:18:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:18:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:18:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:19:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:19:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:19:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:19:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:19:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:19:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:19:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:19:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:20:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:20:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:20:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:20:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:20:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:20:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:20:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:20:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:21:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:21:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:21:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:21:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:21:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:21:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:21:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:21:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:22:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:22:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:22:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:22:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:22:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:22:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:22:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:22:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:23:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:23:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:23:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:23:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:23:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:23:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:23:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:23:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:24:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:24:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:24:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:24:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:24:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:24:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:24:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:24:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:25:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:25:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:25:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:25:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:25:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:25:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:25:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:25:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:26:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:26:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:26:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:26:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:26:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:26:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:26:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:26:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:27:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:27:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:27:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:27:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:27:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:27:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:27:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:27:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:28:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:28:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:28:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:28:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:28:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:28:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:28:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:28:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:29:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:29:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:29:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:29:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:29:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:29:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:29:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:29:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:30:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:30:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:30:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:30:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:30:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:30:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:30:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:30:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:31:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:31:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:31:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:31:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:31:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:31:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:31:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:31:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:32:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:32:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:32:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:32:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:32:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:32:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:32:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:32:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:33:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:33:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:33:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:33:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:33:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:33:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:33:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:33:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:34:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:34:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:34:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:34:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:34:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:34:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:34:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:34:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:35:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:35:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:35:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:35:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:35:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:35:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:35:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:35:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:36:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:36:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:36:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:36:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:36:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:36:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:36:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:36:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:37:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:37:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:37:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:37:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:37:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:37:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:37:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:37:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:38:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:38:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:38:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:38:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:38:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:38:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:38:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:38:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:39:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:39:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:39:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:39:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:39:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:39:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:39:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:39:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:40:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:40:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:40:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:40:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:40:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:40:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:40:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:40:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:41:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:41:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:41:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:41:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:41:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:41:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:41:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:41:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:42:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:42:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:42:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:42:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:42:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:42:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:42:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:42:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:43:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:43:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:43:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:43:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:43:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:43:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:43:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:43:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:44:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:44:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:44:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:44:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:44:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:44:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:44:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:44:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:45:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:45:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:45:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:45:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:45:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:45:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:45:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:45:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:46:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:46:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:46:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:46:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:46:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:46:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:46:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:46:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:47:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:47:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:47:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:47:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:47:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:47:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:47:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:47:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:48:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:48:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:48:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:48:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:48:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:48:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:48:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:48:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:49:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:49:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:49:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:49:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:49:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:49:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:49:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:49:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:50:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:50:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:50:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:50:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:50:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:50:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:50:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:50:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:51:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:51:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:51:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:51:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:51:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:51:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:51:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:51:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:52:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:52:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:52:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:52:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:52:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:52:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:52:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:52:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:53:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:53:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:53:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:53:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:53:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:53:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:53:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:53:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:54:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:54:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:54:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:54:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:54:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:54:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:54:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:54:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:55:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:55:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:55:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:55:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:55:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:55:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:55:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:55:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:56:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:56:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:56:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:56:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:56:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:56:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:56:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:56:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:57:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:57:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:57:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:57:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:57:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:57:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:57:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:57:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:58:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:58:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:58:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:58:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:58:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:58:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:58:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:58:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:59:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:59:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:59:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:59:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:59:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:59:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:59:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:59:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:00:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:00:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:00:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:00:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:00:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:00:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:00:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:00:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:01:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:01:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:01:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:01:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:01:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:01:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:01:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:01:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:02:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:02:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:02:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:02:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:02:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:02:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:02:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:02:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:03:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:03:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:03:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:03:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:03:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:03:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:03:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:03:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:04:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:04:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:04:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:04:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:04:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:04:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:04:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:04:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:05:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:05:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:05:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:05:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:05:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:05:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:05:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:05:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:06:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:06:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:06:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:06:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:06:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:06:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:06:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:06:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:07:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:07:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:07:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:07:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:07:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:07:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:07:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:07:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:08:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:08:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:08:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:08:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:08:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:08:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:08:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:08:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:09:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:09:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:09:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:09:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:09:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:09:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:09:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:09:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:10:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:10:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:10:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:10:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:10:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:10:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:10:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:10:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:11:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:11:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:11:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:11:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:11:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:11:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:11:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:11:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:12:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:12:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:12:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:12:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:12:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:12:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:12:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:12:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:13:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:13:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:13:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:13:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:13:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:13:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:13:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:13:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:14:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:14:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:14:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:14:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:14:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:14:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:14:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:14:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:15:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:15:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:15:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:15:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:15:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:15:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:15:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:15:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:16:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:16:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:16:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:16:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:16:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:16:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:16:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:16:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:17:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:17:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:17:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:17:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:17:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:17:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:17:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:17:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:18:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:18:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:18:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:18:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:18:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:18:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:18:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:18:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:19:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:19:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:19:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:19:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:19:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:19:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:19:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:19:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:20:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:20:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:20:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:20:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:20:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:20:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:20:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:20:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:21:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:21:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:21:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:21:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:21:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:21:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:21:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:21:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:22:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:22:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:22:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:22:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:22:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:22:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:22:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:22:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:23:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:23:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:23:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:23:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:23:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:23:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:23:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:23:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:24:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:24:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:24:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:24:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:24:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:24:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:24:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:24:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:25:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:25:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:25:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:25:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:25:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:25:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:25:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:25:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:26:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:26:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:26:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:26:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:26:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:26:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:26:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:26:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:27:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:27:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:27:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:27:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:27:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:27:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:27:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:27:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:28:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:28:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:28:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:28:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:28:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:28:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:28:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:28:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:29:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:29:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:29:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:29:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:29:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:29:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:29:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:29:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:30:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:30:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:30:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:30:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:30:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:30:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:30:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:30:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:31:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:31:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:31:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:31:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:31:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:31:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:31:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:31:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:32:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:32:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:32:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:32:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:32:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:32:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:32:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:32:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:33:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:33:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:33:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:33:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:33:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:33:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:33:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:33:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:34:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:34:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:34:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:34:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:34:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:34:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:34:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:34:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:35:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:35:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:35:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:35:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:35:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:35:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:35:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:35:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:36:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:36:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:36:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:36:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:36:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:36:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:36:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:36:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:37:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:37:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:37:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:37:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:37:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:37:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:37:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:37:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:38:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:38:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:38:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:38:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:38:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:38:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:38:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:38:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:39:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:39:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:39:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:39:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:39:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:39:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:39:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:39:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:40:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:40:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:40:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:40:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:40:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:40:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:40:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:40:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:41:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:41:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:41:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:41:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:41:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:41:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:41:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:41:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:42:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:42:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:42:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:42:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:42:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:42:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:42:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:42:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:43:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:43:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:43:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:43:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:43:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:43:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:43:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:43:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:44:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:44:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:44:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:44:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:44:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:44:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:44:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:44:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:45:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:45:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:45:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:45:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:45:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:45:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:45:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:45:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:46:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:46:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:46:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:46:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:46:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:46:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:46:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:46:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:47:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:47:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:47:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:47:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:47:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:47:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:47:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:47:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:48:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:48:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:48:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:48:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:48:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:48:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:48:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:48:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:49:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:49:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:49:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:49:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:49:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:49:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:49:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:49:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:50:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:50:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:50:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:50:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:50:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:50:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:50:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:50:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:51:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:51:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:51:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:51:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:51:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:51:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:51:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:51:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:52:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:52:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:52:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:52:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:52:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:52:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:52:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:52:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:53:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:53:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:53:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:53:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:53:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:53:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:53:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:53:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:54:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:54:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:54:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:54:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:54:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:54:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:54:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:54:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:55:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:55:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:55:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:55:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:55:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:55:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:55:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:55:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:56:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:56:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:56:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:56:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:56:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:56:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:56:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:56:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:57:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:57:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:57:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:57:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:57:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:57:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:57:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:57:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:58:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:58:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:58:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:58:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:58:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:58:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:58:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:58:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:59:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:59:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:59:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:59:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:59:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:59:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:59:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:59:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:00:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:00:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:00:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:00:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:00:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:00:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:00:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:00:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:01:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:01:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:01:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:01:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:01:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:01:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:01:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:01:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:02:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:02:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:02:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:02:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:02:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:02:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:02:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:02:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:03:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:03:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:03:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:03:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:03:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:03:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:03:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:03:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:04:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:04:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:04:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:04:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:04:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:04:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:04:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:04:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:05:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:05:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:05:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:05:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:05:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:05:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:05:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:05:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:06:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:06:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:06:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:06:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:06:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:06:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:06:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:06:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:07:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:07:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:07:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:07:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:07:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:07:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:07:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:07:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:08:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:08:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:08:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:08:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:08:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:08:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:08:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:08:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:09:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:09:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:09:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:09:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:09:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:09:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:09:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:09:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:10:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:10:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:10:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:10:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:10:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:10:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:10:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:10:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:11:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:11:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:11:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:11:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:11:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:11:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:11:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:11:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:12:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:12:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:12:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:12:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:12:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:12:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:12:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:12:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:13:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:13:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:13:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:13:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:13:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:13:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:13:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:13:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:14:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:14:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:14:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:14:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:14:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:14:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:14:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:14:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:15:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:15:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:15:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:15:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:15:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:15:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:15:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:15:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:16:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:16:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:16:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:16:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:16:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:16:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:16:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:16:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:17:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:17:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:17:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:17:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:17:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:17:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:17:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:17:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:18:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:18:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:18:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:18:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:18:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:18:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:18:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:18:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:19:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:19:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:19:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:19:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:19:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:19:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:19:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:19:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:20:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:20:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:20:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:20:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:20:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:20:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:20:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:20:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:21:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:21:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:21:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:21:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:21:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:21:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:21:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:21:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:22:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:22:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:22:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:22:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:22:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:22:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:22:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:22:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:23:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:23:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:23:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:23:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:23:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:23:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:23:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:23:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:24:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:24:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:24:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:24:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:24:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:24:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:24:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:24:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:25:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:25:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:25:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:25:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:25:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:25:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:25:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:25:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:26:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:26:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:26:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:26:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:26:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:26:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:26:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:26:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:27:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:27:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:27:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:27:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:27:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:27:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:27:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:27:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:28:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:28:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:28:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:28:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:28:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:28:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:28:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:28:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:29:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:29:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:29:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:29:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:29:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:29:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:29:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:29:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:30:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:30:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:30:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:30:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:30:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:30:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:30:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:30:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:31:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:31:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:31:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:31:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:31:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:31:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:31:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:31:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:32:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:32:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:32:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:32:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:32:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:32:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:32:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:32:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:33:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:33:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:33:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:33:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:33:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:33:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:33:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:33:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:34:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:34:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:34:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:34:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:34:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:34:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:34:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:34:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:35:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:35:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:35:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:35:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:35:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:35:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:35:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:35:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:36:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:36:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:36:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:36:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:36:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:36:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:36:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:36:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:37:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:37:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:37:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:37:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:37:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:37:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:37:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:37:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:38:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:38:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:38:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:38:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:38:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:38:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:38:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:38:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:39:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:39:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:39:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:39:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:39:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:39:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:39:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:39:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:40:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:40:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:40:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:40:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:40:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:40:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:40:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:40:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:41:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:41:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:41:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:41:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:41:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:41:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:41:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:41:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:42:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:42:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:42:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:42:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:42:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:42:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:42:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:42:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:43:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:43:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:43:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:43:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:43:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:43:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:43:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:43:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:44:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:44:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:44:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:44:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:44:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:44:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:44:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:44:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:45:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:45:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:45:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:45:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:45:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:45:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:45:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:45:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:46:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:46:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:46:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:46:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:46:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:46:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:46:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:46:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:47:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:47:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:47:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:47:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:47:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:47:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:47:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:47:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:48:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:48:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:48:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:48:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:48:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:48:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:48:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:48:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:49:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:49:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:49:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:49:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:49:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:49:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:49:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:49:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:50:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:50:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:50:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:50:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:50:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:50:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:50:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:50:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:51:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:51:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:51:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:51:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:51:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:51:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:51:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:51:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:52:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:52:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:52:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:52:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:52:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:52:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:52:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:52:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:53:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:53:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:53:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:53:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:53:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:53:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:53:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:53:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:54:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:54:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:54:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:54:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:54:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:54:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:54:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:54:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:55:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:55:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:55:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:55:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:55:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:55:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:55:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:55:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:56:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:56:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:56:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:56:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:56:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:56:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:56:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:56:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:57:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:57:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:57:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:57:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:57:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:57:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:57:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:57:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:58:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:58:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:58:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:58:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:58:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:58:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:58:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:58:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:59:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:59:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[00:59:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:59:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[00:59:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:59:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[00:59:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[00:59:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:00:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:00:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:00:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:00:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:00:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:00:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:00:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:00:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:01:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:01:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:01:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:01:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:01:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:01:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:01:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:01:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:02:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:02:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:02:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:02:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:02:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:02:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:02:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:02:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:03:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:03:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:03:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:03:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:03:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:03:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:03:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:03:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:04:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:04:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:04:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:04:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:04:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:04:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:04:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:04:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:05:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:05:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:05:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:05:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:05:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:05:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:05:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:05:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:06:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:06:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:06:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:06:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:06:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:06:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:06:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:06:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:07:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:07:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:07:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:07:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:07:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:07:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:07:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:07:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:08:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:08:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:08:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:08:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:08:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:08:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:08:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:08:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:09:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:09:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:09:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:09:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:09:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:09:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:09:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:09:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:10:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:10:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:10:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:10:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:10:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:10:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:10:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:10:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:11:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:11:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:11:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:11:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:11:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:11:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:11:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:11:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:12:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:12:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:12:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:12:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:12:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:12:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:12:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:12:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:13:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:13:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:13:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:13:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:13:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:13:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:13:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:13:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:14:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:14:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:14:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:14:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:14:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:14:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:14:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:14:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:15:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:15:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:15:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:15:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:15:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:15:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:15:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:15:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:16:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:16:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:16:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:16:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:16:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:16:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:16:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:16:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:17:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:17:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:17:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:17:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:17:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:17:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:17:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:17:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:18:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:18:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:18:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:18:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:18:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:18:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:18:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:18:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:19:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:19:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:19:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:19:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:19:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:19:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:19:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:19:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:20:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:20:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:20:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:20:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:20:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:20:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:20:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:20:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:21:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:21:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:21:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:21:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:21:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:21:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:21:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:21:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:22:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:22:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:22:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:22:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:22:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:22:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:22:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:22:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:23:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:23:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:23:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:23:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:23:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:23:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:23:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:23:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:24:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:24:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:24:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:24:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:24:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:24:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:24:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:24:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:25:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:25:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:25:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:25:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:25:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:25:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:25:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:25:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:26:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:26:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:26:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:26:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:26:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:26:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:26:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:26:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:27:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:27:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:27:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:27:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:27:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:27:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:27:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:27:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:28:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:28:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:28:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:28:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:28:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:28:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:28:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:28:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:29:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:29:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:29:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:29:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:29:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:29:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:29:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:29:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:30:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:30:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:30:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:30:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:30:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:30:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:30:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:30:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:31:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:31:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:31:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:31:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:31:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:31:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:31:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:31:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:32:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:32:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:32:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:32:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:32:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:32:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:32:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:32:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:33:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:33:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:33:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:33:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:33:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:33:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:33:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:33:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:34:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:34:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:34:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:34:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:34:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:34:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:34:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:34:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:35:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:35:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:35:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:35:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:35:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:35:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:35:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:35:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:36:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:36:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:36:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:36:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:36:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:36:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:36:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:36:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:37:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:37:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:37:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:37:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:37:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:37:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:37:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:37:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:38:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:38:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:38:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:38:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:38:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:38:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:38:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:38:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:39:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:39:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:39:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:39:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:39:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:39:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:39:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:39:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:40:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:40:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:40:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:40:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:40:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:40:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:40:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:40:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:41:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:41:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:41:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:41:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:41:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:41:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:41:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:41:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:42:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:42:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:42:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:42:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:42:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:42:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:42:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:42:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:43:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:43:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:43:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:43:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:43:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:43:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:43:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:43:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:44:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:44:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:44:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:44:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:44:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:44:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:44:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:44:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:45:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:45:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:45:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:45:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:45:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:45:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:45:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:45:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:46:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:46:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:46:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:46:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:46:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:46:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:46:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:46:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:47:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:47:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:47:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:47:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:47:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:47:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:47:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:47:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:48:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:48:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:48:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:48:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:48:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:48:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:48:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:48:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:49:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:49:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:49:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:49:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:49:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:49:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:49:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:49:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:50:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:50:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:50:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:50:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:50:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:50:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:50:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:50:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:51:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:51:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:51:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:51:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:51:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:51:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:51:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:51:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:52:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:52:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:52:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:52:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:52:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:52:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:52:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:52:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:53:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:53:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:53:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:53:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:53:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:53:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:53:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:53:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:54:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:54:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:54:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:54:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:54:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:54:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:54:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:54:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:55:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:55:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:55:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:55:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:55:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:55:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:55:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:55:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:56:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:56:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:56:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:56:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:56:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:56:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:56:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:56:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:57:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:57:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:57:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:57:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:57:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:57:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:57:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:57:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:58:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:58:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:58:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:58:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:58:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:58:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:58:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:58:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:59:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:59:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[01:59:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:59:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[01:59:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:59:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[01:59:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[01:59:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:00:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:00:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:00:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:00:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:00:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:00:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:00:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:00:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:01:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:01:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:01:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:01:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:01:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:01:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:01:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:01:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:02:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:02:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:02:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:02:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:02:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:02:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:02:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:02:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:03:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:03:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:03:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:03:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:03:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:03:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:03:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:03:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:04:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:04:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:04:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:04:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:04:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:04:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:04:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:04:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:05:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:05:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:05:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:05:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:05:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:05:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:05:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:05:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:06:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:06:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:06:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:06:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:06:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:06:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:06:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:06:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:07:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:07:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:07:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:07:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:07:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:07:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:07:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:07:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:08:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:08:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:08:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:08:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:08:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:08:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:08:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:08:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:09:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:09:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:09:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:09:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:09:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:09:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:09:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:09:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:10:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:10:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:10:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:10:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:10:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:10:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:10:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:10:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:11:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:11:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:11:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:11:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:11:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:11:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:11:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:11:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:12:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:12:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:12:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:12:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:12:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:12:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:12:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:12:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:13:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:13:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:13:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:13:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:13:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:13:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:13:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:13:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:14:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:14:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:14:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:14:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:14:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:14:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:14:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:14:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:15:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:15:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:15:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:15:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:15:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:15:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:15:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:15:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:16:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:16:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:16:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:16:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:16:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:16:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:16:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:16:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:17:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:17:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:17:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:17:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:17:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:17:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:17:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:17:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:18:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:18:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:18:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:18:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:18:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:18:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:18:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:18:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:19:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:19:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:19:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:19:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:19:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:19:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:19:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:19:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:20:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:20:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:20:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:20:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:20:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:20:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:20:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:20:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:21:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:21:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:21:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:21:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:21:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:21:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:21:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:21:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:22:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:22:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:22:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:22:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:22:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:22:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:22:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:22:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:23:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:23:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:23:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:23:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:23:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:23:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:23:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:23:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:24:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:24:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:24:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:24:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:24:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:24:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:24:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:24:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:25:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:25:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:25:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:25:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:25:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:25:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:25:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:25:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:26:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:26:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:26:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:26:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:26:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:26:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:26:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:26:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:27:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:27:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:27:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:27:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:27:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:27:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:27:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:27:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:28:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:28:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:28:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:28:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:28:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:28:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:28:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:28:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:29:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:29:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:29:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:29:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:29:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:29:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:29:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:29:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:30:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:30:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:30:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:30:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:30:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:30:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:30:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:30:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:31:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:31:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:31:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:31:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:31:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:31:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:31:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:31:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:32:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:32:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:32:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:32:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:32:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:32:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:32:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:32:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:33:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:33:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:33:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:33:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:33:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:33:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:33:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:33:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:34:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:34:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:34:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:34:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:34:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:34:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:34:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:34:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:35:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:35:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:35:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:35:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:35:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:35:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:35:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:35:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:36:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:36:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:36:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:36:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:36:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:36:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:36:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:36:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:37:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:37:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:37:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:37:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:37:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:37:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:37:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:37:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:38:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:38:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:38:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:38:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:38:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:38:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:38:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:38:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:39:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:39:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:39:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:39:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:39:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:39:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:39:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:39:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:40:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:40:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:40:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:40:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:40:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:40:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:40:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:40:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:41:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:41:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:41:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:41:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:41:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:41:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:41:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:41:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:42:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:42:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:42:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:42:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:42:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:42:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:42:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:42:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:43:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:43:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:43:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:43:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:43:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:43:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:43:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:43:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:44:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:44:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:44:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:44:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:44:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:44:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:44:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:44:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:45:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:45:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:45:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:45:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:45:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:45:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:45:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:45:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:46:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:46:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:46:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:46:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:46:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:46:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:46:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:46:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:47:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:47:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:47:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:47:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:47:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:47:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:47:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:47:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:48:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:48:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:48:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:48:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:48:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:48:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:48:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:48:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:49:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:49:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:49:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:49:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:49:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:49:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:49:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:49:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:50:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:50:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:50:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:50:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:50:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:50:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:50:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:50:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:51:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:51:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:51:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:51:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:51:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:51:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:51:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:51:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:52:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:52:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:52:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:52:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:52:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:52:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:52:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:52:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:53:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:53:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:53:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:53:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:53:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:53:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:53:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:53:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:54:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:54:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:54:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:54:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:54:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:54:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:54:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:54:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:55:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:55:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:55:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:55:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:55:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:55:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:55:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:55:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:56:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:56:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:56:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:56:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:56:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:56:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:56:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:56:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:57:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:57:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:57:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:57:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:57:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:57:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:57:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:57:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:58:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:58:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:58:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:58:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:58:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:58:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:58:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:58:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:59:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:59:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[02:59:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:59:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[02:59:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:59:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[02:59:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[02:59:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:00:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:00:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:00:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:00:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:00:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:00:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:00:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:00:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:01:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:01:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:01:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:01:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:01:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:01:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:01:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:01:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:02:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:02:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:02:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:02:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:02:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:02:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:02:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:02:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:03:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:03:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:03:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:03:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:03:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:03:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:03:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:03:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:04:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:04:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:04:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:04:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:04:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:04:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:04:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:04:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:05:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:05:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:05:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:05:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:05:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:05:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:05:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:05:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:06:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:06:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:06:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:06:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:06:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:06:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:06:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:06:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:07:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:07:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:07:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:07:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:07:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:07:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:07:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:07:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:08:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:08:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:08:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:08:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:08:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:08:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:08:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:08:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:09:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:09:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:09:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:09:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:09:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:09:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:09:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:09:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:10:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:10:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:10:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:10:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:10:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:10:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:10:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:10:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:11:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:11:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:11:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:11:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:11:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:11:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:11:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:11:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:12:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:12:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:12:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:12:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:12:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:12:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:12:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:12:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:13:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:13:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:13:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:13:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:13:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:13:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:13:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:13:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:14:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:14:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:14:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:14:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:14:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:14:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:14:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:14:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:15:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:15:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:15:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:15:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:15:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:15:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:15:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:15:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:16:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:16:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:16:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:16:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:16:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:16:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:16:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:16:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:17:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:17:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:17:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:17:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:17:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:17:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:17:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:17:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:18:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:18:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:18:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:18:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:18:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:18:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:18:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:18:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:19:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:19:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:19:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:19:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:19:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:19:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:19:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:19:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:20:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:20:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:20:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:20:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:20:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:20:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:20:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:20:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:21:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:21:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:21:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:21:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:21:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:21:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:21:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:21:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:22:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:22:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:22:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:22:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:22:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:22:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:22:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:22:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:23:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:23:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:23:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:23:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:23:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:23:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:23:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:23:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:24:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:24:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:24:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:24:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:24:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:24:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:24:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:24:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:25:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:25:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:25:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:25:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:25:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:25:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:25:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:25:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:26:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:26:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:26:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:26:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:26:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:26:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:26:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:26:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:27:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:27:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:27:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:27:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:27:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:27:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:27:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:27:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:28:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:28:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:28:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:28:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:28:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:28:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:28:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:28:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:29:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:29:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:29:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:29:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:29:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:29:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:29:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:29:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:30:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:30:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:30:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:30:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:30:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:30:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:30:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:30:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:31:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:31:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:31:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:31:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:31:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:31:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:31:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:31:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:32:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:32:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:32:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:32:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:32:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:32:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:32:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:32:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:33:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:33:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:33:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:33:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:33:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:33:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:33:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:33:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:34:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:34:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:34:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:34:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:34:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:34:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:34:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:34:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:35:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:35:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:35:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:35:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:35:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:35:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:35:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:35:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:36:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:36:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:36:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:36:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:36:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:36:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:36:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:36:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:37:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:37:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:37:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:37:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:37:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:37:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:37:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:37:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:38:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:38:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:38:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:38:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:38:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:38:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:38:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:38:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:39:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:39:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:39:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:39:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:39:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:39:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:39:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:39:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:40:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:40:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:40:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:40:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:40:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:40:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:40:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:40:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:41:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:41:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:41:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:41:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:41:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:41:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:41:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:41:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:42:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:42:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:42:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:42:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:42:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:42:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:42:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:42:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:43:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:43:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:43:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:43:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:43:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:43:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:43:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:43:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:44:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:44:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:44:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:44:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:44:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:44:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:44:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:44:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:45:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:45:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:45:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:45:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:45:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:45:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:45:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:45:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:46:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:46:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:46:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:46:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:46:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:46:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:46:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:46:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:47:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:47:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:47:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:47:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:47:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:47:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:47:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:47:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:48:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:48:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:48:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:48:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:48:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:48:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:48:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:48:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:49:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:49:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:49:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:49:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:49:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:49:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:49:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:49:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:50:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:50:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:50:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:50:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:50:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:50:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:50:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:50:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:51:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:51:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:51:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:51:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:51:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:51:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:51:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:51:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:52:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:52:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:52:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:52:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:52:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:52:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:52:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:52:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:53:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:53:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:53:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:53:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:53:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:53:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:53:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:53:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:54:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:54:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:54:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:54:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:54:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:54:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:54:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:54:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:55:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:55:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:55:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:55:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:55:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:55:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:55:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:55:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:56:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:56:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:56:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:56:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:56:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:56:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:56:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:56:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:57:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:57:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:57:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:57:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:57:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:57:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:57:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:57:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:58:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:58:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:58:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:58:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:58:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:58:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:58:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:58:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:59:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:59:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[03:59:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:59:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[03:59:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:59:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[03:59:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[03:59:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:00:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:00:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:00:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:00:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:00:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:00:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:00:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:00:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:01:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:01:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:01:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:01:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:01:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:01:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:01:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:01:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:02:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:02:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:02:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:02:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:02:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:02:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:02:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:02:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:03:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:03:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:03:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:03:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:03:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:03:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:03:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:03:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:04:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:04:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:04:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:04:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:04:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:04:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:04:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:04:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:05:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:05:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:05:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:05:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:05:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:05:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:05:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:05:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:06:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:06:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:06:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:06:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:06:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:06:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:06:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:06:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:07:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:07:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:07:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:07:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:07:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:07:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:07:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:07:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:08:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:08:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:08:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:08:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:08:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:08:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:08:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:08:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:09:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:09:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:09:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:09:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:09:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:09:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:09:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:09:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:10:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:10:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:10:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:10:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:10:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:10:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:10:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:10:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:11:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:11:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:11:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:11:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:11:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:11:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:11:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:11:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:12:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:12:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:12:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:12:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:12:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:12:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:12:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:12:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:13:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:13:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:13:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:13:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:13:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:13:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:13:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:13:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:14:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:14:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:14:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:14:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:14:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:14:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:14:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:14:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:15:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:15:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:15:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:15:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:15:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:15:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:15:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:15:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:16:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:16:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:16:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:16:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:16:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:16:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:16:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:16:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:17:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:17:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:17:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:17:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:17:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:17:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:17:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:17:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:18:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:18:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:18:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:18:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:18:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:18:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:18:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:18:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:19:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:19:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:19:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:19:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:19:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:19:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:19:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:19:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:20:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:20:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:20:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:20:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:20:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:20:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:20:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:20:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:21:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:21:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:21:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:21:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:21:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:21:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:21:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:21:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:22:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:22:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:22:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:22:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:22:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:22:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:22:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:22:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:23:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:23:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:23:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:23:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:23:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:23:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:23:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:23:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:24:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:24:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:24:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:24:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:24:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:24:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:24:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:24:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:25:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:25:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:25:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:25:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:25:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:25:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:25:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:25:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:26:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:26:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:26:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:26:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:26:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:26:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:26:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:26:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:27:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:27:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:27:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:27:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:27:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:27:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:27:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:27:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:28:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:28:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:28:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:28:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:28:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:28:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:28:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:28:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:29:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:29:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:29:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:29:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:29:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:29:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:29:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:29:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:30:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:30:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:30:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:30:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:30:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:30:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:30:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:30:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:31:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:31:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:31:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:31:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:31:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:31:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:31:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:31:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:32:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:32:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:32:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:32:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:32:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:32:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:32:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:32:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:33:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:33:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:33:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:33:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:33:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:33:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:33:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:33:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:34:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:34:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:34:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:34:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:34:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:34:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:34:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:34:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:35:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:35:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:35:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:35:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:35:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:35:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:35:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:35:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:36:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:36:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:36:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:36:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:36:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:36:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:36:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:36:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:37:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:37:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:37:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:37:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:37:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:37:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:37:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:37:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:38:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:38:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:38:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:38:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:38:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:38:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:38:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:38:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:39:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:39:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:39:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:39:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:39:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:39:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:39:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:39:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:40:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:40:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:40:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:40:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:40:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:40:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:40:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:40:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:41:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:41:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:41:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:41:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:41:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:41:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:41:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:41:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:42:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:42:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:42:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:42:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:42:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:42:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:42:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:42:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:43:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:43:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:43:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:43:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:43:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:43:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:43:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:43:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:44:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:44:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:44:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:44:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:44:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:44:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:44:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:44:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:45:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:45:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:45:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:45:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:45:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:45:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:45:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:45:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:46:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:46:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:46:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:46:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:46:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:46:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:46:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:46:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:47:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:47:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:47:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:47:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:47:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:47:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:47:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:47:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:48:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:48:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:48:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:48:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:48:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:48:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:48:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:48:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:49:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:49:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:49:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:49:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:49:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:49:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:49:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:49:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:50:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:50:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:50:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:50:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:50:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:50:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:50:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:50:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:51:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:51:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:51:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:51:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:51:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:51:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:51:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:51:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:52:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:52:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:52:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:52:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:52:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:52:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:52:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:52:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:53:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:53:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:53:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:53:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:53:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:53:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:53:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:53:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:54:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:54:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:54:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:54:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:54:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:54:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:54:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:54:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:55:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:55:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:55:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:55:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:55:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:55:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:55:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:55:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:56:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:56:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:56:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:56:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:56:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:56:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:56:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:56:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:57:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:57:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:57:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:57:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:57:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:57:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:57:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:57:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:58:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:58:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:58:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:58:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:58:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:58:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:58:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:58:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:59:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:59:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[04:59:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:59:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[04:59:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:59:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[04:59:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[04:59:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:00:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:00:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:00:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:00:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:00:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:00:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:00:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:00:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:01:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:01:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:01:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:01:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:01:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:01:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:01:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:01:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:02:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:02:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:02:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:02:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:02:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:02:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:02:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:02:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:03:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:03:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:03:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:03:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:03:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:03:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:03:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:03:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:04:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:04:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:04:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:04:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:04:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:04:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:04:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:04:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:05:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:05:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:05:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:05:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:05:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:05:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:05:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:05:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:06:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:06:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:06:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:06:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:06:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:06:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:06:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:06:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:07:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:07:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:07:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:07:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:07:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:07:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:07:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:07:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:08:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:08:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:08:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:08:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:08:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:08:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:08:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:08:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:09:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:09:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:09:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:09:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:09:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:09:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:09:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:09:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:10:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:10:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:10:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:10:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:10:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:10:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:10:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:10:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:11:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:11:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:11:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:11:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:11:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:11:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:11:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:11:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:12:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:12:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:12:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:12:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:12:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:12:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:12:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:12:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:13:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:13:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:13:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:13:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:13:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:13:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:13:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:13:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:14:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:14:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:14:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:14:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:14:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:14:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:14:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:14:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:15:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:15:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:15:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:15:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:15:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:15:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:15:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:15:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:16:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:16:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:16:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:16:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:16:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:16:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:16:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:16:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:17:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:17:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:17:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:17:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:17:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:17:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:17:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:17:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:18:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:18:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:18:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:18:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:18:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:18:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:18:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:18:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:20:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:20:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:20:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:20:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:20:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:20:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:20:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:20:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:21:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:21:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:21:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:21:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:21:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:21:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:21:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:21:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:22:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:22:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:22:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:22:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:22:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:22:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:22:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:22:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:23:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:23:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:23:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:23:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:23:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:23:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:23:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:23:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:24:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:24:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:24:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:24:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:24:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:24:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:24:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:24:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:25:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:25:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:25:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:25:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:25:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:25:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:25:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:25:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:26:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:26:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:26:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:26:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:26:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:26:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:26:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:26:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:27:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:27:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:27:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:27:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:27:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:27:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:27:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:27:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:28:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:28:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:28:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:28:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:28:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:28:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:28:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:28:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:29:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:29:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:29:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:29:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:29:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:29:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:29:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:29:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:30:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:30:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:30:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:30:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:30:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:30:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:30:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:30:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:31:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:31:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:31:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:31:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:31:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:31:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:31:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:31:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:32:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:32:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:32:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:32:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:32:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:32:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:32:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:32:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:33:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:33:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:33:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:33:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:33:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:33:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:33:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:33:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:34:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:34:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:34:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:34:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:34:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:34:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:34:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:34:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:35:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:35:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:35:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:35:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:35:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:35:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:35:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:35:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:36:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:36:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:36:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:36:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:36:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:36:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:36:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:36:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:37:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:37:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:37:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:37:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:37:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:37:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:37:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:37:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:38:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:38:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:38:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:38:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:38:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:38:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:38:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:38:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:39:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:39:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:39:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:39:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:39:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:39:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:39:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:39:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:40:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:40:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:40:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:40:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:40:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:40:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:40:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:40:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:41:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:41:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:41:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:41:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:41:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:41:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:41:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:41:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:42:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:42:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:42:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:42:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:42:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:42:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:42:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:42:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:43:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:43:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:43:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:43:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:43:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:43:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:43:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:43:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:44:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:44:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:44:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:44:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:44:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:44:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:44:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:44:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:45:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:45:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:45:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:45:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:45:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:45:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:45:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:45:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:46:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:46:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:46:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:46:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:46:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:46:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:46:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:46:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:47:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:47:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:47:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:47:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:47:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:47:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:47:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:47:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:48:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:48:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:48:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:48:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:48:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:48:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:48:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:48:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:49:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:49:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:49:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:49:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:49:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:49:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:49:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:49:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:50:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:50:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:50:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:50:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:50:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:50:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:50:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:50:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:51:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:51:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:51:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:51:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:51:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:51:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:51:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:51:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:52:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:52:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:52:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:52:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:52:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:52:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:52:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:52:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:53:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:53:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:53:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:53:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:53:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:53:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:53:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:53:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:54:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:54:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:54:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:54:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:54:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:54:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:54:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:54:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:55:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:55:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:55:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:55:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:55:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:55:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:55:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:55:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:56:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:56:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:56:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:56:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:56:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:56:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:56:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:56:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:57:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:57:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:57:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:57:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:57:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:57:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:57:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:57:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:58:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:58:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:58:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:58:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:58:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:58:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:58:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:58:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:59:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:59:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[05:59:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:59:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[05:59:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:59:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[05:59:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[05:59:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:00:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:00:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:00:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:00:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:00:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:00:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:00:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:00:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:01:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:01:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:01:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:01:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:01:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:01:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:01:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:01:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:02:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:02:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:02:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:02:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:02:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:02:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:02:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:02:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:03:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:03:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:03:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:03:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:03:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:03:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:03:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:03:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:04:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:04:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:04:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:04:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:04:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:04:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:04:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:04:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:05:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:05:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:05:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:05:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:05:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:05:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:05:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:05:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:06:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:06:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:06:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:06:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:06:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:06:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:06:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:06:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:07:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:07:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:07:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:07:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:07:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:07:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:07:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:07:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:08:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:08:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:08:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:08:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:08:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:08:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:08:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:08:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:09:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:09:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:09:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:09:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:09:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:09:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:09:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:09:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:10:00] WS ERROR fin=1 opcode=8 data=b'\x03\xe8Bye' +[06:10:00] [ls_cond_hist] WS ERROR fin=1 opcode=8 data=b'\x03\xe8Bye' +[06:10:00] [websocket] fin=1 opcode=8 data=b'\x03\xe8Bye' - goodbye +[06:10:00] WS CLOSE status=None msg=None +[06:10:00] [ls_cond_hist] WS CLOSE status=None msg=None +[06:10:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:10:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:10:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:10:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:10:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:10:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:10:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:10:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:11:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:11:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:11:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:11:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:11:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:11:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:11:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:11:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:12:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:12:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:12:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:12:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:12:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:12:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:12:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:12:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:13:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:13:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:13:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:13:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:13:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:13:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:13:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:13:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:14:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:14:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:14:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:14:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:14:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:14:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:14:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:14:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:15:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:15:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:15:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:15:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:15:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:15:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:15:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:15:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:16:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:16:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:16:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:16:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:16:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:16:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:16:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:16:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:17:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:17:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:17:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:17:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:17:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:17:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:17:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:17:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:18:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:18:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:18:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:18:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:18:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:18:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:18:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:18:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:19:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:19:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:19:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:19:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:19:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:19:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:19:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:19:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:20:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:20:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:20:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:20:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:20:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:20:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:20:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:20:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:21:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:21:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:21:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:21:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:21:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:21:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:21:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:21:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:22:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:22:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:22:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:22:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:22:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:22:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:22:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:22:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:23:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:23:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:23:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:23:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:23:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:23:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:23:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:23:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:24:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:24:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:24:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:24:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:24:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:24:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:24:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:24:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:25:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:25:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:25:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:25:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:25:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:25:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:25:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:25:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:26:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:26:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:26:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:26:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:26:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:26:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:26:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:26:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:27:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:27:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:27:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:27:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:27:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:27:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:27:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:27:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:28:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:28:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:28:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:28:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:28:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:28:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:28:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:28:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:29:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:29:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:29:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:29:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:29:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:29:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:29:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:29:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:30:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:30:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:30:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:30:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:30:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:30:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:30:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:30:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:31:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:31:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:31:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:31:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:31:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:31:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:31:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:31:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:32:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:32:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:32:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:32:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:32:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:32:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:32:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:32:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:33:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:33:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:33:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:33:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:33:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:33:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:33:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:33:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:34:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:34:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:34:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:34:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:34:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:34:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:34:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:34:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:35:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:35:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:35:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:35:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:35:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:35:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:35:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:35:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:36:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:36:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:36:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:36:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:36:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:36:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:36:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:36:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:37:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:37:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:37:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:37:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:37:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:37:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:37:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:37:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:38:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:38:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:38:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:38:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:38:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:38:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:38:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:38:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:39:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:39:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:39:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:39:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:39:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:39:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:39:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:39:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:40:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:40:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:40:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:40:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:40:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:40:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:40:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:40:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:41:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:41:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:41:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:41:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:41:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:41:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:41:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:41:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:42:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:42:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:42:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:42:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:42:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:42:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:42:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:42:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:43:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:43:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:43:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:43:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:43:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:43:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:43:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:43:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:44:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:44:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:44:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:44:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:44:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:44:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:44:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:44:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:45:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:45:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:45:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:45:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:45:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:45:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:45:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:45:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:46:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:46:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:46:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:46:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:46:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:46:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:46:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:46:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:47:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:47:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:47:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:47:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:47:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:47:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:47:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:47:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:48:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:48:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:48:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:48:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:48:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:48:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:48:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:48:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:49:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:49:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:49:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:49:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:49:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:49:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:49:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:49:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:50:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:50:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:50:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:50:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:50:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:50:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:50:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:50:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:51:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:51:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:51:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:51:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:51:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:51:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:51:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:51:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:52:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:52:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:52:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:52:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:52:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:52:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:52:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:52:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:53:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:53:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:53:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:53:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:53:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:53:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:53:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:53:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:54:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:54:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:54:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:54:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:54:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:54:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:54:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:54:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:55:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:55:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:55:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:55:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:55:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:55:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:55:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:55:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:56:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:56:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:56:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:56:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:56:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:56:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:56:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:56:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:57:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:57:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:57:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:57:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:57:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:57:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:57:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:57:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:58:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:58:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:58:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:58:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:58:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:58:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:58:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:58:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:59:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:59:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[06:59:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:59:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[06:59:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:59:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[06:59:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[06:59:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:00:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:00:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:00:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:00:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:00:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:00:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:00:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:00:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:01:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:01:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:01:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:01:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:01:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:01:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:01:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:01:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:02:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:02:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:02:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:02:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:02:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:02:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:02:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:02:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:03:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:03:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:03:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:03:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:03:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:03:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:03:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:03:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:04:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:04:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:04:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:04:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:04:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:04:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:04:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:04:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:05:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:05:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:05:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:05:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:05:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:05:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:05:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:05:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:06:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:06:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:06:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:06:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:06:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:06:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:06:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:06:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:07:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:07:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:07:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:07:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:07:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:07:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:07:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:07:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:08:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:08:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:08:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:08:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:08:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:08:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:08:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:08:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:09:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:09:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:09:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:09:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:09:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:09:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:09:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:09:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:10:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:10:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:10:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:10:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:10:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:10:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:10:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:10:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:11:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:11:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:11:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:11:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:11:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:11:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:11:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:11:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:12:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:12:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:12:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:12:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:12:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:12:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:12:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:12:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:13:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:13:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:13:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:13:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:13:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:13:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:13:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:13:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:14:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:14:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:14:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:14:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:14:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:14:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:14:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:14:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:15:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:15:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:15:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:15:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:15:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:15:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:15:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:15:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:16:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:16:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:16:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:16:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:16:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:16:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:16:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:16:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:17:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:17:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:17:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:17:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:17:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:17:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:17:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:17:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:18:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:18:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:18:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:18:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:18:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:18:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:18:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:18:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:19:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:19:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:19:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:19:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:19:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:19:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:19:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:19:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:20:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:20:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:20:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:20:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:20:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:20:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:20:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:20:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:21:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:21:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:21:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:21:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:21:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:21:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:21:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:21:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:22:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:22:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:22:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:22:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:22:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:22:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:22:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:22:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:23:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:23:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:23:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:23:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:23:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:23:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:23:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:23:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:24:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:24:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:24:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:24:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:24:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:24:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:24:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:24:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:25:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:25:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:25:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:25:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:25:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:25:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:25:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:25:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:26:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:26:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:26:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:26:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:26:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:26:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:26:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:26:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:27:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:27:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:27:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:27:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:27:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:27:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:27:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:27:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:28:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:28:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:28:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:28:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:28:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:28:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:28:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:28:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:29:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:29:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:29:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:29:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:29:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:29:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:29:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:29:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:30:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:30:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:30:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:30:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:30:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:30:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:30:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:30:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:31:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:31:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:31:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:31:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:31:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:31:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:31:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:31:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:32:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:32:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:32:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:32:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:32:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:32:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:32:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:32:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:33:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:33:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:33:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:33:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:33:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:33:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:33:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:33:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:34:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:34:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:34:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:34:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:34:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:34:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:34:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:34:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:35:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:35:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:35:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:35:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:35:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:35:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:35:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:35:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:36:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:36:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:36:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:36:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:36:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:36:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:36:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:36:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:37:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:37:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:37:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:37:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:37:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:37:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:37:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:37:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:38:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:38:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:38:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:38:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:38:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:38:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:38:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:38:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:39:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:39:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:39:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:39:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:39:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:39:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:39:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:39:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:40:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:40:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:40:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:40:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:40:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:40:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:40:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:40:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:41:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:41:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:41:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:41:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:41:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:41:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:41:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:41:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:42:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:42:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:42:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:42:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:42:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:42:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:42:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:42:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:43:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:43:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:43:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:43:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:43:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:43:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:43:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:43:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:44:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:44:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:44:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:44:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:44:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:44:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:44:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:44:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:45:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:45:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:45:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:45:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:45:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:45:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:45:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:45:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:46:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:46:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:46:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:46:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:46:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:46:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:46:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:46:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:47:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:47:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:47:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:47:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:47:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:47:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:47:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:47:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:48:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:48:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:48:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:48:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:48:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:48:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:48:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:48:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:49:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:49:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:49:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:49:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:49:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:49:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:49:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:49:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:50:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:50:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:50:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:50:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:50:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:50:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:50:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:50:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:51:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:51:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:51:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:51:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:51:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:51:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:51:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:51:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:52:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:52:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:52:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:52:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:52:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:52:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:52:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:52:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:53:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:53:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:53:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:53:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:53:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:53:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:53:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:53:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:54:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:54:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:54:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:54:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:54:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:54:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:54:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:54:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:55:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:55:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:55:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:55:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:55:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:55:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:55:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:55:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:56:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:56:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:56:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:56:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:56:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:56:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:56:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:56:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:57:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:57:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:57:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:57:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:57:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:57:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:57:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:57:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:58:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:58:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:58:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:58:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:58:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:58:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:58:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:58:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:59:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:59:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[07:59:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:59:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[07:59:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:59:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[07:59:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[07:59:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:00:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:00:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:00:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:00:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:00:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:00:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:00:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:00:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:01:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:01:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:01:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:01:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:01:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:01:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:01:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:01:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:02:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:02:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:02:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:02:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:02:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:02:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:02:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:02:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:03:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:03:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:03:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:03:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:03:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:03:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:03:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:03:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:04:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:04:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:04:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:04:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:04:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:04:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:04:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:04:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:05:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:05:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:05:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:05:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:05:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:05:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:05:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:05:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:06:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:06:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:06:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:06:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:06:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:06:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:06:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:06:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:07:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:07:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:07:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:07:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:07:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:07:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:07:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:07:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:08:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:08:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:08:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:08:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:08:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:08:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:08:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:08:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:09:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:09:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:09:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:09:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:09:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:09:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:09:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:09:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:10:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:10:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:10:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:10:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:10:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:10:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:10:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:10:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:11:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:11:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:11:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:11:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:11:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:11:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:11:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:11:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:12:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:12:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:12:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:12:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:12:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:12:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:12:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:12:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:13:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:13:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:13:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:13:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:13:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:13:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:13:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:13:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:14:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:14:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:14:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:14:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:14:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:14:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:14:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:14:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:15:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:15:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:15:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:15:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:15:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:15:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:15:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:15:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:16:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:16:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:16:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:16:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:16:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:16:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:16:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:16:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:17:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:17:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:17:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:17:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:17:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:17:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:17:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:17:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:18:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:18:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:18:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:18:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:18:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:18:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:18:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:18:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:19:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:19:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:19:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:19:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:19:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:19:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:19:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:19:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:20:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:20:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:20:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:20:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:20:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:20:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:20:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:20:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:21:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:21:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:21:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:21:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:21:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:21:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:21:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:21:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:22:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:22:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:22:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:22:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:22:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:22:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:22:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:22:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:23:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:23:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:23:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:23:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:23:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:23:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:23:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:23:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:24:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:24:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:24:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:24:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:24:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:24:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:24:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:24:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:25:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:25:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:25:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:25:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:25:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:25:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:25:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:25:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:26:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:26:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:26:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:26:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:26:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:26:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:26:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:26:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:27:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:27:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:27:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:27:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:27:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:27:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:27:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:27:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:28:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:28:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:28:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:28:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:28:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:28:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:28:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:28:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:29:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:29:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:29:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:29:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:29:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:29:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:29:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:29:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:30:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:30:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:30:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:30:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:30:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:30:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:30:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:30:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:31:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:31:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:31:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:31:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:31:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:31:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:31:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:31:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:32:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:32:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:32:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:32:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:32:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:32:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:32:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:32:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:33:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:33:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:33:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:33:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:33:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:33:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:33:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:33:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:34:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:34:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:34:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:34:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:34:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:34:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:34:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:34:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:35:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:35:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:35:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:35:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:35:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:35:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:35:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:35:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:36:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:36:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:36:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:36:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:36:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:36:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:36:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:36:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:37:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:37:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:37:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:37:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:37:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:37:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:37:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:37:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:38:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:38:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:38:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:38:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:38:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:38:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:38:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:38:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:39:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:39:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:39:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:39:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:39:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:39:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:39:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:39:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:40:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:40:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:40:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:40:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:40:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:40:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:40:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:40:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:41:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:41:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:41:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:41:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:41:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:41:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:41:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:41:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:42:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:42:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:42:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:42:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:42:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:42:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:42:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:42:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:43:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:43:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:43:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:43:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:43:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:43:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:43:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:43:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:44:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:44:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:44:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:44:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:44:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:44:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:44:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:44:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:45:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:45:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:45:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:45:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:45:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:45:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:45:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:45:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:46:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:46:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:46:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:46:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:46:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:46:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:46:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:46:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:47:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:47:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:47:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:47:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:47:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:47:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:47:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:47:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:48:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:48:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:48:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:48:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:48:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:48:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:48:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:48:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:49:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:49:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:49:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:49:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:49:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:49:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:49:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:49:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:50:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:50:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:50:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:50:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:50:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:50:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:50:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:50:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:51:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:51:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:51:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:51:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:51:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:51:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:51:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:51:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:52:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:52:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:52:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:52:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:52:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:52:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:52:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:52:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:53:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:53:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:53:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:53:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:53:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:53:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:53:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:53:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:54:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:54:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:54:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:54:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:54:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:54:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:54:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:54:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:55:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:55:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:55:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:55:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:55:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:55:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:55:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:55:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:56:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:56:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:56:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:56:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:56:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:56:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:56:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:56:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:57:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:57:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:57:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:57:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:57:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:57:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:57:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:57:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:58:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:58:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:58:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:58:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:58:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:58:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:58:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:58:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:59:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:59:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[08:59:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:59:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[08:59:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:59:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[08:59:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[08:59:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:00:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:00:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:00:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:00:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:00:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:00:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:00:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:00:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:01:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:01:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:01:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:01:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:01:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:01:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:01:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:01:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:02:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:02:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:02:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:02:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:02:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:02:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:02:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:02:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:03:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:03:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:03:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:03:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:03:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:03:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:03:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:03:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:04:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:04:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:04:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:04:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:04:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:04:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:04:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:04:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:05:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:05:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:05:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:05:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:05:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:05:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:05:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:05:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:06:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:06:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:06:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:06:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:06:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:06:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:06:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:06:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:07:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:07:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:07:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:07:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:07:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:07:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:07:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:07:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:08:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:08:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:08:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:08:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:08:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:08:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:08:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:08:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:09:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:09:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:09:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:09:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:09:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:09:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:09:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:09:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:10:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:10:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:10:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:10:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:10:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:10:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:10:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:10:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:11:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:11:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:11:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:11:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:11:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:11:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:11:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:11:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:12:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:12:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:12:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:12:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:12:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:12:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:12:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:12:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:13:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:13:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:13:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:13:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:13:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:13:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:13:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:13:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:14:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:14:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:14:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:14:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:14:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:14:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:14:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:14:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:15:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:15:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:15:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:15:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:15:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:15:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:15:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:15:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:16:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:16:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:16:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:16:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:16:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:16:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:16:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:16:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:17:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:17:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:17:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:17:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:17:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:17:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:17:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:17:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:18:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:18:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:18:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:18:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:18:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:18:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:18:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:18:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:19:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:19:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:19:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:19:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:19:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:19:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:19:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:19:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:20:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:20:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:20:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:20:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:20:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:20:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:20:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:20:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:21:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:21:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:21:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:21:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:21:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:21:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:21:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:21:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:22:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:22:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:22:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:22:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:22:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:22:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:22:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:22:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:23:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:23:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:23:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:23:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:23:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:23:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:23:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:23:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:24:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:24:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:24:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:24:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:24:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:24:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:24:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:24:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:25:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:25:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:25:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:25:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:25:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:25:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:25:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:25:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:26:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:26:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:26:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:26:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:26:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:26:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:26:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:26:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:27:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:27:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:27:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:27:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:27:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:27:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:27:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:27:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:28:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:28:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:28:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:28:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:28:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:28:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:28:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:28:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:29:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:29:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:29:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:29:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:29:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:29:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:29:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:29:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:30:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:30:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:30:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:30:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:30:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:30:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:30:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:30:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:31:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:31:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:31:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:31:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:31:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:31:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:31:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:31:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:32:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:32:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:32:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:32:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:32:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:32:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:32:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:32:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:33:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:33:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:33:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:33:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:33:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:33:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:33:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:33:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:34:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:34:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:34:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:34:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:34:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:34:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:34:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:34:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:35:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:35:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:35:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:35:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:35:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:35:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:35:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:35:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:36:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:36:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:36:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:36:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:36:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:36:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:36:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:36:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:37:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:37:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:37:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:37:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:37:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:37:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:37:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:37:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:38:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:38:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:38:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:38:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:38:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:38:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:38:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:38:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:39:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:39:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:39:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:39:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:39:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:39:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:39:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:39:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:40:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:40:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:40:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:40:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:40:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:40:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:40:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:40:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:41:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:41:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:41:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:41:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:41:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:41:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:41:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:41:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:42:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:42:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:42:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:42:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:42:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:42:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:42:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:42:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:43:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:43:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:43:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:43:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:43:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:43:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:43:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:43:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:44:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:44:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:44:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:44:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:44:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:44:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:44:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:44:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:45:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:45:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:45:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:45:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:45:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:45:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:45:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:45:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:46:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:46:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:46:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:46:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:46:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:46:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:46:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:46:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:47:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:47:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:47:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:47:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:47:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:47:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:47:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:47:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:48:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:48:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:48:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:48:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:48:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:48:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:48:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:48:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:49:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:49:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:49:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:49:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:49:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:49:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:49:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:49:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:50:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:50:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:50:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:50:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:50:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:50:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:50:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:50:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:51:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:51:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:51:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:51:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:51:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:51:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:51:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:51:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:52:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:52:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:52:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:52:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:52:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:52:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:52:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:52:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:53:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:53:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:53:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:53:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:53:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:53:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:53:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:53:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:54:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:54:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:54:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:54:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:54:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:54:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:54:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:54:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:55:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:55:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:55:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:55:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:55:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:55:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:55:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:55:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:56:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:56:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:56:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:56:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:56:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:56:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:56:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:56:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:57:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:57:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:57:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:57:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:57:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:57:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:57:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:57:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:58:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:58:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:58:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:58:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:58:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:58:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:58:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:58:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:59:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:59:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[09:59:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:59:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[09:59:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:59:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[09:59:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[09:59:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:00:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:00:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:00:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:00:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:00:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:00:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:00:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:00:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:01:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:01:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:01:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:01:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:01:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:01:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:01:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:01:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:02:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:02:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:02:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:02:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:02:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:02:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:02:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:02:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:03:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:03:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:03:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:03:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:03:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:03:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:03:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:03:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:04:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:04:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:04:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:04:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:04:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:04:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:04:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:04:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:05:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:05:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:05:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:05:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:05:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:05:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:05:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:05:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:06:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:06:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:06:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:06:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:06:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:06:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:06:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:06:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:07:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:07:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:07:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:07:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:07:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:07:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:07:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:07:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:08:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:08:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:08:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:08:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:08:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:08:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:08:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:08:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:09:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:09:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:09:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:09:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:09:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:09:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:09:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:09:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:10:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:10:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:10:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:10:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:10:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:10:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:10:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:10:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:11:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:11:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:11:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:11:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:11:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:11:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:11:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:11:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:12:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:12:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:12:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:12:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:12:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:12:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:12:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:12:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:13:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:13:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:13:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:13:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:13:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:13:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:13:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:13:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:14:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:14:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:14:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:14:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:14:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:14:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:14:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:14:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:15:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:15:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:15:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:15:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:15:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:15:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:15:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:15:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:16:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:16:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:16:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:16:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:16:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:16:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:16:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:16:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:17:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:17:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:17:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:17:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:17:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:17:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:17:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:17:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:18:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:18:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:18:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:18:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:18:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:18:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:18:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:18:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:19:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:19:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:19:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:19:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:19:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:19:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:19:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:19:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:20:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:20:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:20:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:20:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:20:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:20:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:20:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:20:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:21:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:21:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:21:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:21:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:21:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:21:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:21:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:21:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:22:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:22:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:22:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:22:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:22:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:22:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:22:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:22:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:23:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:23:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:23:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:23:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:23:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:23:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:23:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:23:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:24:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:24:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:24:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:24:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:24:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:24:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:24:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:24:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:25:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:25:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:25:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:25:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:25:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:25:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:25:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:25:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:26:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:26:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:26:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:26:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:26:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:26:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:26:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:26:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:27:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:27:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:27:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:27:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:27:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:27:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:27:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:27:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:28:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:28:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:28:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:28:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:28:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:28:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:28:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:28:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:29:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:29:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:29:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:29:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:29:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:29:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:29:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:29:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:30:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:30:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:30:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:30:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:30:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:30:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:30:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:30:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:31:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:31:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:31:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:31:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:31:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:31:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:31:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:31:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:32:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:32:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:32:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:32:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:32:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:32:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:32:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:32:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:33:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:33:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:33:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:33:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:33:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:33:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:33:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:33:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:34:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:34:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:34:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:34:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:34:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:34:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:34:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:34:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:35:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:35:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:35:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:35:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:35:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:35:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:35:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:35:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:36:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:36:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:36:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:36:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:36:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:36:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:36:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:36:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:37:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:37:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:37:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:37:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:37:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:37:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:37:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:37:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:38:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:38:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:38:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:38:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:38:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:38:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:38:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:38:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:39:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:39:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:39:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:39:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:39:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:39:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:39:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:39:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:40:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:40:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:40:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:40:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:40:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:40:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:40:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:40:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:41:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:41:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:41:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:41:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:41:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:41:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:41:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:41:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:42:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:42:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:42:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:42:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:42:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:42:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:42:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:42:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:43:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:43:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:43:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:43:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:43:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:43:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:43:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:43:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:44:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:44:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:44:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:44:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:44:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:44:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:44:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:44:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:45:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:45:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:45:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:45:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:45:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:45:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:45:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:45:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:46:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:46:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:46:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:46:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:46:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:46:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:46:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:46:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:47:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:47:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:47:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:47:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:47:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:47:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:47:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:47:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:48:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:48:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:48:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:48:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:48:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:48:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:48:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:48:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:49:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:49:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:49:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:49:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:49:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:49:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:49:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:49:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:50:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:50:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:50:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:50:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:50:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:50:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:50:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:50:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:51:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:51:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:51:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:51:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:51:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:51:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:51:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:51:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:52:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:52:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:52:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:52:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:52:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:52:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:52:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:52:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:53:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:53:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:53:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:53:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:53:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:53:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:53:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:53:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:54:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:54:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:54:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:54:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:54:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:54:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:54:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:54:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:55:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:55:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:55:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:55:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:55:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:55:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:55:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:55:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:56:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:56:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:56:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:56:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:56:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:56:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:56:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:56:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:57:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:57:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:57:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:57:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:57:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:57:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:57:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:57:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:58:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:58:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:58:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:58:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:58:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:58:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:58:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:58:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:59:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:59:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[10:59:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:59:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[10:59:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:59:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[10:59:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[10:59:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:00:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:00:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:00:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:00:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:00:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:00:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:00:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:00:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:01:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:01:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:01:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:01:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:01:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:01:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:01:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:01:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:02:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:02:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:02:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:02:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:02:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:02:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:02:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:02:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:03:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:03:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:03:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:03:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:03:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:03:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:03:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:03:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:04:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:04:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:04:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:04:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:04:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:04:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:04:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:04:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:05:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:05:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:05:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:05:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:05:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:05:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:05:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:05:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:06:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:06:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:06:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:06:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:06:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:06:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:06:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:06:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:07:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:07:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:07:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:07:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:07:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:07:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:07:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:07:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:08:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:08:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:08:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:08:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:08:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:08:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:08:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:08:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:09:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:09:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:09:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:09:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:09:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:09:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:09:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:09:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:10:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:10:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:10:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:10:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:10:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:10:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:10:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:10:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:11:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:11:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:11:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:11:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:11:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:11:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:11:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:11:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:12:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:12:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:12:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:12:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:12:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:12:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:12:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:12:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:13:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:13:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:13:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:13:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:13:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:13:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:13:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:13:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:14:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:14:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:14:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:14:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:14:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:14:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:14:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:14:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:15:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:15:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:15:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:15:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:15:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:15:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:15:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:15:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:16:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:16:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:16:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:16:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:16:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:16:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:16:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:16:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:17:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:17:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:17:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:17:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:17:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:17:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:17:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:17:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:18:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:18:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:18:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:18:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:18:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:18:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:18:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:18:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:19:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:19:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:19:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:19:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:19:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:19:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:19:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:19:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:20:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:20:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:20:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:20:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:20:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:20:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:20:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:20:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:21:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:21:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:21:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:21:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:21:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:21:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:21:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:21:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:22:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:22:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:22:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:22:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:22:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:22:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:22:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:22:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:23:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:23:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:23:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:23:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:23:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:23:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:23:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:23:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:24:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:24:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:24:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:24:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:24:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:24:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:24:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:24:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:25:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:25:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:25:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:25:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:25:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:25:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:25:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:25:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:26:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:26:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:26:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:26:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:26:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:26:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:26:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:26:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:27:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:27:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:27:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:27:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:27:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:27:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:27:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:27:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:28:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:28:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:28:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:28:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:28:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:28:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:28:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:28:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:29:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:29:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:29:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:29:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:29:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:29:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:29:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:29:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:30:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:30:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:30:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:30:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:30:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:30:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:30:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:30:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:31:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:31:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:31:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:31:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:31:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:31:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:31:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:31:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:32:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:32:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:32:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:32:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:32:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:32:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:32:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:32:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:33:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:33:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:33:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:33:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:33:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:33:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:33:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:33:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:34:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:34:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:34:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:34:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:34:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:34:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:34:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:34:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:35:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:35:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:35:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:35:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:35:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:35:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:35:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:35:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:36:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:36:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:36:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:36:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:36:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:36:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:36:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:36:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:37:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:37:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:37:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:37:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:37:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:37:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:37:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:37:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:38:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:38:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:38:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:38:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:38:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:38:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:38:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:38:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:39:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:39:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:39:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:39:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:39:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:39:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:39:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:39:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:40:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:40:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:40:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:40:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:40:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:40:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:40:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:40:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:41:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:41:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:41:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:41:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:41:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:41:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:41:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:41:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:42:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:42:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:42:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:42:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:42:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:42:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:42:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:42:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:43:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:43:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:43:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:43:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:43:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:43:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:43:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:43:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:44:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:44:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:44:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:44:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:44:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:44:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:44:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:44:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:45:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:45:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:45:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:45:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:45:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:45:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:45:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:45:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:46:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:46:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:46:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:46:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:46:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:46:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:46:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:46:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:47:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:47:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:47:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:47:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:47:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:47:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:47:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:47:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:48:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:48:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:48:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:48:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:48:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:48:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:48:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:48:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:49:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:49:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:49:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:49:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:49:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:49:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:49:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:49:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:50:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:50:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:50:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:50:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:50:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:50:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:50:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:50:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:51:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:51:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:51:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:51:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:51:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:51:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:51:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:51:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:52:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:52:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:52:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:52:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:52:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:52:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:52:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:52:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:53:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:53:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:53:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:53:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:53:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:53:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:53:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:53:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:54:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:54:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:54:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:54:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:54:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:54:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:54:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:54:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:55:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:55:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:55:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:55:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:55:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:55:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:55:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:55:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:56:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:56:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:56:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:56:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:56:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:56:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:56:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:56:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:57:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:57:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:57:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:57:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:57:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:57:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:57:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:57:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:58:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:58:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:58:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:58:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:58:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:58:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:58:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:58:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:59:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:59:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[11:59:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:59:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[11:59:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:59:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[11:59:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[11:59:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:00:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:00:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:00:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:00:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:00:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:00:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:00:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:00:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:01:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:01:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:01:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:01:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:01:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:01:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:01:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:01:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:02:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:02:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:02:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:02:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:02:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:02:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:02:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:02:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:03:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:03:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:03:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:03:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:03:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:03:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:03:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:03:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:04:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:04:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:04:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:04:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:04:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:04:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:04:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:04:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:05:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:05:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:05:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:05:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:05:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:05:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:05:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:05:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:06:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:06:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:06:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:06:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:06:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:06:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:06:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:06:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:07:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:07:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:07:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:07:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:07:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:07:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:07:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:07:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:08:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:08:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:08:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:08:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:08:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:08:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:08:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:08:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:09:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:09:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:09:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:09:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:09:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:09:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:09:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:09:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:10:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:10:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:10:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:10:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:10:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:10:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:10:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:10:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:11:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:11:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:11:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:11:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:11:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:11:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:11:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:11:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:12:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:12:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:12:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:12:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:12:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:12:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:12:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:12:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:13:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:13:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:13:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:13:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:13:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:13:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:13:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:13:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:14:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:14:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:14:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:14:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:14:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:14:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:14:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:14:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:15:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:15:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:15:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:15:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:15:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:15:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:15:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:15:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:16:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:16:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:16:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:16:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:16:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:16:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:16:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:16:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:17:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:17:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:17:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:17:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:17:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:17:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:17:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:17:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:18:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:18:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:18:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:18:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:18:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:18:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:18:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:18:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:19:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:19:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:19:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:19:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:19:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:19:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:19:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:19:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:20:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:20:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:20:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:20:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:20:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:20:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:20:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:20:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:21:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:21:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:21:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:21:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:21:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:21:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:21:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:21:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:22:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:22:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:22:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:22:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:22:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:22:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:22:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:22:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:23:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:23:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:23:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:23:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:23:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:23:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:23:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:23:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:24:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:24:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:24:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:24:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:24:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:24:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:24:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:24:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:25:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:25:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:25:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:25:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:25:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:25:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:25:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:25:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:26:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:26:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:26:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:26:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:26:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:26:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:26:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:26:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:27:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:27:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:27:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:27:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:27:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:27:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:27:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:27:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:28:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:28:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:28:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:28:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:28:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:28:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:28:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:28:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:29:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:29:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:29:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:29:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:29:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:29:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:29:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:29:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:30:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:30:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:30:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:30:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:30:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:30:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:30:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:30:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:31:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:31:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:31:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:31:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:31:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:31:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:31:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:31:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:32:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:32:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:32:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:32:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:32:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:32:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:32:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:32:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:33:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:33:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:33:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:33:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:33:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:33:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:33:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:33:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:34:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:34:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:34:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:34:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:34:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:34:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:34:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:34:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:35:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:35:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:35:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:35:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:35:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:35:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:35:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:35:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:36:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:36:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:36:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:36:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:36:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:36:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:36:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:36:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:37:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:37:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:37:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:37:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:37:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:37:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:37:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:37:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:38:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:38:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:38:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:38:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:38:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:38:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:38:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:38:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:39:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:39:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:39:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:39:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:39:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:39:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:39:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:39:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:40:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:40:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:40:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:40:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:40:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:40:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:40:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:40:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:41:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:41:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:41:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:41:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:41:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:41:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:41:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:41:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:42:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:42:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:42:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:42:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:42:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:42:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:42:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:42:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:43:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:43:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:43:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:43:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:43:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:43:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:43:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:43:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:44:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:44:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:44:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:44:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:44:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:44:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:44:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:44:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:45:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:45:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:45:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:45:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:45:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:45:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:45:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:45:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:46:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:46:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:46:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:46:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:46:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:46:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:46:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:46:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:47:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:47:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:47:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:47:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:47:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:47:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:47:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:47:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:48:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:48:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:48:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:48:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:48:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:48:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:48:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:48:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:49:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:49:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:49:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:49:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:49:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:49:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:49:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:49:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:50:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:50:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:50:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:50:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:50:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:50:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:50:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:50:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:51:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:51:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:51:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:51:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:51:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:51:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:51:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:51:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:52:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:52:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:52:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:52:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:52:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:52:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:52:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:52:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:53:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:53:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:53:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:53:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:53:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:53:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:53:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:53:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:54:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:54:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:54:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:54:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:54:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:54:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:54:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:54:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:55:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:55:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:55:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:55:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:55:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:55:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:55:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:55:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:56:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:56:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:56:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:56:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:56:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:56:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:56:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:56:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:57:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:57:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:57:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:57:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:57:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:57:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:57:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:57:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:58:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:58:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:58:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:58:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:58:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:58:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:58:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:58:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:59:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:59:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[12:59:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:59:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[12:59:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:59:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[12:59:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[12:59:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:00:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:00:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:00:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:00:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:00:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:00:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:00:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:00:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:01:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:01:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:01:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:01:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:01:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:01:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:01:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:01:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:02:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:02:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:02:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:02:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:02:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:02:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:02:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:02:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:03:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:03:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:03:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:03:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:03:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:03:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:03:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:03:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:04:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:04:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:04:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:04:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:04:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:04:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:04:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:04:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:05:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:05:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:05:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:05:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:05:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:05:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:05:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:05:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:06:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:06:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:06:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:06:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:06:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:06:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:06:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:06:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:07:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:07:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:07:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:07:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:07:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:07:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:07:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:07:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:08:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:08:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:08:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:08:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:08:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:08:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:08:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:08:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:09:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:09:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:09:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:09:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:09:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:09:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:09:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:09:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:10:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:10:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:10:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:10:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:10:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:10:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:10:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:10:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:11:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:11:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:11:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:11:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:11:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:11:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:11:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:11:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:12:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:12:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:12:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:12:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:12:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:12:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:12:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:12:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:13:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:13:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:13:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:13:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:13:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:13:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:13:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:13:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:14:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:14:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:14:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:14:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:14:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:14:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:14:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:14:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:15:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:15:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:15:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:15:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:15:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:15:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:15:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:15:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:16:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:16:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:16:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:16:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:16:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:16:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:16:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:16:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:17:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:17:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:17:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:17:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:17:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:17:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:17:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:17:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:18:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:18:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:18:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:18:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:18:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:18:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:18:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:18:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:19:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:19:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:19:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:19:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:19:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:19:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:19:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:19:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:20:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:20:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:20:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:20:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:20:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:20:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:20:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:20:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:21:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:21:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:21:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:21:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:21:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:21:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:21:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:21:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:22:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:22:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:22:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:22:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:22:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:22:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:22:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:22:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:23:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:23:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:23:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:23:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:23:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:23:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:23:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:23:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:24:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:24:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:24:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:24:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:24:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:24:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:24:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:24:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:25:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:25:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:25:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:25:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:25:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:25:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:25:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:25:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:26:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:26:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:26:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:26:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:26:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:26:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:26:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:26:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:27:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:27:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:27:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:27:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:27:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:27:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:27:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:27:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:28:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:28:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:28:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:28:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:28:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:28:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:28:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:28:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:29:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:29:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:29:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:29:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:29:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:29:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:29:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:29:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:30:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:30:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:30:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:30:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:30:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:30:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:30:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:30:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:31:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:31:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:31:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:31:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:31:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:31:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:31:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:31:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:32:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:32:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:32:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:32:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:32:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:32:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:32:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:32:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:33:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:33:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:33:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:33:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:33:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:33:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:33:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:33:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:34:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:34:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:34:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:34:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:34:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:34:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:34:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:34:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:35:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:35:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:35:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:35:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:35:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:35:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:35:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:35:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:36:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:36:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:36:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:36:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:36:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:36:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:36:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:36:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:37:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:37:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:37:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:37:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:37:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:37:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:37:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:37:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:38:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:38:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:38:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:38:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:38:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:38:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:38:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:38:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:39:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:39:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:39:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:39:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:39:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:39:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:39:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:39:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:40:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:40:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:40:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:40:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:40:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:40:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:40:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:40:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:41:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:41:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:41:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:41:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:41:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:41:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:41:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:41:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:42:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:42:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:42:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:42:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:42:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:42:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:42:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:42:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:43:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:43:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:43:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:43:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:43:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:43:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:43:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:43:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:44:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:44:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:44:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:44:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:44:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:44:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:44:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:44:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:46:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:46:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:46:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:46:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:46:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:46:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:46:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:46:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:47:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:47:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:47:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:47:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:47:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:47:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:47:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:47:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:48:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:48:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:48:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:48:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:48:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:48:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:48:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:48:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:49:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:49:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:49:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:49:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:49:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:49:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:49:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:49:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:50:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:50:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:50:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:50:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:50:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:50:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:50:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:50:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:51:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:51:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:51:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:51:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:51:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:51:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:51:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:51:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:52:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:52:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:52:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:52:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:52:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:52:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:52:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:52:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:53:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:53:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:53:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:53:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:53:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:53:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:53:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:53:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:54:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:54:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:54:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:54:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:54:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:54:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:54:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:54:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:55:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:55:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:55:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:55:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:55:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:55:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:55:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:55:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:56:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:56:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:56:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:56:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:56:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:56:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:56:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:56:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:57:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:57:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:57:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:57:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:57:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:57:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:57:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:57:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:58:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:58:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:58:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:58:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:58:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:58:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:58:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:58:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:59:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:59:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[13:59:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:59:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[13:59:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:59:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[13:59:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[13:59:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:00:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:00:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:00:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:00:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:00:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:00:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:00:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:00:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:01:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:01:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:01:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:01:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:01:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:01:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:01:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:01:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:02:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:02:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:02:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:02:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:02:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:02:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:02:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:02:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:03:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:03:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:03:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:03:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:03:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:03:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:03:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:03:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:04:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:04:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:04:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:04:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:04:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:04:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:04:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:04:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:05:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:05:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:05:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:05:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:05:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:05:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:05:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:05:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:06:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:06:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:06:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:06:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:06:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:06:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:06:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:06:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:07:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:07:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:07:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:07:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:07:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:07:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:07:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:07:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:08:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:08:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:08:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:08:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:08:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:08:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:08:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:08:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:09:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:09:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:09:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:09:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:09:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:09:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:09:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:09:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:10:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:10:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:10:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:10:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:10:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:10:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:10:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:10:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:11:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:11:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:11:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:11:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:11:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:11:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:11:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:11:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:12:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:12:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:12:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:12:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:12:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:12:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:12:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:12:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:13:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:13:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:13:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:13:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:13:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:13:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:13:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:13:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:14:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:14:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:14:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:14:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:14:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:14:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:14:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:14:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:15:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:15:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:15:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:15:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:15:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:15:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:15:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:15:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:16:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:16:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:16:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:16:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:16:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:16:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:16:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:16:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:17:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:17:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:17:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:17:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:17:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:17:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:17:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:17:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:18:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:18:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:18:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:18:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:18:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:18:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:18:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:18:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:19:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:19:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:19:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:19:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:19:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:19:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:19:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:19:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:20:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:20:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:20:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:20:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:20:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:20:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:20:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:20:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:21:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:21:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:21:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:21:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:21:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:21:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:21:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:21:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:22:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:22:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:22:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:22:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:22:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:22:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:22:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:22:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:23:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:23:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:23:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:23:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:23:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:23:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:23:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:23:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:24:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:24:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:24:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:24:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:24:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:24:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:24:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:24:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:25:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:25:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:25:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:25:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:25:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:25:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:25:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:25:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:26:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:26:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:26:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:26:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:26:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:26:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:26:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:26:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:27:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:27:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:27:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:27:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:27:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:27:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:27:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:27:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:28:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:28:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:28:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:28:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:28:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:28:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:28:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:28:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:29:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:29:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:29:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:29:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:29:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:29:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:29:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:29:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:30:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:30:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:30:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:30:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:30:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:30:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:30:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:30:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:31:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:31:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:31:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:31:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:31:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:31:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:31:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:31:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:32:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:32:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:32:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:32:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:32:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:32:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:32:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:32:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:33:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:33:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:33:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:33:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:33:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:33:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:33:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:33:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:34:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:34:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:34:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:34:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:34:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:34:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:34:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:34:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:35:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:35:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:35:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:35:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:35:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:35:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:35:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:35:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:36:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:36:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:36:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:36:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:36:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:36:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:36:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:36:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:37:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:37:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:37:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:37:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:37:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:37:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:37:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:37:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:38:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:38:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:38:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:38:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:38:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:38:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:38:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:38:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:39:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:39:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:39:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:39:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:39:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:39:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:39:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:39:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:40:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:40:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:40:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:40:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:40:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:40:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:40:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:40:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:41:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:41:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:41:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:41:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:41:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:41:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:41:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:41:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:42:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:42:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:42:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:42:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:42:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:42:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:42:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:42:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:43:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:43:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:43:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:43:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:43:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:43:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:43:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:43:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:44:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:44:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:44:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:44:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:44:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:44:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:44:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:44:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:45:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:45:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:45:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:45:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:45:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:45:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:45:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:45:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:46:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:46:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:46:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:46:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:46:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:46:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:46:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:46:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:47:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:47:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:47:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:47:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:47:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:47:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:47:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:47:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:48:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:48:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:48:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:48:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:48:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:48:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:48:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:48:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:49:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:49:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:49:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:49:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:49:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:49:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:49:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:49:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:50:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:50:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:50:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:50:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:50:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:50:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:50:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:50:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:51:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:51:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:51:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:51:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:51:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:51:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:51:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:51:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:52:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:52:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:52:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:52:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:52:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:52:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:52:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:52:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:53:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:53:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:53:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:53:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:53:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:53:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:53:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:53:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:54:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:54:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:54:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:54:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:54:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:54:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:54:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:54:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:55:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:55:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:55:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:55:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:55:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:55:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:55:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:55:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:56:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:56:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:56:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:56:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:56:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:56:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:56:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:56:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:57:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:57:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:57:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:57:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:57:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:57:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:57:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:57:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:58:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:58:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:58:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:58:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:58:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:58:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:58:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:58:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:59:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:59:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[14:59:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:59:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[14:59:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:59:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[14:59:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[14:59:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:00:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:00:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:00:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:00:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:00:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:00:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:00:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:00:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:01:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:01:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:01:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:01:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:01:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:01:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:01:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:01:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:02:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:02:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:02:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:02:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:02:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:02:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:02:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:02:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:03:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:03:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:03:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:03:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:03:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:03:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:03:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:03:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:04:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:04:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:04:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:04:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:04:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:04:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:04:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:04:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:05:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:05:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:05:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:05:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:05:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:05:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:05:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:05:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:06:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:06:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:06:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:06:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:06:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:06:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:06:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:06:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:07:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:07:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:07:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:07:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:07:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:07:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:07:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:07:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:08:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:08:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:08:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:08:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:08:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:08:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:08:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:08:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:09:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:09:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:09:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:09:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:09:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:09:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:09:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:09:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:10:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:10:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:10:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:10:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:10:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:10:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:10:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:10:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:11:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:11:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:11:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:11:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:11:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:11:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:11:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:11:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:12:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:12:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:12:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:12:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:12:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:12:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:12:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:12:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:13:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:13:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:13:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:13:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:13:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:13:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:13:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:13:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:14:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:14:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:14:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:14:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:14:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:14:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:14:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:14:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:15:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:15:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:15:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:15:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:15:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:15:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:15:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:15:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:16:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:16:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:16:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:16:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:16:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:16:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:16:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:16:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:17:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:17:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:17:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:17:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:17:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:17:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:17:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:17:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:18:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:18:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:18:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:18:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:18:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:18:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:18:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:18:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:19:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:19:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:19:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:19:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:19:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:19:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:19:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:19:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:20:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:20:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:20:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:20:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:20:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:20:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:20:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:20:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:21:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:21:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:21:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:21:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:21:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:21:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:21:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:21:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:22:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:22:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:22:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:22:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:22:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:22:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:22:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:22:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:23:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:23:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:23:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:23:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:23:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:23:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:23:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:23:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:24:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:24:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:24:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:24:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:24:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:24:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:24:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:24:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:25:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:25:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:25:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:25:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:25:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:25:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:25:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:25:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:26:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:26:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:26:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:26:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:26:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:26:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:26:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:26:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:27:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:27:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:27:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:27:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:27:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:27:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:27:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:27:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:28:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:28:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:28:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:28:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:28:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:28:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:28:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:28:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:29:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:29:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:29:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:29:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:29:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:29:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:29:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:29:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:30:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:30:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:30:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:30:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:30:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:30:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:30:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:30:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:31:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:31:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:31:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:31:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:31:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:31:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:31:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:31:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:32:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:32:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:32:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:32:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:32:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:32:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:32:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:32:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:33:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:33:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:33:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:33:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:33:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:33:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:33:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:33:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:34:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:34:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:34:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:34:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:34:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:34:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:34:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:34:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:35:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:35:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:35:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:35:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:35:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:35:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:35:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:35:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:36:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:36:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:36:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:36:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:36:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:36:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:36:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:36:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:37:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:37:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:37:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:37:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:37:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:37:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:37:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:37:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:38:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:38:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:38:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:38:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:38:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:38:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:38:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:38:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:39:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:39:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:39:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:39:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:39:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:39:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:39:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:39:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:40:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:40:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:40:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:40:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:40:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:40:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:40:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:40:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:41:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:41:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:41:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:41:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:41:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:41:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:41:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:41:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:42:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:42:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:42:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:42:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:42:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:42:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:42:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:42:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:43:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:43:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:43:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:43:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:43:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:43:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:43:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:43:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:44:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:44:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:44:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:44:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:44:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:44:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:44:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:44:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:45:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:45:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:45:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:45:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:45:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:45:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:45:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:45:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:46:13] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:46:13] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:46:13] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:46:13] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:46:13] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:46:13] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:46:13] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:46:13] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:47:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:47:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:47:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:47:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:47:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:47:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:47:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:47:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:48:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:48:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:48:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:48:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:48:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:48:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:48:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:48:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:49:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:49:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:49:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:49:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:49:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:49:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:49:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:49:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:50:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:50:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:50:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:50:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:50:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:50:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:50:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:50:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:51:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:51:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:51:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:51:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:51:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:51:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:51:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:51:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:52:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:52:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:52:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:52:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:52:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:52:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:52:14] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:52:14] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:53:14] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:53:14] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:53:14] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:53:14] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:53:14] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:53:14] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:53:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:53:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:54:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:54:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:54:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:54:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:54:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:54:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:54:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:54:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:55:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:55:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:55:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:55:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:55:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:55:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:55:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:55:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:56:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:56:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:56:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:56:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:56:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:56:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:56:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:56:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:57:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:57:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:57:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:57:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:57:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:57:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:57:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:57:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:58:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:58:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:58:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:58:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:58:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:58:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:58:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:58:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:59:15] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:59:15] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[15:59:15] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:59:15] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[15:59:15] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:59:15] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[15:59:15] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[15:59:15] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:00:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:00:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:00:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:00:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:00:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:00:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:00:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:00:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:01:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:01:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:01:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:01:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:01:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:01:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:01:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:01:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:02:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:02:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:02:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:02:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:02:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:02:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:02:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:02:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:03:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:03:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:03:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:03:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:03:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:03:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:03:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:03:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:04:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:04:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:04:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:04:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:04:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:04:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:04:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:04:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:05:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:05:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:05:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:05:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:05:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:05:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:05:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:05:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:06:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:06:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:06:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:06:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:06:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:06:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:06:16] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:06:16] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:07:16] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:07:16] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:07:16] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:07:16] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:07:16] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:07:16] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:07:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:07:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:08:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:08:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:08:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:08:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:08:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:08:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:08:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:08:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:09:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:09:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:09:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:09:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:09:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:09:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:09:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:09:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:10:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:10:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:10:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:10:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:10:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:10:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:10:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:10:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:11:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:11:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:11:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:11:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:11:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:11:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:11:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:11:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:12:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:12:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:12:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:12:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:12:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:12:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:12:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:12:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:13:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:13:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:13:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:13:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:13:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:13:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:13:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:13:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:14:17] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:14:17] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:14:17] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:14:17] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:14:17] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:14:17] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:14:17] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:14:17] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:15:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:15:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:15:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:15:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:15:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:15:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:15:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:15:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:16:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:16:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:16:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:16:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:16:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:16:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:16:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:16:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:17:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:17:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:17:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:17:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:17:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:17:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:17:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:17:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:18:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:18:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:18:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:18:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:18:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:18:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:18:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:18:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:19:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:19:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:19:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:19:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:19:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:19:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:19:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:19:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:20:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:20:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:20:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:20:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:20:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:20:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:20:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:20:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:21:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:21:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:21:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:21:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:21:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:21:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:21:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:21:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:22:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:22:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:22:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:22:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:22:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:22:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:22:18] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:22:18] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:23:18] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:23:18] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:23:18] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:23:18] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:23:18] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:23:18] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:23:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:23:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:24:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:24:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:24:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:24:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:24:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:24:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:24:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:24:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:25:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:25:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:25:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:25:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:25:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:25:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:25:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:25:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:26:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:26:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:26:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:26:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:26:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:26:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:26:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:26:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:27:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:27:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:27:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:27:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:27:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:27:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:27:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:27:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:28:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:28:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:28:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:28:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:28:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:28:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:28:19] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:28:19] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:29:19] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:29:19] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:29:19] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:29:19] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:29:19] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:29:19] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:29:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:29:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:30:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:30:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:30:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:30:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:30:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:30:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:30:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:30:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:31:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:31:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:31:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:31:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:31:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:31:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:31:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:31:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:32:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:32:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:32:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:32:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:32:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:32:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:32:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:32:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:33:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:33:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:33:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:33:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:33:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:33:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:33:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:33:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:34:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:34:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:34:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:34:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:34:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:34:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:34:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:34:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:35:20] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:35:20] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:35:20] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:35:20] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:35:20] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:35:20] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:35:20] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:35:20] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:36:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:36:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:36:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:36:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:36:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:36:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:36:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:36:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:37:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:37:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:37:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:37:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:37:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:37:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:37:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:37:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:38:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:38:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:38:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:38:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:38:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:38:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:38:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:38:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:39:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:39:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:39:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:39:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:39:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:39:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:39:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:39:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:40:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:40:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:40:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:40:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:40:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:40:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:40:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:40:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:41:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:41:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:41:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:41:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:41:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:41:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:41:21] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:41:21] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:42:21] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:42:21] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:42:21] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:42:21] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:42:21] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:42:21] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:42:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:42:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:43:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:43:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:43:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:43:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:43:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:43:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:43:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:43:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:44:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:44:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:44:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:44:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:44:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:44:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:44:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:44:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:45:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:45:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:45:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:45:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:45:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:45:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:45:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:45:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:46:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:46:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:46:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:46:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:46:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:46:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:46:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:46:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:47:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:47:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:47:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:47:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:47:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:47:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:47:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:47:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:48:22] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:48:22] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:48:22] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:48:22] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:48:22] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:48:22] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:48:22] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:48:22] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:49:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:49:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:49:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:49:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:49:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:49:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:49:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:49:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:50:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:50:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:50:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:50:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:50:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:50:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:50:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:50:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:51:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:51:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:51:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:51:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:51:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:51:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:51:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:51:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:52:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:52:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:52:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:52:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:52:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:52:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:52:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:52:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:53:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:53:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:53:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:53:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:53:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:53:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:53:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:53:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:54:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:54:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:54:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:54:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:54:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:54:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:54:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:54:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:55:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:55:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:55:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:55:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:55:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:55:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:55:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:55:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:56:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:56:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:56:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:56:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:56:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:56:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:56:23] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:56:23] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:57:23] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:57:23] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:57:23] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:57:23] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:57:23] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:57:23] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:57:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:57:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:58:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:58:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:58:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:58:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:58:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:58:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:58:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:58:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:59:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:59:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[16:59:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:59:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[16:59:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:59:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[16:59:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[16:59:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:00:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:00:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:00:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:00:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:00:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:00:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:00:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:00:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:01:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:01:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:01:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:01:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:01:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:01:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:01:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:01:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:02:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:02:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:02:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:02:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:02:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:02:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:02:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:02:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:03:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:03:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:03:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:03:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:03:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:03:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:03:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:03:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:04:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:04:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:04:24] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:04:24] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:04:24] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:04:24] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:04:24] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:04:24] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:05:24] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:05:24] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:05:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:05:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:05:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:05:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:05:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:05:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:06:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:06:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:06:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:06:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:06:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:06:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:06:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:06:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:07:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:07:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:07:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:07:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:07:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:07:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:07:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:07:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:08:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:08:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:08:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:08:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:08:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:08:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:08:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:08:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:09:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:09:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:09:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:09:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:09:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:09:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:09:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:09:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:10:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:10:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:10:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:10:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:10:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:10:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:10:25] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:10:25] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:11:25] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:11:25] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:11:25] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:11:25] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:11:25] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:11:25] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:11:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:11:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:12:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:12:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:12:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:12:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:12:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:12:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:12:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:12:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:13:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:13:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:13:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:13:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:13:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:13:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:13:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:13:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:14:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:14:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:14:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:14:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:14:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:14:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:14:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:14:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:15:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:15:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:15:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:15:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:15:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:15:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:15:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:15:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:16:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:16:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:16:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:16:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:16:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:16:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:16:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:16:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:17:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:17:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:17:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:17:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:17:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:17:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:17:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:17:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:18:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:18:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:18:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:18:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:18:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:18:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:18:26] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:18:26] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:19:26] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:19:26] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:19:26] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:19:26] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:19:26] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:19:26] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:19:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:19:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:20:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:20:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:20:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:20:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:20:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:20:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:20:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:20:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:21:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:21:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:21:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:21:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:21:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:21:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:21:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:21:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:22:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:22:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:22:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:22:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:22:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:22:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:22:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:22:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:23:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:23:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:23:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:23:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:23:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:23:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:23:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:23:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:24:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:24:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:24:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:24:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:24:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:24:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:24:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:24:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:25:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:25:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:25:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:25:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:25:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:25:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:25:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:25:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:26:27] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:26:27] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:26:27] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:26:27] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:26:27] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:26:27] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:26:27] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:26:27] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:27:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:27:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:27:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:27:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:27:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:27:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:27:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:27:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:28:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:28:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:28:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:28:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:28:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:28:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:28:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:28:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:29:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:29:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:29:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:29:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:29:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:29:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:29:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:29:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:30:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:30:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:30:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:30:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:30:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:30:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:30:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:30:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:31:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:31:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:31:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:31:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:31:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:31:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:31:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:31:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:32:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:32:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:32:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:32:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:32:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:32:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:32:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:32:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:33:28] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:33:28] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:33:28] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:33:28] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:33:28] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:33:28] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:33:28] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:33:28] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:34:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:34:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:34:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:34:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:34:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:34:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:34:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:34:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:35:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:35:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:35:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:35:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:35:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:35:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:35:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:35:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:36:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:36:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:36:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:36:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:36:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:36:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:36:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:36:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:37:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:37:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:37:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:37:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:37:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:37:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:37:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:37:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:38:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:38:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:38:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:38:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:38:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:38:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:38:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:38:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:39:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:39:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:39:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:39:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:39:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:39:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:39:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:39:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:40:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:40:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:40:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:40:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:40:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:40:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:40:29] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:40:29] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:41:29] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:41:29] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:41:29] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:41:29] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:41:29] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:41:29] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:41:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:41:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:42:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:42:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:42:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:42:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:42:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:42:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:42:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:42:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:43:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:43:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:43:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:43:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:43:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:43:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:43:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:43:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:44:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:44:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:44:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:44:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:44:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:44:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:44:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:44:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:45:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:45:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:45:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:45:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:45:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:45:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:45:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:45:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:46:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:46:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:46:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:46:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:46:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:46:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:46:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:46:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:47:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:47:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:47:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:47:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:47:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:47:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:47:30] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:47:30] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:48:30] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:48:30] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:48:30] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:48:30] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:48:30] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:48:30] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:48:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:48:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:49:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:49:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:49:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:49:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:49:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:49:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:49:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:49:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:50:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:50:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:50:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:50:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:50:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:50:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:50:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:50:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:51:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:51:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:51:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:51:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:51:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:51:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:51:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:51:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:52:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:52:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:52:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:52:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:52:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:52:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:52:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:52:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:53:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:53:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:53:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:53:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:53:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:53:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:53:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:53:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:54:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:54:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:54:31] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:54:31] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:54:31] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:54:31] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:54:31] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:54:31] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:55:31] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:55:31] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:55:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:55:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:55:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:55:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:55:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:55:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:56:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:56:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:56:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:56:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:56:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:56:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:56:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:56:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:57:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:57:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:57:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:57:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:57:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:57:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:57:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:57:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:58:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:58:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:58:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:58:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:58:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:58:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:58:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:58:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:59:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:59:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[17:59:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:59:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[17:59:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:59:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[17:59:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[17:59:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:00:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:00:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:00:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:00:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:00:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:00:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:00:32] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:00:32] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:01:32] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:01:32] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:01:32] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:01:32] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:01:32] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:01:32] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:01:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:01:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:02:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:02:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:02:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:02:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:02:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:02:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:02:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:02:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:03:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:03:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:03:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:03:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:03:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:03:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:03:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:03:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:04:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:04:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:04:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:04:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:04:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:04:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:04:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:04:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:05:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:05:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:05:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:05:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:05:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:05:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:05:33] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:05:33] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:06:33] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:06:33] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:06:33] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:06:33] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:06:33] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:06:33] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:06:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:06:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:07:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:07:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:07:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:07:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:07:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:07:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:07:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:07:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:08:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:08:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:08:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:08:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:08:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:08:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:08:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:08:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:09:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:09:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:09:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:09:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:09:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:09:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:09:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:09:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:10:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:10:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:10:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:10:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:10:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:10:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:10:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:10:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:11:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:11:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:11:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:11:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:11:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:11:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:11:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:11:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:12:34] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:12:34] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:12:34] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:12:34] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:12:34] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:12:34] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:12:34] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:12:34] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:13:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:13:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:13:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:13:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:13:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:13:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:13:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:13:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:14:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:14:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:14:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:14:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:14:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:14:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:14:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:14:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:15:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:15:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:15:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:15:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:15:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:15:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:15:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:15:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:16:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:16:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:16:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:16:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:16:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:16:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:16:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:16:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:17:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:17:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:17:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:17:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:17:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:17:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:17:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:17:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:18:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:18:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:18:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:18:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:18:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:18:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:18:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:18:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:19:35] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:19:35] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:19:35] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:19:35] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:19:35] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:19:35] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:19:35] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:19:35] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:20:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:20:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:20:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:20:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:20:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:20:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:20:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:20:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:21:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:21:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:21:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:21:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:21:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:21:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:21:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:21:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:22:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:22:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:22:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:22:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:22:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:22:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:22:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:22:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:23:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:23:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:23:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:23:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:23:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:23:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:23:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:23:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:24:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:24:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:24:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:24:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:24:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:24:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:24:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:24:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:25:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:25:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:25:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:25:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:25:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:25:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:25:36] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:25:36] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:26:36] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:26:36] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:26:36] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:26:36] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:26:36] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:26:36] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:26:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:26:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:27:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:27:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:27:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:27:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:27:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:27:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:27:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:27:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:28:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:28:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:28:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:28:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:28:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:28:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:28:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:28:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:29:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:29:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:29:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:29:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:29:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:29:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:29:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:29:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:30:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:30:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:30:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:30:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:30:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:30:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:30:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:30:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:31:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:31:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:31:37] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:31:37] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:31:37] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:31:37] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:31:37] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:31:37] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:32:37] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:32:37] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:32:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:32:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:32:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:32:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:32:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:32:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:33:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:33:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:33:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:33:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:33:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:33:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:33:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:33:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:34:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:34:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:34:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:34:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:34:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:34:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:34:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:34:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:35:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:35:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:35:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:35:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:35:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:35:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:35:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:35:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:36:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:36:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:36:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:36:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:36:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:36:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:36:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:36:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:37:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:37:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:37:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:37:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:37:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:37:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:37:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:37:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:38:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:38:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:38:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:38:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:38:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:38:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:38:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:38:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:39:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:39:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:39:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:39:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:39:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:39:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:39:38] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:39:38] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:40:38] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:40:38] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:40:38] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:40:38] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:40:38] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:40:38] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:40:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:40:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:41:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:41:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:41:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:41:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:41:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:41:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:41:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:41:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:42:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:42:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:42:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:42:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:42:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:42:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:42:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:42:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:43:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:43:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:43:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:43:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:43:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:43:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:43:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:43:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:44:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:44:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:44:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:44:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:44:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:44:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:44:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:44:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:45:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:45:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:45:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:45:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:45:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:45:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:45:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:45:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:46:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:46:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:46:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:46:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:46:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:46:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:46:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:46:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:47:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:47:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:47:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:47:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:47:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:47:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:47:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:47:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:48:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:48:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:48:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:48:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:48:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:48:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:48:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:48:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:49:39] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:49:39] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:49:39] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:49:39] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:49:39] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:49:39] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:49:39] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:49:39] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:50:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:50:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:50:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:50:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:50:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:50:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:50:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:50:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:51:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:51:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:51:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:51:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:51:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:51:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:51:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:51:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:52:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:52:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:52:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:52:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:52:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:52:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:52:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:52:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:53:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:53:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:53:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:53:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:53:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:53:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:53:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:53:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:54:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:54:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:54:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:54:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:54:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:54:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:54:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:54:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:55:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:55:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:55:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:55:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:55:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:55:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:55:40] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:55:40] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:56:40] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:56:40] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:56:40] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:56:40] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:56:40] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:56:40] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:56:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:56:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:57:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:57:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:57:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:57:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:57:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:57:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:57:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:57:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:58:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:58:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:58:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:58:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:58:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:58:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:58:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:58:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:59:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:59:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[18:59:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:59:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[18:59:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:59:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[18:59:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[18:59:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:00:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:00:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:00:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:00:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:00:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:00:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:00:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:00:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:01:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:01:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:01:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:01:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:01:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:01:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:01:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:01:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:02:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:02:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:02:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:02:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:02:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:02:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:02:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:02:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:03:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:03:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:03:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:03:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:03:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:03:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:03:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:03:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:04:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:04:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:04:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:04:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:04:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:04:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:04:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:04:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:05:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:05:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:05:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:05:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:05:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:05:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:05:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:05:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:06:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:06:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:06:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:06:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:06:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:06:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:06:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:06:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:07:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:07:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:07:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:07:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:07:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:07:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:07:41] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:07:41] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:08:41] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:08:41] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:08:41] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:08:41] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:08:41] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:08:41] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:08:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:08:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:09:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:09:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:09:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:09:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:09:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:09:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:09:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:09:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:10:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:10:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:10:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:10:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:10:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:10:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:10:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:10:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:11:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:11:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:11:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:11:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:11:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:11:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:11:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:11:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:12:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:12:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:12:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:12:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:12:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:12:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:12:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:12:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:13:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:13:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:13:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:13:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:13:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:13:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:13:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:13:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:14:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:14:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:14:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:14:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:14:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:14:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:14:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:14:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:15:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:15:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:15:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:15:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:15:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:15:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:15:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:15:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:16:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:16:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:16:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:16:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:16:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:16:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:16:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:16:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:17:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:17:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:17:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:17:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:17:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:17:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:17:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:17:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:18:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:18:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:18:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:18:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:18:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:18:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:18:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:18:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:19:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:19:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:19:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:19:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:19:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:19:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:19:42] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:19:42] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:20:42] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:20:42] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:20:42] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:20:42] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:20:42] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:20:42] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:20:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:20:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:21:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:21:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:21:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:21:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:21:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:21:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:21:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:21:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:22:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:22:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:22:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:22:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:22:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:22:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:22:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:22:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:23:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:23:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:23:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:23:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:23:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:23:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:23:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:23:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:24:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:24:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:24:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:24:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:24:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:24:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:24:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:24:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:25:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:25:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:25:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:25:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:25:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:25:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:25:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:25:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:26:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:26:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:26:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:26:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:26:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:26:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:26:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:26:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:27:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:27:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:27:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:27:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:27:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:27:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:27:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:27:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:28:43] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:28:43] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:28:43] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:28:43] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:28:43] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:28:43] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:28:43] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:28:43] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:29:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:29:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:29:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:29:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:29:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:29:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:29:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:29:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:30:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:30:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:30:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:30:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:30:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:30:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:30:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:30:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:31:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:31:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:31:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:31:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:31:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:31:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:31:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:31:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:32:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:32:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:32:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:32:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:32:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:32:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:32:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:32:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:33:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:33:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:33:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:33:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:33:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:33:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:33:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:33:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:34:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:34:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:34:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:34:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:34:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:34:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:34:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:34:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:35:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:35:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:35:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:35:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:35:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:35:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:35:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:35:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:36:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:36:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:36:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:36:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:36:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:36:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:36:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:36:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:37:44] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:37:44] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:37:44] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:37:44] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:37:44] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:37:44] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:37:44] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:37:44] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:38:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:38:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:38:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:38:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:38:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:38:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:38:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:38:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:39:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:39:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:39:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:39:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:39:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:39:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:39:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:39:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:40:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:40:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:40:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:40:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:40:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:40:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:40:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:40:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:41:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:41:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:41:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:41:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:41:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:41:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:41:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:41:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:42:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:42:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:42:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:42:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:42:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:42:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:42:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:42:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:43:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:43:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:43:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:43:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:43:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:43:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:43:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:43:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:44:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:44:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:44:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:44:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:44:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:44:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:44:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:44:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:45:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:45:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:45:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:45:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:45:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:45:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:45:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:45:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:46:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:46:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:46:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:46:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:46:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:46:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:46:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:46:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:47:45] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:47:45] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:47:45] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:47:45] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:47:45] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:47:45] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:47:45] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:47:45] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:48:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:48:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:48:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:48:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:48:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:48:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:48:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:48:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:49:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:49:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:49:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:49:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:49:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:49:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:49:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:49:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:50:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:50:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:50:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:50:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:50:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:50:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:50:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:50:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:51:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:51:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:51:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:51:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:51:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:51:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:51:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:51:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:52:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:52:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:52:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:52:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:52:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:52:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:52:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:52:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:53:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:53:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:53:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:53:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:53:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:53:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:53:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:53:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:54:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:54:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:54:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:54:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:54:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:54:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:54:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:54:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:55:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:55:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:55:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:55:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:55:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:55:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:55:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:55:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:56:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:56:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:56:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:56:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:56:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:56:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:56:46] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:56:46] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:57:46] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:57:46] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:57:46] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:57:46] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:57:46] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:57:46] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:57:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:57:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:58:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:58:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:58:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:58:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:58:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:58:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:58:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:58:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:59:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:59:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[19:59:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:59:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[19:59:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:59:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[19:59:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[19:59:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:00:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:00:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:00:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:00:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:00:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:00:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:00:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:00:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:01:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:01:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:01:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:01:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:01:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:01:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:01:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:01:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:02:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:02:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:02:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:02:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:02:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:02:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:02:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:02:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:03:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:03:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:03:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:03:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:03:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:03:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:03:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:03:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:04:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:04:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:04:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:04:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:04:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:04:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:04:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:04:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:05:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:05:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:05:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:05:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:05:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:05:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:05:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:05:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:06:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:06:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:06:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:06:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:06:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:06:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:06:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:06:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:07:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:07:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:07:47] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:07:47] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:07:47] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:07:47] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:07:47] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:07:47] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:08:47] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:08:47] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:08:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:08:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:08:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:08:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:08:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:08:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:09:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:09:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:09:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:09:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:09:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:09:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:09:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:09:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:10:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:10:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:10:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:10:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:10:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:10:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:10:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:10:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:11:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:11:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:11:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:11:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:11:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:11:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:11:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:11:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:12:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:12:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:12:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:12:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:12:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:12:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:12:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:12:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:13:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:13:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:13:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:13:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:13:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:13:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:13:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:13:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:14:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:14:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:14:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:14:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:14:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:14:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:14:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:14:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:15:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:15:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:15:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:15:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:15:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:15:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:15:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:15:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:16:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:16:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:16:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:16:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:16:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:16:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:16:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:16:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:17:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:17:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:17:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:17:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:17:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:17:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:17:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:17:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:18:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:18:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:18:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:18:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:18:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:18:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:18:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:18:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:19:48] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:19:48] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:19:48] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:19:48] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:19:48] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:19:48] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:19:48] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:19:48] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:20:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:20:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:20:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:20:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:20:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:20:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:20:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:20:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:21:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:21:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:21:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:21:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:21:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:21:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:21:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:21:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:22:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:22:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:22:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:22:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:22:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:22:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:22:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:22:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:23:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:23:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:23:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:23:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:23:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:23:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:23:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:23:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:24:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:24:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:24:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:24:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:24:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:24:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:24:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:24:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:25:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:25:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:25:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:25:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:25:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:25:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:25:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:25:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:26:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:26:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:26:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:26:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:26:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:26:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:26:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:26:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:27:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:27:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:27:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:27:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:27:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:27:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:27:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:27:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:28:49] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:28:49] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:28:49] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:28:49] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:28:49] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:28:49] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:28:49] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:28:49] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:29:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:29:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:29:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:29:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:29:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:29:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:29:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:29:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:30:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:30:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:30:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:30:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:30:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:30:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:30:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:30:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:31:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:31:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:31:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:31:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:31:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:31:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:31:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:31:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:32:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:32:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:32:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:32:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:32:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:32:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:32:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:32:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:33:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:33:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:33:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:33:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:33:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:33:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:33:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:33:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:34:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:34:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:34:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:34:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:34:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:34:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:34:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:34:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:35:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:35:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:35:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:35:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:35:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:35:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:35:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:35:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:36:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:36:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:36:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:36:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:36:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:36:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:36:50] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:36:50] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:37:50] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:37:50] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:37:50] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:37:50] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:37:50] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:37:50] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:37:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:37:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:38:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:38:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:38:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:38:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:38:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:38:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:38:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:38:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:39:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:39:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:39:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:39:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:39:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:39:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:39:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:39:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:40:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:40:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:40:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:40:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:40:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:40:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:40:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:40:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:41:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:41:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:41:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:41:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:41:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:41:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:41:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:41:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:42:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:42:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:42:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:42:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:42:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:42:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:42:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:42:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:43:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:43:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:43:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:43:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:43:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:43:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:43:51] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:43:51] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:44:51] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:44:51] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:44:51] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:44:51] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:44:51] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:44:51] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:44:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:44:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:45:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:45:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:45:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:45:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:45:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:45:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:45:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:45:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:46:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:46:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:46:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:46:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:46:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:46:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:46:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:46:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:47:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:47:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:47:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:47:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:47:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:47:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:47:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:47:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:48:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:48:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:48:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:48:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:48:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:48:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:48:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:48:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:49:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:49:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:49:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:49:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:49:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:49:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:49:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:49:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:50:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:50:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:50:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:50:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:50:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:50:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:50:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:50:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:51:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:51:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:51:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:51:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:51:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:51:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:51:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:51:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:52:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:52:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:52:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:52:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:52:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:52:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:52:52] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:52:52] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:53:52] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:53:52] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:53:52] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:53:52] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:53:52] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:53:52] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:53:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:53:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:54:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:54:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:54:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:54:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:54:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:54:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:54:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:54:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:55:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:55:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:55:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:55:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:55:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:55:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:55:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:55:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:56:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:56:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:56:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:56:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:56:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:56:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:56:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:56:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:57:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:57:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:57:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:57:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:57:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:57:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:57:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:57:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:58:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:58:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:58:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:58:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:58:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:58:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:58:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:58:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:59:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:59:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[20:59:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:59:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[20:59:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:59:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[20:59:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[20:59:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:00:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:00:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:00:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:00:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:00:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:00:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:00:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:00:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:01:53] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:01:53] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:01:53] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:01:53] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:01:53] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:01:53] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:01:53] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:01:53] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:02:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:02:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:02:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:02:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:02:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:02:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:02:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:02:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:03:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:03:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:03:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:03:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:03:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:03:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:03:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:03:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:04:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:04:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:04:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:04:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:04:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:04:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:04:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:04:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:05:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:05:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:05:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:05:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:05:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:05:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:05:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:05:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:06:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:06:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:06:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:06:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:06:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:06:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:06:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:06:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:07:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:07:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:07:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:07:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:07:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:07:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:07:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:07:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:08:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:08:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:08:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:08:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:08:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:08:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:08:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:08:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:09:54] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:09:54] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:09:54] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:09:54] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:09:54] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:09:54] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:09:54] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:09:54] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:10:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:10:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:10:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:10:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:10:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:10:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:10:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:10:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:11:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:11:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:11:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:11:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:11:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:11:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:11:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:11:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:12:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:12:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:12:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:12:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:12:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:12:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:12:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:12:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:13:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:13:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:13:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:13:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:13:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:13:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:13:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:13:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:14:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:14:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:14:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:14:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:14:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:14:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:14:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:14:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:15:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:15:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:15:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:15:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:15:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:15:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:15:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:15:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:16:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:16:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:16:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:16:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:16:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:16:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:16:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:16:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:17:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:17:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:17:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:17:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:17:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:17:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:17:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:17:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:18:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:18:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:18:55] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:18:55] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:18:55] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:18:55] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:18:55] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:18:55] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:19:55] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:19:55] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:19:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:19:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:19:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:19:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:19:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:19:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:20:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:20:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:20:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:20:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:20:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:20:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:20:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:20:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:21:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:21:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:21:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:21:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:21:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:21:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:21:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:21:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:22:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:22:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:22:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:22:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:22:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:22:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:22:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:22:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:23:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:23:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:23:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:23:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:23:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:23:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:23:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:23:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:24:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:24:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:24:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:24:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:24:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:24:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:24:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:24:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:25:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:25:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:25:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:25:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:25:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:25:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:25:56] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:25:56] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:26:56] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:26:56] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:26:56] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:26:56] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:26:56] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:26:56] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:26:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:26:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:27:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:27:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:27:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:27:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:27:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:27:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:27:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:27:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:28:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:28:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:28:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:28:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:28:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:28:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:28:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:28:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:29:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:29:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:29:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:29:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:29:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:29:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:29:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:29:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:30:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:30:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:30:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:30:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:30:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:30:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:30:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:30:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:31:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:31:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:31:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:31:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:31:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:31:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:31:57] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:31:57] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:32:57] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:32:57] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:32:57] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:32:57] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:32:57] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:32:57] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:32:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:32:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:33:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:33:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:33:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:33:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:33:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:33:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:33:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:33:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:34:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:34:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:34:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:34:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:34:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:34:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:34:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:34:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:35:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:35:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:35:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:35:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:35:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:35:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:35:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:35:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:36:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:36:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:36:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:36:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:36:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:36:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:36:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:36:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:37:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:37:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:37:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:37:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:37:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:37:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:37:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:37:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:38:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:38:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:38:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:38:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:38:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:38:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:38:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:38:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:39:58] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:39:58] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:39:58] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:39:58] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:39:58] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:39:58] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:39:58] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:39:58] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:40:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:40:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:40:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:40:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:40:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:40:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:40:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:40:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:41:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:41:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:41:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:41:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:41:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:41:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:41:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:41:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:42:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:42:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:42:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:42:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:42:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:42:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:42:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:42:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:43:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:43:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:43:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:43:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:43:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:43:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:43:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:43:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:44:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:44:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:44:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:44:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:44:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:44:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:44:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:44:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:45:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:45:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:45:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:45:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:45:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:45:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:45:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:45:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:46:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:46:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:46:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:46:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:46:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:46:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:46:59] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:46:59] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:47:59] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:47:59] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:47:59] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:47:59] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:47:59] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:47:59] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:48:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:48:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:49:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:49:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:49:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:49:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:49:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:49:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:49:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:49:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:50:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:50:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:50:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:50:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:50:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:50:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:50:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:50:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:51:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:51:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:51:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:51:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:51:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:51:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:51:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:51:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:52:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:52:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:52:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:52:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:52:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:52:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:52:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:52:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:53:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:53:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:53:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:53:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:53:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:53:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:53:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:53:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:54:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:54:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:54:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:54:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:54:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:54:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:54:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:54:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:55:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:55:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:55:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:55:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:55:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:55:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:55:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:55:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:56:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:56:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:56:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:56:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:56:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:56:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:56:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:56:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:57:00] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:57:00] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:57:00] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:57:00] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:57:00] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:57:00] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:57:00] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:57:00] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:58:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:58:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:58:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:58:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:58:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:58:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:58:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:58:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:59:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:59:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[21:59:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:59:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[21:59:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:59:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[21:59:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[21:59:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:00:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:00:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:00:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:00:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:00:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:00:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:00:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:00:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:01:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:01:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:01:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:01:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:01:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:01:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:01:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:01:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:02:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:02:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:02:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:02:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:02:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:02:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:02:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:02:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:03:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:03:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:03:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:03:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:03:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:03:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:03:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:03:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:04:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:04:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:04:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:04:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:04:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:04:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:04:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:04:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:05:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:05:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:05:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:05:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:05:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:05:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:05:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:05:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:06:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:06:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:06:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:06:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:06:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:06:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:06:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:06:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:07:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:07:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:07:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:07:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:07:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:07:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:07:01] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:07:01] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:08:01] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:08:01] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:08:01] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:08:01] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:08:01] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:08:01] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:08:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:08:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:09:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:09:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:09:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:09:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:09:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:09:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:09:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:09:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:10:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:10:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:10:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:10:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:10:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:10:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:10:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:10:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:11:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:11:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:11:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:11:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:11:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:11:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:11:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:11:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:12:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:12:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:12:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:12:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:12:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:12:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:12:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:12:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:13:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:13:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:13:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:13:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:13:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:13:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:13:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:13:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:14:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:14:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:14:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:14:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:14:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:14:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:14:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:14:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:15:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:15:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:15:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:15:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:15:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:15:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:15:02] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:15:02] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:16:02] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:16:02] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:16:02] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:16:02] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:16:02] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:16:02] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:16:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:16:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:17:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:17:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:17:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:17:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:17:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:17:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:17:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:17:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:18:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:18:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:18:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:18:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:18:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:18:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:18:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:18:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:19:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:19:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:19:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:19:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:19:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:19:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:19:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:19:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:20:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:20:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:20:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:20:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:20:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:20:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:20:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:20:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:21:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:21:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:21:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:21:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:21:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:21:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:21:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:21:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:22:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:22:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:22:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:22:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:22:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:22:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:22:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:22:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:23:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:23:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:23:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:23:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:23:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:23:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:23:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:23:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:24:03] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:24:03] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:24:03] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:24:03] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:24:03] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:24:03] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:24:03] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:24:03] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:25:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:25:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:25:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:25:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:25:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:25:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:25:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:25:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:26:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:26:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:26:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:26:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:26:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:26:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:26:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:26:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:27:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:27:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:27:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:27:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:27:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:27:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:27:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:27:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:28:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:28:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:28:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:28:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:28:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:28:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:28:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:28:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:29:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:29:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:29:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:29:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:29:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:29:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:29:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:29:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:30:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:30:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:30:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:30:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:30:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:30:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:30:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:30:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:31:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:31:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:31:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:31:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:31:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:31:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:31:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:31:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:32:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:32:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:32:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:32:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:32:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:32:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:32:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:32:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:33:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:33:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:33:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:33:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:33:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:33:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:33:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:33:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:34:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:34:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:34:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:34:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:34:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:34:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:34:04] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:34:04] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:35:04] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:35:04] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:35:04] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:35:04] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:35:04] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:35:04] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:35:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:35:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:36:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:36:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:36:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:36:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:36:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:36:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:36:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:36:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:37:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:37:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:37:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:37:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:37:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:37:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:37:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:37:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:38:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:38:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:38:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:38:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:38:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:38:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:38:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:38:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:39:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:39:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:39:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:39:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:39:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:39:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:39:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:39:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:40:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:40:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:40:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:40:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:40:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:40:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:40:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:40:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:41:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:41:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:41:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:41:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:41:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:41:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:41:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:41:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:42:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:42:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:42:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:42:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:42:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:42:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:42:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:42:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:43:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:43:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:43:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:43:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:43:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:43:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:43:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:43:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:44:05] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:44:05] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:44:05] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:44:05] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:44:05] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:44:05] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:44:05] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:44:05] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:45:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:45:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:45:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:45:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:45:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:45:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:45:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:45:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:46:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:46:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:46:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:46:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:46:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:46:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:46:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:46:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:47:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:47:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:47:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:47:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:47:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:47:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:47:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:47:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:48:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:48:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:48:06] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:48:06] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:48:06] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:48:06] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:48:06] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:48:06] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:49:06] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:49:06] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:49:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:49:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:49:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:49:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:49:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:49:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:50:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:50:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:50:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:50:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:50:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:50:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:50:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:50:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:51:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:51:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:51:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:51:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:51:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:51:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:51:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:51:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:52:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:52:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:52:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:52:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:52:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:52:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:52:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:52:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:53:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:53:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:53:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:53:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:53:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:53:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:53:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:53:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:54:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:54:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:54:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:54:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:54:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:54:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:54:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:54:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:55:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:55:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:55:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:55:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:55:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:55:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:55:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:55:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:56:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:56:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:56:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:56:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:56:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:56:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:56:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:56:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:57:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:57:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:57:07] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:57:07] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:57:07] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:57:07] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:57:07] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:57:07] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:58:07] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:58:07] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:58:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:58:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:58:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:58:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:58:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:58:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:59:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:59:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[22:59:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:59:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[22:59:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:59:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[22:59:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[22:59:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:00:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:00:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:00:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:00:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:00:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:00:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:00:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:00:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:01:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:01:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:01:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:01:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:01:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:01:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:01:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:01:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:02:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:02:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:02:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:02:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:02:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:02:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:02:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:02:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:03:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:03:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:03:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:03:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:03:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:03:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:03:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:03:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:04:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:04:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:04:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:04:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:04:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:04:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:04:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:04:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:05:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:05:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:05:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:05:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:05:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:05:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:05:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:05:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:06:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:06:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:06:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:06:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:06:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:06:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:06:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:06:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:07:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:07:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:07:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:07:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:07:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:07:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:07:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:07:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:08:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:08:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:08:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:08:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:08:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:08:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:08:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:08:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:09:08] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:09:08] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:09:08] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:09:08] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:09:08] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:09:08] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:09:08] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:09:08] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:10:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:10:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:10:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:10:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:10:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:10:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:10:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:10:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:11:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:11:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:11:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:11:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:11:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:11:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:11:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:11:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:12:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:12:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:12:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:12:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:12:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:12:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:12:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:12:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:13:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:13:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:13:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:13:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:13:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:13:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:13:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:13:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:14:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:14:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:14:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:14:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:14:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:14:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:14:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:14:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:15:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:15:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:15:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:15:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:15:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:15:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:15:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:15:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:16:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:16:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:16:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:16:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:16:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:16:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:16:09] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:16:09] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:17:09] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:17:09] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:17:09] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:17:09] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:17:09] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:17:09] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:17:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:17:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:18:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:18:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:18:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:18:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:18:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:18:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:18:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:18:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:19:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:19:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:19:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:19:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:19:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:19:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:19:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:19:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:20:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:20:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:20:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:20:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:20:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:20:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:20:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:20:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:21:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:21:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:21:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:21:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:21:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:21:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:21:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:21:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:22:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:22:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:22:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:22:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:22:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:22:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:22:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:22:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:23:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:23:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:23:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:23:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:23:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:23:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:23:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:23:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:24:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:24:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:24:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:24:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:24:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:24:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:24:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:24:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:25:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:25:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:25:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:25:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:25:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:25:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:25:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:25:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:26:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:26:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:26:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:26:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:26:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:26:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:26:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:26:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:27:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:27:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:27:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:27:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:27:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:27:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:27:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:27:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:28:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:28:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:28:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:28:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:28:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:28:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:28:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:28:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:29:10] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:29:10] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:29:10] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:29:10] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:29:10] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:29:10] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:29:10] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:29:10] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:30:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:30:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:30:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:30:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:30:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:30:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:30:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:30:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:31:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:31:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:31:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:31:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:31:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:31:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:31:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:31:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:32:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:32:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:32:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:32:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:32:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:32:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:32:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:32:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:33:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:33:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:33:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:33:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:33:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:33:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:33:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:33:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:34:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:34:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:34:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:34:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:34:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:34:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:34:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:34:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:35:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:35:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:35:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:35:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:35:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:35:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:35:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:35:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:36:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:36:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:36:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:36:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:36:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:36:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:36:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:36:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:37:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:37:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:37:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:37:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:37:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:37:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:37:11] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:37:11] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:38:11] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:38:11] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:38:11] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:38:11] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:38:11] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:38:11] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:38:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:38:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:39:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:39:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:39:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:39:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:39:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:39:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:39:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:39:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:40:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:40:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:40:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:40:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:40:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:40:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:40:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:40:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:41:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:41:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:41:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:41:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:41:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:41:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:41:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:41:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:42:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:42:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:42:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:42:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:42:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:42:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:42:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:42:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:43:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:43:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:43:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:43:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:43:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:43:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:43:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:43:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:44:12] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:44:12] [ls_cond_hist] ⏱️ flush [BREAKOUT/breakout] n=40 univ=40 +[23:44:12] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:44:12] [ls_cond_hist] ⏱️ flush [SHORT/tail] n=21 univ=21 +[23:44:12] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:44:12] [ls_cond_hist] ⏱️ flush [MOMENTUM/momentum] n=4 univ=4 +[23:44:12] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 +[23:44:12] [ls_cond_hist] ⏱️ flush [SCALP/scalp_re] n=96 univ=96 diff --git a/logs/ls_docs_fetch_latest.logpath b/logs/ls_docs_fetch_latest.logpath new file mode 100644 index 0000000..fc65fee --- /dev/null +++ b/logs/ls_docs_fetch_latest.logpath @@ -0,0 +1 @@ +/home/hoon/kis_bot/logs/ls_docs_fetch_20260724_003214.log diff --git a/logs/ls_docs_fetch_latest.pid b/logs/ls_docs_fetch_latest.pid new file mode 100644 index 0000000..2b6f73b --- /dev/null +++ b/logs/ls_docs_fetch_latest.pid @@ -0,0 +1 @@ +1195731 diff --git a/logs/optuna_4strat_5d_apply_latest_master.logpath b/logs/optuna_4strat_5d_apply_latest_master.logpath new file mode 100644 index 0000000..1d2cbec --- /dev/null +++ b/logs/optuna_4strat_5d_apply_latest_master.logpath @@ -0,0 +1 @@ +logs/optuna_4strat_5d_apply_20260721_20260727_20260727_231221_master.log diff --git a/logs/optuna_4strat_5d_apply_nohup.out b/logs/optuna_4strat_5d_apply_nohup.out new file mode 100644 index 0000000..4942582 --- /dev/null +++ b/logs/optuna_4strat_5d_apply_nohup.out @@ -0,0 +1,76 @@ +======== Optuna 4전략 5일+apply-best 시작 2026-07-27T23:12:21+09:00 ======== +START=2026-07-21 END=2026-07-27 (거래일 5: 21~24,27) +MODE=tpe TRIALS=200 STRATEGIES=scalp momentum breakout tail +apply-best=ON orderbook=off n_jobs=1 RESTART_BOT=1 +PY=.venv/bin/python +master_log=logs/optuna_4strat_5d_apply_20260721_20260727_20260727_231221_master.log + total used free shared buff/cache available +Mem: 13Gi 4.9Gi 4.1Gi 73Mi 5.0Gi 8.8Gi +/dev/mapper/ubuntu--vg-ubuntu--lv 47G 35G 9.2G 80% / + +-------- [scalp] START 2026-07-27T23:12:21+09:00 study=scalp_tpe_5d_apply_20260721_20260727_20260727_231221 -------- +LOG=logs/optuna_scalp_tpe_5d_apply_20260727_231221.log +-------- [scalp] END rc=0 2026-07-27T23:50:32+09:00 -------- +✅ [scalp] 완료(+apply-best 시도). log=logs/optuna_scalp_tpe_5d_apply_20260727_231221.log +[23:12:22] [param_search_optuna] 📌 호가필터: OFF (스킵 — 코어 파라미터 순수 탐색 (실매 ORDERBOOK도 OFF 권장 정합)) +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_scalp_tpe_20260727_235004.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_scalp_tpe_20260727_235004.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_scalp_tpe_20260727_235004.json +OPTUNA_BRIEFING_MD=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_scalp_tpe_20260727_235004.briefing.md +백테스트에서 아무리 좋은 성과를 보였더라도, 이는 미래의 확정 수익을 약속하거나 특정 종목의 매수를 추천하는 것이 절대 아닙니다. #122 전략을 포함한 `results_gated` 내의 모든 후보는 즉시 실매에 적용하지 말고, 최소 5거래일 이상 재검증 후 페이퍼 또는 소액으로 충분히 관찰해야 합니다. 시장 상황 변화 시 손절 기능 작동 여부가 가장 중요하며, 백테스트 결과가 실매와 괴리될 수 있음을 항상 경고하며 철저한 리스크 관리에 집중해야 합니다. +✅ config_scalp + env_config INSERT id=1040: +[23:50:31] [param_search_optuna] 🚀 [Optuna apply-best] scalp gated trial #122 → env_config +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_scalp_tpe_20260727_235004.json +Mem: 13Gi 4.0Gi 5.0Gi 73Mi 5.1Gi 9.7Gi + +-------- [momentum] START 2026-07-27T23:50:32+09:00 study=momentum_tpe_5d_apply_20260721_20260727_20260727_235032 -------- +LOG=logs/optuna_momentum_tpe_5d_apply_20260727_235032.log +-------- [momentum] END rc=0 2026-07-28T00:36:56+09:00 -------- +✅ [momentum] 완료(+apply-best 시도). log=logs/optuna_momentum_tpe_5d_apply_20260727_235032.log +[23:50:33] [param_search_optuna] 📌 호가필터: OFF (스킵 — 코어 파라미터 순수 탐색) market=KR +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_tpe_20260728_003629.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_tpe_20260728_003629.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_tpe_20260728_003629.json +OPTUNA_BRIEFING_MD=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_tpe_20260728_003629.briefing.md +단기간의 Optuna 최적값을 실매에 바로 적용하지 마세요. 최소 5일 이상의 재검증과 웹백테스트를 거쳐 `results_gated` 후보만 신중히 검토해야 합니다. **과적합된 전략은 시장 변화에 취약**하며, 승률 자랑보다 손절 기능이 제대로 작동하는지 확인이 필수입니다. 과거 수익은 미래를 보장하지 않으므로, 소액 모의투자로 1~2일 관찰 후 점진적 확대가 중요합니다. **절대 확정 수익을 약속하지 않습니다.** +✅ config_momentum + env_config INSERT id=1042 (MOMENTUM_* 키): +[00:36:56] [param_search_optuna] 🚀 [Optuna apply-best] momentum gated trial #170 → env_config +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_tpe_20260728_003629.json +Mem: 13Gi 4.0Gi 4.9Gi 73Mi 5.1Gi 9.6Gi + +-------- [breakout] START 2026-07-28T00:36:56+09:00 study=breakout_tpe_5d_apply_20260721_20260727_20260728_003656 -------- +LOG=logs/optuna_breakout_tpe_5d_apply_20260728_003656.log +-------- [breakout] END rc=0 2026-07-28T00:53:30+09:00 -------- +✅ [breakout] 완료(+apply-best 시도). log=logs/optuna_breakout_tpe_5d_apply_20260728_003656.log +[00:36:57] [param_search_optuna] 📌 호가필터: OFF (스킵 — 코어 파라미터 순수 탐색) +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260728_005315.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260728_005315.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260728_005315.json +OPTUNA_BRIEFING_MD=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260728_005315.briefing.md +단 7일간의 백테스트는 시장 변화에 취약하며 과적합이나 표본 부족 위험이 매우 높습니다. 따라서 Optuna 최적 조합을 바로 실매에 적용하지 말고, 반드시 `results_gated` 내에서 다일 재검증과 웹 백테스트를 거쳐야 합니다. 시장이 변할 때는 승률 자랑보다 손절 기능이 살아있는지를 확인하고, 소액/모의 투자로 관찰 후 점진적으로 확대하시기 바랍니다. 확정 수익은 그 누구도 보장할 수 없습니다. +✅ DB env_config INSERT 완료 (BREAKOUT_* 키, id=1044): +[00:53:29] [param_search_optuna] 🚀 [Optuna apply-best] breakout gated trial #97 → env_config +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260728_005315.json +Mem: 13Gi 3.9Gi 5.0Gi 73Mi 5.1Gi 9.7Gi + +-------- [tail] START 2026-07-28T00:53:30+09:00 study=tail_tpe_5d_apply_20260721_20260727_20260728_005330 -------- +LOG=logs/optuna_tail_tpe_5d_apply_20260728_005330.log +-------- [tail] END rc=0 2026-07-28T02:30:11+09:00 -------- +✅ [tail] 완료(+apply-best 시도). log=logs/optuna_tail_tpe_5d_apply_20260728_005330.log +[00:53:31] [param_search_optuna] 📌 호가필터: OFF (스킵 — 코어 파라미터 순수 탐색) +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_tail_tpe_20260728_022918.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_tail_tpe_20260728_022918.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_tail_tpe_20260728_022918.json +OPTUNA_BRIEFING_MD=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_tail_tpe_20260728_022918.briefing.md +Optuna best를 즉시 실매 적용은 금물입니다. 7일의 짧은 기간, 적은 거래 수는 과적합 우려가 큽니다. 최소 5일 이상 재검증 후 페이퍼/소액 모의 관찰이 필수입니다. 시장은 항상 변하므로, 승률보다 손절 작동에 집중해 리스크를 관리하세요. `results_gated` 후보만 신중히 적용하십시오. +[02:30:10] [param_search_optuna] 🏆 Best trial #59 | objective=2.679e+04 | pnl=26794.0 | wr=76.9% | trades=13 +[02:30:11] [param_search_optuna] 🚀 [Optuna apply-best] gated trial #59 → env_config +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_tail_tpe_20260728_022918.json +Mem: 13Gi 4.0Gi 4.7Gi 73Mi 5.3Gi 9.6Gi + +======== ALL DONE 2026-07-28T02:30:11+09:00 ======== +JSON/briefing: kis_trader/backtest/results/optuna_*_tpe_*5d* 또는 로그의 OPTUNA_RESULT_JSON= +개별 로그: logs/optuna_*_5d_apply_*.log +2026-07-28T02:30:11+09:00 실매 봇 재시작 (적용 파람 로드)... +active +2026-07-28T02:30:39+09:00 script exit 0 diff --git a/logs/optuna_4strat_seq_latest_master.logpath b/logs/optuna_4strat_seq_latest_master.logpath index 9d17d6c..5fe2d4d 100644 --- a/logs/optuna_4strat_seq_latest_master.logpath +++ b/logs/optuna_4strat_seq_latest_master.logpath @@ -1 +1 @@ -logs/optuna_4strat_seq_2026-07-15_2026-07-16_20260717_031853_master.log +logs/optuna_4strat_seq_2026-07-21_2026-07-24_20260725_083647_master.log diff --git a/logs/optuna_4strat_tpe_latest_master.logpath b/logs/optuna_4strat_tpe_latest_master.logpath new file mode 100644 index 0000000..9c9792e --- /dev/null +++ b/logs/optuna_4strat_tpe_latest_master.logpath @@ -0,0 +1 @@ +logs/optuna_4strat_tpe_2026-07-20_2026-07-21_20260721_192215_master.log diff --git a/logs/optuna_4strat_tpe_nohup.out b/logs/optuna_4strat_tpe_nohup.out new file mode 100644 index 0000000..e2093d7 --- /dev/null +++ b/logs/optuna_4strat_tpe_nohup.out @@ -0,0 +1,45 @@ +======== Optuna 4전략 TPE 순차 시작 2026-07-21T11:33:07+09:00 ======== +START=2026-07-20 END=2026-07-21 MODE=tpe TRIALS=200 +STRATEGIES=momentum tail breakout scalp +apply-best=OFF orderbook=off n_jobs=1 +master_log=logs/optuna_4strat_tpe_2026-07-20_2026-07-21_20260721_113307_master.log + total used free shared buff/cache available +Mem: 13Gi 4.5Gi 1.8Gi 64Mi 7.7Gi 9.1Gi +/dev/mapper/ubuntu--vg-ubuntu--lv 47G 38G 6.4G 86% / + +-------- [momentum] START 2026-07-21T11:33:07+09:00 study=momentum_tpe_20260720_20260721_20260721_113307 -------- +-------- [momentum] END rc=0 2026-07-21T11:39:38+09:00 -------- +LOG=logs/optuna_momentum_tpe_20260721_113307.log +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_tpe_20260721_113936.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_tpe_20260721_113936.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_tpe_20260721_113936.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_tpe_20260721_113936.json + +-------- [tail] START 2026-07-21T11:39:38+09:00 study=tail_tpe_20260720_20260721_20260721_113938 -------- +-------- [tail] END rc=0 2026-07-21T11:50:44+09:00 -------- +LOG=logs/optuna_tail_tpe_20260721_113938.log +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_tail_tpe_20260721_115041.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_tail_tpe_20260721_115041.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_tail_tpe_20260721_115041.json +[11:50:44] [param_search_optuna] 🏆 Best trial #136 | objective=1.124e+04 | pnl=11241.0 | wr=54.5% | trades=11 +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_tail_tpe_20260721_115041.json + +-------- [breakout] START 2026-07-21T11:50:44+09:00 study=breakout_tpe_20260720_20260721_20260721_115044 -------- +-------- [breakout] END rc=0 2026-07-21T11:53:22+09:00 -------- +LOG=logs/optuna_breakout_tpe_20260721_115044.log +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260721_115322.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260721_115322.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260721_115322.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260721_115322.json + +-------- [scalp] START 2026-07-21T11:53:22+09:00 study=scalp_tpe_20260720_20260721_20260721_115322 -------- +-------- [scalp] END rc=0 2026-07-21T11:56:08+09:00 -------- +LOG=logs/optuna_scalp_tpe_20260721_115322.log +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_scalp_tpe_20260721_115607.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_scalp_tpe_20260721_115607.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_scalp_tpe_20260721_115607.json +OPTUNA_RESULT_JSON=/home/hoon/kis_bot/kis_trader/backtest/results/optuna_scalp_tpe_20260721_115607.json + +======== ALL DONE 2026-07-21T11:56:08+09:00 ======== +apply 하지 않음. JSON은 kis_trader/backtest/results/optuna_*_tpe_*.json +검증: .venv/bin/python scripts/verify_optuna_tpe_apply_dryrun.py diff --git a/logs/optuna_after_scalp_waiter_latest.logpath b/logs/optuna_after_scalp_waiter_latest.logpath new file mode 100644 index 0000000..ba9bbc7 --- /dev/null +++ b/logs/optuna_after_scalp_waiter_latest.logpath @@ -0,0 +1 @@ +logs/optuna_after_scalp_waiter_20260725_002255.log diff --git a/logs/optuna_after_scalp_waiter_nohup.out b/logs/optuna_after_scalp_waiter_nohup.out new file mode 100644 index 0000000..c8e3ccc --- /dev/null +++ b/logs/optuna_after_scalp_waiter_nohup.out @@ -0,0 +1,8 @@ +======== waiter start 2026-07-25T00:22:55+09:00 ======== +WAIT_PID=2656890 (scalp 종료 대기) +THEN: STRATEGIES=tail momentum breakout START=2026-07-21 END=2026-07-24 MODE=tpe TRIALS=200 +apply-best=OFF +2026-07-25T00:22:55+09:00 waiting for PID 2656890 ... +2026-07-25T00:30:55+09:00 PID 2656890 exited +2026-07-25T00:30:55+09:00 launching 4strat seq (remaining) ... +2026-07-25T02:59:52+09:00 chain finished rc=0 diff --git a/logs/optuna_breakout_5d_apply_latest.logpath b/logs/optuna_breakout_5d_apply_latest.logpath new file mode 100644 index 0000000..68ce766 --- /dev/null +++ b/logs/optuna_breakout_5d_apply_latest.logpath @@ -0,0 +1 @@ +logs/optuna_breakout_tpe_5d_apply_20260728_003656.log diff --git a/logs/optuna_breakout_5d_apply_latest.study b/logs/optuna_breakout_5d_apply_latest.study new file mode 100644 index 0000000..9d56759 --- /dev/null +++ b/logs/optuna_breakout_5d_apply_latest.study @@ -0,0 +1 @@ +breakout_tpe_5d_apply_20260721_20260727_20260728_003656 diff --git a/logs/optuna_breakout_latest.jsonpath b/logs/optuna_breakout_latest.jsonpath index 138fa38..4fe9ed1 100644 --- a/logs/optuna_breakout_latest.jsonpath +++ b/logs/optuna_breakout_latest.jsonpath @@ -1 +1 @@ -/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_fine_20260721_023742.json +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260728_225245.json diff --git a/logs/optuna_breakout_ls_latest.logpath b/logs/optuna_breakout_ls_latest.logpath new file mode 100644 index 0000000..eebeaa6 --- /dev/null +++ b/logs/optuna_breakout_ls_latest.logpath @@ -0,0 +1 @@ +logs/optuna_breakout_tpe_ls_20260728_224747.log diff --git a/logs/optuna_breakout_ls_latest.study b/logs/optuna_breakout_ls_latest.study new file mode 100644 index 0000000..9e318fd --- /dev/null +++ b/logs/optuna_breakout_ls_latest.study @@ -0,0 +1 @@ +breakout_tpe_ls_20260727_20260728_20260728_224747 diff --git a/logs/optuna_breakout_ls_latest_master.logpath b/logs/optuna_breakout_ls_latest_master.logpath new file mode 100644 index 0000000..2cb1123 --- /dev/null +++ b/logs/optuna_breakout_ls_latest_master.logpath @@ -0,0 +1 @@ +logs/optuna_breakout_ls_rerun_20260728_224747_master.log diff --git a/logs/optuna_breakout_tpe_latest.jsonpath b/logs/optuna_breakout_tpe_latest.jsonpath new file mode 100644 index 0000000..4fe9ed1 --- /dev/null +++ b/logs/optuna_breakout_tpe_latest.jsonpath @@ -0,0 +1 @@ +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260728_225245.json diff --git a/logs/optuna_breakout_tpe_latest.logpath b/logs/optuna_breakout_tpe_latest.logpath new file mode 100644 index 0000000..0167453 --- /dev/null +++ b/logs/optuna_breakout_tpe_latest.logpath @@ -0,0 +1 @@ +logs/optuna_breakout_tpe_20260723_213354.log diff --git a/logs/optuna_breakout_tpe_latest.study b/logs/optuna_breakout_tpe_latest.study new file mode 100644 index 0000000..750b9ac --- /dev/null +++ b/logs/optuna_breakout_tpe_latest.study @@ -0,0 +1 @@ +breakout_tpe_20260721_20260723_20260723_213354 diff --git a/logs/optuna_latest.jsonpath b/logs/optuna_latest.jsonpath index 50fb653..4fe9ed1 100644 --- a/logs/optuna_latest.jsonpath +++ b/logs/optuna_latest.jsonpath @@ -1 +1 @@ -/home/hoon/kis_bot/kis_trader/backtest/results/optuna_scalp_fine_20260721_024021.json +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260728_225245.json diff --git a/logs/optuna_mid_enroll_2026-07-21_2026-07-23_20260723_200350_report.txt b/logs/optuna_mid_enroll_2026-07-21_2026-07-23_20260723_200350_report.txt new file mode 100644 index 0000000..40b148a --- /dev/null +++ b/logs/optuna_mid_enroll_2026-07-21_2026-07-23_20260723_200350_report.txt @@ -0,0 +1,45 @@ +# mid-enroll verify 2026-07-21..2026-07-23 +ts=2026-07-23 22:07:18 + +json:us_momentum_tpe_ -> /home/hoon/kis_bot/kis_trader/backtest/results/optuna_us_momentum_tpe_20260723_200907.json +json:us_momentum_QQQM_ -> /home/hoon/kis_bot/kis_trader/backtest/results/optuna_us_momentum_QQQM_tpe_20260723_201132.json +json:us_momentum_SPCX_ -> /home/hoon/kis_bot/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_201245.json +json:us_momentum_SPYM_ -> /home/hoon/kis_bot/kis_trader/backtest/results/optuna_us_momentum_SPYM_tpe_20260723_201422.json +json:us_momentum_TSLA_ -> /home/hoon/kis_bot/kis_trader/backtest/results/optuna_us_momentum_TSLA_tpe_20260723_201527.json +json:momentum_tpe_ -> /home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_tpe_20260723_204339.json +json:tail_tpe_ -> /home/hoon/kis_bot/kis_trader/backtest/results/optuna_tail_tpe_20260723_213324.json +json:breakout_tpe_ -> /home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260723_214201.json +json:scalp_tpe_ -> /home/hoon/kis_bot/kis_trader/backtest/results/optuna_scalp_tpe_20260723_220659.json + +## KR web-aligned BT (current DB after apply) +### momentum rc=0 + {"ok": true, "job_id": "momentum_bt_cli_20260721_20260723_20260723_220718", "strategy": "momentum", "result_json": "/home/hoon/kis_bot/kis_trader/backtest/results/momentum_bt_cli_20260721_20260723_20260723_220718.json", "summary": {"avg_hold_min": 644.8, "backtest_buy_source": null, "backtest_days": 3, "bot_pct": 14.44, "budget_warning": "총한도 1,200,000원 < 동시8×1회투자 2,400,000원 — 잔여금 소액매수·과다 회전 위험. 실매 정렬: 총한도↑ 또는 동시보유↓", "daily_avg_pct": 4.813, "loss_trades": 3, "max_drawdown": 14100, "peak_cum_at": "202607231554", "peak_cum_pnl": 173290, "profit_factor": 8.52, "skip_stats": {"bt_flatten_count": 4, "buy_queue_mode": "live_scan", "candle_warmup_bars": 400, "candle_warmup_prepended": 152304, "ohlc_entry_count": 7, "ohlc_exit_count": 0, "rest_warmup": {"bars": 4412, "cache_hit": 0, "fail": 4, "need": 14, "ok": 10, "retry": 14, "skipped": 0}, "scan_buys": 19, "scan_events": 6840, "scan_sec": 10, "skipped_micro_buys": 1179, "tick_entry_count": 12, "tick_exit_count": 10, "universe_debounce_sec": 60, "universe_mode": "scan_at", "wallclock_exit_count": 5}, "tick_backtest": {"tick_bar_coverage_pct": 43.05, "tick_bar_coverage_pct_all": 8.34, "tick_bar_coverage_pct_friend": 9.53, "tick_bar_coverage_pct_legacy_exact": 8.28, "tick_bar_coverage_pct_subscribed": 43.05, "tick_bar_coverage_pct_traded": 61.84, "tick_bars_covered": 36400, "tick_bars_friend_covered": 36400, "tick_bars_friend_total": 381979, "tick_bars_subscribed_covered": 36335, "tick_bars_subscribed_total": 84401, "tick_bars_total": 436364, "tick_bars_traded_subscribed_covered": 3722, "tick_bars_traded_subscribed_total": 6019, "tick_codes_total": 595, "tick_codes_traded": 17, "tick_codes_with_data": 511, "tick_only_codes_dropped": 84, "tick_only_codes_kept": 511, "ws_tick_rows_loaded": 2072832, "ws_ticks_table": "ws_ticks"}, "total_pnl": 173290, "total_trades": 19, "win_rate": 84.21, "win_trades": 16}, "elapsed_sec": 47.0} + 22:08:05 [INFO] ✅ 완료 47.0s | trades=19 WR=84.21 PnL=173290 | /home/hoon/kis_bot/kis_trader/backtest/results/momentum_bt_cli_20260721_20260723_20260723_220718.json + log=/home/hoon/kis_bot/logs/verify_bt_momentum_1784812038.json +### tail rc=0 + {"ok": true, "job_id": "tail_bt_cli_20260721_20260723_20260723_220806", "strategy": "tail", "result_json": "/home/hoon/kis_bot/kis_trader/backtest/results/tail_bt_cli_20260721_20260723_20260723_220806.json", "summary": {"avg_hold_min": 92.2, "backtest_buy_source": "ws_ticks", "backtest_days": 3, "bot_pct": 2.89, "budget_warning": "총한도 1,200,000원 < 동시8×1회투자 2,400,000원 — 잔여금 소액매수·과다 회전 위험. 실매 정렬: 총한도↑ 또는 동시보유↓", "daily_avg_pct": 0.963, "loss_trades": 0, "max_drawdown": 0, "peak_cum_at": "202607231520", "peak_cum_pnl": 34722, "profit_factor": 9999.0, "skip_stats": {"candle_warmup_bars": 50, "inclusion_lookback_entries": 5, "ohlc_exit_count": 0, "rest_warmup": {"bars": 30, "cache_hit": 0, "fail": 57, "need": 60, "ok": 3, "skipped": 0}, "tick_entry_sources": {"ohlc_low": 0, "ohlc_open": 2, "ws_ticks": 8}, "tick_exit_count": 8}, "tick_backtest": {"tick_bar_coverage_pct": 57.75, "tick_bar_coverage_pct_all": 16.81, "tick_bar_coverage_pct_friend": 19.16, "tick_bar_coverage_pct_legacy_exact": 12.92, "tick_bar_coverage_pct_subscribed": 57.75, "tick_bar_coverage_pct_traded": 53.2, "tick_bars_covered": 15397, "tick_bars_friend_covered": 15397, "tick_bars_friend_total": 80349, "tick_bars_subscribed_covered": 15036, "tick_bars_subscribed_total": 26038, "tick_bars_total": 91609, "tick_bars_traded_subscribed_covered": 623, "tick_bars_traded_subscribed_total": 1171, "tick_codes_total": 576, "tick_codes_traded": 10, "tick_codes_with_data": 497, "ws_tick_rows_loaded": 2072730}, "tick_entry_sources": {"ohlc_low": 0, "ohlc_open": 2, "ws_ticks": 8}, "total_pnl": 34722, "total_trades": 10, "universe_warning": null, "win_rate": 100.0, "win_trades": 10}, "elapsed_sec": 61.2} + 22:09:07 [INFO] ✅ 완료 61.2s | trades=10 WR=100.0 PnL=34722 | /home/hoon/kis_bot/kis_trader/backtest/results/tail_bt_cli_20260721_20260723_20260723_220806.json + log=/home/hoon/kis_bot/logs/verify_bt_tail_1784812085.json +### breakout rc=0 + {"ok": true, "job_id": "breakout_bt_cli_20260721_20260723_20260723_220907", "strategy": "breakout", "result_json": "/home/hoon/kis_bot/kis_trader/backtest/results/breakout_bt_cli_20260721_20260723_20260723_220907.json", "summary": {"avg_hold_min": 117.7, "backtest_buy_source": "ws_ticks", "backtest_days": 3, "bot_pct": 10.23, "budget_warning": "총한도 1,200,000원 < 동시8×1회투자 2,400,000원 — 잔여금 소액매수·과다 회전 위험. 실매 정렬: 총한도↑ 또는 동시보유↓", "daily_avg_pct": 3.41, "loss_trades": 13, "max_drawdown": 24780, "max_stocks": 8, "peak_cum_at": "20260723123632", "peak_cum_pnl": 143220, "profit_factor": 2.62, "slot_money": 300000.0, "tick_backtest": {"tick_bar_coverage_pct": 42.93, "tick_bar_coverage_pct_all": 12.0, "tick_bar_coverage_pct_friend": 13.73, "tick_bar_coverage_pct_legacy_exact": 11.94, "tick_bar_coverage_pct_subscribed": 42.93, "tick_bar_coverage_pct_traded": 42.52, "tick_bars_covered": 36299, "tick_bars_friend_covered": 36299, "tick_bars_friend_total": 264287, "tick_bars_subscribed_covered": 36237, "tick_bars_subscribed_total": 84401, "tick_bars_total": 302563, "tick_bars_traded_subscribed_covered": 5084, "tick_bars_traded_subscribed_total": 11956, "tick_codes_total": 595, "tick_codes_traded": 28, "tick_codes_with_data": 511, "ws_tick_rows_loaded": 2072832}, "total_budget_krw": 1200000.0, "total_pnl": 122760, "total_trades": 32, "win_rate": 59.38, "win_trades": 19}, "elapsed_sec": 25.6} + 22:09:33 [INFO] ✅ 완료 25.6s | trades=32 WR=59.38 PnL=122760 | /home/hoon/kis_bot/kis_trader/backtest/results/breakout_bt_cli_20260721_20260723_20260723_220907.json + log=/home/hoon/kis_bot/logs/verify_bt_breakout_1784812147.json +### scalp rc=0 + {"ok": true, "job_id": "scalp_bt_cli_20260721_20260723_20260723_220933", "strategy": "scalp", "result_json": "/home/hoon/kis_bot/kis_trader/backtest/results/scalp_bt_cli_20260721_20260723_20260723_220933.json", "summary": {"avg_hold_min": 85.7, "backtest_buy_source": "ws_ticks", "backtest_days": 3, "bot_pct": 5.76, "budget_warning": "총한도 1,200,000원 < 동시8×1회투자 2,400,000원 — 잔여금 소액매수·과다 회전 위험. 실매 정렬: 총한도↑ 또는 동시보유↓", "daily_avg_pct": 1.92, "loss_trades": 14, "max_drawdown": 43783, "peak_cum_at": "202607221525", "peak_cum_pnl": 74667, "profit_factor": 1.81, "skip_stats": {"ohlc_exit_count": 0, "skipped_micro_buys": 463, "tick_entry_count": 225, "tick_exit_count": 35}, "tick_backtest": {"tick_bar_coverage_pct": 42.93, "tick_bar_coverage_pct_all": 12.0, "tick_bar_coverage_pct_friend": 13.73, "tick_bar_coverage_pct_legacy_exact": 11.94, "tick_bar_coverage_pct_subscribed": 42.93, "tick_bar_coverage_pct_traded": 40.96, "tick_bars_covered": 36299, "tick_bars_friend_covered": 36299, "tick_bars_friend_total": 264287, "tick_bars_subscribed_covered": 36237, "tick_bars_subscribed_total": 84401, "tick_bars_total": 302563, "tick_bars_traded_subscribed_covered": 4910, "tick_bars_traded_subscribed_total": 11988, "tick_codes_total": 595, "tick_codes_traded": 39, "tick_codes_with_data": 511, "ws_tick_rows_loaded": 2072832}, "total_pnl": 69116, "total_trades": 45, "win_rate": 68.89, "win_trades": 31}, "elapsed_sec": 29.0} + 22:10:02 [INFO] ✅ 완료 29.0s | trades=45 WR=68.89 PnL=69116 | /home/hoon/kis_bot/kis_trader/backtest/results/scalp_bt_cli_20260721_20260723_20260723_220933.json + log=/home/hoon/kis_bot/logs/verify_bt_scalp_1784812173.json + +## US web BT (global + cfg symbols) +### us:GLOBAL trades=0 wr=0.0% pnl=0 +### us:QQQM trades=13 wr=23.1% pnl=-4 +### us:SPCX trades=7 wr=85.7% pnl=7 +### us:SPYM trades=3 wr=33.3% pnl=1 +### us:TSLA trades=1 wr=100.0% pnl=1 + +## restart kis_trader_main +restart_rc=0 active=active + +## live match notes +- ALIGN_DEFER_MID_BAR_ENROLL + LIVE_ALIGN_ENTRY_FROM_TICK_BUFFER 가 실매·백테 공통 +- 장중 실매 체결 로그의 entry_src=ws_ticks|ohlc_open / 탈락-중편입시가애매 로 확인 +- 미장 10시(22:00 KST) 전 us apply 완료 여부: master 로그 US 구간 END 시각 확인 diff --git a/logs/optuna_mid_enroll_latest_master.logpath b/logs/optuna_mid_enroll_latest_master.logpath new file mode 100644 index 0000000..b6d9f41 --- /dev/null +++ b/logs/optuna_mid_enroll_latest_master.logpath @@ -0,0 +1 @@ +logs/optuna_mid_enroll_2026-07-21_2026-07-23_20260723_200350_master.log diff --git a/logs/optuna_mid_enroll_latest_report.path b/logs/optuna_mid_enroll_latest_report.path new file mode 100644 index 0000000..f5cc056 --- /dev/null +++ b/logs/optuna_mid_enroll_latest_report.path @@ -0,0 +1 @@ +logs/optuna_mid_enroll_2026-07-21_2026-07-23_20260723_200350_report.txt diff --git a/logs/optuna_mom_ls_then_bt_latest.study b/logs/optuna_mom_ls_then_bt_latest.study new file mode 100644 index 0000000..3be862f --- /dev/null +++ b/logs/optuna_mom_ls_then_bt_latest.study @@ -0,0 +1 @@ +momentum_tpe_ls_20260727_20260728_20260728_200433 diff --git a/logs/optuna_mom_ls_then_bt_latest_master.logpath b/logs/optuna_mom_ls_then_bt_latest_master.logpath new file mode 100644 index 0000000..5669cd9 --- /dev/null +++ b/logs/optuna_mom_ls_then_bt_latest_master.logpath @@ -0,0 +1 @@ +logs/optuna_mom_ls_then_bt_20260728_200433_master.log diff --git a/logs/optuna_mom_ls_then_bt_latest_optuna.logpath b/logs/optuna_mom_ls_then_bt_latest_optuna.logpath new file mode 100644 index 0000000..908f131 --- /dev/null +++ b/logs/optuna_mom_ls_then_bt_latest_optuna.logpath @@ -0,0 +1 @@ +logs/optuna_momentum_tpe_ls_20260728_200433.log diff --git a/logs/optuna_mom_ls_then_bt_nohup.out b/logs/optuna_mom_ls_then_bt_nohup.out new file mode 100644 index 0000000..f606696 --- /dev/null +++ b/logs/optuna_mom_ls_then_bt_nohup.out @@ -0,0 +1,42 @@ +======== 모멘텀 Optuna(LS)→백테 시작 2026-07-28T19:03:41+09:00 ======== +START=2026-07-22 END=2026-07-28 MODE=tpe TRIALS=200 +universe_history_source=ls apply-best=OFF 실매적용=없음 +study=momentum_tpe_ls_20260722_20260728_20260728_190341 +optuna_log=logs/optuna_momentum_tpe_ls_20260728_190341.log +bt_log=logs/bt_momentum_ls_currdb_20260728_190341.log +master=logs/optuna_mom_ls_then_bt_20260728_190341_master.log + total used free shared buff/cache available +Mem: 13Gi 5.2Gi 2.9Gi 74Mi 5.9Gi 8.4Gi + +-------- Optuna 종료 rc=0 2026-07-28T19:46:26+09:00 -------- +best_json kis_trader/backtest/results/optuna_momentum_tpe_20260728_194602.json +best_value 2.1329682291312335 trial 152 + +-------- 현재 DB 백테(LS) START 2026-07-28T19:46:26+09:00 -------- +LOG=logs/bt_momentum_ls_currdb_20260728_190341.log +-------- 현재 DB 백테 종료 rc=0 2026-07-28T19:47:24+09:00 -------- +optuna_log=logs/optuna_momentum_tpe_ls_20260728_190341.log +bt_log=logs/bt_momentum_ls_currdb_20260728_190341.log +실매 미적용(apply-best 없음) · 봇 재시작 없음 +======== 전체 종료 2026-07-28T19:47:24+09:00 ======== +======== 모멘텀 Optuna(LS)→백테 시작 2026-07-28T20:04:33+09:00 ======== +START=2026-07-27 END=2026-07-28 MODE=tpe TRIALS=200 +universe_history_source=ls apply-best=OFF 실매적용=없음 +study=momentum_tpe_ls_20260727_20260728_20260728_200433 +optuna_log=logs/optuna_momentum_tpe_ls_20260728_200433.log +bt_log=logs/bt_momentum_ls_currdb_20260728_200433.log +master=logs/optuna_mom_ls_then_bt_20260728_200433_master.log + total used free shared buff/cache available +Mem: 13Gi 5.1Gi 3.5Gi 74Mi 5.4Gi 8.5Gi + +-------- Optuna 종료 rc=0 2026-07-28T20:10:10+09:00 -------- +best_json kis_trader/backtest/results/optuna_momentum_tpe_20260728_200954.json +best_value 0.2304 trial 196 + +-------- 현재 DB 백테(LS) START 2026-07-28T20:10:10+09:00 -------- +LOG=logs/bt_momentum_ls_currdb_20260728_200433.log +-------- 현재 DB 백테 종료 rc=0 2026-07-28T20:10:30+09:00 -------- +optuna_log=logs/optuna_momentum_tpe_ls_20260728_200433.log +bt_log=logs/bt_momentum_ls_currdb_20260728_200433.log +실매 미적용(apply-best 없음) · 봇 재시작 없음 +======== 전체 종료 2026-07-28T20:10:30+09:00 ======== diff --git a/logs/optuna_mom_scalp_tpe_rerun_latest.logpath b/logs/optuna_mom_scalp_tpe_rerun_latest.logpath new file mode 100644 index 0000000..d282689 --- /dev/null +++ b/logs/optuna_mom_scalp_tpe_rerun_latest.logpath @@ -0,0 +1 @@ +logs/optuna_mom_scalp_tpe_rerun_20260721_135727_master.log diff --git a/logs/optuna_momentum_5d_apply_latest.logpath b/logs/optuna_momentum_5d_apply_latest.logpath new file mode 100644 index 0000000..797456d --- /dev/null +++ b/logs/optuna_momentum_5d_apply_latest.logpath @@ -0,0 +1 @@ +logs/optuna_momentum_tpe_5d_apply_20260727_235032.log diff --git a/logs/optuna_momentum_5d_apply_latest.study b/logs/optuna_momentum_5d_apply_latest.study new file mode 100644 index 0000000..3f895fe --- /dev/null +++ b/logs/optuna_momentum_5d_apply_latest.study @@ -0,0 +1 @@ +momentum_tpe_5d_apply_20260721_20260727_20260727_235032 diff --git a/logs/optuna_momentum_fast_latest.jsonpath b/logs/optuna_momentum_fast_latest.jsonpath new file mode 100644 index 0000000..ad55df6 --- /dev/null +++ b/logs/optuna_momentum_fast_latest.jsonpath @@ -0,0 +1 @@ +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_fast_20260722_000857.json diff --git a/logs/optuna_momentum_latest.jsonpath b/logs/optuna_momentum_latest.jsonpath index 94d74c6..5768590 100644 --- a/logs/optuna_momentum_latest.jsonpath +++ b/logs/optuna_momentum_latest.jsonpath @@ -1 +1 @@ -/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_fine_20260721_023546.json +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_tpe_20260728_200954.json diff --git a/logs/optuna_momentum_tpe_latest.jsonpath b/logs/optuna_momentum_tpe_latest.jsonpath new file mode 100644 index 0000000..5768590 --- /dev/null +++ b/logs/optuna_momentum_tpe_latest.jsonpath @@ -0,0 +1 @@ +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_tpe_20260728_200954.json diff --git a/logs/optuna_momentum_tpe_latest.logpath b/logs/optuna_momentum_tpe_latest.logpath new file mode 100644 index 0000000..2c6ff95 --- /dev/null +++ b/logs/optuna_momentum_tpe_latest.logpath @@ -0,0 +1 @@ +logs/optuna_momentum_tpe_20260723_201537.log diff --git a/logs/optuna_momentum_tpe_latest.study b/logs/optuna_momentum_tpe_latest.study new file mode 100644 index 0000000..8a63aab --- /dev/null +++ b/logs/optuna_momentum_tpe_latest.study @@ -0,0 +1 @@ +momentum_tpe_20260721_20260723_20260723_201537 diff --git a/logs/optuna_scalp_5d_apply_latest.logpath b/logs/optuna_scalp_5d_apply_latest.logpath new file mode 100644 index 0000000..032cdf7 --- /dev/null +++ b/logs/optuna_scalp_5d_apply_latest.logpath @@ -0,0 +1 @@ +logs/optuna_scalp_tpe_5d_apply_20260727_231221.log diff --git a/logs/optuna_scalp_5d_apply_latest.study b/logs/optuna_scalp_5d_apply_latest.study new file mode 100644 index 0000000..cafa811 --- /dev/null +++ b/logs/optuna_scalp_5d_apply_latest.study @@ -0,0 +1 @@ +scalp_tpe_5d_apply_20260721_20260727_20260727_231221 diff --git a/logs/optuna_scalp_bo_ls_latest_master.logpath b/logs/optuna_scalp_bo_ls_latest_master.logpath new file mode 100644 index 0000000..5946e1f --- /dev/null +++ b/logs/optuna_scalp_bo_ls_latest_master.logpath @@ -0,0 +1 @@ +logs/optuna_scalp_bo_ls_20260728_201324_master.log diff --git a/logs/optuna_scalp_bo_ls_nohup.out b/logs/optuna_scalp_bo_ls_nohup.out new file mode 100644 index 0000000..459c762 --- /dev/null +++ b/logs/optuna_scalp_bo_ls_nohup.out @@ -0,0 +1,23 @@ +======== 스캘핑+돌파 Optuna(LS) 시작 2026-07-28T20:13:24+09:00 ======== +START=2026-07-27 END=2026-07-28 MODE=tpe TRIALS=200 HIST=ls +apply-best=OFF 실매적용=없음 · 순차: scalp → breakout +master=logs/optuna_scalp_bo_ls_20260728_201324_master.log + total used free shared buff/cache available +Mem: 13Gi 5.3Gi 3.4Gi 74Mi 5.4Gi 8.4Gi + +-------- scalp Optuna START 2026-07-28T20:13:24+09:00 -------- +study=scalp_tpe_ls_20260727_20260728_20260728_201324 +optuna_log=logs/optuna_scalp_tpe_ls_20260728_201324.log +-------- scalp Optuna 종료 rc=0 2026-07-28T20:20:08+09:00 -------- +best_json kis_trader/backtest/results/optuna_scalp_tpe_20260728_201954.json +best_value 1.1014 trial 164 +best_summary trades 2 wr 100.0 pnl 5507.0 + +-------- breakout Optuna START 2026-07-28T20:20:08+09:00 -------- +study=breakout_tpe_ls_20260727_20260728_20260728_201324 +optuna_log=logs/optuna_breakout_tpe_ls_20260728_201324.log +-------- breakout Optuna 종료 rc=2 2026-07-28T20:20:09+09:00 -------- +❌ breakout 실패 log=logs/optuna_breakout_tpe_ls_20260728_201324.log + +실매 미적용(apply-best 없음) · 봇 재시작 없음 +======== 전체 종료 rc=2 2026-07-28T20:20:09+09:00 ======== diff --git a/logs/optuna_scalp_latest.jsonpath b/logs/optuna_scalp_latest.jsonpath index 50fb653..30f82ec 100644 --- a/logs/optuna_scalp_latest.jsonpath +++ b/logs/optuna_scalp_latest.jsonpath @@ -1 +1 @@ -/home/hoon/kis_bot/kis_trader/backtest/results/optuna_scalp_fine_20260721_024021.json +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_scalp_tpe_20260728_201954.json diff --git a/logs/optuna_scalp_ls_latest.logpath b/logs/optuna_scalp_ls_latest.logpath new file mode 100644 index 0000000..f82c359 --- /dev/null +++ b/logs/optuna_scalp_ls_latest.logpath @@ -0,0 +1 @@ +logs/optuna_scalp_tpe_ls_20260728_201324.log diff --git a/logs/optuna_scalp_ls_latest.study b/logs/optuna_scalp_ls_latest.study new file mode 100644 index 0000000..23d1a6e --- /dev/null +++ b/logs/optuna_scalp_ls_latest.study @@ -0,0 +1 @@ +scalp_tpe_ls_20260727_20260728_20260728_201324 diff --git a/logs/optuna_scalp_tpe_4d_latest.logpath b/logs/optuna_scalp_tpe_4d_latest.logpath new file mode 100644 index 0000000..1704b0a --- /dev/null +++ b/logs/optuna_scalp_tpe_4d_latest.logpath @@ -0,0 +1 @@ +logs/optuna_scalp_tpe_4d_20260724_235815_resume.log diff --git a/logs/optuna_scalp_tpe_4d_latest.study b/logs/optuna_scalp_tpe_4d_latest.study new file mode 100644 index 0000000..9b6c550 --- /dev/null +++ b/logs/optuna_scalp_tpe_4d_latest.study @@ -0,0 +1 @@ +scalp_tpe_stable4d_20260724_233743 diff --git a/logs/optuna_scalp_tpe_latest.jsonpath b/logs/optuna_scalp_tpe_latest.jsonpath new file mode 100644 index 0000000..30f82ec --- /dev/null +++ b/logs/optuna_scalp_tpe_latest.jsonpath @@ -0,0 +1 @@ +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_scalp_tpe_20260728_201954.json diff --git a/logs/optuna_scalp_tpe_latest.logpath b/logs/optuna_scalp_tpe_latest.logpath new file mode 100644 index 0000000..22f3bde --- /dev/null +++ b/logs/optuna_scalp_tpe_latest.logpath @@ -0,0 +1 @@ +logs/optuna_scalp_tpe_20260723_214213.log diff --git a/logs/optuna_scalp_tpe_latest.study b/logs/optuna_scalp_tpe_latest.study new file mode 100644 index 0000000..2f5a1f5 --- /dev/null +++ b/logs/optuna_scalp_tpe_latest.study @@ -0,0 +1 @@ +scalp_tpe_20260721_20260723_20260723_214213 diff --git a/logs/optuna_seq_breakout_latest.logpath b/logs/optuna_seq_breakout_latest.logpath index 0013015..f070fc7 100644 --- a/logs/optuna_seq_breakout_latest.logpath +++ b/logs/optuna_seq_breakout_latest.logpath @@ -1 +1 @@ -logs/optuna_seq_breakout_fine_apply_20260721_023546.log +logs/optuna_seq_breakout_tpe_20260725_094538.log diff --git a/logs/optuna_seq_breakout_latest.study b/logs/optuna_seq_breakout_latest.study index 419619e..9adce3c 100644 --- a/logs/optuna_seq_breakout_latest.study +++ b/logs/optuna_seq_breakout_latest.study @@ -1 +1 @@ -breakout_fine_apply_20260720_20260721_023546 +breakout_tpe_20260721_20260724_20260725_094538 diff --git a/logs/optuna_seq_momentum_latest.logpath b/logs/optuna_seq_momentum_latest.logpath index 1826e0f..977dbf1 100644 --- a/logs/optuna_seq_momentum_latest.logpath +++ b/logs/optuna_seq_momentum_latest.logpath @@ -1 +1 @@ -logs/optuna_seq_momentum_fine_apply_20260721_023012.log +logs/optuna_seq_momentum_tpe_20260725_091155.log diff --git a/logs/optuna_seq_momentum_latest.study b/logs/optuna_seq_momentum_latest.study index 6c94b8d..19bbf12 100644 --- a/logs/optuna_seq_momentum_latest.study +++ b/logs/optuna_seq_momentum_latest.study @@ -1 +1 @@ -momentum_fine_apply_20260720_20260721_023012 +momentum_tpe_20260721_20260724_20260725_091155 diff --git a/logs/optuna_seq_scalp_latest.logpath b/logs/optuna_seq_scalp_latest.logpath index 7e82d69..012a8a1 100644 --- a/logs/optuna_seq_scalp_latest.logpath +++ b/logs/optuna_seq_scalp_latest.logpath @@ -1 +1 @@ -logs/optuna_seq_scalp_fine_apply_20260721_023742.log +logs/optuna_seq_scalp_tpe_20260725_083647.log diff --git a/logs/optuna_seq_scalp_latest.study b/logs/optuna_seq_scalp_latest.study index 38c2bac..ca34d29 100644 --- a/logs/optuna_seq_scalp_latest.study +++ b/logs/optuna_seq_scalp_latest.study @@ -1 +1 @@ -scalp_fine_apply_20260720_20260721_023742 +scalp_tpe_20260721_20260724_20260725_083647 diff --git a/logs/optuna_seq_tail_latest.logpath b/logs/optuna_seq_tail_latest.logpath index 33259aa..9b56dc8 100644 --- a/logs/optuna_seq_tail_latest.logpath +++ b/logs/optuna_seq_tail_latest.logpath @@ -1 +1 @@ -logs/optuna_tail_fine_noapply_20260721_074448.log +logs/optuna_seq_tail_tpe_20260725_095819.log diff --git a/logs/optuna_seq_tail_latest.study b/logs/optuna_seq_tail_latest.study index dd1accb..9e787c1 100644 --- a/logs/optuna_seq_tail_latest.study +++ b/logs/optuna_seq_tail_latest.study @@ -1 +1 @@ -tail_fine_noapply_20260720_20260721_074448 +tail_tpe_20260721_20260724_20260725_095819 diff --git a/logs/optuna_smoke3_selltime_latest.logpath b/logs/optuna_smoke3_selltime_latest.logpath new file mode 100644 index 0000000..b774295 --- /dev/null +++ b/logs/optuna_smoke3_selltime_latest.logpath @@ -0,0 +1 @@ +logs/optuna_smoke3_selltime_20260725_083415.log diff --git a/logs/optuna_tail_5d_apply_latest.logpath b/logs/optuna_tail_5d_apply_latest.logpath new file mode 100644 index 0000000..62fd370 --- /dev/null +++ b/logs/optuna_tail_5d_apply_latest.logpath @@ -0,0 +1 @@ +logs/optuna_tail_tpe_5d_apply_20260728_005330.log diff --git a/logs/optuna_tail_5d_apply_latest.study b/logs/optuna_tail_5d_apply_latest.study new file mode 100644 index 0000000..824f7b2 --- /dev/null +++ b/logs/optuna_tail_5d_apply_latest.study @@ -0,0 +1 @@ +tail_tpe_5d_apply_20260721_20260727_20260728_005330 diff --git a/logs/optuna_tail_fine_latest.jsonpath b/logs/optuna_tail_fine_latest.jsonpath index 93011cb..f59ae86 100644 --- a/logs/optuna_tail_fine_latest.jsonpath +++ b/logs/optuna_tail_fine_latest.jsonpath @@ -1 +1 @@ -/home/hoon/kis_bot/kis_trader/backtest/results/optuna_tail_fine_20260717_035620.json +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_tail_fine_20260721_082027.json diff --git a/logs/optuna_tail_latest.jsonpath b/logs/optuna_tail_latest.jsonpath index 93011cb..59295fb 100644 --- a/logs/optuna_tail_latest.jsonpath +++ b/logs/optuna_tail_latest.jsonpath @@ -1 +1 @@ -/home/hoon/kis_bot/kis_trader/backtest/results/optuna_tail_fine_20260717_035620.json +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_tail_tpe_20260728_022918.json diff --git a/logs/optuna_tail_tpe_latest.jsonpath b/logs/optuna_tail_tpe_latest.jsonpath new file mode 100644 index 0000000..59295fb --- /dev/null +++ b/logs/optuna_tail_tpe_latest.jsonpath @@ -0,0 +1 @@ +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_tail_tpe_20260728_022918.json diff --git a/logs/optuna_tail_tpe_latest.logpath b/logs/optuna_tail_tpe_latest.logpath new file mode 100644 index 0000000..9913a6f --- /dev/null +++ b/logs/optuna_tail_tpe_latest.logpath @@ -0,0 +1 @@ +logs/optuna_tail_tpe_20260723_204401.log diff --git a/logs/optuna_tail_tpe_latest.study b/logs/optuna_tail_tpe_latest.study new file mode 100644 index 0000000..524a6d4 --- /dev/null +++ b/logs/optuna_tail_tpe_latest.study @@ -0,0 +1 @@ +tail_tpe_20260721_20260723_20260723_204401 diff --git a/logs/optuna_us_fee_2026-07-21_2026-07-23_20260723_224026_report.txt b/logs/optuna_us_fee_2026-07-21_2026-07-23_20260723_224026_report.txt new file mode 100644 index 0000000..360c109 --- /dev/null +++ b/logs/optuna_us_fee_2026-07-21_2026-07-23_20260723_224026_report.txt @@ -0,0 +1,24 @@ +# mid-enroll verify 2026-07-21..2026-07-23 +ts=2026-07-23 23:18:39 +scope=us_only + +json:us_momentum_tpe_ -> /home/hoon/kis_bot/kis_trader/backtest/results/optuna_us_momentum_tpe_20260723_224424.json +json:us_momentum_QQQM_ -> /home/hoon/kis_bot/kis_trader/backtest/results/optuna_us_momentum_QQQM_tpe_20260723_224619.json +json:us_momentum_SPCX_ -> /home/hoon/kis_bot/kis_trader/backtest/results/optuna_us_momentum_SPCX_tpe_20260723_224736.json +json:us_momentum_SPYM_ -> /home/hoon/kis_bot/kis_trader/backtest/results/optuna_us_momentum_SPYM_tpe_20260723_224908.json +json:us_momentum_TSLA_ -> /home/hoon/kis_bot/kis_trader/backtest/results/optuna_us_momentum_TSLA_tpe_20260723_225019.json + +## US web BT (global + cfg symbols) +### us:GLOBAL trades=0 wr=0.0% pnl=0.0000 +### us:QQQM trades=14 wr=0.0% pnl=-2047.6693 +### us:SPCX trades=7 wr=0.0% pnl=-1614.1013 +### us:SPYM trades=3 wr=0.0% pnl=-661.3232 +### us:TSLA trades=1 wr=0.0% pnl=-187.3632 + +## restart kis_trader_main +restart_rc=0 active=active + +## live match notes +- ALIGN_DEFER_MID_BAR_ENROLL + LIVE_ALIGN_ENTRY_FROM_TICK_BUFFER 가 실매·백테 공통 +- 장중 실매 체결 로그의 entry_src=ws_ticks|ohlc_open / 탈락-중편입시가애매 로 확인 +- 미장 10시(22:00 KST) 전 us apply 완료 여부: master 로그 US 구간 END 시각 확인 diff --git a/logs/optuna_us_fee_latest_master.logpath b/logs/optuna_us_fee_latest_master.logpath new file mode 100644 index 0000000..84f9c7b --- /dev/null +++ b/logs/optuna_us_fee_latest_master.logpath @@ -0,0 +1 @@ +logs/optuna_us_fee_2026-07-21_2026-07-23_20260723_224026_master.log diff --git a/logs/optuna_us_fee_latest_report.path b/logs/optuna_us_fee_latest_report.path new file mode 100644 index 0000000..17cf504 --- /dev/null +++ b/logs/optuna_us_fee_latest_report.path @@ -0,0 +1 @@ +logs/optuna_us_fee_2026-07-21_2026-07-23_20260723_224026_report.txt diff --git a/logs/optuna_us_momentum_QQQM_tpe_latest.logpath b/logs/optuna_us_momentum_QQQM_tpe_latest.logpath new file mode 100644 index 0000000..665aa91 --- /dev/null +++ b/logs/optuna_us_momentum_QQQM_tpe_latest.logpath @@ -0,0 +1 @@ +logs/optuna_us_momentum_QQQM_tpe_fee_20260723_224438.log diff --git a/logs/optuna_us_momentum_QQQM_tpe_latest.study b/logs/optuna_us_momentum_QQQM_tpe_latest.study new file mode 100644 index 0000000..631e2c7 --- /dev/null +++ b/logs/optuna_us_momentum_QQQM_tpe_latest.study @@ -0,0 +1 @@ +us_momentum_QQQM_tpe_fee_20260721_20260723_20260723_224438 diff --git a/logs/optuna_us_momentum_SPCX_tpe_latest.logpath b/logs/optuna_us_momentum_SPCX_tpe_latest.logpath new file mode 100644 index 0000000..6553a90 --- /dev/null +++ b/logs/optuna_us_momentum_SPCX_tpe_latest.logpath @@ -0,0 +1 @@ +logs/optuna_us_momentum_SPCX_tpe_fee_20260723_224631.log diff --git a/logs/optuna_us_momentum_SPCX_tpe_latest.study b/logs/optuna_us_momentum_SPCX_tpe_latest.study new file mode 100644 index 0000000..44c5258 --- /dev/null +++ b/logs/optuna_us_momentum_SPCX_tpe_latest.study @@ -0,0 +1 @@ +us_momentum_SPCX_tpe_fee_20260721_20260723_20260723_224631 diff --git a/logs/optuna_us_momentum_SPYM_tpe_latest.logpath b/logs/optuna_us_momentum_SPYM_tpe_latest.logpath new file mode 100644 index 0000000..5e4e5ae --- /dev/null +++ b/logs/optuna_us_momentum_SPYM_tpe_latest.logpath @@ -0,0 +1 @@ +logs/optuna_us_momentum_SPYM_tpe_fee_20260723_224748.log diff --git a/logs/optuna_us_momentum_SPYM_tpe_latest.study b/logs/optuna_us_momentum_SPYM_tpe_latest.study new file mode 100644 index 0000000..db9b0a3 --- /dev/null +++ b/logs/optuna_us_momentum_SPYM_tpe_latest.study @@ -0,0 +1 @@ +us_momentum_SPYM_tpe_fee_20260721_20260723_20260723_224748 diff --git a/logs/optuna_us_momentum_TSLA_tpe_latest.logpath b/logs/optuna_us_momentum_TSLA_tpe_latest.logpath new file mode 100644 index 0000000..9b90205 --- /dev/null +++ b/logs/optuna_us_momentum_TSLA_tpe_latest.logpath @@ -0,0 +1 @@ +logs/optuna_us_momentum_TSLA_tpe_fee_20260723_224919.log diff --git a/logs/optuna_us_momentum_TSLA_tpe_latest.study b/logs/optuna_us_momentum_TSLA_tpe_latest.study new file mode 100644 index 0000000..3665099 --- /dev/null +++ b/logs/optuna_us_momentum_TSLA_tpe_latest.study @@ -0,0 +1 @@ +us_momentum_TSLA_tpe_fee_20260721_20260723_20260723_224919 diff --git a/logs/optuna_us_momentum_fast_latest.jsonpath b/logs/optuna_us_momentum_fast_latest.jsonpath new file mode 100644 index 0000000..ad55df6 --- /dev/null +++ b/logs/optuna_us_momentum_fast_latest.jsonpath @@ -0,0 +1 @@ +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_momentum_fast_20260722_000857.json diff --git a/logs/optuna_us_momentum_latest.jsonpath b/logs/optuna_us_momentum_latest.jsonpath new file mode 100644 index 0000000..b42a83e --- /dev/null +++ b/logs/optuna_us_momentum_latest.jsonpath @@ -0,0 +1 @@ +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_us_momentum_TSLA_tpe_20260723_225019.json diff --git a/logs/optuna_us_momentum_tpe_latest.jsonpath b/logs/optuna_us_momentum_tpe_latest.jsonpath new file mode 100644 index 0000000..b42a83e --- /dev/null +++ b/logs/optuna_us_momentum_tpe_latest.jsonpath @@ -0,0 +1 @@ +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_us_momentum_TSLA_tpe_20260723_225019.json diff --git a/logs/optuna_us_momentum_tpe_latest.logpath b/logs/optuna_us_momentum_tpe_latest.logpath new file mode 100644 index 0000000..2d4a525 --- /dev/null +++ b/logs/optuna_us_momentum_tpe_latest.logpath @@ -0,0 +1 @@ +logs/optuna_us_momentum_tpe_fee_20260723_224026.log diff --git a/logs/optuna_us_momentum_tpe_latest.study b/logs/optuna_us_momentum_tpe_latest.study new file mode 100644 index 0000000..ef37d73 --- /dev/null +++ b/logs/optuna_us_momentum_tpe_latest.study @@ -0,0 +1 @@ +us_momentum_tpe_fee_20260721_20260723_20260723_224026 diff --git a/logs/optuna_web_latest_job.txt b/logs/optuna_web_latest_job.txt new file mode 100644 index 0000000..de2ca32 --- /dev/null +++ b/logs/optuna_web_latest_job.txt @@ -0,0 +1 @@ +opt_20260723_114745_us_m diff --git a/logs/parity_optuna_period_latest.ts b/logs/parity_optuna_period_latest.ts new file mode 100644 index 0000000..9af5f89 --- /dev/null +++ b/logs/parity_optuna_period_latest.ts @@ -0,0 +1 @@ +20260724_221916 diff --git a/logs/parity_verify_20260724_latest.ts b/logs/parity_verify_20260724_latest.ts new file mode 100644 index 0000000..1a917ba --- /dev/null +++ b/logs/parity_verify_20260724_latest.ts @@ -0,0 +1 @@ +TS=20260724_221858 diff --git a/ls_sample/sample_python/ACF/ConditionToApi.ACF b/ls_sample/sample_python/ACF/ConditionToApi.ACF new file mode 100644 index 0000000..fea776e Binary files /dev/null and b/ls_sample/sample_python/ACF/ConditionToApi.ACF differ diff --git a/ls_sample/sample_python/ACF/test.ACF b/ls_sample/sample_python/ACF/test.ACF new file mode 100644 index 0000000..9a25336 Binary files /dev/null and b/ls_sample/sample_python/ACF/test.ACF differ diff --git a/ls_sample/sample_python/Res/B7_.res b/ls_sample/sample_python/Res/B7_.res new file mode 100644 index 0000000..cc53ee3 --- /dev/null +++ b/ls_sample/sample_python/Res/B7_.res @@ -0,0 +1,78 @@ +BEGIN_FUNCTION_MAP +.Feed, ETFȣܷ(B7), B7_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + LPŵȣ1, lp_offerho1, lp_offerho1, long, 9; + LPżȣ1, lp_bidho1, lp_bidho1, long, 9; + LPŵȣ2, lp_offerho2, lp_offerho2, long, 9; + LPżȣ2, lp_bidho2, lp_bidho2, long, 9; + LPŵȣ3, lp_offerho3, lp_offerho3, long, 9; + LPżȣ3, lp_bidho3, lp_bidho3, long, 9; + LPŵȣ4, lp_offerho4, lp_offerho4, long, 9; + LPżȣ4, lp_bidho4, lp_bidho4, long, 9; + LPŵȣ5, lp_offerho5, lp_offerho5, long, 9; + LPżȣ5, lp_bidho5, lp_bidho5, long, 9; + LPŵȣ6, lp_offerho6, lp_offerho6, long, 9; + LPżȣ6, lp_bidho6, lp_bidho6, long, 9; + LPŵȣ7, lp_offerho7, lp_offerho7, long, 9; + LPżȣ7, lp_bidho7, lp_bidho7, long, 9; + LPŵȣ8, lp_offerho8, lp_offerho8, long, 9; + LPżȣ8, lp_bidho8, lp_bidho8, long, 9; + LPŵȣ9, lp_offerho9, lp_offerho9, long, 9; + LPżȣ9, lp_bidho9, lp_bidho9, long, 9; + LPŵȣ10, lp_offerho10, lp_offerho10, long, 9; + LPżȣ10, lp_bidho10, lp_bidho10, long, 9; + ڵ, shcode, shcode, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/B7__1.res b/ls_sample/sample_python/Res/B7__1.res new file mode 100644 index 0000000..cc53ee3 --- /dev/null +++ b/ls_sample/sample_python/Res/B7__1.res @@ -0,0 +1,78 @@ +BEGIN_FUNCTION_MAP +.Feed, ETFȣܷ(B7), B7_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + LPŵȣ1, lp_offerho1, lp_offerho1, long, 9; + LPżȣ1, lp_bidho1, lp_bidho1, long, 9; + LPŵȣ2, lp_offerho2, lp_offerho2, long, 9; + LPżȣ2, lp_bidho2, lp_bidho2, long, 9; + LPŵȣ3, lp_offerho3, lp_offerho3, long, 9; + LPżȣ3, lp_bidho3, lp_bidho3, long, 9; + LPŵȣ4, lp_offerho4, lp_offerho4, long, 9; + LPżȣ4, lp_bidho4, lp_bidho4, long, 9; + LPŵȣ5, lp_offerho5, lp_offerho5, long, 9; + LPżȣ5, lp_bidho5, lp_bidho5, long, 9; + LPŵȣ6, lp_offerho6, lp_offerho6, long, 9; + LPżȣ6, lp_bidho6, lp_bidho6, long, 9; + LPŵȣ7, lp_offerho7, lp_offerho7, long, 9; + LPżȣ7, lp_bidho7, lp_bidho7, long, 9; + LPŵȣ8, lp_offerho8, lp_offerho8, long, 9; + LPżȣ8, lp_bidho8, lp_bidho8, long, 9; + LPŵȣ9, lp_offerho9, lp_offerho9, long, 9; + LPżȣ9, lp_bidho9, lp_bidho9, long, 9; + LPŵȣ10, lp_offerho10, lp_offerho10, long, 9; + LPżȣ10, lp_bidho10, lp_bidho10, long, 9; + ڵ, shcode, shcode, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/BMT.res b/ls_sample/sample_python/Res/BMT.res new file mode 100644 index 0000000..6b07715 --- /dev/null +++ b/ls_sample/sample_python/Res/BMT.res @@ -0,0 +1,111 @@ +BEGIN_FUNCTION_MAP +.Feed, ð뺰ڸŸ(BMT), BMT, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + Žð, tjjtime, tjjtime, char, 8; + + ڵ1(), tjjcode1, tjjcode1, char, 4; + ż ŷ1, msvolume1, msvolume1, long, 8; + ŵ ŷ1, mdvolume1, mdvolume1, long, 8; + ŷ ż1, msvol1, msvol1, long, 8; + ż ŷ1, msvalue1, msvalue1, long, 6; + ŵ ŷ1, mdvalue1, mdvalue1, long, 6; + ŷ ż1, msval1, msval1, long, 6; + + ڵ2(ܱ), tjjcode2, tjjcode2, char, 4; + ż ŷ2, msvolume2, msvolume2, long, 8; + ŵ ŷ2, mdvolume2, mdvolume2, long, 8; + ŷ ż2, msvol2, msvol2, long, 8; + ż ŷ2, msvalue2, msvalue2, long, 6; + ŵ ŷ2, mdvalue2, mdvalue2, long, 6; + ŷ ż2, msval2, msval2, long, 6; + + ڵ3(), tjjcode3, tjjcode3, char, 4; + ż ŷ3, msvolume3, msvolume3, long, 8; + ŵ ŷ3, mdvolume3, mdvolume3, long, 8; + ŷ ż3, msvol3, msvol3, long, 8; + ż ŷ3, msvalue3, msvalue3, long, 6; + ŵ ŷ3, mdvalue3, mdvalue3, long, 6; + ŷ ż3, msval3, msval3, long, 6; + + ڵ4(), tjjcode4, tjjcode4, char, 4; + ż ŷ4, msvolume4, msvolume4, long, 8; + ŵ ŷ4, mdvolume4, mdvolume4, long, 8; + ŷ ż4, msvol4, msvol4, long, 8; + ż ŷ4, msvalue4, msvalue4, long, 6; + ŵ ŷ4, mdvalue4, mdvalue4, long, 6; + ŷ ż4, msval4, msval4, long, 6; + + ڵ5(), tjjcode5, tjjcode5, char, 4; + ż ŷ5, msvolume5, msvolume5, long, 8; + ŵ ŷ5, mdvolume5, mdvolume5, long, 8; + ŷ ż5, msvol5, msvol5, long, 8; + ż ŷ5, msvalue5, msvalue5, long, 6; + ŵ ŷ5, mdvalue5, mdvalue5, long, 6; + ŷ ż5, msval5, msval5, long, 6; + + ڵ6(), tjjcode6, tjjcode6, char, 4; + ż ŷ6, msvolume6, msvolume6, long, 8; + ŵ ŷ6, mdvolume6, mdvolume6, long, 8; + ŷ ż6, msvol6, msvol6, long, 8; + ż ŷ6, msvalue6, msvalue6, long, 6; + ŵ ŷ6, mdvalue6, mdvalue6, long, 6; + ŷ ż6, msval6, msval6, long, 6; + + ڵ7(), tjjcode7, tjjcode7, char, 4; + ż ŷ7, msvolume7, msvolume7, long, 8; + ŵ ŷ7, mdvolume7, mdvolume7, long, 8; + ŷ ż7, msvol7, msvol7, long, 8; + ż ŷ7, msvalue7, msvalue7, long, 6; + ŵ ŷ7, mdvalue7, mdvalue7, long, 6; + ŷ ż7, msval7, msval7, long, 6; + + ڵ8(), tjjcode8, tjjcode8, char, 4; + ż ŷ8, msvolume8, msvolume8, long, 8; + ŵ ŷ8, mdvolume8, mdvolume8, long, 8; + ŷ ż8, msvol8, msvol8, long, 8; + ż ŷ8, msvalue8, msvalue8, long, 6; + ŵ ŷ8, mdvalue8, mdvalue8, long, 6; + ŷ ż8, msval8, msval8, long, 6; + + ڵ9(), tjjcode9, tjjcode9, char, 4; + ż ŷ9, msvolume9, msvolume9, long, 8; + ŵ ŷ9, mdvolume9, mdvolume9, long, 8; + ŷ ż9, msvol9, msvol9, long, 8; + ż ŷ9, msvalue9, msvalue9, long, 6; + ŵ ŷ9, mdvalue9, mdvalue9, long, 6; + ŷ ż9, msval9, msval9, long, 6; + + ڵ10(), tjjcode10, tjjcode10, char, 4; + ż ŷ10, msvolume10, msvolume10, long, 8; + ŵ ŷ10, mdvolume10, mdvolume10, long, 8; + ŷ ż10, msvol10, msvol10, long, 8; + ż ŷ10, msvalue10, msvalue10, long, 6; + ŵ ŷ10, mdvalue10, mdvalue10, long, 6; + ŷ ż10, msval10, msval10, long, 6; + + ڵ11(Ÿ), tjjcode11, tjjcode11, char, 4; + ż ŷ11, msvolume11, msvolume11, long, 8; + ŵ ŷ11, mdvolume11, mdvolume11, long, 8; + ŷ ż11, msvol11, msvol11, long, 8; + ż ŷ11, msvalue11, msvalue11, long, 6; + ŵ ŷ11, mdvalue11, mdvalue11, long, 6; + ŷ ż11, msval11, msval11, long, 6; + + ڵ, upcode, upcode, char, 3; + + ڵ0(ݵ), tjjcode0, tjjcode0, char, 4; + ż ŷ0, msvolume0, msvolume0, long, 8; + ŵ ŷ0, mdvolume0, mdvolume0, long, 8; + ŷ ż0, msvol0, msvol0, long, 8; + ż ŷ0, msvalue0, msvalue0, long, 6; + ŵ ŷ0, mdvalue0, mdvalue0, long, 6; + ŷ ż0, msval0, msval0, long, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/BMT_1.res b/ls_sample/sample_python/Res/BMT_1.res new file mode 100644 index 0000000..6b07715 --- /dev/null +++ b/ls_sample/sample_python/Res/BMT_1.res @@ -0,0 +1,111 @@ +BEGIN_FUNCTION_MAP +.Feed, ð뺰ڸŸ(BMT), BMT, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + Žð, tjjtime, tjjtime, char, 8; + + ڵ1(), tjjcode1, tjjcode1, char, 4; + ż ŷ1, msvolume1, msvolume1, long, 8; + ŵ ŷ1, mdvolume1, mdvolume1, long, 8; + ŷ ż1, msvol1, msvol1, long, 8; + ż ŷ1, msvalue1, msvalue1, long, 6; + ŵ ŷ1, mdvalue1, mdvalue1, long, 6; + ŷ ż1, msval1, msval1, long, 6; + + ڵ2(ܱ), tjjcode2, tjjcode2, char, 4; + ż ŷ2, msvolume2, msvolume2, long, 8; + ŵ ŷ2, mdvolume2, mdvolume2, long, 8; + ŷ ż2, msvol2, msvol2, long, 8; + ż ŷ2, msvalue2, msvalue2, long, 6; + ŵ ŷ2, mdvalue2, mdvalue2, long, 6; + ŷ ż2, msval2, msval2, long, 6; + + ڵ3(), tjjcode3, tjjcode3, char, 4; + ż ŷ3, msvolume3, msvolume3, long, 8; + ŵ ŷ3, mdvolume3, mdvolume3, long, 8; + ŷ ż3, msvol3, msvol3, long, 8; + ż ŷ3, msvalue3, msvalue3, long, 6; + ŵ ŷ3, mdvalue3, mdvalue3, long, 6; + ŷ ż3, msval3, msval3, long, 6; + + ڵ4(), tjjcode4, tjjcode4, char, 4; + ż ŷ4, msvolume4, msvolume4, long, 8; + ŵ ŷ4, mdvolume4, mdvolume4, long, 8; + ŷ ż4, msvol4, msvol4, long, 8; + ż ŷ4, msvalue4, msvalue4, long, 6; + ŵ ŷ4, mdvalue4, mdvalue4, long, 6; + ŷ ż4, msval4, msval4, long, 6; + + ڵ5(), tjjcode5, tjjcode5, char, 4; + ż ŷ5, msvolume5, msvolume5, long, 8; + ŵ ŷ5, mdvolume5, mdvolume5, long, 8; + ŷ ż5, msvol5, msvol5, long, 8; + ż ŷ5, msvalue5, msvalue5, long, 6; + ŵ ŷ5, mdvalue5, mdvalue5, long, 6; + ŷ ż5, msval5, msval5, long, 6; + + ڵ6(), tjjcode6, tjjcode6, char, 4; + ż ŷ6, msvolume6, msvolume6, long, 8; + ŵ ŷ6, mdvolume6, mdvolume6, long, 8; + ŷ ż6, msvol6, msvol6, long, 8; + ż ŷ6, msvalue6, msvalue6, long, 6; + ŵ ŷ6, mdvalue6, mdvalue6, long, 6; + ŷ ż6, msval6, msval6, long, 6; + + ڵ7(), tjjcode7, tjjcode7, char, 4; + ż ŷ7, msvolume7, msvolume7, long, 8; + ŵ ŷ7, mdvolume7, mdvolume7, long, 8; + ŷ ż7, msvol7, msvol7, long, 8; + ż ŷ7, msvalue7, msvalue7, long, 6; + ŵ ŷ7, mdvalue7, mdvalue7, long, 6; + ŷ ż7, msval7, msval7, long, 6; + + ڵ8(), tjjcode8, tjjcode8, char, 4; + ż ŷ8, msvolume8, msvolume8, long, 8; + ŵ ŷ8, mdvolume8, mdvolume8, long, 8; + ŷ ż8, msvol8, msvol8, long, 8; + ż ŷ8, msvalue8, msvalue8, long, 6; + ŵ ŷ8, mdvalue8, mdvalue8, long, 6; + ŷ ż8, msval8, msval8, long, 6; + + ڵ9(), tjjcode9, tjjcode9, char, 4; + ż ŷ9, msvolume9, msvolume9, long, 8; + ŵ ŷ9, mdvolume9, mdvolume9, long, 8; + ŷ ż9, msvol9, msvol9, long, 8; + ż ŷ9, msvalue9, msvalue9, long, 6; + ŵ ŷ9, mdvalue9, mdvalue9, long, 6; + ŷ ż9, msval9, msval9, long, 6; + + ڵ10(), tjjcode10, tjjcode10, char, 4; + ż ŷ10, msvolume10, msvolume10, long, 8; + ŵ ŷ10, mdvolume10, mdvolume10, long, 8; + ŷ ż10, msvol10, msvol10, long, 8; + ż ŷ10, msvalue10, msvalue10, long, 6; + ŵ ŷ10, mdvalue10, mdvalue10, long, 6; + ŷ ż10, msval10, msval10, long, 6; + + ڵ11(Ÿ), tjjcode11, tjjcode11, char, 4; + ż ŷ11, msvolume11, msvolume11, long, 8; + ŵ ŷ11, mdvolume11, mdvolume11, long, 8; + ŷ ż11, msvol11, msvol11, long, 8; + ż ŷ11, msvalue11, msvalue11, long, 6; + ŵ ŷ11, mdvalue11, mdvalue11, long, 6; + ŷ ż11, msval11, msval11, long, 6; + + ڵ, upcode, upcode, char, 3; + + ڵ0(ݵ), tjjcode0, tjjcode0, char, 4; + ż ŷ0, msvolume0, msvolume0, long, 8; + ŵ ŷ0, mdvolume0, mdvolume0, long, 8; + ŷ ż0, msvol0, msvol0, long, 8; + ż ŷ0, msvalue0, msvalue0, long, 6; + ŵ ŷ0, mdvalue0, mdvalue0, long, 6; + ŷ ż0, msval0, msval0, long, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/BM_.res b/ls_sample/sample_python/Res/BM_.res new file mode 100644 index 0000000..9151f70 --- /dev/null +++ b/ls_sample/sample_python/Res/BM_.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, ںŸȲ(BM), BM_, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + ڵ, tjjcode, tjjcode, char, 4; + Žð, tjjtime, tjjtime, char, 8; + ż ŷ, msvolume, msvolume, long, 8; + ŵ ŷ, mdvolume, mdvolume, long, 8; + ŷ ż, msvol, msvol, long, 8; + ŷ ż , p_msvol, p_msvol, long, 8; + ż ŷ, msvalue, msvalue, long, 6; + ŵ ŷ, mdvalue, mdvalue, long, 6; + ŷ ż, msval, msval, long, 6; + ŷ ż , p_msval, p_msval, long, 6; + ڵ, upcode, upcode, char, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/BM__1.res b/ls_sample/sample_python/Res/BM__1.res new file mode 100644 index 0000000..9151f70 --- /dev/null +++ b/ls_sample/sample_python/Res/BM__1.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, ںŸȲ(BM), BM_, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + ڵ, tjjcode, tjjcode, char, 4; + Žð, tjjtime, tjjtime, char, 8; + ż ŷ, msvolume, msvolume, long, 8; + ŵ ŷ, mdvolume, mdvolume, long, 8; + ŷ ż, msvol, msvol, long, 8; + ŷ ż , p_msvol, p_msvol, long, 8; + ż ŷ, msvalue, msvalue, long, 6; + ŵ ŷ, mdvalue, mdvalue, long, 6; + ŷ ż, msval, msval, long, 6; + ŷ ż , p_msval, p_msval, long, 6; + ڵ, upcode, upcode, char, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/C01.res b/ls_sample/sample_python/Res/C01.res new file mode 100644 index 0000000..82d14a3 --- /dev/null +++ b/ls_sample/sample_python/Res/C01.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹü, C01, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + + Ϸùȣ, seq, seq, long, 11; + trcode, trcode, trcode, char, 11; + Ī׷ȣ, megrpno, megrpno, char, 2; + ID, boardid, boardid, char, 2; + ȸȣ, memberno, memberno, char, 5; + ȣ, bpno, bpno, char, 5; + ֹȣ, ordno, ordno, char, 10; + ֹȣ, ordordno, orgordno, char, 10; + ڵ, expcode, expcode, char, 12; + ȣ, yakseq, yakseq, char, 11; + üᰡ, cheprice, cheprice, float, 11.2; + ü, chevol, chevol, long, 10; + ID, sessionid, sessionid, char, 2; + ü, chedate, chedate, char, 8; + üð, chetime, chetime, char, 9; + ֱٿüᰡ, spdprc1, spdprc1, float, 11.2; + ٿüᰡ, spdprc2, spdprc2, float, 11.2; + ŵ, dosugb, dosugb, char, 1; + ¹ȣ1, accno1, accno1, char, 12; + ȣ,sihogagb, sihogagb, char, 1; + Źȣ, jakino, jakino, char, 5; + ֱǰ¹ȣ,daeyong, daeyong, char, 12; + mem_filler, mem_filler, mem_filler, char, 7; + mem_accno, mem_accno, mem_accno, char, 11; + mem_filler1, mem_filler, mem_filler1,char, 42; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/C01_1.res b/ls_sample/sample_python/Res/C01_1.res new file mode 100644 index 0000000..82d14a3 --- /dev/null +++ b/ls_sample/sample_python/Res/C01_1.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹü, C01, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + + Ϸùȣ, seq, seq, long, 11; + trcode, trcode, trcode, char, 11; + Ī׷ȣ, megrpno, megrpno, char, 2; + ID, boardid, boardid, char, 2; + ȸȣ, memberno, memberno, char, 5; + ȣ, bpno, bpno, char, 5; + ֹȣ, ordno, ordno, char, 10; + ֹȣ, ordordno, orgordno, char, 10; + ڵ, expcode, expcode, char, 12; + ȣ, yakseq, yakseq, char, 11; + üᰡ, cheprice, cheprice, float, 11.2; + ü, chevol, chevol, long, 10; + ID, sessionid, sessionid, char, 2; + ü, chedate, chedate, char, 8; + üð, chetime, chetime, char, 9; + ֱٿüᰡ, spdprc1, spdprc1, float, 11.2; + ٿüᰡ, spdprc2, spdprc2, float, 11.2; + ŵ, dosugb, dosugb, char, 1; + ¹ȣ1, accno1, accno1, char, 12; + ȣ,sihogagb, sihogagb, char, 1; + Źȣ, jakino, jakino, char, 5; + ֱǰ¹ȣ,daeyong, daeyong, char, 12; + mem_filler, mem_filler, mem_filler, char, 7; + mem_accno, mem_accno, mem_accno, char, 11; + mem_filler1, mem_filler, mem_filler1,char, 42; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CD0.res b/ls_sample/sample_python/Res/CD0.res new file mode 100644 index 0000000..a6de27b --- /dev/null +++ b/ls_sample/sample_python/Res/CD0.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, ǰǽðѰ(D0), CD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, float, 8.2; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, float, 8.2; + ڵ , futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CD0_1.res b/ls_sample/sample_python/Res/CD0_1.res new file mode 100644 index 0000000..a6de27b --- /dev/null +++ b/ls_sample/sample_python/Res/CD0_1.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, ǰǽðѰ(D0), CD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, float, 8.2; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, float, 8.2; + ڵ , futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CDPCQ04700.res b/ls_sample/sample_python/Res/CDPCQ04700.res new file mode 100644 index 0000000..07990a5 --- /dev/null +++ b/ls_sample/sample_python/Res/CDPCQ04700.res @@ -0,0 +1,144 @@ +BEGIN_FUNCTION_MAP + .Func, ŷ,CDPCQ04700,SERVICE=CDPCQ04700,headtype=B,CREATOR=ȭ,CREDATE=2012/06/14 10:25:09; + BEGIN_DATA_MAP + CDPCQ04700InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ۹ȣ, SrtNo, SrtNo, long, 10; + ǰڵ, PdptnCode, PdptnCode, char, 2; + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + end + CDPCQ04700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ۹ȣ, SrtNo, SrtNo, long, 10; + ǰڵ, PdptnCode, PdptnCode, char, 2; + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + end + CDPCQ04700OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + end + CDPCQ04700OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ŷ, TrdDt, TrdDt, char, 8; + ŷȣ, TrdNo, TrdNo, long, 10; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ȣ, SmryNo, SmryNo, char, 4; + , SmryNm, SmryNm, char, 40; + ұ, CancTpNm, CancTpNm, char, 20; + ŷ, TrdQty, TrdQty, long, 16; + ŷ, Trtax, Trtax, long, 16; + ȭݾ, FcurrAdjstAmt, FcurrAdjstAmt, double, 25.4; + ݾ, AdjstAmt, AdjstAmt, long, 16; + ü, OvdSum, OvdSum, long, 16; + ܱݾ, DpsBfbalAmt, DpsBfbalAmt, long, 16; + ŵ㺸ȯ, SellPldgRfundAmt, SellPldgRfundAmt, long, 16; + Ź㺸ܱݾ, DpspdgLoanBfbalAmt, DpspdgLoanBfbalAmt, long, 16; + ŷü, TrdmdaNm, TrdmdaNm, char, 40; + ŷȣ, OrgTrdNo, OrgTrdNo, long, 10; + , IsuNm, IsuNm, char, 40; + ŷܰ, TrdUprc, TrdUprc, double, 13.2; + , CmsnAmt, CmsnAmt, long, 16; + ȭݾ, FcurrCmsnAmt, FcurrCmsnAmt, double, 15.2; + ȯ̱ݾ, RfundDiffAmt, RfundDiffAmt, long, 16; + հ, RepayAmtSum, RepayAmtSum, long, 16; + DZܼ, SecCrbalQty, SecCrbalQty, long, 16; + ŵݴ㺸ȯڱݾ, CslLoanRfundIntrstAmt, CslLoanRfundIntrstAmt, long, 16; + Ź㺸ܱݾ, DpspdgLoanCrbalAmt, DpspdgLoanCrbalAmt, long, 16; + óð, TrxTime, TrxTime, char, 9; + ⳳȣ, Inouno, Inouno, long, 10; + ȣ, IsuNo, IsuNo, char, 12; + ŷݾ, TrdAmt, TrdAmt, long, 16; + ǥݾ, ChckAmt, ChckAmt, long, 16; + հݾ, TaxSumAmt, TaxSumAmt, long, 16; + ȭհݾ, FcurrTaxSumAmt, FcurrTaxSumAmt, double, 26.6; + ̿, IntrstUtlfee, IntrstUtlfee, long, 16; + ݾ, MnyDvdAmt, MnyDvdAmt, long, 16; + ̼߻ݾ, RcvblOcrAmt, RcvblOcrAmt, long, 16; + óȣ, TrxBrnNo, TrxBrnNo, char, 3; + ó, TrxBrnNm, TrxBrnNm, char, 40; + Ź㺸ݾ, DpspdgLoanAmt, DpspdgLoanAmt, long, 16; + Ź㺸ȯݾ, DpspdgLoanRfundAmt, DpspdgLoanRfundAmt, long, 16; + ذ, BasePrc, BasePrc, double, 13.2; + ݱܱݾ, DpsCrbalAmt, DpsCrbalAmt, long, 16; + ǥ, BoaAmt, BoaAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + Ǵ㺸߻, BcrLoanOcrAmt, BcrLoanOcrAmt, long, 16; + Ǵ㺸ܱ, BcrLoanBfbalAmt, BcrLoanBfbalAmt, long, 16; + Ÿűذ, BnsBasePrc, BnsBasePrc, double, 20.10; + ذ, TaxchrBasePrc, TaxchrBasePrc, double, 20.10; + ŷ¼, TrdUnit, TrdUnit, long, 16; + ܰ¼, BalUnit, BalUnit, long, 16; + , EvrTax, EvrTax, long, 16; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + Ǵ㺸ȯ, BcrLoanRfundAmt, BcrLoanRfundAmt, long, 16; + Ǵ㺸ܱ, BcrLoanCrbalAmt, BcrLoanCrbalAmt, long, 16; + ߰űݹ߻Ѿ, AddMgnOcrTotamt, AddMgnOcrTotamt, long, 16; + ߰űݹ߻ݾ, AddMnyMgnOcrAmt, AddMnyMgnOcrAmt, long, 16; + ߰űݳѾ, AddMgnDfryTotamt, AddMgnDfryTotamt, long, 16; + ߰űݳαݾ, AddMnyMgnDfryAmt, AddMnyMgnDfryAmt, long, 16; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + ҵ漼, Ictax, Ictax, long, 16; + ֹμ, Ihtax, Ihtax, long, 16; + , LoanDt, LoanDt, char, 8; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ȭݾ, FcurrAmt, FcurrAmt, double, 24.4; + ȭŷݾ, FcurrTrdAmt, FcurrTrdAmt, double, 24.4; + ȭ, FcurrDps, FcurrDps, double, 21.4; + ȭܱݾ, FcurrDpsBfbalAmt, FcurrDpsBfbalAmt, double, 21.4; + ¸, OppAcntNm, OppAcntNm, char, 40; + ¹ȣ, OppAcntNo, OppAcntNo, char, 20; + ȯݾ, LoanRfundAmt, LoanRfundAmt, long, 16; + ڱݾ, LoanIntrstAmt, LoanIntrstAmt, long, 16; + Ƿθ, AskpsnNm, AskpsnNm, char, 40; + ֹ, OrdDt, OrdDt, char, 8; + ŷȯ, TrdXchrat, TrdXchrat, double, 15.4; + , RdctCmsn, RdctCmsn, double, 21.4; + ȭ, FcurrStmpTx, FcurrStmpTx, double, 21.4; + ȭڱŷ, FcurrElecfnTrtax, FcurrElecfnTrtax, double, 21.4; + ȭǰŷ, FcstckTrtax, FcstckTrtax, double, 21.4; + end + CDPCQ04700OutBlock4,Out3(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + հݾ, PnlSumAmt, PnlSumAmt, long, 16; + , CtrctAsm, CtrctAsm, long, 16; + հݾ, CmsnAmtSumAmt, CmsnAmtSumAmt, long, 16; + end + CDPCQ04700OutBlock5,Out4(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Աݱݾ, MnyinAmt, MnyinAmt, long, 16; + ԰ݾ, SecinAmt, SecinAmt, long, 16; + ݱݾ, MnyoutAmt, MnyoutAmt, long, 16; + ݾ, SecoutAmt, SecoutAmt, long, 16; + ̱ݾ, DiffAmt, DiffAmt, long, 16; + ̱ݾ0, DiffAmt0, DiffAmt0, long, 16; + ŵ, SellQty, SellQty, long, 16; + ŵݾ, SellAmt, SellAmt, long, 16; + ŵ, SellCmsn, SellCmsn, long, 16; + , EvrTax, EvrTax, long, 19; + ȭŵݾ, FcurrSellAdjstAmt, FcurrSellAdjstAmt, double, 25.4; + ż, BuyQty, BuyQty, long, 16; + żݾ, BuyAmt, BuyAmt, long, 16; + ż, BuyCmsn, BuyCmsn, long, 16; + üἼ, ExecTax, ExecTax, long, 16; + ȭżݾ, FcurrBuyAdjstAmt, FcurrBuyAdjstAmt, double, 25.4; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CDPCQ04700_1.res b/ls_sample/sample_python/Res/CDPCQ04700_1.res new file mode 100644 index 0000000..07990a5 --- /dev/null +++ b/ls_sample/sample_python/Res/CDPCQ04700_1.res @@ -0,0 +1,144 @@ +BEGIN_FUNCTION_MAP + .Func, ŷ,CDPCQ04700,SERVICE=CDPCQ04700,headtype=B,CREATOR=ȭ,CREDATE=2012/06/14 10:25:09; + BEGIN_DATA_MAP + CDPCQ04700InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ۹ȣ, SrtNo, SrtNo, long, 10; + ǰڵ, PdptnCode, PdptnCode, char, 2; + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + end + CDPCQ04700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ۹ȣ, SrtNo, SrtNo, long, 10; + ǰڵ, PdptnCode, PdptnCode, char, 2; + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + end + CDPCQ04700OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + end + CDPCQ04700OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ŷ, TrdDt, TrdDt, char, 8; + ŷȣ, TrdNo, TrdNo, long, 10; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ȣ, SmryNo, SmryNo, char, 4; + , SmryNm, SmryNm, char, 40; + ұ, CancTpNm, CancTpNm, char, 20; + ŷ, TrdQty, TrdQty, long, 16; + ŷ, Trtax, Trtax, long, 16; + ȭݾ, FcurrAdjstAmt, FcurrAdjstAmt, double, 25.4; + ݾ, AdjstAmt, AdjstAmt, long, 16; + ü, OvdSum, OvdSum, long, 16; + ܱݾ, DpsBfbalAmt, DpsBfbalAmt, long, 16; + ŵ㺸ȯ, SellPldgRfundAmt, SellPldgRfundAmt, long, 16; + Ź㺸ܱݾ, DpspdgLoanBfbalAmt, DpspdgLoanBfbalAmt, long, 16; + ŷü, TrdmdaNm, TrdmdaNm, char, 40; + ŷȣ, OrgTrdNo, OrgTrdNo, long, 10; + , IsuNm, IsuNm, char, 40; + ŷܰ, TrdUprc, TrdUprc, double, 13.2; + , CmsnAmt, CmsnAmt, long, 16; + ȭݾ, FcurrCmsnAmt, FcurrCmsnAmt, double, 15.2; + ȯ̱ݾ, RfundDiffAmt, RfundDiffAmt, long, 16; + հ, RepayAmtSum, RepayAmtSum, long, 16; + DZܼ, SecCrbalQty, SecCrbalQty, long, 16; + ŵݴ㺸ȯڱݾ, CslLoanRfundIntrstAmt, CslLoanRfundIntrstAmt, long, 16; + Ź㺸ܱݾ, DpspdgLoanCrbalAmt, DpspdgLoanCrbalAmt, long, 16; + óð, TrxTime, TrxTime, char, 9; + ⳳȣ, Inouno, Inouno, long, 10; + ȣ, IsuNo, IsuNo, char, 12; + ŷݾ, TrdAmt, TrdAmt, long, 16; + ǥݾ, ChckAmt, ChckAmt, long, 16; + հݾ, TaxSumAmt, TaxSumAmt, long, 16; + ȭհݾ, FcurrTaxSumAmt, FcurrTaxSumAmt, double, 26.6; + ̿, IntrstUtlfee, IntrstUtlfee, long, 16; + ݾ, MnyDvdAmt, MnyDvdAmt, long, 16; + ̼߻ݾ, RcvblOcrAmt, RcvblOcrAmt, long, 16; + óȣ, TrxBrnNo, TrxBrnNo, char, 3; + ó, TrxBrnNm, TrxBrnNm, char, 40; + Ź㺸ݾ, DpspdgLoanAmt, DpspdgLoanAmt, long, 16; + Ź㺸ȯݾ, DpspdgLoanRfundAmt, DpspdgLoanRfundAmt, long, 16; + ذ, BasePrc, BasePrc, double, 13.2; + ݱܱݾ, DpsCrbalAmt, DpsCrbalAmt, long, 16; + ǥ, BoaAmt, BoaAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + Ǵ㺸߻, BcrLoanOcrAmt, BcrLoanOcrAmt, long, 16; + Ǵ㺸ܱ, BcrLoanBfbalAmt, BcrLoanBfbalAmt, long, 16; + Ÿűذ, BnsBasePrc, BnsBasePrc, double, 20.10; + ذ, TaxchrBasePrc, TaxchrBasePrc, double, 20.10; + ŷ¼, TrdUnit, TrdUnit, long, 16; + ܰ¼, BalUnit, BalUnit, long, 16; + , EvrTax, EvrTax, long, 16; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + Ǵ㺸ȯ, BcrLoanRfundAmt, BcrLoanRfundAmt, long, 16; + Ǵ㺸ܱ, BcrLoanCrbalAmt, BcrLoanCrbalAmt, long, 16; + ߰űݹ߻Ѿ, AddMgnOcrTotamt, AddMgnOcrTotamt, long, 16; + ߰űݹ߻ݾ, AddMnyMgnOcrAmt, AddMnyMgnOcrAmt, long, 16; + ߰űݳѾ, AddMgnDfryTotamt, AddMgnDfryTotamt, long, 16; + ߰űݳαݾ, AddMnyMgnDfryAmt, AddMnyMgnDfryAmt, long, 16; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + ҵ漼, Ictax, Ictax, long, 16; + ֹμ, Ihtax, Ihtax, long, 16; + , LoanDt, LoanDt, char, 8; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ȭݾ, FcurrAmt, FcurrAmt, double, 24.4; + ȭŷݾ, FcurrTrdAmt, FcurrTrdAmt, double, 24.4; + ȭ, FcurrDps, FcurrDps, double, 21.4; + ȭܱݾ, FcurrDpsBfbalAmt, FcurrDpsBfbalAmt, double, 21.4; + ¸, OppAcntNm, OppAcntNm, char, 40; + ¹ȣ, OppAcntNo, OppAcntNo, char, 20; + ȯݾ, LoanRfundAmt, LoanRfundAmt, long, 16; + ڱݾ, LoanIntrstAmt, LoanIntrstAmt, long, 16; + Ƿθ, AskpsnNm, AskpsnNm, char, 40; + ֹ, OrdDt, OrdDt, char, 8; + ŷȯ, TrdXchrat, TrdXchrat, double, 15.4; + , RdctCmsn, RdctCmsn, double, 21.4; + ȭ, FcurrStmpTx, FcurrStmpTx, double, 21.4; + ȭڱŷ, FcurrElecfnTrtax, FcurrElecfnTrtax, double, 21.4; + ȭǰŷ, FcstckTrtax, FcstckTrtax, double, 21.4; + end + CDPCQ04700OutBlock4,Out3(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + հݾ, PnlSumAmt, PnlSumAmt, long, 16; + , CtrctAsm, CtrctAsm, long, 16; + հݾ, CmsnAmtSumAmt, CmsnAmtSumAmt, long, 16; + end + CDPCQ04700OutBlock5,Out4(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Աݱݾ, MnyinAmt, MnyinAmt, long, 16; + ԰ݾ, SecinAmt, SecinAmt, long, 16; + ݱݾ, MnyoutAmt, MnyoutAmt, long, 16; + ݾ, SecoutAmt, SecoutAmt, long, 16; + ̱ݾ, DiffAmt, DiffAmt, long, 16; + ̱ݾ0, DiffAmt0, DiffAmt0, long, 16; + ŵ, SellQty, SellQty, long, 16; + ŵݾ, SellAmt, SellAmt, long, 16; + ŵ, SellCmsn, SellCmsn, long, 16; + , EvrTax, EvrTax, long, 19; + ȭŵݾ, FcurrSellAdjstAmt, FcurrSellAdjstAmt, double, 25.4; + ż, BuyQty, BuyQty, long, 16; + żݾ, BuyAmt, BuyAmt, long, 16; + ż, BuyCmsn, BuyCmsn, long, 16; + üἼ, ExecTax, ExecTax, long, 16; + ȭżݾ, FcurrBuyAdjstAmt, FcurrBuyAdjstAmt, double, 25.4; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAQ21100.res b/ls_sample/sample_python/Res/CEXAQ21100.res new file mode 100644 index 0000000..b78719b --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAQ21100.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func, ֹü᳻ȸ,CEXAQ21100,SERVICE=CEXAQ21100,headtype=B,CREATOR=̽,CREDATE=2012/07/02 21:01:29; + BEGIN_DATA_MAP + CEXAQ21100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ21100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ21100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ֹ, OrdQty, OrdQty, long, 16; + ü, ExecQty, ExecQty, long, 16; + end + CEXAQ21100OutBlock3,Out1(*EMPTY*),output,occurs; + begin + ¹ȣ1, AcntNo1, AcntNo1, char, 20; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ұи, MrcTpNm, MrcTpNm, char, 10; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ɼȣ, FnoOrdprcPtnNm, FnoOrdprcPtnNm, char, 40; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 25.8; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ֹ, OrdQty, OrdQty, long, 16; + ֹи, OrdTpNm, OrdTpNm, char, 10; + üᰡ, ExecPrc, ExecPrc, double, 13.2; + ü, ExecQty, ExecQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + Ÿü, CommdaNm, CommdaNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAQ21100_1.res b/ls_sample/sample_python/Res/CEXAQ21100_1.res new file mode 100644 index 0000000..b78719b --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAQ21100_1.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func, ֹü᳻ȸ,CEXAQ21100,SERVICE=CEXAQ21100,headtype=B,CREATOR=̽,CREDATE=2012/07/02 21:01:29; + BEGIN_DATA_MAP + CEXAQ21100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ21100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ21100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ֹ, OrdQty, OrdQty, long, 16; + ü, ExecQty, ExecQty, long, 16; + end + CEXAQ21100OutBlock3,Out1(*EMPTY*),output,occurs; + begin + ¹ȣ1, AcntNo1, AcntNo1, char, 20; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ұи, MrcTpNm, MrcTpNm, char, 10; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ɼȣ, FnoOrdprcPtnNm, FnoOrdprcPtnNm, char, 40; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 25.8; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ֹ, OrdQty, OrdQty, long, 16; + ֹи, OrdTpNm, OrdTpNm, char, 10; + üᰡ, ExecPrc, ExecPrc, double, 13.2; + ü, ExecQty, ExecQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + Ÿü, CommdaNm, CommdaNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAQ21200.res b/ls_sample/sample_python/Res/CEXAQ21200.res new file mode 100644 index 0000000..b2d83b8 --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAQ21200.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func, ֹ /ݾ ȸ,CEXAQ21200,SERVICE=CEXAQ21200,headtype=B,CREATOR=̽,CREDATE=2012/07/06 14:21:09; + BEGIN_DATA_MAP + CEXAQ21200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + end + CEXAQ21200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + end + CEXAQ21200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ȸ, QryDt, QryDt, char, 8; + 簡, NowPrc, NowPrc, double, 15.2; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + űֹɼ, NewOrdAbleQty, NewOrdAbleQty, long, 16; + ûֹɼ, LqdtOrdAbleQty, LqdtOrdAbleQty, long, 16; + 뿹űݾ, UsePreargMgn, UsePreargMgn, long, 16; + 뿹űݾ, UsePreargMnyMgn, UsePreargMnyMgn, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAQ21200_1.res b/ls_sample/sample_python/Res/CEXAQ21200_1.res new file mode 100644 index 0000000..b2d83b8 --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAQ21200_1.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func, ֹ /ݾ ȸ,CEXAQ21200,SERVICE=CEXAQ21200,headtype=B,CREATOR=̽,CREDATE=2012/07/06 14:21:09; + BEGIN_DATA_MAP + CEXAQ21200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + end + CEXAQ21200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + end + CEXAQ21200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ȸ, QryDt, QryDt, char, 8; + 簡, NowPrc, NowPrc, double, 15.2; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + űֹɼ, NewOrdAbleQty, NewOrdAbleQty, long, 16; + ûֹɼ, LqdtOrdAbleQty, LqdtOrdAbleQty, long, 16; + 뿹űݾ, UsePreargMgn, UsePreargMgn, long, 16; + 뿹űݾ, UsePreargMnyMgn, UsePreargMnyMgn, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAQ31100.res b/ls_sample/sample_python/Res/CEXAQ31100.res new file mode 100644 index 0000000..70c2308 --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAQ31100.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func, ߰ܰ Ȳ,CEXAQ31100,SERVICE=CEXAQ31100,headtype=B,CREATOR=̽,CREDATE=2012/12/22 14:39:24; + BEGIN_DATA_MAP + CEXAQ31100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ڵ, IsuCode, IsuCode, char, 12; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ڵ, IsuCode, IsuCode, char, 12; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31100OutBlock2,Out1(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ¸, AcntNm, AcntNm, char, 40; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + , AdjstDfamt, AdjstDfamt, long, 16; + 򰡱ݾ, TotEvalAmt, TotEvalAmt, long, 16; + Ѽͱݾ, TotPnlAmt, TotPnlAmt, long, 16; + end + CEXAQ31100OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ̰, UnsttQty, UnsttQty, long, 16; + û갡ɼ, LqdtAbleQty, LqdtAbleQty, long, 16; + հ, FnoAvrPrc, FnoAvrPrc, double, 19.8; + ذ, BasePrc, BasePrc, double, 30.10; + 簡, NowPrc, NowPrc, double, 13.2; + , CmpPrc, CmpPrc, double, 13.2; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + 򰡼, EvalPnl, EvalPnl, long, 16; + ͷ, PnlRat, PnlRat, double, 12.6; + ̰ݾ, UnsttAmt, UnsttAmt, long, 16; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAQ31100_1.res b/ls_sample/sample_python/Res/CEXAQ31100_1.res new file mode 100644 index 0000000..70c2308 --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAQ31100_1.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func, ߰ܰ Ȳ,CEXAQ31100,SERVICE=CEXAQ31100,headtype=B,CREATOR=̽,CREDATE=2012/12/22 14:39:24; + BEGIN_DATA_MAP + CEXAQ31100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ڵ, IsuCode, IsuCode, char, 12; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ڵ, IsuCode, IsuCode, char, 12; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31100OutBlock2,Out1(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ¸, AcntNm, AcntNm, char, 40; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + , AdjstDfamt, AdjstDfamt, long, 16; + 򰡱ݾ, TotEvalAmt, TotEvalAmt, long, 16; + Ѽͱݾ, TotPnlAmt, TotPnlAmt, long, 16; + end + CEXAQ31100OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ̰, UnsttQty, UnsttQty, long, 16; + û갡ɼ, LqdtAbleQty, LqdtAbleQty, long, 16; + հ, FnoAvrPrc, FnoAvrPrc, double, 19.8; + ذ, BasePrc, BasePrc, double, 30.10; + 簡, NowPrc, NowPrc, double, 13.2; + , CmpPrc, CmpPrc, double, 13.2; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + 򰡼, EvalPnl, EvalPnl, long, 16; + ͷ, PnlRat, PnlRat, double, 12.6; + ̰ݾ, UnsttAmt, UnsttAmt, long, 16; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAQ31200.res b/ls_sample/sample_python/Res/CEXAQ31200.res new file mode 100644 index 0000000..d83e5b4 --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAQ31200.res @@ -0,0 +1,66 @@ +BEGIN_FUNCTION_MAP + .Func, Ź ܰȸ,CEXAQ31200,SERVICE=CEXAQ31200,headtype=B,CREATOR=,CREDATE=2014/12/08 10:30:17; + BEGIN_DATA_MAP + CEXAQ31200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31200OutBlock2,Out1(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ¸, AcntNm, AcntNm, char, 40; + 򰡿ŹѾ, EvalDpsamtTotamt, EvalDpsamtTotamt, long, 15; + 򰡿Źݾ, MnyEvalDpstgAmt, MnyEvalDpstgAmt, long, 15; + ŹѾ, DpsamtTotamt, DpsamtTotamt, long, 16; + Ź, DpstgMny, DpstgMny, long, 16; + Ⱑѱݾ, PsnOutAbleTotAmt, PsnOutAbleTotAmt, long, 15; + Ⱑݾ, PsnOutAbleCurAmt, PsnOutAbleCurAmt, long, 16; + ֹѱݾ, OrdAbleTotAmt, OrdAbleTotAmt, long, 15; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ŹűѾ, CsgnMgnTotamt, CsgnMgnTotamt, long, 16; + Źűݾ, MnyCsgnMgn, MnyCsgnMgn, long, 16; + ߰űѾ, AddMgnTotamt, AddMgnTotamt, long, 15; + ߰űݾ, MnyAddMgn, MnyAddMgn, long, 16; + , CmsnAmt, CmsnAmt, long, 16; + 򰡼ͱݾ, FutsEvalPnlAmt, FutsEvalPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + ɼ򰡱ݾ, OptEvalAmt, OptEvalAmt, long, 16; + ɼǸŸżͱݾ, OptBnsplAmt, OptBnsplAmt, long, 16; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + Ѽͱݾ, TotPnlAmt, TotPnlAmt, long, 16; + ͱݾ, NetPnlAmt, NetPnlAmt, long, 16; + 򰡱ݾ, TotEvalAmt, TotEvalAmt, long, 16; + Աݱݾ, MnyinAmt, MnyinAmt, long, 16; + ݱݾ, MnyoutAmt, MnyoutAmt, long, 16; + ݾ, FutsCmsnAmt, FutsCmsnAmt, long, 16; + end + CEXAQ31200OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ̰, UnsttQty, UnsttQty, long, 16; + հ, FnoAvrPrc, FnoAvrPrc, double, 19.8; + 簡, NowPrc, NowPrc, double, 13.2; + , CmpPrc, CmpPrc, double, 13.2; + 򰡼, EvalPnl, EvalPnl, long, 16; + ͷ, PnlRat, PnlRat, double, 12.6; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + û갡ɼ, LqdtAbleQty, LqdtAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAQ31200_1.res b/ls_sample/sample_python/Res/CEXAQ31200_1.res new file mode 100644 index 0000000..d83e5b4 --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAQ31200_1.res @@ -0,0 +1,66 @@ +BEGIN_FUNCTION_MAP + .Func, Ź ܰȸ,CEXAQ31200,SERVICE=CEXAQ31200,headtype=B,CREATOR=,CREDATE=2014/12/08 10:30:17; + BEGIN_DATA_MAP + CEXAQ31200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31200OutBlock2,Out1(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ¸, AcntNm, AcntNm, char, 40; + 򰡿ŹѾ, EvalDpsamtTotamt, EvalDpsamtTotamt, long, 15; + 򰡿Źݾ, MnyEvalDpstgAmt, MnyEvalDpstgAmt, long, 15; + ŹѾ, DpsamtTotamt, DpsamtTotamt, long, 16; + Ź, DpstgMny, DpstgMny, long, 16; + Ⱑѱݾ, PsnOutAbleTotAmt, PsnOutAbleTotAmt, long, 15; + Ⱑݾ, PsnOutAbleCurAmt, PsnOutAbleCurAmt, long, 16; + ֹѱݾ, OrdAbleTotAmt, OrdAbleTotAmt, long, 15; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ŹűѾ, CsgnMgnTotamt, CsgnMgnTotamt, long, 16; + Źűݾ, MnyCsgnMgn, MnyCsgnMgn, long, 16; + ߰űѾ, AddMgnTotamt, AddMgnTotamt, long, 15; + ߰űݾ, MnyAddMgn, MnyAddMgn, long, 16; + , CmsnAmt, CmsnAmt, long, 16; + 򰡼ͱݾ, FutsEvalPnlAmt, FutsEvalPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + ɼ򰡱ݾ, OptEvalAmt, OptEvalAmt, long, 16; + ɼǸŸżͱݾ, OptBnsplAmt, OptBnsplAmt, long, 16; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + Ѽͱݾ, TotPnlAmt, TotPnlAmt, long, 16; + ͱݾ, NetPnlAmt, NetPnlAmt, long, 16; + 򰡱ݾ, TotEvalAmt, TotEvalAmt, long, 16; + Աݱݾ, MnyinAmt, MnyinAmt, long, 16; + ݱݾ, MnyoutAmt, MnyoutAmt, long, 16; + ݾ, FutsCmsnAmt, FutsCmsnAmt, long, 16; + end + CEXAQ31200OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ̰, UnsttQty, UnsttQty, long, 16; + հ, FnoAvrPrc, FnoAvrPrc, double, 19.8; + 簡, NowPrc, NowPrc, double, 13.2; + , CmpPrc, CmpPrc, double, 13.2; + 򰡼, EvalPnl, EvalPnl, long, 16; + ͷ, PnlRat, PnlRat, double, 12.6; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + û갡ɼ, LqdtAbleQty, LqdtAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAQ44200.res b/ls_sample/sample_python/Res/CEXAQ44200.res new file mode 100644 index 0000000..d41fe2b --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAQ44200.res @@ -0,0 +1,74 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX ߰ɼ Ⱓֹüȸ,CEXAQ44200,SERVICE=CEXAQ44200,headtype=B,CREATOR=,CREDATE=2012/11/08 17:10:28; + BEGIN_DATA_MAP + CEXAQ44200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ɼǰŷڵ, FnoTrdPtnCode, FnoTrdPtnCode, char, 2; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ44200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ɼǰŷڵ, FnoTrdPtnCode, FnoTrdPtnCode, char, 2; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ44200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdQty, OrdQty, long, 16; + ü, ExecQty, ExecQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + üᰡ, ExecPrc, ExecPrc, double, 15.2; + end + CEXAQ44200OutBlock3,Out1(*EMPTY*),output,occurs; + begin + ¹ȣ1, AcntNo1, AcntNo1, char, 20; + ¸, AcntNm, AcntNm, char, 40; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣڵ, ErxOrdprcTpCode, ErxOrdprcTpCode, char, 1; + ұи, MrcTpNm, MrcTpNm, char, 10; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ڵ, CodeNm, CodeNm, char, 40; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ֹ, OrdQty, OrdQty, long, 16; + ɼǰźλڵ, FnoRjtRsnCode, FnoRjtRsnCode, char, 3; + ֹи, OrdTpNm, OrdTpNm, char, 10; + üᱸи, ExecTpNm, ExecTpNm, char, 10; + üᰡ, ExecPrc, ExecPrc, double, 13.2; + ü, ExecQty, ExecQty, long, 16; + üð, ExecTime, ExecTime, char, 9; + üȣ, ExecNo, ExecNo, long, 10; + ü, UnercQty, UnercQty, long, 16; + ID, UserId, UserId, char, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + Ÿüڵ, CommdaCodeNm, CommdaCodeNm, char, 40; + IPּ, IpAddr, IpAddr, char, 16; + ŷ, TrdPtnTpNm, TrdPtnTpNm, char, 20; + ֹڵ, ErxOrdStatCode, ErxOrdStatCode, char, 1; + ڵ0, CodeNm0, CodeNm0, char, 40; + ŷð, ExchRcptTime, ExchRcptTime, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAQ44200_1.res b/ls_sample/sample_python/Res/CEXAQ44200_1.res new file mode 100644 index 0000000..d41fe2b --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAQ44200_1.res @@ -0,0 +1,74 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX ߰ɼ Ⱓֹüȸ,CEXAQ44200,SERVICE=CEXAQ44200,headtype=B,CREATOR=,CREDATE=2012/11/08 17:10:28; + BEGIN_DATA_MAP + CEXAQ44200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ɼǰŷڵ, FnoTrdPtnCode, FnoTrdPtnCode, char, 2; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ44200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ɼǰŷڵ, FnoTrdPtnCode, FnoTrdPtnCode, char, 2; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ44200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdQty, OrdQty, long, 16; + ü, ExecQty, ExecQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + üᰡ, ExecPrc, ExecPrc, double, 15.2; + end + CEXAQ44200OutBlock3,Out1(*EMPTY*),output,occurs; + begin + ¹ȣ1, AcntNo1, AcntNo1, char, 20; + ¸, AcntNm, AcntNm, char, 40; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣڵ, ErxOrdprcTpCode, ErxOrdprcTpCode, char, 1; + ұи, MrcTpNm, MrcTpNm, char, 10; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ڵ, CodeNm, CodeNm, char, 40; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ֹ, OrdQty, OrdQty, long, 16; + ɼǰźλڵ, FnoRjtRsnCode, FnoRjtRsnCode, char, 3; + ֹи, OrdTpNm, OrdTpNm, char, 10; + üᱸи, ExecTpNm, ExecTpNm, char, 10; + üᰡ, ExecPrc, ExecPrc, double, 13.2; + ü, ExecQty, ExecQty, long, 16; + üð, ExecTime, ExecTime, char, 9; + üȣ, ExecNo, ExecNo, long, 10; + ü, UnercQty, UnercQty, long, 16; + ID, UserId, UserId, char, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + Ÿüڵ, CommdaCodeNm, CommdaCodeNm, char, 40; + IPּ, IpAddr, IpAddr, char, 16; + ŷ, TrdPtnTpNm, TrdPtnTpNm, char, 20; + ֹڵ, ErxOrdStatCode, ErxOrdStatCode, char, 1; + ڵ0, CodeNm0, CodeNm0, char, 40; + ŷð, ExchRcptTime, ExchRcptTime, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAT11100.res b/ls_sample/sample_python/Res/CEXAT11100.res new file mode 100644 index 0000000..db5130a --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAT11100.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func, ż/ŵֹ,CEXAT11100,SERVICE=CEXAT11100,headtype=B,CREATOR=̽,CREDATE=2012/06/27 20:48:05; + BEGIN_DATA_MAP + CEXAT11100InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 15.2; + ֹ, OrdQty, OrdQty, long, 16; + end + CEXAT11100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 15.2; + ֹ, OrdQty, OrdQty, long, 16; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 25.8; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CEXAT11100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹű, OrdMgn, OrdMgn, long, 16; + ֹű, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAT11100_1.res b/ls_sample/sample_python/Res/CEXAT11100_1.res new file mode 100644 index 0000000..db5130a --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAT11100_1.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func, ż/ŵֹ,CEXAT11100,SERVICE=CEXAT11100,headtype=B,CREATOR=̽,CREDATE=2012/06/27 20:48:05; + BEGIN_DATA_MAP + CEXAT11100InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 15.2; + ֹ, OrdQty, OrdQty, long, 16; + end + CEXAT11100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 15.2; + ֹ, OrdQty, OrdQty, long, 16; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 25.8; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CEXAT11100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹű, OrdMgn, OrdMgn, long, 16; + ֹű, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAT11200.res b/ls_sample/sample_python/Res/CEXAT11200.res new file mode 100644 index 0000000..98407ed --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAT11200.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP + .Func, ֹ,CEXAT11200,SERVICE=CEXAT11200,headtype=B,CREATOR=̽,CREDATE=2012/06/27 21:27:10; + BEGIN_DATA_MAP + CEXAT11200InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 15.2; + end + CEXAT11200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 15.2; + , MdfyQty, MdfyQty, long, 16; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 25.8; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CEXAT11200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAT11200_1.res b/ls_sample/sample_python/Res/CEXAT11200_1.res new file mode 100644 index 0000000..98407ed --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAT11200_1.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP + .Func, ֹ,CEXAT11200,SERVICE=CEXAT11200,headtype=B,CREATOR=̽,CREDATE=2012/06/27 21:27:10; + BEGIN_DATA_MAP + CEXAT11200InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 15.2; + end + CEXAT11200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 15.2; + , MdfyQty, MdfyQty, long, 16; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 25.8; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CEXAT11200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAT11300.res b/ls_sample/sample_python/Res/CEXAT11300.res new file mode 100644 index 0000000..c5a56e5 --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAT11300.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func, ֹ,CEXAT11300,SERVICE=CEXAT11300,headtype=B,CREATOR=̽,CREDATE=2012/06/27 21:31:41; + BEGIN_DATA_MAP + CEXAT11300InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + end + CEXAT11300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ҽ, CancQty, CancQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CEXAT11300OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CEXAT11300_1.res b/ls_sample/sample_python/Res/CEXAT11300_1.res new file mode 100644 index 0000000..c5a56e5 --- /dev/null +++ b/ls_sample/sample_python/Res/CEXAT11300_1.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func, ֹ,CEXAT11300,SERVICE=CEXAT11300,headtype=B,CREATOR=̽,CREDATE=2012/06/27 21:31:41; + BEGIN_DATA_MAP + CEXAT11300InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + end + CEXAT11300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ҽ, CancQty, CancQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CEXAT11300OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CFOAQ00600.res b/ls_sample/sample_python/Res/CFOAQ00600.res new file mode 100644 index 0000000..1a19106 --- /dev/null +++ b/ls_sample/sample_python/Res/CFOAQ00600.res @@ -0,0 +1,67 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹü᳻ȸ,CFOAQ00600,ENCRYPT,SERVICE=CFOAQ00600,headtype=B,CREATOR=,CREDATE=2012/03/12 16:35:20; + BEGIN_DATA_MAP + CFOAQ00600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ɼǺзڵ, FnoClssCode, FnoClssCode, char, 2; + ǰڵ, PrdgrpCode, PrdgrpCode, char, 2; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CFOAQ00600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ɼǺзڵ, FnoClssCode, FnoClssCode, char, 2; + ǰڵ, PrdgrpCode, PrdgrpCode, char, 2; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CFOAQ00600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ֹ, FutsOrdQty, FutsOrdQty, long, 16; + ü, FutsExecQty, FutsExecQty, long, 16; + ɼֹ, OptOrdQty, OptOrdQty, long, 16; + ɼü, OptExecQty, OptExecQty, long, 16; + end + CFOAQ00600OutBlock3,Out1(*EMPTY*),output,occurs; + begin + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ұи, MrcTpNm, MrcTpNm, char, 10; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼȣ, FnoOrdprcPtnNm, FnoOrdprcPtnNm, char, 40; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ֹ, OrdQty, OrdQty, long, 16; + ֹи, OrdTpNm, OrdTpNm, char, 10; + üᱸи, ExecTpNm, ExecTpNm, char, 10; + üᰡ, ExecPrc, ExecPrc, double, 13.2; + ü, ExecQty, ExecQty, long, 16; + ð, CtrctTime, CtrctTime, char, 9; + ȣ, CtrctNo, CtrctNo, long, 10; + üȣ, ExecNo, ExecNo, long, 10; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + ü, UnercQty, UnercQty, long, 16; + ID, UserId, UserId, char, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + Ÿüڵ, CommdaCodeNm, CommdaCodeNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CFOAQ00600_1.res b/ls_sample/sample_python/Res/CFOAQ00600_1.res new file mode 100644 index 0000000..1a19106 --- /dev/null +++ b/ls_sample/sample_python/Res/CFOAQ00600_1.res @@ -0,0 +1,67 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹü᳻ȸ,CFOAQ00600,ENCRYPT,SERVICE=CFOAQ00600,headtype=B,CREATOR=,CREDATE=2012/03/12 16:35:20; + BEGIN_DATA_MAP + CFOAQ00600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ɼǺзڵ, FnoClssCode, FnoClssCode, char, 2; + ǰڵ, PrdgrpCode, PrdgrpCode, char, 2; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CFOAQ00600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ɼǺзڵ, FnoClssCode, FnoClssCode, char, 2; + ǰڵ, PrdgrpCode, PrdgrpCode, char, 2; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CFOAQ00600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ֹ, FutsOrdQty, FutsOrdQty, long, 16; + ü, FutsExecQty, FutsExecQty, long, 16; + ɼֹ, OptOrdQty, OptOrdQty, long, 16; + ɼü, OptExecQty, OptExecQty, long, 16; + end + CFOAQ00600OutBlock3,Out1(*EMPTY*),output,occurs; + begin + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ұи, MrcTpNm, MrcTpNm, char, 10; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼȣ, FnoOrdprcPtnNm, FnoOrdprcPtnNm, char, 40; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ֹ, OrdQty, OrdQty, long, 16; + ֹи, OrdTpNm, OrdTpNm, char, 10; + üᱸи, ExecTpNm, ExecTpNm, char, 10; + üᰡ, ExecPrc, ExecPrc, double, 13.2; + ü, ExecQty, ExecQty, long, 16; + ð, CtrctTime, CtrctTime, char, 9; + ȣ, CtrctNo, CtrctNo, long, 10; + üȣ, ExecNo, ExecNo, long, 10; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + ü, UnercQty, UnercQty, long, 16; + ID, UserId, UserId, char, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + Ÿüڵ, CommdaCodeNm, CommdaCodeNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CFOAQ10100.res b/ls_sample/sample_python/Res/CFOAQ10100.res new file mode 100644 index 0000000..6e09f1d --- /dev/null +++ b/ls_sample/sample_python/Res/CFOAQ10100.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹɼȸ,CFOAQ10100,SERVICE=CFOAQ10100,headtype=B,CREATOR=,CREDATE=2022/02/16 14:27:58; + BEGIN_DATA_MAP + CFOAQ10100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + end + CFOAQ10100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + end + CFOAQ10100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ȸ, QryDt, QryDt, char, 8; + ɼ簡, FnoNowPrc, FnoNowPrc, double, 27.8; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + űֹɼ, NewOrdAbleQty, NewOrdAbleQty, long, 16; + ûֹɼ, LqdtOrdAbleQty, LqdtOrdAbleQty, long, 16; + 뿹űݾ, UsePreargMgn, UsePreargMgn, long, 16; + 뿹űݾ, UsePreargMnyMgn, UsePreargMnyMgn, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CFOAQ10100_1.res b/ls_sample/sample_python/Res/CFOAQ10100_1.res new file mode 100644 index 0000000..6e09f1d --- /dev/null +++ b/ls_sample/sample_python/Res/CFOAQ10100_1.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹɼȸ,CFOAQ10100,SERVICE=CFOAQ10100,headtype=B,CREATOR=,CREDATE=2022/02/16 14:27:58; + BEGIN_DATA_MAP + CFOAQ10100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + end + CFOAQ10100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + end + CFOAQ10100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ȸ, QryDt, QryDt, char, 8; + ɼ簡, FnoNowPrc, FnoNowPrc, double, 27.8; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + űֹɼ, NewOrdAbleQty, NewOrdAbleQty, long, 16; + ûֹɼ, LqdtOrdAbleQty, LqdtOrdAbleQty, long, 16; + 뿹űݾ, UsePreargMgn, UsePreargMgn, long, 16; + 뿹űݾ, UsePreargMnyMgn, UsePreargMnyMgn, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CFOAT00100.res b/ls_sample/sample_python/Res/CFOAT00100.res new file mode 100644 index 0000000..75ad30e --- /dev/null +++ b/ls_sample/sample_python/Res/CFOAT00100.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹ,CFOAT00100,SERVICE=CFOAT00100,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2022/02/16 14:20:59; + BEGIN_DATA_MAP + CFOAT00100InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ֹ, OrdQty, OrdQty, long, 16; + end + CFOAT00100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼֹڵ, FnoOrdPtnCode, FnoOrdPtnCode, char, 2; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼǰŷڵ, FnoTrdPtnCode, FnoTrdPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ֹ, OrdQty, OrdQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ǸŸſϷð, DscusBnsCmpltTime, DscusBnsCmpltTime, char, 9; + ׷ID, GrpId, GrpId, char, 20; + ֹϷùȣ, OrdSeqno, OrdSeqno, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ׸ȣ, ItemNo, ItemNo, long, 16; + ùȣ, OpDrtnNo, OpDrtnNo, char, 12; + ȣ, MgempNo, MgempNo, char, 9; + ݵID, FundId, FundId, char, 12; + ݵֹȣ, FundOrdNo, FundOrdNo, long, 10; + end + CFOAT00100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹű, OrdMgn, OrdMgn, long, 16; + ֹű, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CFOAT00100 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/CFOAT00100_1.res b/ls_sample/sample_python/Res/CFOAT00100_1.res new file mode 100644 index 0000000..75ad30e --- /dev/null +++ b/ls_sample/sample_python/Res/CFOAT00100_1.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹ,CFOAT00100,SERVICE=CFOAT00100,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2022/02/16 14:20:59; + BEGIN_DATA_MAP + CFOAT00100InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ֹ, OrdQty, OrdQty, long, 16; + end + CFOAT00100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼֹڵ, FnoOrdPtnCode, FnoOrdPtnCode, char, 2; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼǰŷڵ, FnoTrdPtnCode, FnoTrdPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ֹ, OrdQty, OrdQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ǸŸſϷð, DscusBnsCmpltTime, DscusBnsCmpltTime, char, 9; + ׷ID, GrpId, GrpId, char, 20; + ֹϷùȣ, OrdSeqno, OrdSeqno, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ׸ȣ, ItemNo, ItemNo, long, 16; + ùȣ, OpDrtnNo, OpDrtnNo, char, 12; + ȣ, MgempNo, MgempNo, char, 9; + ݵID, FundId, FundId, char, 12; + ݵֹȣ, FundOrdNo, FundOrdNo, long, 10; + end + CFOAT00100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹű, OrdMgn, OrdMgn, long, 16; + ֹű, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CFOAT00100 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/CFOAT00200.res b/ls_sample/sample_python/Res/CFOAT00200.res new file mode 100644 index 0000000..88ebc8e --- /dev/null +++ b/ls_sample/sample_python/Res/CFOAT00200.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹ,CFOAT00200,SERVICE=CFOAT00200,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2012/03/12 13:31:21; + BEGIN_DATA_MAP + CFOAT00200InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + , MdfyQty, MdfyQty, long, 16; + end + CFOAT00200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ɼֹڵ, FnoOrdPtnCode, FnoOrdPtnCode, char, 2; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + , MdfyQty, MdfyQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ǸŸſϷð, DscusBnsCmpltTime, DscusBnsCmpltTime, char, 9; + ׷ID, GrpId, GrpId, char, 20; + ֹϷùȣ, OrdSeqno, OrdSeqno, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + ȣ, MgempNo, MgempNo, char, 9; + ݵID, FundId, FundId, char, 12; + ݵֹȣ, FundOrgOrdNo, FundOrgOrdNo, long, 10; + ݵֹȣ, FundOrdNo, FundOrdNo, long, 10; + end + CFOAT00200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CFOAT00200 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/CFOAT00200_1.res b/ls_sample/sample_python/Res/CFOAT00200_1.res new file mode 100644 index 0000000..88ebc8e --- /dev/null +++ b/ls_sample/sample_python/Res/CFOAT00200_1.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹ,CFOAT00200,SERVICE=CFOAT00200,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2012/03/12 13:31:21; + BEGIN_DATA_MAP + CFOAT00200InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + , MdfyQty, MdfyQty, long, 16; + end + CFOAT00200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ɼֹڵ, FnoOrdPtnCode, FnoOrdPtnCode, char, 2; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + , MdfyQty, MdfyQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ǸŸſϷð, DscusBnsCmpltTime, DscusBnsCmpltTime, char, 9; + ׷ID, GrpId, GrpId, char, 20; + ֹϷùȣ, OrdSeqno, OrdSeqno, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + ȣ, MgempNo, MgempNo, char, 9; + ݵID, FundId, FundId, char, 12; + ݵֹȣ, FundOrgOrdNo, FundOrgOrdNo, long, 10; + ݵֹȣ, FundOrdNo, FundOrdNo, long, 10; + end + CFOAT00200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CFOAT00200 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/CFOAT00300.res b/ls_sample/sample_python/Res/CFOAT00300.res new file mode 100644 index 0000000..9f54acc --- /dev/null +++ b/ls_sample/sample_python/Res/CFOAT00300.res @@ -0,0 +1,50 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹ,CFOAT00300,SERVICE=CFOAT00300,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/19 17:39:04; + BEGIN_DATA_MAP + CFOAT00300InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + Ҽ, CancQty, CancQty, long, 16; + end + CFOAT00300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ɼֹڵ, FnoOrdPtnCode, FnoOrdPtnCode, char, 2; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + Ҽ, CancQty, CancQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ǸŸſϷð, DscusBnsCmpltTime, DscusBnsCmpltTime, char, 9; + ׷ID, GrpId, GrpId, char, 20; + ֹϷùȣ, OrdSeqno, OrdSeqno, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + ȣ, MgempNo, MgempNo, char, 9; + ݵID, FundId, FundId, char, 12; + ݵֹȣ, FundOrgOrdNo, FundOrgOrdNo, long, 10; + ݵֹȣ, FundOrdNo, FundOrdNo, long, 10; + end + CFOAT00300OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CFOAT00300 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/CFOAT00300_1.res b/ls_sample/sample_python/Res/CFOAT00300_1.res new file mode 100644 index 0000000..9f54acc --- /dev/null +++ b/ls_sample/sample_python/Res/CFOAT00300_1.res @@ -0,0 +1,50 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹ,CFOAT00300,SERVICE=CFOAT00300,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/19 17:39:04; + BEGIN_DATA_MAP + CFOAT00300InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + Ҽ, CancQty, CancQty, long, 16; + end + CFOAT00300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ɼֹڵ, FnoOrdPtnCode, FnoOrdPtnCode, char, 2; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + Ҽ, CancQty, CancQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ǸŸſϷð, DscusBnsCmpltTime, DscusBnsCmpltTime, char, 9; + ׷ID, GrpId, GrpId, char, 20; + ֹϷùȣ, OrdSeqno, OrdSeqno, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + ȣ, MgempNo, MgempNo, char, 9; + ݵID, FundId, FundId, char, 12; + ݵֹȣ, FundOrgOrdNo, FundOrgOrdNo, long, 10; + ݵֹȣ, FundOrdNo, FundOrdNo, long, 10; + end + CFOAT00300OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CFOAT00300 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/CFOBQ10500.res b/ls_sample/sample_python/Res/CFOBQ10500.res new file mode 100644 index 0000000..0e7625b --- /dev/null +++ b/ls_sample/sample_python/Res/CFOBQ10500.res @@ -0,0 +1,65 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ¿Źűȸ,CFOBQ10500,ENCRYPT,SERVICE=CFOBQ10500,headtype=B,CREATOR=,CREDATE=2012/03/12 15:03:11; + BEGIN_DATA_MAP + CFOBQ10500InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + end + CFOBQ10500OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + end + CFOBQ10500OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ŹѾ, DpsamtTotamt, DpsamtTotamt, long, 16; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + 翹ŹѾ, FilupDpsamtTotamt, FilupDpsamtTotamt, long, 16; + 翹, FilupDps, FilupDps, long, 16; + ͱݾ, FutsPnlAmt, FutsPnlAmt, long, 16; + Ⱑɱݾ, WthdwAbleAmt, WthdwAbleAmt, long, 16; + Ⱑݾ, PsnOutAbleCurAmt, PsnOutAbleCurAmt, long, 16; + Ⱑɴݾ, PsnOutAbleSubstAmt, PsnOutAbleSubstAmt, long, 16; + űݾ, Mgn, Mgn, long, 16; + űݾ, MnyMgn, MnyMgn, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ߰űݾ, AddMgn, AddMgn, long, 16; + ߰űݾ, MnyAddMgn, MnyAddMgn, long, 16; + ϼǥԱݾ, AmtPrdayChckInAmt, AmtPrdayChckInAmt, long, 16; + ɼϴŵݾ, FnoPrdaySubstSellAmt, FnoPrdaySubstSellAmt, long, 16; + ɼDZϴŵݾ, FnoCrdaySubstSellAmt, FnoCrdaySubstSellAmt, long, 16; + ɼϰԱݾ, FnoPrdayFdamt, FnoPrdayFdamt, long, 16; + ɼDZϰԱݾ, FnoCrdayFdamt, FnoCrdayFdamt, long, 16; + ȭݾ, FcurrSubstAmt, FcurrSubstAmt, long, 16; + ɼǰ»űݸ, FnoAcntAfmgnNm, FnoAcntAfmgnNm, char, 20; + end + CFOBQ10500OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ǰڵ, PdGrpCodeNm, PdGrpCodeNm, char, 20; + űݾ, NetRiskMgn, NetRiskMgn, long, 16; + űݾ, PrcMgn, PrcMgn, long, 16; + űݾ, SprdMgn, SprdMgn, long, 16; + ݺűݾ, PrcFlctMgn, PrcFlctMgn, long, 16; + ּűݾ, MinMgn, MinMgn, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ɼǼżݾ, OptNetBuyAmt, OptNetBuyAmt, long, 16; + Źűݾ, CsgnMgn, CsgnMgn, long, 16; + űݾ, MaintMgn, MaintMgn, long, 16; + żüݾ, FutsBuyExecAmt, FutsBuyExecAmt, long, 16; + ŵüݾ, FutsSellExecAmt, FutsSellExecAmt, long, 16; + ɼǸżüݾ, OptBuyExecAmt, OptBuyExecAmt, long, 16; + ɼǸŵüݾ, OptSellExecAmt, OptSellExecAmt, long, 16; + ͱݾ, FutsPnlAmt, FutsPnlAmt, long, 16; + Źű, TotRiskCsgnMgn, TotRiskCsgnMgn, long, 16; + μŹű, UndCsgnMgn, UndCsgnMgn, long, 16; + űݰݾ, MgnRdctAmt, MgnRdctAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CFOBQ10500_1.res b/ls_sample/sample_python/Res/CFOBQ10500_1.res new file mode 100644 index 0000000..0e7625b --- /dev/null +++ b/ls_sample/sample_python/Res/CFOBQ10500_1.res @@ -0,0 +1,65 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ¿Źűȸ,CFOBQ10500,ENCRYPT,SERVICE=CFOBQ10500,headtype=B,CREATOR=,CREDATE=2012/03/12 15:03:11; + BEGIN_DATA_MAP + CFOBQ10500InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + end + CFOBQ10500OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + end + CFOBQ10500OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ŹѾ, DpsamtTotamt, DpsamtTotamt, long, 16; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + 翹ŹѾ, FilupDpsamtTotamt, FilupDpsamtTotamt, long, 16; + 翹, FilupDps, FilupDps, long, 16; + ͱݾ, FutsPnlAmt, FutsPnlAmt, long, 16; + Ⱑɱݾ, WthdwAbleAmt, WthdwAbleAmt, long, 16; + Ⱑݾ, PsnOutAbleCurAmt, PsnOutAbleCurAmt, long, 16; + Ⱑɴݾ, PsnOutAbleSubstAmt, PsnOutAbleSubstAmt, long, 16; + űݾ, Mgn, Mgn, long, 16; + űݾ, MnyMgn, MnyMgn, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ߰űݾ, AddMgn, AddMgn, long, 16; + ߰űݾ, MnyAddMgn, MnyAddMgn, long, 16; + ϼǥԱݾ, AmtPrdayChckInAmt, AmtPrdayChckInAmt, long, 16; + ɼϴŵݾ, FnoPrdaySubstSellAmt, FnoPrdaySubstSellAmt, long, 16; + ɼDZϴŵݾ, FnoCrdaySubstSellAmt, FnoCrdaySubstSellAmt, long, 16; + ɼϰԱݾ, FnoPrdayFdamt, FnoPrdayFdamt, long, 16; + ɼDZϰԱݾ, FnoCrdayFdamt, FnoCrdayFdamt, long, 16; + ȭݾ, FcurrSubstAmt, FcurrSubstAmt, long, 16; + ɼǰ»űݸ, FnoAcntAfmgnNm, FnoAcntAfmgnNm, char, 20; + end + CFOBQ10500OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ǰڵ, PdGrpCodeNm, PdGrpCodeNm, char, 20; + űݾ, NetRiskMgn, NetRiskMgn, long, 16; + űݾ, PrcMgn, PrcMgn, long, 16; + űݾ, SprdMgn, SprdMgn, long, 16; + ݺűݾ, PrcFlctMgn, PrcFlctMgn, long, 16; + ּűݾ, MinMgn, MinMgn, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ɼǼżݾ, OptNetBuyAmt, OptNetBuyAmt, long, 16; + Źűݾ, CsgnMgn, CsgnMgn, long, 16; + űݾ, MaintMgn, MaintMgn, long, 16; + żüݾ, FutsBuyExecAmt, FutsBuyExecAmt, long, 16; + ŵüݾ, FutsSellExecAmt, FutsSellExecAmt, long, 16; + ɼǸżüݾ, OptBuyExecAmt, OptBuyExecAmt, long, 16; + ɼǸŵüݾ, OptSellExecAmt, OptSellExecAmt, long, 16; + ͱݾ, FutsPnlAmt, FutsPnlAmt, long, 16; + Źű, TotRiskCsgnMgn, TotRiskCsgnMgn, long, 16; + μŹű, UndCsgnMgn, UndCsgnMgn, long, 16; + űݰݾ, MgnRdctAmt, MgnRdctAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CFOBQ10800.res b/ls_sample/sample_python/Res/CFOBQ10800.res new file mode 100644 index 0000000..ccfb7b4 --- /dev/null +++ b/ls_sample/sample_python/Res/CFOBQ10800.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ɼǸŵ ֹűȸ,CFOBQ10800,SERVICE=CFOBQ10800,headtype=B,CREATOR=,CREDATE=2019/08/01 10:51:29; + BEGIN_DATA_MAP + CFOBQ10800InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ǰڵ, PrdgrpClssCode, PrdgrpClssCode, char, 2; + ڻڵ, ClssGrpCode, ClssGrpCode, char, 3; + ؿ, BaseYear, BaseYear, char, 4; + ֱٿ, FstmmTpCode, FstmmTpCode, char, 1; + end + CFOBQ10800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ǰڵ, PrdgrpClssCode, PrdgrpClssCode, char, 2; + ڻڵ, ClssGrpCode, ClssGrpCode, char, 3; + ؿ, BaseYear, BaseYear, char, 4; + ֱٿ, FstmmTpCode, FstmmTpCode, char, 1; + end + CFOBQ10800OutBlock2,Out(*EMPTY*),output,occurs; + begin + 簡, ElwXrcPrc, ElwXrcPrc, double, 13.2; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ѱ1, HanglIsuNm1, HanglIsuNm1, char, 40; + и1, TpNm1, TpNm1, char, 40; + ¿ɼ̷а, UpOptRegulThrprc, UpOptRegulThrprc, double, 27.8; + ̷а1, Thrprc1, Thrprc1, double, 19.8; + ذ1, BasePrc1, BasePrc1, double, 13.2; + ֹűݾ1, OrdMgn1, OrdMgn1, long, 16; + ɼȣ0, FnoIsuNo0, FnoIsuNo0, char, 12; + ѱ2, HanglIsuNm2, HanglIsuNm2, char, 40; + и2, TpNm2, TpNm2, char, 40; + ϶ɼ̷а, DownOptRegulThrprc, DownOptRegulThrprc, double, 27.8; + ̷а2, Thrprc2, Thrprc2, double, 19.8; + ذ2, BasePrc2, BasePrc2, double, 13.2; + ֹűݾ2, OrdMgn2, OrdMgn2, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CFOBQ10800_1.res b/ls_sample/sample_python/Res/CFOBQ10800_1.res new file mode 100644 index 0000000..ccfb7b4 --- /dev/null +++ b/ls_sample/sample_python/Res/CFOBQ10800_1.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ɼǸŵ ֹűȸ,CFOBQ10800,SERVICE=CFOBQ10800,headtype=B,CREATOR=,CREDATE=2019/08/01 10:51:29; + BEGIN_DATA_MAP + CFOBQ10800InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ǰڵ, PrdgrpClssCode, PrdgrpClssCode, char, 2; + ڻڵ, ClssGrpCode, ClssGrpCode, char, 3; + ؿ, BaseYear, BaseYear, char, 4; + ֱٿ, FstmmTpCode, FstmmTpCode, char, 1; + end + CFOBQ10800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ǰڵ, PrdgrpClssCode, PrdgrpClssCode, char, 2; + ڻڵ, ClssGrpCode, ClssGrpCode, char, 3; + ؿ, BaseYear, BaseYear, char, 4; + ֱٿ, FstmmTpCode, FstmmTpCode, char, 1; + end + CFOBQ10800OutBlock2,Out(*EMPTY*),output,occurs; + begin + 簡, ElwXrcPrc, ElwXrcPrc, double, 13.2; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ѱ1, HanglIsuNm1, HanglIsuNm1, char, 40; + и1, TpNm1, TpNm1, char, 40; + ¿ɼ̷а, UpOptRegulThrprc, UpOptRegulThrprc, double, 27.8; + ̷а1, Thrprc1, Thrprc1, double, 19.8; + ذ1, BasePrc1, BasePrc1, double, 13.2; + ֹűݾ1, OrdMgn1, OrdMgn1, long, 16; + ɼȣ0, FnoIsuNo0, FnoIsuNo0, char, 12; + ѱ2, HanglIsuNm2, HanglIsuNm2, char, 40; + и2, TpNm2, TpNm2, char, 40; + ϶ɼ̷а, DownOptRegulThrprc, DownOptRegulThrprc, double, 27.8; + ̷а2, Thrprc2, Thrprc2, double, 19.8; + ذ2, BasePrc2, BasePrc2, double, 13.2; + ֹűݾ2, OrdMgn2, OrdMgn2, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CFOEQ11100.res b/ls_sample/sample_python/Res/CFOEQ11100.res new file mode 100644 index 0000000..6b66f33 --- /dev/null +++ b/ls_sample/sample_python/Res/CFOEQ11100.res @@ -0,0 +1,121 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǰ꿹Źݻ,CFOEQ11100,SERVICE=CFOEQ11100,headtype=B,CREATOR=,CREDATE=2012/03/16 14:04:41; + BEGIN_DATA_MAP + CFOEQ11100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ÿ, BnsDt, BnsDt, char, 8; + end + CFOEQ11100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ÿ, BnsDt, BnsDt, char, 8; + end + CFOEQ11100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ÿŹѾ, OpnmkDpsamtTotamt, OpnmkDpsamtTotamt, long, 16; + ÿ, OpnmkDps, OpnmkDps, long, 16; + ݹ̼, OpnmkMnyrclAmt, OpnmkMnyrclAmt, long, 16; + ôݾ, OpnmkSubstAmt, OpnmkSubstAmt, long, 16; + ѱݾ, TotAmt, TotAmt, long, 16; + , Dps, Dps, long, 16; + ݹ̼ݾ, MnyrclAmt, MnyrclAmt, long, 16; + ݾ, SubstDsgnAmt, SubstDsgnAmt, long, 16; + Źűݾ, CsgnMgn, CsgnMgn, long, 16; + Źűݾ, MnyCsgnMgn, MnyCsgnMgn, long, 16; + űݾ, MaintMgn, MaintMgn, long, 16; + űݾ, MnyMaintMgn, MnyMaintMgn, long, 16; + ݰѾ, OutAbleAmt, OutAbleAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ݰɴ, SubstOutAbleAmt, SubstOutAbleAmt, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ߰űݱ, AddMgnOcrTpCode, AddMgnOcrTpCode, char, 1; + ߰űݾ, AddMgn, AddMgn, long, 16; + ߰űݾ, MnyAddMgn, MnyAddMgn, long, 16; + ϿŹѾ, NtdayTotAmt, NtdayTotAmt, long, 16; + ϿŹ, NtdayDps, NtdayDps, long, 16; + Ϲ̼, NtdayMnyrclAmt, NtdayMnyrclAmt, long, 16; + ϿŹ, NtdaySubstAmt, NtdaySubstAmt, long, 16; + Źű, NtdayCsgnMgn, NtdayCsgnMgn, long, 16; + Źű, NtdayMnyCsgnMgn, NtdayMnyCsgnMgn, long, 16; + ű, NtdayMaintMgn, NtdayMaintMgn, long, 16; + ű, NtdayMnyMaintMgn, NtdayMnyMaintMgn, long, 16; + Ⱑɱݾ, NtdayOutAbleAmt, NtdayOutAbleAmt, long, 16; + Ⱑɱݾ, NtdayMnyoutAbleAmt, NtdayMnyoutAbleAmt, long, 16; + Ⱑɴ, NtdaySubstOutAbleAmt, NtdaySubstOutAbleAmt, long, 16; + ֹɱݾ, NtdayOrdAbleAmt, NtdayOrdAbleAmt, long, 16; + ֹ, NtdayMnyOrdAbleAmt, NtdayMnyOrdAbleAmt, long, 16; + ߰űݱ, NtdayAddMgnTp, NtdayAddMgnTp, char, 1; + ߰ű, NtdayAddMgn, NtdayAddMgn, long, 16; + ߰ű, NtdayMnyAddMgn, NtdayMnyAddMgn, long, 16; + ϰݾ, NtdaySettAmt, NtdaySettAmt, long, 16; + 򰡿ŹѾ, EvalDpsamtTotamt, EvalDpsamtTotamt, long, 15; + 򰡿Źݾ, MnyEvalDpstgAmt, MnyEvalDpstgAmt, long, 15; + Ź̿޿ݾ, DpsamtUtlfeeGivPrergAmt, DpsamtUtlfeeGivPrergAmt, long, 16; + , TaxAmt, TaxAmt, long, 16; + Źű , CsgnMgnrat, CsgnMgnrat, double, 7.2; + Źűݺ, CsgnMnyMgnrat, CsgnMnyMgnrat, double, 7.2; + ŹѾ׺ݾ(Źűݱ), DpstgTotamtLackAmt, DpstgTotamtLackAmt, long, 16; + Źݺݾ(Źűݱ), DpstgMnyLackAmt, DpstgMnyLackAmt, long, 16; + Աݾ, RealInAmt, RealInAmt, long, 16; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + , FutsThdayDfamt, FutsThdayDfamt, long, 16; + , FutsUpdtDfamt, FutsUpdtDfamt, long, 16; + , FutsLastSettDfamt, FutsLastSettDfamt, long, 16; + ɼǰ, OptSettDfamt, OptSettDfamt, long, 16; + ɼǸżݾ, OptBuyAmt, OptBuyAmt, long, 16; + ɼǸŵݾ, OptSellAmt, OptSellAmt, long, 16; + ɼ, OptXrcDfamt, OptXrcDfamt, long, 16; + ɼǹ, OptAsgnDfamt, OptAsgnDfamt, long, 16; + ǹμݾ, RealGdsUndAmt, RealGdsUndAmt, long, 16; + ǹμ, RealGdsUndAsgnAmt, RealGdsUndAsgnAmt, long, 16; + ǹμ, RealGdsUndXrcAmt, RealGdsUndXrcAmt, long, 16; + , CmsnAmt, CmsnAmt, long, 16; + , FutsCmsn, FutsCmsn, long, 16; + ɼǼ, OptCmsn, OptCmsn, long, 16; + , FutsCtrctQty, FutsCtrctQty, long, 16; + ݾ, FutsCtrctAmt, FutsCtrctAmt, long, 16; + ɼǾ, OptCtrctQty, OptCtrctQty, long, 16; + ɼǾݾ, OptCtrctAmt, OptCtrctAmt, long, 16; + ̰, FutsUnsttQty, FutsUnsttQty, long, 16; + ̰ݾ, FutsUnsttAmt, FutsUnsttAmt, long, 16; + ɼǹ̰, OptUnsttQty, OptUnsttQty, long, 16; + ɼǹ̰ݾ, OptUnsttAmt, OptUnsttAmt, long, 16; + ż̰, FutsBuyUnsttQty, FutsBuyUnsttQty, long, 16; + ż̰ݾ, FutsBuyUnsttAmt, FutsBuyUnsttAmt, long, 16; + ŵ̰, FutsSellUnsttQty, FutsSellUnsttQty, long, 16; + ŵ̰ݾ, FutsSellUnsttAmt, FutsSellUnsttAmt, long, 16; + ɼǸż̰, OptBuyUnsttQty, OptBuyUnsttQty, long, 16; + ɼǸż̰ݾ, OptBuyUnsttAmt, OptBuyUnsttAmt, long, 16; + ɼǸŵ̰, OptSellUnsttQty, OptSellUnsttQty, long, 16; + ɼǸŵ̰ݾ, OptSellUnsttAmt, OptSellUnsttAmt, long, 16; + ż, FutsBuyctrQty, FutsBuyctrQty, long, 16; + żݾ, FutsBuyctrAmt, FutsBuyctrAmt, long, 16; + ŵ, FutsSlctrQty, FutsSlctrQty, long, 16; + ŵݾ, FutsSlctrAmt, FutsSlctrAmt, long, 16; + ɼǸż, OptBuyctrQty, OptBuyctrQty, long, 16; + ɼǸżݾ, OptBuyctrAmt, OptBuyctrAmt, long, 16; + ɼǸŵ, OptSlctrQty, OptSlctrQty, long, 16; + ɼǸŵݾ, OptSlctrAmt, OptSlctrAmt, long, 16; + Ÿżͱݾ, FutsBnsplAmt, FutsBnsplAmt, long, 16; + ɼǸŸżͱݾ, OptBnsplAmt, OptBnsplAmt, long, 16; + 򰡼ͱݾ, FutsEvalPnlAmt, FutsEvalPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + 򰡱ݾ, FutsEvalAmt, FutsEvalAmt, long, 16; + ɼ򰡱ݾ, OptEvalAmt, OptEvalAmt, long, 16; + Աݱݾ, MktEndAfMnyInAmt, MktEndAfMnyInAmt, long, 16; + ݱݾ, MktEndAfMnyOutAmt, MktEndAfMnyOutAmt, long, 16; + Ĵݾ, MktEndAfSubstDsgnAmt, MktEndAfSubstDsgnAmt, long, 16; + Ĵݾ, MktEndAfSubstAbndAmt, MktEndAfSubstAbndAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CFOEQ11100_1.res b/ls_sample/sample_python/Res/CFOEQ11100_1.res new file mode 100644 index 0000000..6b66f33 --- /dev/null +++ b/ls_sample/sample_python/Res/CFOEQ11100_1.res @@ -0,0 +1,121 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǰ꿹Źݻ,CFOEQ11100,SERVICE=CFOEQ11100,headtype=B,CREATOR=,CREDATE=2012/03/16 14:04:41; + BEGIN_DATA_MAP + CFOEQ11100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ÿ, BnsDt, BnsDt, char, 8; + end + CFOEQ11100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ÿ, BnsDt, BnsDt, char, 8; + end + CFOEQ11100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ÿŹѾ, OpnmkDpsamtTotamt, OpnmkDpsamtTotamt, long, 16; + ÿ, OpnmkDps, OpnmkDps, long, 16; + ݹ̼, OpnmkMnyrclAmt, OpnmkMnyrclAmt, long, 16; + ôݾ, OpnmkSubstAmt, OpnmkSubstAmt, long, 16; + ѱݾ, TotAmt, TotAmt, long, 16; + , Dps, Dps, long, 16; + ݹ̼ݾ, MnyrclAmt, MnyrclAmt, long, 16; + ݾ, SubstDsgnAmt, SubstDsgnAmt, long, 16; + Źűݾ, CsgnMgn, CsgnMgn, long, 16; + Źűݾ, MnyCsgnMgn, MnyCsgnMgn, long, 16; + űݾ, MaintMgn, MaintMgn, long, 16; + űݾ, MnyMaintMgn, MnyMaintMgn, long, 16; + ݰѾ, OutAbleAmt, OutAbleAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ݰɴ, SubstOutAbleAmt, SubstOutAbleAmt, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ߰űݱ, AddMgnOcrTpCode, AddMgnOcrTpCode, char, 1; + ߰űݾ, AddMgn, AddMgn, long, 16; + ߰űݾ, MnyAddMgn, MnyAddMgn, long, 16; + ϿŹѾ, NtdayTotAmt, NtdayTotAmt, long, 16; + ϿŹ, NtdayDps, NtdayDps, long, 16; + Ϲ̼, NtdayMnyrclAmt, NtdayMnyrclAmt, long, 16; + ϿŹ, NtdaySubstAmt, NtdaySubstAmt, long, 16; + Źű, NtdayCsgnMgn, NtdayCsgnMgn, long, 16; + Źű, NtdayMnyCsgnMgn, NtdayMnyCsgnMgn, long, 16; + ű, NtdayMaintMgn, NtdayMaintMgn, long, 16; + ű, NtdayMnyMaintMgn, NtdayMnyMaintMgn, long, 16; + Ⱑɱݾ, NtdayOutAbleAmt, NtdayOutAbleAmt, long, 16; + Ⱑɱݾ, NtdayMnyoutAbleAmt, NtdayMnyoutAbleAmt, long, 16; + Ⱑɴ, NtdaySubstOutAbleAmt, NtdaySubstOutAbleAmt, long, 16; + ֹɱݾ, NtdayOrdAbleAmt, NtdayOrdAbleAmt, long, 16; + ֹ, NtdayMnyOrdAbleAmt, NtdayMnyOrdAbleAmt, long, 16; + ߰űݱ, NtdayAddMgnTp, NtdayAddMgnTp, char, 1; + ߰ű, NtdayAddMgn, NtdayAddMgn, long, 16; + ߰ű, NtdayMnyAddMgn, NtdayMnyAddMgn, long, 16; + ϰݾ, NtdaySettAmt, NtdaySettAmt, long, 16; + 򰡿ŹѾ, EvalDpsamtTotamt, EvalDpsamtTotamt, long, 15; + 򰡿Źݾ, MnyEvalDpstgAmt, MnyEvalDpstgAmt, long, 15; + Ź̿޿ݾ, DpsamtUtlfeeGivPrergAmt, DpsamtUtlfeeGivPrergAmt, long, 16; + , TaxAmt, TaxAmt, long, 16; + Źű , CsgnMgnrat, CsgnMgnrat, double, 7.2; + Źűݺ, CsgnMnyMgnrat, CsgnMnyMgnrat, double, 7.2; + ŹѾ׺ݾ(Źűݱ), DpstgTotamtLackAmt, DpstgTotamtLackAmt, long, 16; + Źݺݾ(Źűݱ), DpstgMnyLackAmt, DpstgMnyLackAmt, long, 16; + Աݾ, RealInAmt, RealInAmt, long, 16; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + , FutsThdayDfamt, FutsThdayDfamt, long, 16; + , FutsUpdtDfamt, FutsUpdtDfamt, long, 16; + , FutsLastSettDfamt, FutsLastSettDfamt, long, 16; + ɼǰ, OptSettDfamt, OptSettDfamt, long, 16; + ɼǸżݾ, OptBuyAmt, OptBuyAmt, long, 16; + ɼǸŵݾ, OptSellAmt, OptSellAmt, long, 16; + ɼ, OptXrcDfamt, OptXrcDfamt, long, 16; + ɼǹ, OptAsgnDfamt, OptAsgnDfamt, long, 16; + ǹμݾ, RealGdsUndAmt, RealGdsUndAmt, long, 16; + ǹμ, RealGdsUndAsgnAmt, RealGdsUndAsgnAmt, long, 16; + ǹμ, RealGdsUndXrcAmt, RealGdsUndXrcAmt, long, 16; + , CmsnAmt, CmsnAmt, long, 16; + , FutsCmsn, FutsCmsn, long, 16; + ɼǼ, OptCmsn, OptCmsn, long, 16; + , FutsCtrctQty, FutsCtrctQty, long, 16; + ݾ, FutsCtrctAmt, FutsCtrctAmt, long, 16; + ɼǾ, OptCtrctQty, OptCtrctQty, long, 16; + ɼǾݾ, OptCtrctAmt, OptCtrctAmt, long, 16; + ̰, FutsUnsttQty, FutsUnsttQty, long, 16; + ̰ݾ, FutsUnsttAmt, FutsUnsttAmt, long, 16; + ɼǹ̰, OptUnsttQty, OptUnsttQty, long, 16; + ɼǹ̰ݾ, OptUnsttAmt, OptUnsttAmt, long, 16; + ż̰, FutsBuyUnsttQty, FutsBuyUnsttQty, long, 16; + ż̰ݾ, FutsBuyUnsttAmt, FutsBuyUnsttAmt, long, 16; + ŵ̰, FutsSellUnsttQty, FutsSellUnsttQty, long, 16; + ŵ̰ݾ, FutsSellUnsttAmt, FutsSellUnsttAmt, long, 16; + ɼǸż̰, OptBuyUnsttQty, OptBuyUnsttQty, long, 16; + ɼǸż̰ݾ, OptBuyUnsttAmt, OptBuyUnsttAmt, long, 16; + ɼǸŵ̰, OptSellUnsttQty, OptSellUnsttQty, long, 16; + ɼǸŵ̰ݾ, OptSellUnsttAmt, OptSellUnsttAmt, long, 16; + ż, FutsBuyctrQty, FutsBuyctrQty, long, 16; + żݾ, FutsBuyctrAmt, FutsBuyctrAmt, long, 16; + ŵ, FutsSlctrQty, FutsSlctrQty, long, 16; + ŵݾ, FutsSlctrAmt, FutsSlctrAmt, long, 16; + ɼǸż, OptBuyctrQty, OptBuyctrQty, long, 16; + ɼǸżݾ, OptBuyctrAmt, OptBuyctrAmt, long, 16; + ɼǸŵ, OptSlctrQty, OptSlctrQty, long, 16; + ɼǸŵݾ, OptSlctrAmt, OptSlctrAmt, long, 16; + Ÿżͱݾ, FutsBnsplAmt, FutsBnsplAmt, long, 16; + ɼǸŸżͱݾ, OptBnsplAmt, OptBnsplAmt, long, 16; + 򰡼ͱݾ, FutsEvalPnlAmt, FutsEvalPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + 򰡱ݾ, FutsEvalAmt, FutsEvalAmt, long, 16; + ɼ򰡱ݾ, OptEvalAmt, OptEvalAmt, long, 16; + Աݱݾ, MktEndAfMnyInAmt, MktEndAfMnyInAmt, long, 16; + ݱݾ, MktEndAfMnyOutAmt, MktEndAfMnyOutAmt, long, 16; + Ĵݾ, MktEndAfSubstDsgnAmt, MktEndAfSubstDsgnAmt, long, 16; + Ĵݾ, MktEndAfSubstAbndAmt, MktEndAfSubstAbndAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CFOEQ82600.res b/ls_sample/sample_python/Res/CFOEQ82600.res new file mode 100644 index 0000000..18bc03b --- /dev/null +++ b/ls_sample/sample_python/Res/CFOEQ82600.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ Ϻ ¼ͳ,CFOEQ82600,SERVICE=CFOEQ82600,headtype=B,CREATOR=ȲԼ,CREDATE=2013/01/06 17:48:51; + BEGIN_DATA_MAP + CFOEQ82600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + ɼܰ򰡱ڵ, FnoBalEvalTpCode, FnoBalEvalTpCode, char, 1; + end + CFOEQ82600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + ɼܰ򰡱ڵ, FnoBalEvalTpCode, FnoBalEvalTpCode, char, 1; + end + CFOEQ82600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + ɼǸŸżͱݾ, OptBnsplAmt, OptBnsplAmt, long, 16; + ɼǼ, FnoCmsnAmt, FnoCmsnAmt, long, 16; + հݾ, PnlSumAmt, PnlSumAmt, long, 16; + Ահݾ, MnyinSumAmt, MnyinSumAmt, long, 16; + հݾ, MnyoutSumAmt, MnyoutSumAmt, long, 16; + ¸, AcntNm, AcntNm, char, 40; + end + CFOEQ82600OutBlock3,OutList(*EMPTY*),output,occurs; + begin + ȸ, QryDt, QryDt, char, 8; + ŹѾ, DpstgTotamt, DpstgTotamt, long, 16; + Ź, DpstgMny, DpstgMny, long, 16; + ɼűݾ, FnoMgn, FnoMgn, long, 16; + ͱݾ, FutsPnlAmt, FutsPnlAmt, long, 16; + ɼǸŸżͱݾ, OptBsnPnlAmt, OptBsnPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + , CmsnAmt, CmsnAmt, long, 16; + հݾ1, SumAmt1, SumAmt1, long, 16; + հݾ, SumAmt2, SumAmt2, long, 16; + հݾ, PnlSumAmt, PnlSumAmt, long, 16; + żݾ, FutsBuyAmt, FutsBuyAmt, long, 16; + ŵݾ, FutsSellAmt, FutsSellAmt, long, 16; + ɼǸżݾ, OptBuyAmt, OptBuyAmt, long, 16; + ɼǸŵݾ, OptSellAmt, OptSellAmt, long, 16; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + ջ򰡱ݾ, AddupEvalAmt, AddupEvalAmt, long, 16; + ݾ2, Amt2, Amt2, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CFOEQ82600_1.res b/ls_sample/sample_python/Res/CFOEQ82600_1.res new file mode 100644 index 0000000..18bc03b --- /dev/null +++ b/ls_sample/sample_python/Res/CFOEQ82600_1.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ Ϻ ¼ͳ,CFOEQ82600,SERVICE=CFOEQ82600,headtype=B,CREATOR=ȲԼ,CREDATE=2013/01/06 17:48:51; + BEGIN_DATA_MAP + CFOEQ82600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + ɼܰ򰡱ڵ, FnoBalEvalTpCode, FnoBalEvalTpCode, char, 1; + end + CFOEQ82600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + ɼܰ򰡱ڵ, FnoBalEvalTpCode, FnoBalEvalTpCode, char, 1; + end + CFOEQ82600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + ɼǸŸżͱݾ, OptBnsplAmt, OptBnsplAmt, long, 16; + ɼǼ, FnoCmsnAmt, FnoCmsnAmt, long, 16; + հݾ, PnlSumAmt, PnlSumAmt, long, 16; + Ահݾ, MnyinSumAmt, MnyinSumAmt, long, 16; + հݾ, MnyoutSumAmt, MnyoutSumAmt, long, 16; + ¸, AcntNm, AcntNm, char, 40; + end + CFOEQ82600OutBlock3,OutList(*EMPTY*),output,occurs; + begin + ȸ, QryDt, QryDt, char, 8; + ŹѾ, DpstgTotamt, DpstgTotamt, long, 16; + Ź, DpstgMny, DpstgMny, long, 16; + ɼűݾ, FnoMgn, FnoMgn, long, 16; + ͱݾ, FutsPnlAmt, FutsPnlAmt, long, 16; + ɼǸŸżͱݾ, OptBsnPnlAmt, OptBsnPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + , CmsnAmt, CmsnAmt, long, 16; + հݾ1, SumAmt1, SumAmt1, long, 16; + հݾ, SumAmt2, SumAmt2, long, 16; + հݾ, PnlSumAmt, PnlSumAmt, long, 16; + żݾ, FutsBuyAmt, FutsBuyAmt, long, 16; + ŵݾ, FutsSellAmt, FutsSellAmt, long, 16; + ɼǸżݾ, OptBuyAmt, OptBuyAmt, long, 16; + ɼǸŵݾ, OptSellAmt, OptSellAmt, long, 16; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + ջ򰡱ݾ, AddupEvalAmt, AddupEvalAmt, long, 16; + ݾ2, Amt2, Amt2, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CFOFQ02400.res b/ls_sample/sample_python/Res/CFOFQ02400.res new file mode 100644 index 0000000..41f5fdb --- /dev/null +++ b/ls_sample/sample_python/Res/CFOFQ02400.res @@ -0,0 +1,75 @@ +BEGIN_FUNCTION_MAP + .Func, ̰ Ȳ(հ),CFOFQ02400,SERVICE=CFOFQ02400,headtype=B,CREATOR=,CREDATE=2012/03/16 14:07:10; + BEGIN_DATA_MAP + CFOFQ02400InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ͻڵ, RegMktCode, RegMktCode, char, 2; + ż, BuyDt, BuyDt, char, 8; + end + CFOFQ02400OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ͻڵ, RegMktCode, RegMktCode, char, 2; + ż, BuyDt, BuyDt, char, 8; + end + CFOFQ02400OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + , FutsCtrctQty, FutsCtrctQty, long, 16; + ɼǾ, OptCtrctQty, OptCtrctQty, long, 16; + , CtrctQty, CtrctQty, long, 16; + ݾ, FutsCtrctAmt, FutsCtrctAmt, long, 16; + żݾ, FutsBuyctrAmt, FutsBuyctrAmt, long, 16; + ŵݾ, FutsSlctrAmt, FutsSlctrAmt, long, 16; + ݿɼǾݾ, CalloptCtrctAmt, CalloptCtrctAmt, long, 16; + ݸżݾ, CallBuyAmt, CallBuyAmt, long, 16; + ݸŵݾ, CallSellAmt, CallSellAmt, long, 16; + DzɼǾݾ, PutoptCtrctAmt, PutoptCtrctAmt, long, 16; + Dzżݾ, PutBuyAmt, PutBuyAmt, long, 16; + Dzŵݾ, PutSellAmt, PutSellAmt, long, 16; + üݾ, AllCtrctAmt, AllCtrctAmt, long, 16; + żݾ, BuyctrAsmAmt, BuyctrAsmAmt, long, 16; + ŵݾ, SlctrAsmAmt, SlctrAsmAmt, long, 16; + հ, FutsPnlSum, FutsPnlSum, long, 16; + ɼǼհ, OptPnlSum, OptPnlSum, long, 16; + üհ, AllPnlSum, AllPnlSum, long, 16; + end + CFOFQ02400OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ɼǰ񱸺, FnoClssCode, FnoClssCode, char, 1; + ŵ, FutsSellQty, FutsSellQty, long, 16; + ŵ, FutsSellPnl, FutsSellPnl, long, 16; + ż, FutsBuyQty, FutsBuyQty, long, 16; + ż, FutsBuyPnl, FutsBuyPnl, long, 16; + ݸŵ, CallSellQty, CallSellQty, long, 16; + ݸŵ, CallSellPnl, CallSellPnl, long, 16; + ݸż, CallBuyQty, CallBuyQty, long, 16; + ݸż, CallBuyPnl, CallBuyPnl, long, 16; + Dzŵ, PutSellQty, PutSellQty, long, 16; + Dzŵ, PutSellPnl, PutSellPnl, long, 16; + Dzż, PutBuyQty, PutBuyQty, long, 16; + Dzż, PutBuyPnl, PutBuyPnl, long, 16; + end + CFOFQ02400OutBlock4,Out3(*EMPTY*),output,occurs; + begin + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ܰ, BalQty, BalQty, long, 16; + հ, FnoAvrPrc, FnoAvrPrc, double, 19.8; + ʱݾ, BgnAmt, BgnAmt, long, 16; + û, ThdayLqdtQty, ThdayLqdtQty, long, 16; + 簡, Curprc, Curprc, double, 13.2; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + 򰡼ͱݾ, EvalPnlAmt, EvalPnlAmt, long, 16; + 򰡼ͷ, EvalErnrat, EvalErnrat, double, 12.6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CFOFQ02400_1.res b/ls_sample/sample_python/Res/CFOFQ02400_1.res new file mode 100644 index 0000000..41f5fdb --- /dev/null +++ b/ls_sample/sample_python/Res/CFOFQ02400_1.res @@ -0,0 +1,75 @@ +BEGIN_FUNCTION_MAP + .Func, ̰ Ȳ(հ),CFOFQ02400,SERVICE=CFOFQ02400,headtype=B,CREATOR=,CREDATE=2012/03/16 14:07:10; + BEGIN_DATA_MAP + CFOFQ02400InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ͻڵ, RegMktCode, RegMktCode, char, 2; + ż, BuyDt, BuyDt, char, 8; + end + CFOFQ02400OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ͻڵ, RegMktCode, RegMktCode, char, 2; + ż, BuyDt, BuyDt, char, 8; + end + CFOFQ02400OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + , FutsCtrctQty, FutsCtrctQty, long, 16; + ɼǾ, OptCtrctQty, OptCtrctQty, long, 16; + , CtrctQty, CtrctQty, long, 16; + ݾ, FutsCtrctAmt, FutsCtrctAmt, long, 16; + żݾ, FutsBuyctrAmt, FutsBuyctrAmt, long, 16; + ŵݾ, FutsSlctrAmt, FutsSlctrAmt, long, 16; + ݿɼǾݾ, CalloptCtrctAmt, CalloptCtrctAmt, long, 16; + ݸżݾ, CallBuyAmt, CallBuyAmt, long, 16; + ݸŵݾ, CallSellAmt, CallSellAmt, long, 16; + DzɼǾݾ, PutoptCtrctAmt, PutoptCtrctAmt, long, 16; + Dzżݾ, PutBuyAmt, PutBuyAmt, long, 16; + Dzŵݾ, PutSellAmt, PutSellAmt, long, 16; + üݾ, AllCtrctAmt, AllCtrctAmt, long, 16; + żݾ, BuyctrAsmAmt, BuyctrAsmAmt, long, 16; + ŵݾ, SlctrAsmAmt, SlctrAsmAmt, long, 16; + հ, FutsPnlSum, FutsPnlSum, long, 16; + ɼǼհ, OptPnlSum, OptPnlSum, long, 16; + üհ, AllPnlSum, AllPnlSum, long, 16; + end + CFOFQ02400OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ɼǰ񱸺, FnoClssCode, FnoClssCode, char, 1; + ŵ, FutsSellQty, FutsSellQty, long, 16; + ŵ, FutsSellPnl, FutsSellPnl, long, 16; + ż, FutsBuyQty, FutsBuyQty, long, 16; + ż, FutsBuyPnl, FutsBuyPnl, long, 16; + ݸŵ, CallSellQty, CallSellQty, long, 16; + ݸŵ, CallSellPnl, CallSellPnl, long, 16; + ݸż, CallBuyQty, CallBuyQty, long, 16; + ݸż, CallBuyPnl, CallBuyPnl, long, 16; + Dzŵ, PutSellQty, PutSellQty, long, 16; + Dzŵ, PutSellPnl, PutSellPnl, long, 16; + Dzż, PutBuyQty, PutBuyQty, long, 16; + Dzż, PutBuyPnl, PutBuyPnl, long, 16; + end + CFOFQ02400OutBlock4,Out3(*EMPTY*),output,occurs; + begin + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ܰ, BalQty, BalQty, long, 16; + հ, FnoAvrPrc, FnoAvrPrc, double, 19.8; + ʱݾ, BgnAmt, BgnAmt, long, 16; + û, ThdayLqdtQty, ThdayLqdtQty, long, 16; + 簡, Curprc, Curprc, double, 13.2; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + 򰡼ͱݾ, EvalPnlAmt, EvalPnlAmt, long, 16; + 򰡼ͷ, EvalErnrat, EvalErnrat, double, 12.6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBQ01400.res b/ls_sample/sample_python/Res/CIDBQ01400.res new file mode 100644 index 0000000..631dc19 --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBQ01400.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ü᳻ ȸ,CIDBQ01400,SERVICE=CIDBQ01400,headtype=B,CREATOR=ȣ,CREDATE=2018/08/23 09:07:51; + BEGIN_DATA_MAP + CIDBQ01400InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸڵ, QryTpCode, QryTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + end + CIDBQ01400OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸڵ, QryTpCode, QryTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + end + CIDBQ01400OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBQ01400_1.res b/ls_sample/sample_python/Res/CIDBQ01400_1.res new file mode 100644 index 0000000..631dc19 --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBQ01400_1.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ü᳻ ȸ,CIDBQ01400,SERVICE=CIDBQ01400,headtype=B,CREATOR=ȣ,CREDATE=2018/08/23 09:07:51; + BEGIN_DATA_MAP + CIDBQ01400InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸڵ, QryTpCode, QryTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + end + CIDBQ01400OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸڵ, QryTpCode, QryTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + end + CIDBQ01400OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBQ01500.res b/ls_sample/sample_python/Res/CIDBQ01500.res new file mode 100644 index 0000000..b44e72f --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBQ01500.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ̰ ܰ,CIDBQ01500,SERVICE=CIDBQ01500,ENCRYPT,headtype=B,CREATOR=ȣ,CREDATE=2018/08/28 09:14:25; + BEGIN_DATA_MAP + CIDBQ01500InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryDt, QryDt, char, 8; + ܰڵ, BalTpCode, BalTpCode, char, 1; + end + CIDBQ01500OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryDt, QryDt, char, 8; + ܰڵ, BalTpCode, BalTpCode, char, 1; + end + CIDBQ01500OutBlock2,Out(*EMPTY*),output,occurs; + begin + , BaseDt, BaseDt, char, 8; + , Dps, Dps, long, 16; + ûͱݾ, LpnlAmt, LpnlAmt, double, 19.2; + ûͱݾ, FutsDueBfLpnlAmt, FutsDueBfLpnlAmt, double, 23.2; + , FutsDueBfCmsn, FutsDueBfCmsn, double, 23.2; + Źűݾ, CsgnMgn, CsgnMgn, long, 16; + ű, MaintMgn, MaintMgn, long, 16; + ſѵݾ, CtlmtAmt, CtlmtAmt, double, 23.2; + ߰űݾ, AddMgn, AddMgn, long, 16; + , MgnclRat, MgnclRat, double, 27.10; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + Ⱑɱݾ, WthdwAbleAmt, WthdwAbleAmt, long, 16; + ¹ȣ, AcntNo, AcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + , IsuNm, IsuNm, char, 50; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + ؿĻɼDZڵ, OvrsDrvtOptTpCode, OvrsDrvtOptTpCode, char, 1; + , DueDt, DueDt, char, 8; + ؿĻ簡, OvrsDrvtXrcPrc, OvrsDrvtXrcPrc, double, 30.11; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ڵ, CmnCodeNm, CmnCodeNm, char, 100; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ܰ, BalQty, BalQty, long, 16; + ԰, PchsPrc, PchsPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + Ź, CsgnCmsn, CsgnCmsn, double, 19.2; + ǹȣ, PosNo, PosNo, char, 13; + ŷҺ1ݾ, EufOneCmsnAmt, EufOneCmsnAmt, double, 19.2; + ŷҺ2ݾ, EufTwoCmsnAmt, EufTwoCmsnAmt, double, 19.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBQ01500_1.res b/ls_sample/sample_python/Res/CIDBQ01500_1.res new file mode 100644 index 0000000..b44e72f --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBQ01500_1.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ̰ ܰ,CIDBQ01500,SERVICE=CIDBQ01500,ENCRYPT,headtype=B,CREATOR=ȣ,CREDATE=2018/08/28 09:14:25; + BEGIN_DATA_MAP + CIDBQ01500InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryDt, QryDt, char, 8; + ܰڵ, BalTpCode, BalTpCode, char, 1; + end + CIDBQ01500OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryDt, QryDt, char, 8; + ܰڵ, BalTpCode, BalTpCode, char, 1; + end + CIDBQ01500OutBlock2,Out(*EMPTY*),output,occurs; + begin + , BaseDt, BaseDt, char, 8; + , Dps, Dps, long, 16; + ûͱݾ, LpnlAmt, LpnlAmt, double, 19.2; + ûͱݾ, FutsDueBfLpnlAmt, FutsDueBfLpnlAmt, double, 23.2; + , FutsDueBfCmsn, FutsDueBfCmsn, double, 23.2; + Źűݾ, CsgnMgn, CsgnMgn, long, 16; + ű, MaintMgn, MaintMgn, long, 16; + ſѵݾ, CtlmtAmt, CtlmtAmt, double, 23.2; + ߰űݾ, AddMgn, AddMgn, long, 16; + , MgnclRat, MgnclRat, double, 27.10; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + Ⱑɱݾ, WthdwAbleAmt, WthdwAbleAmt, long, 16; + ¹ȣ, AcntNo, AcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + , IsuNm, IsuNm, char, 50; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + ؿĻɼDZڵ, OvrsDrvtOptTpCode, OvrsDrvtOptTpCode, char, 1; + , DueDt, DueDt, char, 8; + ؿĻ簡, OvrsDrvtXrcPrc, OvrsDrvtXrcPrc, double, 30.11; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ڵ, CmnCodeNm, CmnCodeNm, char, 100; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ܰ, BalQty, BalQty, long, 16; + ԰, PchsPrc, PchsPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + Ź, CsgnCmsn, CsgnCmsn, double, 19.2; + ǹȣ, PosNo, PosNo, char, 13; + ŷҺ1ݾ, EufOneCmsnAmt, EufOneCmsnAmt, double, 19.2; + ŷҺ2ݾ, EufTwoCmsnAmt, EufTwoCmsnAmt, double, 19.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBQ01800.res b/ls_sample/sample_python/Res/CIDBQ01800.res new file mode 100644 index 0000000..4855a1d --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBQ01800.res @@ -0,0 +1,83 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ֹü᳻ ȸ,CIDBQ01800,SERVICE=CIDBQ01800,headtype=B,CREATOR=ȣ,CREDATE=2021/04/13 14:06:45; + BEGIN_DATA_MAP + CIDBQ01800InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹ, OrdDt, OrdDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ01800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹ, OrdDt, OrdDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ01800OutBlock2,Out(*EMPTY*),output,occurs; + begin + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + FCMֹȣ, FcmOrdNo, FcmOrdNo, char, 15; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + , IsuNm, IsuNm, char, 50; + ؿܼ簡, AbrdFutsXrcPrc, AbrdFutsXrcPrc, double, 30.11; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + Ÿűи, BnsTpNm, BnsTpNm, char, 10; + ֹڵ, FutsOrdStatCode, FutsOrdStatCode, char, 1; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ŷи, TrdTpNm, TrdTpNm, char, 20; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ֹ, OrdPtnNm, OrdPtnNm, char, 40; + ֹⰣڵ, OrdPtnTermTpCode, OrdPtnTermTpCode, char, 2; + ڵ, CmnCodeNm, CmnCodeNm, char, 100; + , AppSrtDt, AppSrtDt, char, 8; + , AppEndDt, AppEndDt, char, 8; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻüڵ, OvrsDrvtExecIsuCode, OvrsDrvtExecIsuCode, char, 30; + ü, ExecIsuNm, ExecIsuNm, char, 50; + üŸűڵ, ExecBnsTpCode, ExecBnsTpCode, char, 1; + üŸűи, ExecBnsTpNm, ExecBnsTpNm, char, 10; + ؿܼüᰡ, AbrdFutsExecPrc, AbrdFutsExecPrc, double, 30.11; + ü, ExecQty, ExecQty, long, 16; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + , MdfyQty, MdfyQty, long, 16; + Ҽ, CancQty, CancQty, long, 16; + źμ, RjtQty, RjtQty, long, 13; + Ȯμ, CnfQty, CnfQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + ݴŸſ, CvrgYn, CvrgYn, char, 1; + ϴܸȣ, RegTmnlNo, RegTmnlNo, char, 3; + ȣ, RegBrnNo, RegBrnNo, char, 3; + ϻID, RegUserId, RegUserId, char, 16; + ֹ, OrdDt, OrdDt, char, 8; + ֹð, OrdTime, OrdTime, char, 9; + ؿܿɼ翹౸ڵ, OvrsOptXrcRsvTpCode, OvrsOptXrcRsvTpCode, char, 1; + ؿĻɼDZڵ, OvrsDrvtOptTpCode, OvrsDrvtOptTpCode, char, 1; + 񿩺, SprdBaseIsuYn, SprdBaseIsuYn, char, 1; + ؿֹܼ, OvrsFutsOrdDt, OvrsFutsOrdDt, char, 8; + ؿֹܼȣ2, OvrsFutsOrdNo2, OvrsFutsOrdNo2, char, 10; + ؿֹܼȣ2, OvrsFutsOrgOrdNo2, OvrsFutsOrgOrdNo2, char, 10; + ؿĻڵ2, OvrsDrvtIsuCode2, OvrsDrvtIsuCode2, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBQ01800_1.res b/ls_sample/sample_python/Res/CIDBQ01800_1.res new file mode 100644 index 0000000..4855a1d --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBQ01800_1.res @@ -0,0 +1,83 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ֹü᳻ ȸ,CIDBQ01800,SERVICE=CIDBQ01800,headtype=B,CREATOR=ȣ,CREDATE=2021/04/13 14:06:45; + BEGIN_DATA_MAP + CIDBQ01800InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹ, OrdDt, OrdDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ01800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹ, OrdDt, OrdDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ01800OutBlock2,Out(*EMPTY*),output,occurs; + begin + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + FCMֹȣ, FcmOrdNo, FcmOrdNo, char, 15; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + , IsuNm, IsuNm, char, 50; + ؿܼ簡, AbrdFutsXrcPrc, AbrdFutsXrcPrc, double, 30.11; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + Ÿűи, BnsTpNm, BnsTpNm, char, 10; + ֹڵ, FutsOrdStatCode, FutsOrdStatCode, char, 1; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ŷи, TrdTpNm, TrdTpNm, char, 20; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ֹ, OrdPtnNm, OrdPtnNm, char, 40; + ֹⰣڵ, OrdPtnTermTpCode, OrdPtnTermTpCode, char, 2; + ڵ, CmnCodeNm, CmnCodeNm, char, 100; + , AppSrtDt, AppSrtDt, char, 8; + , AppEndDt, AppEndDt, char, 8; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻüڵ, OvrsDrvtExecIsuCode, OvrsDrvtExecIsuCode, char, 30; + ü, ExecIsuNm, ExecIsuNm, char, 50; + üŸűڵ, ExecBnsTpCode, ExecBnsTpCode, char, 1; + üŸűи, ExecBnsTpNm, ExecBnsTpNm, char, 10; + ؿܼüᰡ, AbrdFutsExecPrc, AbrdFutsExecPrc, double, 30.11; + ü, ExecQty, ExecQty, long, 16; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + , MdfyQty, MdfyQty, long, 16; + Ҽ, CancQty, CancQty, long, 16; + źμ, RjtQty, RjtQty, long, 13; + Ȯμ, CnfQty, CnfQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + ݴŸſ, CvrgYn, CvrgYn, char, 1; + ϴܸȣ, RegTmnlNo, RegTmnlNo, char, 3; + ȣ, RegBrnNo, RegBrnNo, char, 3; + ϻID, RegUserId, RegUserId, char, 16; + ֹ, OrdDt, OrdDt, char, 8; + ֹð, OrdTime, OrdTime, char, 9; + ؿܿɼ翹౸ڵ, OvrsOptXrcRsvTpCode, OvrsOptXrcRsvTpCode, char, 1; + ؿĻɼDZڵ, OvrsDrvtOptTpCode, OvrsDrvtOptTpCode, char, 1; + 񿩺, SprdBaseIsuYn, SprdBaseIsuYn, char, 1; + ؿֹܼ, OvrsFutsOrdDt, OvrsFutsOrdDt, char, 8; + ؿֹܼȣ2, OvrsFutsOrdNo2, OvrsFutsOrdNo2, char, 10; + ؿֹܼȣ2, OvrsFutsOrgOrdNo2, OvrsFutsOrgOrdNo2, char, 10; + ؿĻڵ2, OvrsDrvtIsuCode2, OvrsDrvtIsuCode2, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBQ02400.res b/ls_sample/sample_python/Res/CIDBQ02400.res new file mode 100644 index 0000000..17f81b6 --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBQ02400.res @@ -0,0 +1,100 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ֹü᳻ ȸ,CIDBQ02400,SERVICE=CIDBQ02400,ENCRYPT,headtype=B,CREATOR=ȣ,CREDATE=2021/04/04 13:14:10; + BEGIN_DATA_MAP + CIDBQ02400InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ02400OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ02400OutBlock2,Out(*EMPTY*),output,occurs; + begin + ֹ, OrdDt, OrdDt, char, 8; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + FCMֹȣ, FcmOrdNo, FcmOrdNo, char, 15; + ü, ExecDt, ExecDt, char, 8; + ؿܼüȣ, OvrsFutsExecNo, OvrsFutsExecNo, char, 10; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + , IsuNm, IsuNm, char, 50; + ؿܼ簡, AbrdFutsXrcPrc, AbrdFutsXrcPrc, double, 30.11; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + Ÿűи, BnsTpNm, BnsTpNm, char, 10; + ֹڵ, FutsOrdStatCode, FutsOrdStatCode, char, 1; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ŷи, TrdTpNm, TrdTpNm, char, 20; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ֹ, OrdPtnNm, OrdPtnNm, char, 40; + ֹⰣڵ, OrdPtnTermTpCode, OrdPtnTermTpCode, char, 2; + ڵ, CmnCodeNm, CmnCodeNm, char, 100; + , AppSrtDt, AppSrtDt, char, 8; + , AppEndDt, AppEndDt, char, 8; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ؿĻüڵ, OvrsDrvtExecIsuCode, OvrsDrvtExecIsuCode, char, 30; + ü, ExecIsuNm, ExecIsuNm, char, 50; + üŸűڵ, ExecBnsTpCode, ExecBnsTpCode, char, 1; + üŸűи, ExecBnsTpNm, ExecBnsTpNm, char, 10; + ü, ExecQty, ExecQty, long, 16; + ؿܼüᰡ, AbrdFutsExecPrc, AbrdFutsExecPrc, double, 30.11; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + ü, UnercQty, UnercQty, long, 16; + óڵ, TrxStatCode, TrxStatCode, char, 2; + óڵ, TrxStatCodeNm, TrxStatCodeNm, char, 40; + Ź, CsgnCmsn, CsgnCmsn, double, 19.2; + FCM, FcmCmsn, FcmCmsn, double, 21.4; + , ThcoCmsn, ThcoCmsn, double, 19.2; + üڵ, MdaCode, MdaCode, char, 2; + üڵ, MdaCodeNm, MdaCodeNm, char, 40; + ϴܸȣ, RegTmnlNo, RegTmnlNo, char, 3; + ϻID, RegUserId, RegUserId, char, 16; + ֹ߼Ͻ, OrdSndDttm, OrdSndDttm, char, 17; + üϽ, ExecDttm, ExecDttm, char, 17; + ŷҺ1ݾ, EufOneCmsnAmt, EufOneCmsnAmt, double, 19.2; + ŷҺ2ݾ, EufTwoCmsnAmt, EufTwoCmsnAmt, double, 19.2; + û1ݾ, LchOneCmsnAmt, LchOneCmsnAmt, double, 19.2; + û2ݾ, LchTwoCmsnAmt, LchTwoCmsnAmt, double, 19.2; + ŷ1ݾ, TrdOneCmsnAmt, TrdOneCmsnAmt, double, 19.2; + ŷ2ݾ, TrdTwoCmsnAmt, TrdTwoCmsnAmt, double, 19.2; + ŷ3ݾ, TrdThreeCmsnAmt, TrdThreeCmsnAmt, double, 19.2; + ܱ1ݾ, StrmOneCmsnAmt, StrmOneCmsnAmt, double, 19.2; + ܱ2ݾ, StrmTwoCmsnAmt, StrmTwoCmsnAmt, double, 19.2; + ܱ3ݾ, StrmThreeCmsnAmt, StrmThreeCmsnAmt, double, 19.2; + 1ݾ, TransOneCmsnAmt, TransOneCmsnAmt, double, 19.2; + 2ݾ, TransTwoCmsnAmt, TransTwoCmsnAmt, double, 19.2; + 3ݾ, TransThreeCmsnAmt, TransThreeCmsnAmt, double, 19.2; + 4ݾ, TransFourCmsnAmt, TransFourCmsnAmt, double, 19.2; + ؿܿɼ翹౸ڵ, OvrsOptXrcRsvTpCode, OvrsOptXrcRsvTpCode, char, 1; + ؿĻɼDZڵ, OvrsDrvtOptTpCode, OvrsDrvtOptTpCode, char, 1; + 񿩺, SprdBaseIsuYn, SprdBaseIsuYn, char, 1; + ؿĻڵ2, OvrsDrvtIsuCode2, OvrsDrvtIsuCode2, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBQ02400_1.res b/ls_sample/sample_python/Res/CIDBQ02400_1.res new file mode 100644 index 0000000..17f81b6 --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBQ02400_1.res @@ -0,0 +1,100 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ֹü᳻ ȸ,CIDBQ02400,SERVICE=CIDBQ02400,ENCRYPT,headtype=B,CREATOR=ȣ,CREDATE=2021/04/04 13:14:10; + BEGIN_DATA_MAP + CIDBQ02400InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ02400OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ02400OutBlock2,Out(*EMPTY*),output,occurs; + begin + ֹ, OrdDt, OrdDt, char, 8; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + FCMֹȣ, FcmOrdNo, FcmOrdNo, char, 15; + ü, ExecDt, ExecDt, char, 8; + ؿܼüȣ, OvrsFutsExecNo, OvrsFutsExecNo, char, 10; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + , IsuNm, IsuNm, char, 50; + ؿܼ簡, AbrdFutsXrcPrc, AbrdFutsXrcPrc, double, 30.11; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + Ÿűи, BnsTpNm, BnsTpNm, char, 10; + ֹڵ, FutsOrdStatCode, FutsOrdStatCode, char, 1; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ŷи, TrdTpNm, TrdTpNm, char, 20; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ֹ, OrdPtnNm, OrdPtnNm, char, 40; + ֹⰣڵ, OrdPtnTermTpCode, OrdPtnTermTpCode, char, 2; + ڵ, CmnCodeNm, CmnCodeNm, char, 100; + , AppSrtDt, AppSrtDt, char, 8; + , AppEndDt, AppEndDt, char, 8; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ؿĻüڵ, OvrsDrvtExecIsuCode, OvrsDrvtExecIsuCode, char, 30; + ü, ExecIsuNm, ExecIsuNm, char, 50; + üŸűڵ, ExecBnsTpCode, ExecBnsTpCode, char, 1; + üŸűи, ExecBnsTpNm, ExecBnsTpNm, char, 10; + ü, ExecQty, ExecQty, long, 16; + ؿܼüᰡ, AbrdFutsExecPrc, AbrdFutsExecPrc, double, 30.11; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + ü, UnercQty, UnercQty, long, 16; + óڵ, TrxStatCode, TrxStatCode, char, 2; + óڵ, TrxStatCodeNm, TrxStatCodeNm, char, 40; + Ź, CsgnCmsn, CsgnCmsn, double, 19.2; + FCM, FcmCmsn, FcmCmsn, double, 21.4; + , ThcoCmsn, ThcoCmsn, double, 19.2; + üڵ, MdaCode, MdaCode, char, 2; + üڵ, MdaCodeNm, MdaCodeNm, char, 40; + ϴܸȣ, RegTmnlNo, RegTmnlNo, char, 3; + ϻID, RegUserId, RegUserId, char, 16; + ֹ߼Ͻ, OrdSndDttm, OrdSndDttm, char, 17; + üϽ, ExecDttm, ExecDttm, char, 17; + ŷҺ1ݾ, EufOneCmsnAmt, EufOneCmsnAmt, double, 19.2; + ŷҺ2ݾ, EufTwoCmsnAmt, EufTwoCmsnAmt, double, 19.2; + û1ݾ, LchOneCmsnAmt, LchOneCmsnAmt, double, 19.2; + û2ݾ, LchTwoCmsnAmt, LchTwoCmsnAmt, double, 19.2; + ŷ1ݾ, TrdOneCmsnAmt, TrdOneCmsnAmt, double, 19.2; + ŷ2ݾ, TrdTwoCmsnAmt, TrdTwoCmsnAmt, double, 19.2; + ŷ3ݾ, TrdThreeCmsnAmt, TrdThreeCmsnAmt, double, 19.2; + ܱ1ݾ, StrmOneCmsnAmt, StrmOneCmsnAmt, double, 19.2; + ܱ2ݾ, StrmTwoCmsnAmt, StrmTwoCmsnAmt, double, 19.2; + ܱ3ݾ, StrmThreeCmsnAmt, StrmThreeCmsnAmt, double, 19.2; + 1ݾ, TransOneCmsnAmt, TransOneCmsnAmt, double, 19.2; + 2ݾ, TransTwoCmsnAmt, TransTwoCmsnAmt, double, 19.2; + 3ݾ, TransThreeCmsnAmt, TransThreeCmsnAmt, double, 19.2; + 4ݾ, TransFourCmsnAmt, TransFourCmsnAmt, double, 19.2; + ؿܿɼ翹౸ڵ, OvrsOptXrcRsvTpCode, OvrsOptXrcRsvTpCode, char, 1; + ؿĻɼDZڵ, OvrsDrvtOptTpCode, OvrsDrvtOptTpCode, char, 1; + 񿩺, SprdBaseIsuYn, SprdBaseIsuYn, char, 1; + ؿĻڵ2, OvrsDrvtIsuCode2, OvrsDrvtIsuCode2, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBQ03000.res b/ls_sample/sample_python/Res/CIDBQ03000.res new file mode 100644 index 0000000..84b8bdd --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBQ03000.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ /ܰȲ,CIDBQ03000,SERVICE=CIDBQ03000,headtype=B,CREATOR=ȣ,CREDATE=2015/06/25 09:12:31; + BEGIN_DATA_MAP + CIDBQ03000InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDBQ03000OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDBQ03000OutBlock2,Out(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ŷ, TrdDt, TrdDt, char, 8; + ȭڵ, CrcyObjCode, CrcyObjCode, char, 12; + ؿܼ, OvrsFutsDps, OvrsFutsDps, double, 23.2; + ݱݾ, CustmMnyioAmt, CustmMnyioAmt, double, 19.2; + ؿܼûͱݾ, AbrdFutsLqdtPnlAmt, AbrdFutsLqdtPnlAmt, double, 19.2; + ؿܼݾ, AbrdFutsCmsnAmt, AbrdFutsCmsnAmt, double, 19.2; + ȯ, PrexchDps, PrexchDps, double, 19.2; + ڻݾ, EvalAssetAmt, EvalAssetAmt, double, 19.2; + ؿܼŹűݾ, AbrdFutsCsgnMgn, AbrdFutsCsgnMgn, double, 19.2; + ؿܼ߰űݾ, AbrdFutsAddMgn, AbrdFutsAddMgn, double, 19.2; + ؿܼⰡɱݾ, AbrdFutsWthdwAbleAmt, AbrdFutsWthdwAbleAmt, double, 19.2; + ؿֹܼɱݾ, AbrdFutsOrdAbleAmt, AbrdFutsOrdAbleAmt, double, 19.2; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ͱݾ, LastSettPnlAmt, LastSettPnlAmt, double, 19.2; + ؿܿɼǰݾ, OvrsOptSettAmt, OvrsOptSettAmt, double, 19.2; + ؿܿɼܰ򰡱ݾ, OvrsOptBalEvalAmt, OvrsOptBalEvalAmt, double, 19.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBQ03000_1.res b/ls_sample/sample_python/Res/CIDBQ03000_1.res new file mode 100644 index 0000000..84b8bdd --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBQ03000_1.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ /ܰȲ,CIDBQ03000,SERVICE=CIDBQ03000,headtype=B,CREATOR=ȣ,CREDATE=2015/06/25 09:12:31; + BEGIN_DATA_MAP + CIDBQ03000InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDBQ03000OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDBQ03000OutBlock2,Out(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ŷ, TrdDt, TrdDt, char, 8; + ȭڵ, CrcyObjCode, CrcyObjCode, char, 12; + ؿܼ, OvrsFutsDps, OvrsFutsDps, double, 23.2; + ݱݾ, CustmMnyioAmt, CustmMnyioAmt, double, 19.2; + ؿܼûͱݾ, AbrdFutsLqdtPnlAmt, AbrdFutsLqdtPnlAmt, double, 19.2; + ؿܼݾ, AbrdFutsCmsnAmt, AbrdFutsCmsnAmt, double, 19.2; + ȯ, PrexchDps, PrexchDps, double, 19.2; + ڻݾ, EvalAssetAmt, EvalAssetAmt, double, 19.2; + ؿܼŹűݾ, AbrdFutsCsgnMgn, AbrdFutsCsgnMgn, double, 19.2; + ؿܼ߰űݾ, AbrdFutsAddMgn, AbrdFutsAddMgn, double, 19.2; + ؿܼⰡɱݾ, AbrdFutsWthdwAbleAmt, AbrdFutsWthdwAbleAmt, double, 19.2; + ؿֹܼɱݾ, AbrdFutsOrdAbleAmt, AbrdFutsOrdAbleAmt, double, 19.2; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ͱݾ, LastSettPnlAmt, LastSettPnlAmt, double, 19.2; + ؿܿɼǰݾ, OvrsOptSettAmt, OvrsOptSettAmt, double, 19.2; + ؿܿɼܰ򰡱ݾ, OvrsOptBalEvalAmt, OvrsOptBalEvalAmt, double, 19.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBQ05300.res b/ls_sample/sample_python/Res/CIDBQ05300.res new file mode 100644 index 0000000..b164cd4 --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBQ05300.res @@ -0,0 +1,74 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ¿Źڻȸ,CIDBQ05300,SERVICE=CIDBQ05300,headtype=B,CREATOR=ȣ,CREDATE=2015/06/22 19:42:57; + BEGIN_DATA_MAP + CIDBQ05300InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ؿܰ±ڵ, OvrsAcntTpCode, OvrsAcntTpCode, char, 1; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ȭڵ, CrcyCode, CrcyCode, char, 3; + end + CIDBQ05300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ؿܰ±ڵ, OvrsAcntTpCode, OvrsAcntTpCode, char, 1; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ȭڵ, CrcyCode, CrcyCode, char, 3; + end + CIDBQ05300OutBlock2,Out(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ؿܼ, OvrsFutsDps, OvrsFutsDps, double, 23.2; + ؿܼŹűݾ, AbrdFutsCsgnMgn, AbrdFutsCsgnMgn, double, 19.2; + ؿܼ߰ű, OvrsFutsSplmMgn, OvrsFutsSplmMgn, double, 23.2; + ûͱݾ, CustmLpnlAmt, CustmLpnlAmt, double, 19.2; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ؿܼݾ, AbrdFutsCmsnAmt, AbrdFutsCmsnAmt, double, 19.2; + ؿܼ򰡿Źѱݾ, AbrdFutsEvalDpstgTotAmt, AbrdFutsEvalDpstgTotAmt, double, 19.2; + ȯ, Xchrat, Xchrat, double, 15.4; + ȭȯݾ, FcurrRealMxchgAmt, FcurrRealMxchgAmt, double, 19.2; + ؿܼⰡɱݾ, AbrdFutsWthdwAbleAmt, AbrdFutsWthdwAbleAmt, double, 19.2; + ؿֹܼɱݾ, AbrdFutsOrdAbleAmt, AbrdFutsOrdAbleAmt, double, 19.2; + ̵ûͱݾ, FutsDueNarrvLqdtPnlAmt, FutsDueNarrvLqdtPnlAmt, double, 19.2; + ̵, FutsDueNarrvCmsn, FutsDueNarrvCmsn, double, 19.2; + ؿܼûͱݾ, AbrdFutsLqdtPnlAmt, AbrdFutsLqdtPnlAmt, double, 19.2; + ؿܼ, OvrsFutsDueCmsn, OvrsFutsDueCmsn, double, 19.2; + ؿܼɼǸżݾ, OvrsFutsOptBuyAmt, OvrsFutsOptBuyAmt, double, 23.2; + ؿܼɼǸŵݾ, OvrsFutsOptSellAmt, OvrsFutsOptSellAmt, double, 23.2; + ɼǸż尡ġݾ, OptBuyMktWrthAmt, OptBuyMktWrthAmt, double, 19.2; + ɼǸŵ尡ġݾ, OptSellMktWrthAmt, OptSellMktWrthAmt, double, 19.2; + end + CIDBQ05300OutBlock3,SelOut(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ؿܼ, OvrsFutsDps, OvrsFutsDps, double, 23.2; + ؿܼûͱݾ, AbrdFutsLqdtPnlAmt, AbrdFutsLqdtPnlAmt, double, 19.2; + ̵ûͱݾ, FutsDueNarrvLqdtPnlAmt, FutsDueNarrvLqdtPnlAmt, double, 19.2; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ؿܼ򰡿Źѱݾ, AbrdFutsEvalDpstgTotAmt, AbrdFutsEvalDpstgTotAmt, double, 19.2; + ûͱݾ, CustmLpnlAmt, CustmLpnlAmt, double, 19.2; + ؿܼ, OvrsFutsDueCmsn, OvrsFutsDueCmsn, double, 19.2; + ȭȯݾ, FcurrRealMxchgAmt, FcurrRealMxchgAmt, double, 19.2; + ؿܼݾ, AbrdFutsCmsnAmt, AbrdFutsCmsnAmt, double, 19.2; + ̵, FutsDueNarrvCmsn, FutsDueNarrvCmsn, double, 19.2; + ؿܼŹűݾ, AbrdFutsCsgnMgn, AbrdFutsCsgnMgn, double, 19.2; + ؿܼű, OvrsFutsMaintMgn, OvrsFutsMaintMgn, double, 19.2; + ؿܼɼǸżݾ, OvrsFutsOptBuyAmt, OvrsFutsOptBuyAmt, double, 23.2; + ؿܼɼǸŵݾ, OvrsFutsOptSellAmt, OvrsFutsOptSellAmt, double, 23.2; + ſѵݾ, CtlmtAmt, CtlmtAmt, double, 23.2; + ؿܼ߰ű, OvrsFutsSplmMgn, OvrsFutsSplmMgn, double, 23.2; + , MgnclRat, MgnclRat, double, 27.10; + ؿֹܼɱݾ, AbrdFutsOrdAbleAmt, AbrdFutsOrdAbleAmt, double, 19.2; + ؿܼⰡɱݾ, AbrdFutsWthdwAbleAmt, AbrdFutsWthdwAbleAmt, double, 19.2; + ɼǸż尡ġݾ, OptBuyMktWrthAmt, OptBuyMktWrthAmt, double, 19.2; + ɼǸŵ尡ġݾ, OptSellMktWrthAmt, OptSellMktWrthAmt, double, 19.2; + ؿܿɼǰݾ, OvrsOptSettAmt, OvrsOptSettAmt, double, 19.2; + ؿܿɼܰ򰡱ݾ, OvrsOptBalEvalAmt, OvrsOptBalEvalAmt, double, 19.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBQ05300_1.res b/ls_sample/sample_python/Res/CIDBQ05300_1.res new file mode 100644 index 0000000..b164cd4 --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBQ05300_1.res @@ -0,0 +1,74 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ¿Źڻȸ,CIDBQ05300,SERVICE=CIDBQ05300,headtype=B,CREATOR=ȣ,CREDATE=2015/06/22 19:42:57; + BEGIN_DATA_MAP + CIDBQ05300InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ؿܰ±ڵ, OvrsAcntTpCode, OvrsAcntTpCode, char, 1; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ȭڵ, CrcyCode, CrcyCode, char, 3; + end + CIDBQ05300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ؿܰ±ڵ, OvrsAcntTpCode, OvrsAcntTpCode, char, 1; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ȭڵ, CrcyCode, CrcyCode, char, 3; + end + CIDBQ05300OutBlock2,Out(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ؿܼ, OvrsFutsDps, OvrsFutsDps, double, 23.2; + ؿܼŹűݾ, AbrdFutsCsgnMgn, AbrdFutsCsgnMgn, double, 19.2; + ؿܼ߰ű, OvrsFutsSplmMgn, OvrsFutsSplmMgn, double, 23.2; + ûͱݾ, CustmLpnlAmt, CustmLpnlAmt, double, 19.2; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ؿܼݾ, AbrdFutsCmsnAmt, AbrdFutsCmsnAmt, double, 19.2; + ؿܼ򰡿Źѱݾ, AbrdFutsEvalDpstgTotAmt, AbrdFutsEvalDpstgTotAmt, double, 19.2; + ȯ, Xchrat, Xchrat, double, 15.4; + ȭȯݾ, FcurrRealMxchgAmt, FcurrRealMxchgAmt, double, 19.2; + ؿܼⰡɱݾ, AbrdFutsWthdwAbleAmt, AbrdFutsWthdwAbleAmt, double, 19.2; + ؿֹܼɱݾ, AbrdFutsOrdAbleAmt, AbrdFutsOrdAbleAmt, double, 19.2; + ̵ûͱݾ, FutsDueNarrvLqdtPnlAmt, FutsDueNarrvLqdtPnlAmt, double, 19.2; + ̵, FutsDueNarrvCmsn, FutsDueNarrvCmsn, double, 19.2; + ؿܼûͱݾ, AbrdFutsLqdtPnlAmt, AbrdFutsLqdtPnlAmt, double, 19.2; + ؿܼ, OvrsFutsDueCmsn, OvrsFutsDueCmsn, double, 19.2; + ؿܼɼǸżݾ, OvrsFutsOptBuyAmt, OvrsFutsOptBuyAmt, double, 23.2; + ؿܼɼǸŵݾ, OvrsFutsOptSellAmt, OvrsFutsOptSellAmt, double, 23.2; + ɼǸż尡ġݾ, OptBuyMktWrthAmt, OptBuyMktWrthAmt, double, 19.2; + ɼǸŵ尡ġݾ, OptSellMktWrthAmt, OptSellMktWrthAmt, double, 19.2; + end + CIDBQ05300OutBlock3,SelOut(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ؿܼ, OvrsFutsDps, OvrsFutsDps, double, 23.2; + ؿܼûͱݾ, AbrdFutsLqdtPnlAmt, AbrdFutsLqdtPnlAmt, double, 19.2; + ̵ûͱݾ, FutsDueNarrvLqdtPnlAmt, FutsDueNarrvLqdtPnlAmt, double, 19.2; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ؿܼ򰡿Źѱݾ, AbrdFutsEvalDpstgTotAmt, AbrdFutsEvalDpstgTotAmt, double, 19.2; + ûͱݾ, CustmLpnlAmt, CustmLpnlAmt, double, 19.2; + ؿܼ, OvrsFutsDueCmsn, OvrsFutsDueCmsn, double, 19.2; + ȭȯݾ, FcurrRealMxchgAmt, FcurrRealMxchgAmt, double, 19.2; + ؿܼݾ, AbrdFutsCmsnAmt, AbrdFutsCmsnAmt, double, 19.2; + ̵, FutsDueNarrvCmsn, FutsDueNarrvCmsn, double, 19.2; + ؿܼŹűݾ, AbrdFutsCsgnMgn, AbrdFutsCsgnMgn, double, 19.2; + ؿܼű, OvrsFutsMaintMgn, OvrsFutsMaintMgn, double, 19.2; + ؿܼɼǸżݾ, OvrsFutsOptBuyAmt, OvrsFutsOptBuyAmt, double, 23.2; + ؿܼɼǸŵݾ, OvrsFutsOptSellAmt, OvrsFutsOptSellAmt, double, 23.2; + ſѵݾ, CtlmtAmt, CtlmtAmt, double, 23.2; + ؿܼ߰ű, OvrsFutsSplmMgn, OvrsFutsSplmMgn, double, 23.2; + , MgnclRat, MgnclRat, double, 27.10; + ؿֹܼɱݾ, AbrdFutsOrdAbleAmt, AbrdFutsOrdAbleAmt, double, 19.2; + ؿܼⰡɱݾ, AbrdFutsWthdwAbleAmt, AbrdFutsWthdwAbleAmt, double, 19.2; + ɼǸż尡ġݾ, OptBuyMktWrthAmt, OptBuyMktWrthAmt, double, 19.2; + ɼǸŵ尡ġݾ, OptSellMktWrthAmt, OptSellMktWrthAmt, double, 19.2; + ؿܿɼǰݾ, OvrsOptSettAmt, OvrsOptSettAmt, double, 19.2; + ؿܿɼܰ򰡱ݾ, OvrsOptBalEvalAmt, OvrsOptBalEvalAmt, double, 19.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBT00100.res b/ls_sample/sample_python/Res/CIDBT00100.res new file mode 100644 index 0000000..3b0853c --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBT00100.res @@ -0,0 +1,49 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼűֹ,CIDBT00100,SERVICE=CIDBT00100,ENCRYPT,SIGNATURE,headtype=B,CREATOR=ȣ,CREDATE=2018/08/28 16:28:20; + BEGIN_DATA_MAP + CIDBT00100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ڵ, BrnCode, BrnCode, char, 7; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ǰڵ, PrdtCode, PrdtCode, char, 6; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ڵ, BrnCode, BrnCode, char, 7; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ǰڵ, PrdtCode, PrdtCode, char, 6; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBT00100_1.res b/ls_sample/sample_python/Res/CIDBT00100_1.res new file mode 100644 index 0000000..3b0853c --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBT00100_1.res @@ -0,0 +1,49 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼűֹ,CIDBT00100,SERVICE=CIDBT00100,ENCRYPT,SIGNATURE,headtype=B,CREATOR=ȣ,CREDATE=2018/08/28 16:28:20; + BEGIN_DATA_MAP + CIDBT00100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ڵ, BrnCode, BrnCode, char, 7; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ǰڵ, PrdtCode, PrdtCode, char, 6; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ڵ, BrnCode, BrnCode, char, 7; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ǰڵ, PrdtCode, PrdtCode, char, 6; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBT00900.res b/ls_sample/sample_python/Res/CIDBT00900.res new file mode 100644 index 0000000..c1f7bb6 --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBT00900.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,ؿֹܼ,CIDBT00900,SERVICE=CIDBT00900,ENCRYPT,SIGNATURE,headtype=B,CREATOR=ȣ,CREDATE=2018/08/28 16:29:03; + BEGIN_DATA_MAP + CIDBT00900InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, RegBrnNo, RegBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ֹڵ, FutsOrdPtnCode, FutsOrdPtnCode, char, 1; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00900OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, RegBrnNo, RegBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ֹڵ, FutsOrdPtnCode, FutsOrdPtnCode, char, 1; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00900OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + θ޽, InnerMsgCnts, InnerMsgCnts, char, 80; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBT00900_1.res b/ls_sample/sample_python/Res/CIDBT00900_1.res new file mode 100644 index 0000000..c1f7bb6 --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBT00900_1.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,ؿֹܼ,CIDBT00900,SERVICE=CIDBT00900,ENCRYPT,SIGNATURE,headtype=B,CREATOR=ȣ,CREDATE=2018/08/28 16:29:03; + BEGIN_DATA_MAP + CIDBT00900InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, RegBrnNo, RegBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ֹڵ, FutsOrdPtnCode, FutsOrdPtnCode, char, 1; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00900OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, RegBrnNo, RegBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ֹڵ, FutsOrdPtnCode, FutsOrdPtnCode, char, 1; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00900OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + θ޽, InnerMsgCnts, InnerMsgCnts, char, 80; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBT01000.res b/ls_sample/sample_python/Res/CIDBT01000.res new file mode 100644 index 0000000..29713e4 --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBT01000.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ؿֹܼ,CIDBT01000,SERVICE=CIDBT01000,ENCRYPT,SIGNATURE,headtype=B,CREATOR=ֿȣ,CREDATE=2012/04/26 14:52:30; + BEGIN_DATA_MAP + CIDBT01000InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, BrnNo, BrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ǰڵ, PrdtTpCode, PrdtTpCode, char, 2; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT01000OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, BrnNo, BrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ǰڵ, PrdtTpCode, PrdtTpCode, char, 2; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT01000OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + θ޽, InnerMsgCnts, InnerMsgCnts, char, 80; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDBT01000_1.res b/ls_sample/sample_python/Res/CIDBT01000_1.res new file mode 100644 index 0000000..29713e4 --- /dev/null +++ b/ls_sample/sample_python/Res/CIDBT01000_1.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ؿֹܼ,CIDBT01000,SERVICE=CIDBT01000,ENCRYPT,SIGNATURE,headtype=B,CREATOR=ֿȣ,CREDATE=2012/04/26 14:52:30; + BEGIN_DATA_MAP + CIDBT01000InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, BrnNo, BrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ǰڵ, PrdtTpCode, PrdtTpCode, char, 2; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT01000OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, BrnNo, BrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ǰڵ, PrdtTpCode, PrdtTpCode, char, 2; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT01000OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + θ޽, InnerMsgCnts, InnerMsgCnts, char, 80; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDEQ00800.res b/ls_sample/sample_python/Res/CIDEQ00800.res new file mode 100644 index 0000000..f8d15bf --- /dev/null +++ b/ls_sample/sample_python/Res/CIDEQ00800.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ں ̰ ܰ,CIDEQ00800,SERVICE=CIDEQ00800,ENCRYPT,headtype=B,CREATOR=ȣ,CREDATE=2018/08/27 10:26:32; + BEGIN_DATA_MAP + CIDEQ00800InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDEQ00800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDEQ00800OutBlock2,Out(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ŷ, TrdDt, TrdDt, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + Ÿűи, BnsTpNm, BnsTpNm, char, 10; + ܰ, BalQty, BalQty, long, 16; + û갡ɼ, LqdtAbleQty, LqdtAbleQty, long, 16; + ԰, PchsPrc, PchsPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ܰݾ, CustmBalAmt, CustmBalAmt, double, 19.2; + ȭ򰡱ݾ, FcurrEvalAmt, FcurrEvalAmt, double, 21.4; + , IsuNm, IsuNm, char, 50; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + , DueDt, DueDt, char, 8; + ݾ, PrcntrAmt, PrcntrAmt, double, 19.2; + ȭ򰡼ͱݾ, FcurrEvalPnlAmt, FcurrEvalPnlAmt, double, 21.4; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CIDEQ00800_1.res b/ls_sample/sample_python/Res/CIDEQ00800_1.res new file mode 100644 index 0000000..f8d15bf --- /dev/null +++ b/ls_sample/sample_python/Res/CIDEQ00800_1.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ں ̰ ܰ,CIDEQ00800,SERVICE=CIDEQ00800,ENCRYPT,headtype=B,CREATOR=ȣ,CREDATE=2018/08/27 10:26:32; + BEGIN_DATA_MAP + CIDEQ00800InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDEQ00800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDEQ00800OutBlock2,Out(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ŷ, TrdDt, TrdDt, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + Ÿűи, BnsTpNm, BnsTpNm, char, 10; + ܰ, BalQty, BalQty, long, 16; + û갡ɼ, LqdtAbleQty, LqdtAbleQty, long, 16; + ԰, PchsPrc, PchsPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ܰݾ, CustmBalAmt, CustmBalAmt, double, 19.2; + ȭ򰡱ݾ, FcurrEvalAmt, FcurrEvalAmt, double, 21.4; + , IsuNm, IsuNm, char, 50; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + , DueDt, DueDt, char, 8; + ݾ, PrcntrAmt, PrcntrAmt, double, 19.2; + ȭ򰡼ͱݾ, FcurrEvalPnlAmt, FcurrEvalPnlAmt, double, 21.4; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CLNAQ00100.res b/ls_sample/sample_python/Res/CLNAQ00100.res new file mode 100644 index 0000000..95992ed --- /dev/null +++ b/ls_sample/sample_python/Res/CLNAQ00100.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,Ź㺸ڰȲȸ,CLNAQ00100,SERVICE=CLNAQ00100,headtype=B,CREATOR=̼ȣ,CREDATE=2012/01/10 15:45:49; + BEGIN_DATA_MAP + CLNAQ00100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + DZ, SecTpCode, SecTpCode, char, 1; + ڵڵ, LoanIntrstGrdCode, LoanIntrstGrdCode, char, 2; + ⱸ, LoanTp, LoanTp, char, 1; + end + CLNAQ00100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + DZ, SecTpCode, SecTpCode, char, 1; + ڵڵ, LoanIntrstGrdCode, LoanIntrstGrdCode, char, 2; + ⱸ, LoanTp, LoanTp, char, 1; + end + CLNAQ00100OutBlock2,Out(*EMPTY*),output,occurs; + begin + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + ׸鰡, Parprc, Parprc, double, 13.2; + , PrdayCprc, PrdayCprc, double, 13.2; + , RatVal, RatVal, double, 19.8; + 밡, SubstPrc, SubstPrc, double, 13.2; + ϱ, RegTpNm, RegTpNm, char, 20; + ű¡з, SpotMgnLevyClssNm, SpotMgnLevyClssNm, char, 40; + ŷ, FnoTrdStopRsnCnts, FnoTrdStopRsnCnts, char, 40; + , DgrsPtnNm, DgrsPtnNm, char, 40; + , AcdPtnNm, AcdPtnNm, char, 40; + 屸, MktTpNm, MktTpNm, char, 20; + ѵ, LmtVal, LmtVal, long, 18; + ѵ, AcntLmtVal, AcntLmtVal, long, 18; + ڵ, LoanGrdCode, LoanGrdCode, char, 2; + ݾ, LoanAmt, LoanAmt, long, 16; + Ⱑ, LoanAbleRat, LoanAbleRat, double, 26.9; + 1, LoanIntrat1, LoanIntrat1, double, 14.4; + ID, RegPsnId, RegPsnId, char, 16; + , Rat01, Rat01, double, 19.8; + , Rat02, Rat02, double, 19.8; + end + CLNAQ00100OutBlock3,Sum(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + հݾ, LrgMnyoutSumAmt, LrgMnyoutSumAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CLNAQ00100_1.res b/ls_sample/sample_python/Res/CLNAQ00100_1.res new file mode 100644 index 0000000..95992ed --- /dev/null +++ b/ls_sample/sample_python/Res/CLNAQ00100_1.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,Ź㺸ڰȲȸ,CLNAQ00100,SERVICE=CLNAQ00100,headtype=B,CREATOR=̼ȣ,CREDATE=2012/01/10 15:45:49; + BEGIN_DATA_MAP + CLNAQ00100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + DZ, SecTpCode, SecTpCode, char, 1; + ڵڵ, LoanIntrstGrdCode, LoanIntrstGrdCode, char, 2; + ⱸ, LoanTp, LoanTp, char, 1; + end + CLNAQ00100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + DZ, SecTpCode, SecTpCode, char, 1; + ڵڵ, LoanIntrstGrdCode, LoanIntrstGrdCode, char, 2; + ⱸ, LoanTp, LoanTp, char, 1; + end + CLNAQ00100OutBlock2,Out(*EMPTY*),output,occurs; + begin + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + ׸鰡, Parprc, Parprc, double, 13.2; + , PrdayCprc, PrdayCprc, double, 13.2; + , RatVal, RatVal, double, 19.8; + 밡, SubstPrc, SubstPrc, double, 13.2; + ϱ, RegTpNm, RegTpNm, char, 20; + ű¡з, SpotMgnLevyClssNm, SpotMgnLevyClssNm, char, 40; + ŷ, FnoTrdStopRsnCnts, FnoTrdStopRsnCnts, char, 40; + , DgrsPtnNm, DgrsPtnNm, char, 40; + , AcdPtnNm, AcdPtnNm, char, 40; + 屸, MktTpNm, MktTpNm, char, 20; + ѵ, LmtVal, LmtVal, long, 18; + ѵ, AcntLmtVal, AcntLmtVal, long, 18; + ڵ, LoanGrdCode, LoanGrdCode, char, 2; + ݾ, LoanAmt, LoanAmt, long, 16; + Ⱑ, LoanAbleRat, LoanAbleRat, double, 26.9; + 1, LoanIntrat1, LoanIntrat1, double, 14.4; + ID, RegPsnId, RegPsnId, char, 16; + , Rat01, Rat01, double, 19.8; + , Rat02, Rat02, double, 19.8; + end + CLNAQ00100OutBlock3,Sum(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + հݾ, LrgMnyoutSumAmt, LrgMnyoutSumAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CSPAQ00600.res b/ls_sample/sample_python/Res/CSPAQ00600.res new file mode 100644 index 0000000..3e6faa8 --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAQ00600.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,ºſѵȸ,CSPAQ00600,SERVICE=CSPAQ00600,headtype=B,CREATOR=ۿ켮,CREDATE=2018/09/17 15:17:35; + BEGIN_DATA_MAP + CSPAQ00600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + 󼼺зڵ, LoanDtlClssCode, LoanDtlClssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CSPAQ00600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + 󼼺зڵ, LoanDtlClssCode, LoanDtlClssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CSPAQ00600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ѵ, SloanLmtAmt, SloanLmtAmt, long, 16; + ֱݾհ, SloanAmtSum, SloanAmtSum, long, 16; + ֽűԱݾ, SloanNewAmt, SloanNewAmt, long, 16; + ֻȯݾ, SloanRfundAmt, SloanRfundAmt, long, 16; + ѵݾ, MktcplMloanLmtAmt, MktcplMloanLmtAmt, long, 16; + ڱݾհ, MktcplMloanAmtSum, MktcplMloanAmtSum, long, 16; + ڽűԱݾ, MktcplMloanNewAmt, MktcplMloanNewAmt, long, 16; + ڻȯݾ, MktcplMloanRfundAmt, MktcplMloanRfundAmt, long, 16; + ڱѵݾ, SfaccMloanLmtAmt, SfaccMloanLmtAmt, long, 16; + ڱڱݾհ, SfaccMloanAmtSum, SfaccMloanAmtSum, long, 16; + ڱڽűԱݾ, SfaccMloanNewAmt, SfaccMloanNewAmt, long, 16; + ڱڻȯݾ, SfaccMloanRfundAmt, SfaccMloanRfundAmt, long, 16; + ѵݾ, BrnMktcplMloanLmtAmt, BrnMktcplMloanLmtAmt, long, 16; + ڽűԱݾ, BrnMktcplMloanNewAmt, BrnMktcplMloanNewAmt, long, 16; + ڻȯݾ, BrnMktcplMloanRfundAmt, BrnMktcplMloanRfundAmt, long, 16; + ڻݾ, BrnMktcplMloanUseAmt, BrnMktcplMloanUseAmt, long, 16; + ڱѵݾ, BrnSfaccMloanLmtAmt, BrnSfaccMloanLmtAmt, long, 16; + ڱڽűԱݾ, BrnSfaccMloanNewAmt, BrnSfaccMloanNewAmt, long, 16; + ڱڻȯݾ, BrnSfaccMloanRfundAmt, BrnSfaccMloanRfundAmt, long, 16; + ڱڻݾ, BrnSfaccMloanUseAmt, BrnSfaccMloanUseAmt, long, 16; + ̿ѵ, FirmMloanLmtMgmtYn, FirmMloanLmtMgmtYn, char, 1; + ̿ſѱ, FirmCrdtIsuRestrcTp, FirmCrdtIsuRestrcTp, char, 1; + 㺸, PldgMaintRat, PldgMaintRat, double, 7.4; + ̿, FirmNm, FirmNm, char, 50; + 㺸, PldgRat, PldgRat, double, 7.4; + Źڻհ, DpsastSum, DpsastSum, long, 17; + ѵ氡ɱݾ, LmtChgAbleAmt, LmtChgAbleAmt, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + ̼Ұֹɼ, RcvblUablOrdAbleQty, RcvblUablOrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CSPAQ00600_1.res b/ls_sample/sample_python/Res/CSPAQ00600_1.res new file mode 100644 index 0000000..3e6faa8 --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAQ00600_1.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,ºſѵȸ,CSPAQ00600,SERVICE=CSPAQ00600,headtype=B,CREATOR=ۿ켮,CREDATE=2018/09/17 15:17:35; + BEGIN_DATA_MAP + CSPAQ00600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + 󼼺зڵ, LoanDtlClssCode, LoanDtlClssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CSPAQ00600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + 󼼺зڵ, LoanDtlClssCode, LoanDtlClssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CSPAQ00600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ѵ, SloanLmtAmt, SloanLmtAmt, long, 16; + ֱݾհ, SloanAmtSum, SloanAmtSum, long, 16; + ֽűԱݾ, SloanNewAmt, SloanNewAmt, long, 16; + ֻȯݾ, SloanRfundAmt, SloanRfundAmt, long, 16; + ѵݾ, MktcplMloanLmtAmt, MktcplMloanLmtAmt, long, 16; + ڱݾհ, MktcplMloanAmtSum, MktcplMloanAmtSum, long, 16; + ڽűԱݾ, MktcplMloanNewAmt, MktcplMloanNewAmt, long, 16; + ڻȯݾ, MktcplMloanRfundAmt, MktcplMloanRfundAmt, long, 16; + ڱѵݾ, SfaccMloanLmtAmt, SfaccMloanLmtAmt, long, 16; + ڱڱݾհ, SfaccMloanAmtSum, SfaccMloanAmtSum, long, 16; + ڱڽűԱݾ, SfaccMloanNewAmt, SfaccMloanNewAmt, long, 16; + ڱڻȯݾ, SfaccMloanRfundAmt, SfaccMloanRfundAmt, long, 16; + ѵݾ, BrnMktcplMloanLmtAmt, BrnMktcplMloanLmtAmt, long, 16; + ڽűԱݾ, BrnMktcplMloanNewAmt, BrnMktcplMloanNewAmt, long, 16; + ڻȯݾ, BrnMktcplMloanRfundAmt, BrnMktcplMloanRfundAmt, long, 16; + ڻݾ, BrnMktcplMloanUseAmt, BrnMktcplMloanUseAmt, long, 16; + ڱѵݾ, BrnSfaccMloanLmtAmt, BrnSfaccMloanLmtAmt, long, 16; + ڱڽűԱݾ, BrnSfaccMloanNewAmt, BrnSfaccMloanNewAmt, long, 16; + ڱڻȯݾ, BrnSfaccMloanRfundAmt, BrnSfaccMloanRfundAmt, long, 16; + ڱڻݾ, BrnSfaccMloanUseAmt, BrnSfaccMloanUseAmt, long, 16; + ̿ѵ, FirmMloanLmtMgmtYn, FirmMloanLmtMgmtYn, char, 1; + ̿ſѱ, FirmCrdtIsuRestrcTp, FirmCrdtIsuRestrcTp, char, 1; + 㺸, PldgMaintRat, PldgMaintRat, double, 7.4; + ̿, FirmNm, FirmNm, char, 50; + 㺸, PldgRat, PldgRat, double, 7.4; + Źڻհ, DpsastSum, DpsastSum, long, 17; + ѵ氡ɱݾ, LmtChgAbleAmt, LmtChgAbleAmt, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + ̼Ұֹɼ, RcvblUablOrdAbleQty, RcvblUablOrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CSPAQ12200.res b/ls_sample/sample_python/Res/CSPAQ12200.res new file mode 100644 index 0000000..93e9667 --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAQ12200.res @@ -0,0 +1,82 @@ +BEGIN_FUNCTION_MAP + .Func,¿ ֹɱݾ ȸ,CSPAQ12200,SERVICE=CSPAQ12200,headtype=B,CREATOR=̻,CREDATE=2015/04/13 08:41:27; + BEGIN_DATA_MAP + CSPAQ12200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ12200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ12200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + ܰ򰡱ݾ, BalEvalAmt, BalEvalAmt, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + ŹڻѾ, DpsastTotamt, DpsastTotamt, long, 16; + , PnlRat, PnlRat, double, 18.6; + ڿ, InvstOrgAmt, InvstOrgAmt, long, 20; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ſ㺸ֹݾ, CrdtPldgOrdAmt, CrdtPldgOrdAmt, long, 16; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + D1, D1Dps, D1Dps, long, 16; + D2, D2Dps, D2Dps, long, 16; + ݹ̼ݾ, MnyrclAmt, MnyrclAmt, long, 16; + ű, MgnMny, MgnMny, long, 16; + űݴ, MgnSubst, MgnSubst, long, 16; + ǥݾ, ChckAmt, ChckAmt, long, 16; + ֹɱݾ, SubstOrdAbleAmt, SubstOrdAbleAmt, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + űݷ35%ֹɱݾ, MgnRat35ordAbleAmt, MgnRat35ordAbleAmt, long, 16; + űݷ50%ֹɱݾ, MgnRat50ordAbleAmt, MgnRat50ordAbleAmt, long, 16; + ϸŵݾ, PrdaySellAdjstAmt, PrdaySellAdjstAmt, long, 16; + ϸżݾ, PrdayBuyAdjstAmt, PrdayBuyAdjstAmt, long, 16; + ϸŵݾ, CrdaySellAdjstAmt, CrdaySellAdjstAmt, long, 16; + ϸżݾ, CrdayBuyAdjstAmt, CrdayBuyAdjstAmt, long, 16; + D1üҿݾ, D1ovdRepayRqrdAmt, D1ovdRepayRqrdAmt, long, 16; + D2üҿݾ, D2ovdRepayRqrdAmt, D2ovdRepayRqrdAmt, long, 16; + D1Ⱑɱݾ, D1PrsmptWthdwAbleAmt, D1PrsmptWthdwAbleAmt, long, 16; + D2Ⱑɱݾ, D2PrsmptWthdwAbleAmt, D2PrsmptWthdwAbleAmt, long, 16; + Ź㺸ݾ, DpspdgLoanAmt, DpspdgLoanAmt, long, 16; + ſ뼳, Imreq, Imreq, long, 16; + ڱݾ, MloanAmt, MloanAmt, long, 16; + Ĵ㺸, ChgAfPldgRat, ChgAfPldgRat, double, 9.3; + 㺸ݾ, OrgPldgAmt, OrgPldgAmt, long, 16; + δ㺸ݾ, SubPldgAmt, SubPldgAmt, long, 16; + ҿ㺸ݾ, RqrdPldgAmt, RqrdPldgAmt, long, 16; + 㺸ݾ, OrgPdlckAmt, OrgPdlckAmt, long, 16; + 㺸ݾ, PdlckAmt, PdlckAmt, long, 16; + ߰㺸, AddPldgMny, AddPldgMny, long, 16; + D1ֹɱݾ, D1OrdAbleAmt, D1OrdAbleAmt, long, 16; + ſڹ̳ݾ, CrdtIntdltAmt, CrdtIntdltAmt, long, 16; + Ÿ뿩ݾ, EtclndAmt, EtclndAmt, long, 16; + ݴŸűݾ, NtdayPrsmptCvrgAmt, NtdayPrsmptCvrgAmt, long, 16; + 㺸հݾ, OrgPldgSumAmt, OrgPldgSumAmt, long, 16; + ſֹɱݾ, CrdtOrdAbleAmt, CrdtOrdAbleAmt, long, 16; + δ㺸հݾ, SubPldgSumAmt, SubPldgSumAmt, long, 16; + ſ㺸, CrdtPldgAmtMny, CrdtPldgAmtMny, long, 16; + ſ㺸ݾ, CrdtPldgSubstAmt, CrdtPldgSubstAmt, long, 16; + ߰ſ㺸, AddCrdtPldgMny, AddCrdtPldgMny, long, 16; + ſ㺸ݾ, CrdtPldgRuseAmt, CrdtPldgRuseAmt, long, 16; + ߰ſ㺸, AddCrdtPldgSubst, AddCrdtPldgSubst, long, 16; + ŵݴ㺸ݾ, CslLoanAmtdt1, CslLoanAmtdt1, long, 16; + óѱݾ, DpslRestrcAmt, DpslRestrcAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CSPAQ12200_1.res b/ls_sample/sample_python/Res/CSPAQ12200_1.res new file mode 100644 index 0000000..93e9667 --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAQ12200_1.res @@ -0,0 +1,82 @@ +BEGIN_FUNCTION_MAP + .Func,¿ ֹɱݾ ȸ,CSPAQ12200,SERVICE=CSPAQ12200,headtype=B,CREATOR=̻,CREDATE=2015/04/13 08:41:27; + BEGIN_DATA_MAP + CSPAQ12200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ12200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ12200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + ܰ򰡱ݾ, BalEvalAmt, BalEvalAmt, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + ŹڻѾ, DpsastTotamt, DpsastTotamt, long, 16; + , PnlRat, PnlRat, double, 18.6; + ڿ, InvstOrgAmt, InvstOrgAmt, long, 20; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ſ㺸ֹݾ, CrdtPldgOrdAmt, CrdtPldgOrdAmt, long, 16; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + D1, D1Dps, D1Dps, long, 16; + D2, D2Dps, D2Dps, long, 16; + ݹ̼ݾ, MnyrclAmt, MnyrclAmt, long, 16; + ű, MgnMny, MgnMny, long, 16; + űݴ, MgnSubst, MgnSubst, long, 16; + ǥݾ, ChckAmt, ChckAmt, long, 16; + ֹɱݾ, SubstOrdAbleAmt, SubstOrdAbleAmt, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + űݷ35%ֹɱݾ, MgnRat35ordAbleAmt, MgnRat35ordAbleAmt, long, 16; + űݷ50%ֹɱݾ, MgnRat50ordAbleAmt, MgnRat50ordAbleAmt, long, 16; + ϸŵݾ, PrdaySellAdjstAmt, PrdaySellAdjstAmt, long, 16; + ϸżݾ, PrdayBuyAdjstAmt, PrdayBuyAdjstAmt, long, 16; + ϸŵݾ, CrdaySellAdjstAmt, CrdaySellAdjstAmt, long, 16; + ϸżݾ, CrdayBuyAdjstAmt, CrdayBuyAdjstAmt, long, 16; + D1üҿݾ, D1ovdRepayRqrdAmt, D1ovdRepayRqrdAmt, long, 16; + D2üҿݾ, D2ovdRepayRqrdAmt, D2ovdRepayRqrdAmt, long, 16; + D1Ⱑɱݾ, D1PrsmptWthdwAbleAmt, D1PrsmptWthdwAbleAmt, long, 16; + D2Ⱑɱݾ, D2PrsmptWthdwAbleAmt, D2PrsmptWthdwAbleAmt, long, 16; + Ź㺸ݾ, DpspdgLoanAmt, DpspdgLoanAmt, long, 16; + ſ뼳, Imreq, Imreq, long, 16; + ڱݾ, MloanAmt, MloanAmt, long, 16; + Ĵ㺸, ChgAfPldgRat, ChgAfPldgRat, double, 9.3; + 㺸ݾ, OrgPldgAmt, OrgPldgAmt, long, 16; + δ㺸ݾ, SubPldgAmt, SubPldgAmt, long, 16; + ҿ㺸ݾ, RqrdPldgAmt, RqrdPldgAmt, long, 16; + 㺸ݾ, OrgPdlckAmt, OrgPdlckAmt, long, 16; + 㺸ݾ, PdlckAmt, PdlckAmt, long, 16; + ߰㺸, AddPldgMny, AddPldgMny, long, 16; + D1ֹɱݾ, D1OrdAbleAmt, D1OrdAbleAmt, long, 16; + ſڹ̳ݾ, CrdtIntdltAmt, CrdtIntdltAmt, long, 16; + Ÿ뿩ݾ, EtclndAmt, EtclndAmt, long, 16; + ݴŸűݾ, NtdayPrsmptCvrgAmt, NtdayPrsmptCvrgAmt, long, 16; + 㺸հݾ, OrgPldgSumAmt, OrgPldgSumAmt, long, 16; + ſֹɱݾ, CrdtOrdAbleAmt, CrdtOrdAbleAmt, long, 16; + δ㺸հݾ, SubPldgSumAmt, SubPldgSumAmt, long, 16; + ſ㺸, CrdtPldgAmtMny, CrdtPldgAmtMny, long, 16; + ſ㺸ݾ, CrdtPldgSubstAmt, CrdtPldgSubstAmt, long, 16; + ߰ſ㺸, AddCrdtPldgMny, AddCrdtPldgMny, long, 16; + ſ㺸ݾ, CrdtPldgRuseAmt, CrdtPldgRuseAmt, long, 16; + ߰ſ㺸, AddCrdtPldgSubst, AddCrdtPldgSubst, long, 16; + ŵݴ㺸ݾ, CslLoanAmtdt1, CslLoanAmtdt1, long, 16; + óѱݾ, DpslRestrcAmt, DpslRestrcAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CSPAQ12300.res b/ls_sample/sample_python/Res/CSPAQ12300.res new file mode 100644 index 0000000..d49591a --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAQ12300.res @@ -0,0 +1,142 @@ +BEGIN_FUNCTION_MAP + .Func,BEPܰȸ,CSPAQ12300,SERVICE=CSPAQ12300,headtype=B,CREATOR=̻,CREDATE=2015/04/13 08:43:20; + BEGIN_DATA_MAP + CSPAQ12300InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + 뱸, CmsnAppTpCode, CmsnAppTpCode, char, 1; + D2ܰȸ, D2balBaseQryTp, D2balBaseQryTp, char, 1; + ܰ, UprcTpCode, UprcTpCode, char, 1; + end + CSPAQ12300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + 뱸, CmsnAppTpCode, CmsnAppTpCode, char, 1; + D2ܰȸ, D2balBaseQryTp, D2balBaseQryTp, char, 1; + ܰ, UprcTpCode, UprcTpCode, char, 1; + end + CSPAQ12300OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + HTSֹɱݾ, HtsOrdAbleAmt, HtsOrdAbleAmt, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + ܰ򰡱ݾ, BalEvalAmt, BalEvalAmt, long, 16; + Աݾ, PchsAmt, PchsAmt, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + , PnlRat, PnlRat, double, 18.6; + ڿ, InvstOrgAmt, InvstOrgAmt, long, 20; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ſ㺸ֹݾ, CrdtPldgOrdAmt, CrdtPldgOrdAmt, long, 16; + , Dps, Dps, long, 16; + D1, D1Dps, D1Dps, long, 16; + D2, D2Dps, D2Dps, long, 16; + ֹ, OrdDt, OrdDt, char, 8; + űݾ, MnyMgn, MnyMgn, long, 16; + űݾ, SubstMgn, SubstMgn, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + ϸżüݾ, PrdayBuyExecAmt, PrdayBuyExecAmt, long, 16; + ϸŵüݾ, PrdaySellExecAmt, PrdaySellExecAmt, long, 16; + ϸżüݾ, CrdayBuyExecAmt, CrdayBuyExecAmt, long, 16; + ϸŵüݾ, CrdaySellExecAmt, CrdaySellExecAmt, long, 16; + 򰡼հ, EvalPnlSum, EvalPnlSum, long, 15; + ŹڻѾ, DpsastTotamt, DpsastTotamt, long, 16; + , Evrprc, Evrprc, long, 19; + ݾ, RuseAmt, RuseAmt, long, 16; + Ÿ뿩ݾ, EtclndAmt, EtclndAmt, long, 16; + ݾ, PrcAdjstAmt, PrcAdjstAmt, long, 16; + D1, D1CmsnAmt, D1CmsnAmt, long, 16; + D2, D2CmsnAmt, D2CmsnAmt, long, 16; + D1, D1EvrTax, D1EvrTax, long, 16; + D2, D2EvrTax, D2EvrTax, long, 16; + D1ݾ, D1SettPrergAmt, D1SettPrergAmt, long, 16; + D2ݾ, D2SettPrergAmt, D2SettPrergAmt, long, 16; + KSEű, PrdayKseMnyMgn, PrdayKseMnyMgn, long, 16; + KSEű, PrdayKseSubstMgn, PrdayKseSubstMgn, long, 16; + KSEſű, PrdayKseCrdtMnyMgn, PrdayKseCrdtMnyMgn, long, 16; + KSEſű, PrdayKseCrdtSubstMgn, PrdayKseCrdtSubstMgn, long, 16; + KSEű, CrdayKseMnyMgn, CrdayKseMnyMgn, long, 16; + KSEű, CrdayKseSubstMgn, CrdayKseSubstMgn, long, 16; + KSEſű, CrdayKseCrdtMnyMgn, CrdayKseCrdtMnyMgn, long, 16; + KSEſű, CrdayKseCrdtSubstMgn, CrdayKseCrdtSubstMgn, long, 16; + ڽű, PrdayKdqMnyMgn, PrdayKdqMnyMgn, long, 16; + ڽڴű, PrdayKdqSubstMgn, PrdayKdqSubstMgn, long, 16; + ڽڽſű, PrdayKdqCrdtMnyMgn, PrdayKdqCrdtMnyMgn, long, 16; + ڽڽſű, PrdayKdqCrdtSubstMgn, PrdayKdqCrdtSubstMgn, long, 16; + ڽű, CrdayKdqMnyMgn, CrdayKdqMnyMgn, long, 16; + ڽڴű, CrdayKdqSubstMgn, CrdayKdqSubstMgn, long, 16; + ڽڽſű, CrdayKdqCrdtMnyMgn, CrdayKdqCrdtMnyMgn, long, 16; + ڽڽſű, CrdayKdqCrdtSubstMgn, CrdayKdqCrdtSubstMgn, long, 16; + ű, PrdayFrbrdMnyMgn, PrdayFrbrdMnyMgn, long, 16; + ű, PrdayFrbrdSubstMgn, PrdayFrbrdSubstMgn, long, 16; + ű, CrdayFrbrdMnyMgn, CrdayFrbrdMnyMgn, long, 16; + ű, CrdayFrbrdSubstMgn, CrdayFrbrdSubstMgn, long, 16; + ű, PrdayCrbmkMnyMgn, PrdayCrbmkMnyMgn, long, 16; + ܴű, PrdayCrbmkSubstMgn, PrdayCrbmkSubstMgn, long, 16; + ű, CrdayCrbmkMnyMgn, CrdayCrbmkMnyMgn, long, 16; + ܴű, CrdayCrbmkSubstMgn, CrdayCrbmkSubstMgn, long, 16; + Ź㺸, DpspdgQty, DpspdgQty, long, 16; + ż(D+2), BuyAdjstAmtD2, BuyAdjstAmtD2, long, 16; + ŵ(D+2), SellAdjstAmtD2, SellAdjstAmtD2, long, 16; + ҿ(D+1), RepayRqrdAmtD1, RepayRqrdAmtD1, long, 16; + ҿ(D+2), RepayRqrdAmtD2, RepayRqrdAmtD2, long, 16; + ݾ, LoanAmt, LoanAmt, long, 16; + end + CSPAQ12300OutBlock3,ST_OUT(*EMPTY*),output,occurs; + begin + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + ܰڵ, SecBalPtnCode, SecBalPtnCode, char, 2; + ܰ, SecBalPtnNm, SecBalPtnNm, char, 40; + ܰ, BalQty, BalQty, long, 16; + Ÿűܰ, BnsBaseBalQty, BnsBaseBalQty, long, 16; + ϸżü, CrdayBuyExecQty, CrdayBuyExecQty, long, 16; + ϸŵü, CrdaySellExecQty, CrdaySellExecQty, long, 16; + ŵ, SellPrc, SellPrc, double, 21.4; + ż, BuyPrc, BuyPrc, double, 21.4; + ŵͱݾ, SellPnlAmt, SellPnlAmt, long, 16; + , PnlRat, PnlRat, double, 18.6; + 簡, NowPrc, NowPrc, double, 15.2; + ſݾ, CrdtAmt, CrdtAmt, long, 16; + , DueDt, DueDt, char, 8; + ϸŵüᰡ, PrdaySellExecPrc, PrdaySellExecPrc, double, 13.2; + ϸŵ, PrdaySellQty, PrdaySellQty, long, 16; + ϸżüᰡ, PrdayBuyExecPrc, PrdayBuyExecPrc, double, 13.2; + ϸż, PrdayBuyQty, PrdayBuyQty, long, 16; + , LoanDt, LoanDt, char, 8; + մܰ, AvrUprc, AvrUprc, double, 13.2; + ŵɼ, SellAbleQty, SellAbleQty, long, 16; + ŵֹ, SellOrdQty, SellOrdQty, long, 16; + ϸżüݾ, CrdayBuyExecAmt, CrdayBuyExecAmt, long, 16; + ϸŵüݾ, CrdaySellExecAmt, CrdaySellExecAmt, long, 16; + ϸżüݾ, PrdayBuyExecAmt, PrdayBuyExecAmt, long, 16; + ϸŵüݾ, PrdaySellExecAmt, PrdaySellExecAmt, long, 16; + ܰ򰡱ݾ, BalEvalAmt, BalEvalAmt, long, 16; + 򰡼, EvalPnl, EvalPnl, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ŵü, SellUnercQty, SellUnercQty, long, 16; + ŵ̰, SellUnsttQty, SellUnsttQty, long, 16; + żü, BuyUnercQty, BuyUnercQty, long, 16; + ż̰, BuyUnsttQty, BuyUnsttQty, long, 16; + ̰, UnsttQty, UnsttQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + , PrdayCprc, PrdayCprc, double, 15.2; + Աݾ, PchsAmt, PchsAmt, long, 16; + Ͻڵ, RegMktCode, RegMktCode, char, 2; + 󼼺зڵ, LoanDtlClssCode, LoanDtlClssCode, char, 2; + Ź㺸, DpspdgLoanQty, DpspdgLoanQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CSPAQ12300_1.res b/ls_sample/sample_python/Res/CSPAQ12300_1.res new file mode 100644 index 0000000..d49591a --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAQ12300_1.res @@ -0,0 +1,142 @@ +BEGIN_FUNCTION_MAP + .Func,BEPܰȸ,CSPAQ12300,SERVICE=CSPAQ12300,headtype=B,CREATOR=̻,CREDATE=2015/04/13 08:43:20; + BEGIN_DATA_MAP + CSPAQ12300InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + 뱸, CmsnAppTpCode, CmsnAppTpCode, char, 1; + D2ܰȸ, D2balBaseQryTp, D2balBaseQryTp, char, 1; + ܰ, UprcTpCode, UprcTpCode, char, 1; + end + CSPAQ12300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + 뱸, CmsnAppTpCode, CmsnAppTpCode, char, 1; + D2ܰȸ, D2balBaseQryTp, D2balBaseQryTp, char, 1; + ܰ, UprcTpCode, UprcTpCode, char, 1; + end + CSPAQ12300OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + HTSֹɱݾ, HtsOrdAbleAmt, HtsOrdAbleAmt, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + ܰ򰡱ݾ, BalEvalAmt, BalEvalAmt, long, 16; + Աݾ, PchsAmt, PchsAmt, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + , PnlRat, PnlRat, double, 18.6; + ڿ, InvstOrgAmt, InvstOrgAmt, long, 20; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ſ㺸ֹݾ, CrdtPldgOrdAmt, CrdtPldgOrdAmt, long, 16; + , Dps, Dps, long, 16; + D1, D1Dps, D1Dps, long, 16; + D2, D2Dps, D2Dps, long, 16; + ֹ, OrdDt, OrdDt, char, 8; + űݾ, MnyMgn, MnyMgn, long, 16; + űݾ, SubstMgn, SubstMgn, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + ϸżüݾ, PrdayBuyExecAmt, PrdayBuyExecAmt, long, 16; + ϸŵüݾ, PrdaySellExecAmt, PrdaySellExecAmt, long, 16; + ϸżüݾ, CrdayBuyExecAmt, CrdayBuyExecAmt, long, 16; + ϸŵüݾ, CrdaySellExecAmt, CrdaySellExecAmt, long, 16; + 򰡼հ, EvalPnlSum, EvalPnlSum, long, 15; + ŹڻѾ, DpsastTotamt, DpsastTotamt, long, 16; + , Evrprc, Evrprc, long, 19; + ݾ, RuseAmt, RuseAmt, long, 16; + Ÿ뿩ݾ, EtclndAmt, EtclndAmt, long, 16; + ݾ, PrcAdjstAmt, PrcAdjstAmt, long, 16; + D1, D1CmsnAmt, D1CmsnAmt, long, 16; + D2, D2CmsnAmt, D2CmsnAmt, long, 16; + D1, D1EvrTax, D1EvrTax, long, 16; + D2, D2EvrTax, D2EvrTax, long, 16; + D1ݾ, D1SettPrergAmt, D1SettPrergAmt, long, 16; + D2ݾ, D2SettPrergAmt, D2SettPrergAmt, long, 16; + KSEű, PrdayKseMnyMgn, PrdayKseMnyMgn, long, 16; + KSEű, PrdayKseSubstMgn, PrdayKseSubstMgn, long, 16; + KSEſű, PrdayKseCrdtMnyMgn, PrdayKseCrdtMnyMgn, long, 16; + KSEſű, PrdayKseCrdtSubstMgn, PrdayKseCrdtSubstMgn, long, 16; + KSEű, CrdayKseMnyMgn, CrdayKseMnyMgn, long, 16; + KSEű, CrdayKseSubstMgn, CrdayKseSubstMgn, long, 16; + KSEſű, CrdayKseCrdtMnyMgn, CrdayKseCrdtMnyMgn, long, 16; + KSEſű, CrdayKseCrdtSubstMgn, CrdayKseCrdtSubstMgn, long, 16; + ڽű, PrdayKdqMnyMgn, PrdayKdqMnyMgn, long, 16; + ڽڴű, PrdayKdqSubstMgn, PrdayKdqSubstMgn, long, 16; + ڽڽſű, PrdayKdqCrdtMnyMgn, PrdayKdqCrdtMnyMgn, long, 16; + ڽڽſű, PrdayKdqCrdtSubstMgn, PrdayKdqCrdtSubstMgn, long, 16; + ڽű, CrdayKdqMnyMgn, CrdayKdqMnyMgn, long, 16; + ڽڴű, CrdayKdqSubstMgn, CrdayKdqSubstMgn, long, 16; + ڽڽſű, CrdayKdqCrdtMnyMgn, CrdayKdqCrdtMnyMgn, long, 16; + ڽڽſű, CrdayKdqCrdtSubstMgn, CrdayKdqCrdtSubstMgn, long, 16; + ű, PrdayFrbrdMnyMgn, PrdayFrbrdMnyMgn, long, 16; + ű, PrdayFrbrdSubstMgn, PrdayFrbrdSubstMgn, long, 16; + ű, CrdayFrbrdMnyMgn, CrdayFrbrdMnyMgn, long, 16; + ű, CrdayFrbrdSubstMgn, CrdayFrbrdSubstMgn, long, 16; + ű, PrdayCrbmkMnyMgn, PrdayCrbmkMnyMgn, long, 16; + ܴű, PrdayCrbmkSubstMgn, PrdayCrbmkSubstMgn, long, 16; + ű, CrdayCrbmkMnyMgn, CrdayCrbmkMnyMgn, long, 16; + ܴű, CrdayCrbmkSubstMgn, CrdayCrbmkSubstMgn, long, 16; + Ź㺸, DpspdgQty, DpspdgQty, long, 16; + ż(D+2), BuyAdjstAmtD2, BuyAdjstAmtD2, long, 16; + ŵ(D+2), SellAdjstAmtD2, SellAdjstAmtD2, long, 16; + ҿ(D+1), RepayRqrdAmtD1, RepayRqrdAmtD1, long, 16; + ҿ(D+2), RepayRqrdAmtD2, RepayRqrdAmtD2, long, 16; + ݾ, LoanAmt, LoanAmt, long, 16; + end + CSPAQ12300OutBlock3,ST_OUT(*EMPTY*),output,occurs; + begin + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + ܰڵ, SecBalPtnCode, SecBalPtnCode, char, 2; + ܰ, SecBalPtnNm, SecBalPtnNm, char, 40; + ܰ, BalQty, BalQty, long, 16; + Ÿűܰ, BnsBaseBalQty, BnsBaseBalQty, long, 16; + ϸżü, CrdayBuyExecQty, CrdayBuyExecQty, long, 16; + ϸŵü, CrdaySellExecQty, CrdaySellExecQty, long, 16; + ŵ, SellPrc, SellPrc, double, 21.4; + ż, BuyPrc, BuyPrc, double, 21.4; + ŵͱݾ, SellPnlAmt, SellPnlAmt, long, 16; + , PnlRat, PnlRat, double, 18.6; + 簡, NowPrc, NowPrc, double, 15.2; + ſݾ, CrdtAmt, CrdtAmt, long, 16; + , DueDt, DueDt, char, 8; + ϸŵüᰡ, PrdaySellExecPrc, PrdaySellExecPrc, double, 13.2; + ϸŵ, PrdaySellQty, PrdaySellQty, long, 16; + ϸżüᰡ, PrdayBuyExecPrc, PrdayBuyExecPrc, double, 13.2; + ϸż, PrdayBuyQty, PrdayBuyQty, long, 16; + , LoanDt, LoanDt, char, 8; + մܰ, AvrUprc, AvrUprc, double, 13.2; + ŵɼ, SellAbleQty, SellAbleQty, long, 16; + ŵֹ, SellOrdQty, SellOrdQty, long, 16; + ϸżüݾ, CrdayBuyExecAmt, CrdayBuyExecAmt, long, 16; + ϸŵüݾ, CrdaySellExecAmt, CrdaySellExecAmt, long, 16; + ϸżüݾ, PrdayBuyExecAmt, PrdayBuyExecAmt, long, 16; + ϸŵüݾ, PrdaySellExecAmt, PrdaySellExecAmt, long, 16; + ܰ򰡱ݾ, BalEvalAmt, BalEvalAmt, long, 16; + 򰡼, EvalPnl, EvalPnl, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ŵü, SellUnercQty, SellUnercQty, long, 16; + ŵ̰, SellUnsttQty, SellUnsttQty, long, 16; + żü, BuyUnercQty, BuyUnercQty, long, 16; + ż̰, BuyUnsttQty, BuyUnsttQty, long, 16; + ̰, UnsttQty, UnsttQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + , PrdayCprc, PrdayCprc, double, 15.2; + Աݾ, PchsAmt, PchsAmt, long, 16; + Ͻڵ, RegMktCode, RegMktCode, char, 2; + 󼼺зڵ, LoanDtlClssCode, LoanDtlClssCode, char, 2; + Ź㺸, DpspdgLoanQty, DpspdgLoanQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CSPAQ13700.res b/ls_sample/sample_python/Res/CSPAQ13700.res new file mode 100644 index 0000000..33f4983 --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAQ13700.res @@ -0,0 +1,81 @@ +BEGIN_FUNCTION_MAP + .Func,ֹü᳻ȸ,CSPAQ13700,SERVICE=CSPAQ13700,headtype=B,CREATOR=̻,CREDATE=2015/04/13 08:39:53; + BEGIN_DATA_MAP + CSPAQ13700InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + üῩ, ExecYn, ExecYn, char, 1; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + , BkseqTpCode, BkseqTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + end + CSPAQ13700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + üῩ, ExecYn, ExecYn, char, 1; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + , BkseqTpCode, BkseqTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + end + CSPAQ13700OutBlock2,OUT1(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ŵüݾ, SellExecAmt, SellExecAmt, long, 16; + żüݾ, BuyExecAmt, BuyExecAmt, long, 16; + ŵü, SellExecQty, SellExecQty, long, 16; + żü, BuyExecQty, BuyExecQty, long, 16; + ŵֹ, SellOrdQty, SellOrdQty, long, 16; + żֹ, BuyOrdQty, BuyOrdQty, long, 16; + end + CSPAQ13700OutBlock3,OUT(*EMPTY*),output,occurs; + begin + ֹ, OrdDt, OrdDt, char, 8; + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ֹ, OrdPtnNm, OrdPtnNm, char, 40; + ֹóڵ, OrdTrxPtnCode, OrdTrxPtnCode, long, 9; + ֹó, OrdTrxPtnNm, OrdTrxPtnNm, char, 50; + ұ, MrcTpCode, MrcTpCode, char, 1; + ұи, MrcTpNm, MrcTpNm, char, 10; + Ҽ, MrcQty, MrcQty, long, 16; + Ұɼ, MrcAbleQty, MrcAbleQty, long, 16; + ֹ, OrdQty, OrdQty, long, 16; + ֹ, OrdPrc, OrdPrc, double, 15.2; + ü, ExecQty, ExecQty, long, 16; + üᰡ, ExecPrc, ExecPrc, double, 15.2; + üóð, ExecTrxTime, ExecTrxTime, char, 9; + üð, LastExecTime, LastExecTime, char, 9; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ȣ, OrdprcPtnNm, OrdprcPtnNm, char, 40; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + üü, AllExecQty, AllExecQty, long, 16; + Ÿüڵ, RegCommdaCode, RegCommdaCode, char, 2; + Ÿü, CommdaNm, CommdaNm, char, 40; + ȸȣ, MbrNo, MbrNo, char, 3; + ֹ, RsvOrdYn, RsvOrdYn, char, 1; + , LoanDt, LoanDt, char, 8; + ֹð, OrdTime, OrdTime, char, 9; + ùȣ, OpDrtnNo, OpDrtnNo, char, 12; + ֹID, OdrrId, OdrrId, char, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CSPAQ13700_1.res b/ls_sample/sample_python/Res/CSPAQ13700_1.res new file mode 100644 index 0000000..33f4983 --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAQ13700_1.res @@ -0,0 +1,81 @@ +BEGIN_FUNCTION_MAP + .Func,ֹü᳻ȸ,CSPAQ13700,SERVICE=CSPAQ13700,headtype=B,CREATOR=̻,CREDATE=2015/04/13 08:39:53; + BEGIN_DATA_MAP + CSPAQ13700InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + üῩ, ExecYn, ExecYn, char, 1; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + , BkseqTpCode, BkseqTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + end + CSPAQ13700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + üῩ, ExecYn, ExecYn, char, 1; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + , BkseqTpCode, BkseqTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + end + CSPAQ13700OutBlock2,OUT1(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ŵüݾ, SellExecAmt, SellExecAmt, long, 16; + żüݾ, BuyExecAmt, BuyExecAmt, long, 16; + ŵü, SellExecQty, SellExecQty, long, 16; + żü, BuyExecQty, BuyExecQty, long, 16; + ŵֹ, SellOrdQty, SellOrdQty, long, 16; + żֹ, BuyOrdQty, BuyOrdQty, long, 16; + end + CSPAQ13700OutBlock3,OUT(*EMPTY*),output,occurs; + begin + ֹ, OrdDt, OrdDt, char, 8; + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ֹ, OrdPtnNm, OrdPtnNm, char, 40; + ֹóڵ, OrdTrxPtnCode, OrdTrxPtnCode, long, 9; + ֹó, OrdTrxPtnNm, OrdTrxPtnNm, char, 50; + ұ, MrcTpCode, MrcTpCode, char, 1; + ұи, MrcTpNm, MrcTpNm, char, 10; + Ҽ, MrcQty, MrcQty, long, 16; + Ұɼ, MrcAbleQty, MrcAbleQty, long, 16; + ֹ, OrdQty, OrdQty, long, 16; + ֹ, OrdPrc, OrdPrc, double, 15.2; + ü, ExecQty, ExecQty, long, 16; + üᰡ, ExecPrc, ExecPrc, double, 15.2; + üóð, ExecTrxTime, ExecTrxTime, char, 9; + üð, LastExecTime, LastExecTime, char, 9; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ȣ, OrdprcPtnNm, OrdprcPtnNm, char, 40; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + üü, AllExecQty, AllExecQty, long, 16; + Ÿüڵ, RegCommdaCode, RegCommdaCode, char, 2; + Ÿü, CommdaNm, CommdaNm, char, 40; + ȸȣ, MbrNo, MbrNo, char, 3; + ֹ, RsvOrdYn, RsvOrdYn, char, 1; + , LoanDt, LoanDt, char, 8; + ֹð, OrdTime, OrdTime, char, 9; + ùȣ, OpDrtnNo, OpDrtnNo, char, 12; + ֹID, OdrrId, OdrrId, char, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CSPAQ22200.res b/ls_sample/sample_python/Res/CSPAQ22200.res new file mode 100644 index 0000000..88114e9 --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAQ22200.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,¿ ֹɱݾ 2,CSPAQ22200,SERVICE=CSPAQ22200,headtype=B,CREATOR=ۿ켮,CREDATE=2020/02/25 08:21:10; + BEGIN_DATA_MAP + CSPAQ22200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ22200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ22200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹɱݾ, SubstOrdAbleAmt, SubstOrdAbleAmt, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + ſ㺸ֹݾ, CrdtPldgOrdAmt, CrdtPldgOrdAmt, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + űݷ35%ֹɱݾ, MgnRat35ordAbleAmt, MgnRat35ordAbleAmt, long, 16; + űݷ50%ֹɱݾ, MgnRat50ordAbleAmt, MgnRat50ordAbleAmt, long, 16; + ſֹɱݾ, CrdtOrdAbleAmt, CrdtOrdAbleAmt, long, 16; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + ű, MgnMny, MgnMny, long, 16; + űݴ, MgnSubst, MgnSubst, long, 16; + D1, D1Dps, D1Dps, long, 16; + D2, D2Dps, D2Dps, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + D1üҿݾ, D1ovdRepayRqrdAmt, D1ovdRepayRqrdAmt, long, 16; + D2üҿݾ, D2ovdRepayRqrdAmt, D2ovdRepayRqrdAmt, long, 16; + ڱݾ, MloanAmt, MloanAmt, long, 16; + Ĵ㺸, ChgAfPldgRat, ChgAfPldgRat, double, 9.3; + ҿ㺸ݾ, RqrdPldgAmt, RqrdPldgAmt, long, 16; + 㺸ݾ, PdlckAmt, PdlckAmt, long, 16; + 㺸հݾ, OrgPldgSumAmt, OrgPldgSumAmt, long, 16; + δ㺸հݾ, SubPldgSumAmt, SubPldgSumAmt, long, 16; + ſ㺸, CrdtPldgAmtMny, CrdtPldgAmtMny, long, 16; + ſ㺸ݾ, CrdtPldgSubstAmt, CrdtPldgSubstAmt, long, 16; + ſ뼳, Imreq, Imreq, long, 16; + ſ㺸ݾ, CrdtPldgRuseAmt, CrdtPldgRuseAmt, long, 16; + óѱݾ, DpslRestrcAmt, DpslRestrcAmt, long, 16; + ϸŵݾ, PrdaySellAdjstAmt, PrdaySellAdjstAmt, long, 16; + ϸżݾ, PrdayBuyAdjstAmt, PrdayBuyAdjstAmt, long, 16; + ϸŵݾ, CrdaySellAdjstAmt, CrdaySellAdjstAmt, long, 16; + ϸżݾ, CrdayBuyAdjstAmt, CrdayBuyAdjstAmt, long, 16; + ŵݴ㺸ݾ, CslLoanAmtdt1, CslLoanAmtdt1, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CSPAQ22200_1.res b/ls_sample/sample_python/Res/CSPAQ22200_1.res new file mode 100644 index 0000000..88114e9 --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAQ22200_1.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,¿ ֹɱݾ 2,CSPAQ22200,SERVICE=CSPAQ22200,headtype=B,CREATOR=ۿ켮,CREDATE=2020/02/25 08:21:10; + BEGIN_DATA_MAP + CSPAQ22200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ22200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ22200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹɱݾ, SubstOrdAbleAmt, SubstOrdAbleAmt, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + ſ㺸ֹݾ, CrdtPldgOrdAmt, CrdtPldgOrdAmt, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + űݷ35%ֹɱݾ, MgnRat35ordAbleAmt, MgnRat35ordAbleAmt, long, 16; + űݷ50%ֹɱݾ, MgnRat50ordAbleAmt, MgnRat50ordAbleAmt, long, 16; + ſֹɱݾ, CrdtOrdAbleAmt, CrdtOrdAbleAmt, long, 16; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + ű, MgnMny, MgnMny, long, 16; + űݴ, MgnSubst, MgnSubst, long, 16; + D1, D1Dps, D1Dps, long, 16; + D2, D2Dps, D2Dps, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + D1üҿݾ, D1ovdRepayRqrdAmt, D1ovdRepayRqrdAmt, long, 16; + D2üҿݾ, D2ovdRepayRqrdAmt, D2ovdRepayRqrdAmt, long, 16; + ڱݾ, MloanAmt, MloanAmt, long, 16; + Ĵ㺸, ChgAfPldgRat, ChgAfPldgRat, double, 9.3; + ҿ㺸ݾ, RqrdPldgAmt, RqrdPldgAmt, long, 16; + 㺸ݾ, PdlckAmt, PdlckAmt, long, 16; + 㺸հݾ, OrgPldgSumAmt, OrgPldgSumAmt, long, 16; + δ㺸հݾ, SubPldgSumAmt, SubPldgSumAmt, long, 16; + ſ㺸, CrdtPldgAmtMny, CrdtPldgAmtMny, long, 16; + ſ㺸ݾ, CrdtPldgSubstAmt, CrdtPldgSubstAmt, long, 16; + ſ뼳, Imreq, Imreq, long, 16; + ſ㺸ݾ, CrdtPldgRuseAmt, CrdtPldgRuseAmt, long, 16; + óѱݾ, DpslRestrcAmt, DpslRestrcAmt, long, 16; + ϸŵݾ, PrdaySellAdjstAmt, PrdaySellAdjstAmt, long, 16; + ϸżݾ, PrdayBuyAdjstAmt, PrdayBuyAdjstAmt, long, 16; + ϸŵݾ, CrdaySellAdjstAmt, CrdaySellAdjstAmt, long, 16; + ϸżݾ, CrdayBuyAdjstAmt, CrdayBuyAdjstAmt, long, 16; + ŵݴ㺸ݾ, CslLoanAmtdt1, CslLoanAmtdt1, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CSPAT00600.res b/ls_sample/sample_python/Res/CSPAT00600.res new file mode 100644 index 0000000..fc5f207 --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAT00600.res @@ -0,0 +1,69 @@ +BEGIN_FUNCTION_MAP + .Func,ֹ,CSPAT00600,SERVICE=CSPAT00600,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/07 09:23:39; + BEGIN_DATA_MAP + CSPAT00600InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + end + CSPAT00600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + α׷ȣڵ, PrgmOrdprcPtnCode, PrgmOrdprcPtnCode, char, 2; + ŵɿ, StslAbleYn, StslAbleYn, char, 1; + ŵȣ, StslOrdprcTpCode, StslOrdprcTpCode, char, 1; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ȸȣ, MbrNo, MbrNo, char, 3; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + ڵ, StrtgCode, StrtgCode, char, 6; + ׷ID, GrpId, GrpId, char, 20; + ֹȸ, OrdSeqNo, OrdSeqNo, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + ùȣ, OpDrtnNo, OpDrtnNo, char, 12; + ڿ, LpYn, LpYn, char, 1; + ݴŸű, CvrgTpCode, CvrgTpCode, char, 1; + end + CSPAT00600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ȣ, ShtnIsuNo, ShtnIsuNo, char, 9; + ȣ, MgempNo, MgempNo, char, 9; + ֹݾ, OrdAmt, OrdAmt, long, 16; + ֹȣ, SpareOrdNo, SpareOrdNo, long, 10; + ݴŸϷùȣ, CvrgSeqno, CvrgSeqno, long, 10; + ֹȣ, RsvOrdNo, RsvOrdNo, long, 10; + ǹֹ, SpotOrdQty, SpotOrdQty, long, 16; + ֹ, RuseOrdQty, RuseOrdQty, long, 16; + ֹݾ, MnyOrdAmt, MnyOrdAmt, long, 16; + ֹݾ, SubstOrdAmt, SubstOrdAmt, long, 16; + ֹݾ, RuseOrdAmt, RuseOrdAmt, long, 16; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPAT00600 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/CSPAT00600_1.res b/ls_sample/sample_python/Res/CSPAT00600_1.res new file mode 100644 index 0000000..fc5f207 --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAT00600_1.res @@ -0,0 +1,69 @@ +BEGIN_FUNCTION_MAP + .Func,ֹ,CSPAT00600,SERVICE=CSPAT00600,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/07 09:23:39; + BEGIN_DATA_MAP + CSPAT00600InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + end + CSPAT00600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + α׷ȣڵ, PrgmOrdprcPtnCode, PrgmOrdprcPtnCode, char, 2; + ŵɿ, StslAbleYn, StslAbleYn, char, 1; + ŵȣ, StslOrdprcTpCode, StslOrdprcTpCode, char, 1; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ȸȣ, MbrNo, MbrNo, char, 3; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + ڵ, StrtgCode, StrtgCode, char, 6; + ׷ID, GrpId, GrpId, char, 20; + ֹȸ, OrdSeqNo, OrdSeqNo, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + ùȣ, OpDrtnNo, OpDrtnNo, char, 12; + ڿ, LpYn, LpYn, char, 1; + ݴŸű, CvrgTpCode, CvrgTpCode, char, 1; + end + CSPAT00600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ȣ, ShtnIsuNo, ShtnIsuNo, char, 9; + ȣ, MgempNo, MgempNo, char, 9; + ֹݾ, OrdAmt, OrdAmt, long, 16; + ֹȣ, SpareOrdNo, SpareOrdNo, long, 10; + ݴŸϷùȣ, CvrgSeqno, CvrgSeqno, long, 10; + ֹȣ, RsvOrdNo, RsvOrdNo, long, 10; + ǹֹ, SpotOrdQty, SpotOrdQty, long, 16; + ֹ, RuseOrdQty, RuseOrdQty, long, 16; + ֹݾ, MnyOrdAmt, MnyOrdAmt, long, 16; + ֹݾ, SubstOrdAmt, SubstOrdAmt, long, 16; + ֹݾ, RuseOrdAmt, RuseOrdAmt, long, 16; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPAT00600 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/CSPAT00700.res b/ls_sample/sample_python/Res/CSPAT00700.res new file mode 100644 index 0000000..43e96ad --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAT00700.res @@ -0,0 +1,65 @@ +BEGIN_FUNCTION_MAP + .Func,ֹ,CSPAT00700,SERVICE=CSPAT00700,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/07 09:23:43; + BEGIN_DATA_MAP + CSPAT00700InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + end + CSPAT00700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ڵ, StrtgCode, StrtgCode, char, 6; + ׷ID, GrpId, GrpId, char, 20; + ֹȸ, OrdSeqNo, OrdSeqNo, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + end + CSPAT00700OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, PrntOrdNo, PrntOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ȣ, ShtnIsuNo, ShtnIsuNo, char, 9; + α׷ȣڵ, PrgmOrdprcPtnCode, PrgmOrdprcPtnCode, char, 2; + ŵȣ, StslOrdprcTpCode, StslOrdprcTpCode, char, 1; + ŵɿ, StslAbleYn, StslAbleYn, char, 1; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ݴŸֹ, CvrgOrdTp, CvrgOrdTp, char, 1; + ڿ, LpYn, LpYn, char, 1; + ȣ, MgempNo, MgempNo, char, 9; + ֹݾ, OrdAmt, OrdAmt, long, 16; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹȣ, SpareOrdNo, SpareOrdNo, long, 10; + ݴŸϷùȣ, CvrgSeqno, CvrgSeqno, long, 10; + ֹȣ, RsvOrdNo, RsvOrdNo, long, 10; + ֹݾ, MnyOrdAmt, MnyOrdAmt, long, 16; + ֹݾ, SubstOrdAmt, SubstOrdAmt, long, 16; + ֹݾ, RuseOrdAmt, RuseOrdAmt, long, 16; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPAT00700 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/CSPAT00700_1.res b/ls_sample/sample_python/Res/CSPAT00700_1.res new file mode 100644 index 0000000..43e96ad --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAT00700_1.res @@ -0,0 +1,65 @@ +BEGIN_FUNCTION_MAP + .Func,ֹ,CSPAT00700,SERVICE=CSPAT00700,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/07 09:23:43; + BEGIN_DATA_MAP + CSPAT00700InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + end + CSPAT00700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ڵ, StrtgCode, StrtgCode, char, 6; + ׷ID, GrpId, GrpId, char, 20; + ֹȸ, OrdSeqNo, OrdSeqNo, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + end + CSPAT00700OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, PrntOrdNo, PrntOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ȣ, ShtnIsuNo, ShtnIsuNo, char, 9; + α׷ȣڵ, PrgmOrdprcPtnCode, PrgmOrdprcPtnCode, char, 2; + ŵȣ, StslOrdprcTpCode, StslOrdprcTpCode, char, 1; + ŵɿ, StslAbleYn, StslAbleYn, char, 1; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ݴŸֹ, CvrgOrdTp, CvrgOrdTp, char, 1; + ڿ, LpYn, LpYn, char, 1; + ȣ, MgempNo, MgempNo, char, 9; + ֹݾ, OrdAmt, OrdAmt, long, 16; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹȣ, SpareOrdNo, SpareOrdNo, long, 10; + ݴŸϷùȣ, CvrgSeqno, CvrgSeqno, long, 10; + ֹȣ, RsvOrdNo, RsvOrdNo, long, 10; + ֹݾ, MnyOrdAmt, MnyOrdAmt, long, 16; + ֹݾ, SubstOrdAmt, SubstOrdAmt, long, 16; + ֹݾ, RuseOrdAmt, RuseOrdAmt, long, 16; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPAT00700 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/CSPAT00800.res b/ls_sample/sample_python/Res/CSPAT00800.res new file mode 100644 index 0000000..8c7d2f3 --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAT00800.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ֹ,CSPAT00800,SERVICE=CSPAT00800,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/07 09:23:48; + BEGIN_DATA_MAP + CSPAT00800InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + end + CSPAT00800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ׷ID, GrpId, GrpId, char, 20; + ڵ, StrtgCode, StrtgCode, char, 6; + ֹȸ, OrdSeqNo, OrdSeqNo, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + end + CSPAT00800OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, PrntOrdNo, PrntOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ȣ, ShtnIsuNo, ShtnIsuNo, char, 9; + α׷ȣڵ, PrgmOrdprcPtnCode, PrgmOrdprcPtnCode, char, 2; + ŵȣ, StslOrdprcTpCode, StslOrdprcTpCode, char, 1; + ŵɿ, StslAbleYn, StslAbleYn, char, 1; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ݴŸֹ, CvrgOrdTp, CvrgOrdTp, char, 1; + ڿ, LpYn, LpYn, char, 1; + ȣ, MgempNo, MgempNo, char, 9; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹȣ, SpareOrdNo, SpareOrdNo, long, 10; + ݴŸϷùȣ, CvrgSeqno, CvrgSeqno, long, 10; + ֹȣ, RsvOrdNo, RsvOrdNo, long, 10; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPAT00800 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/CSPAT00800_1.res b/ls_sample/sample_python/Res/CSPAT00800_1.res new file mode 100644 index 0000000..8c7d2f3 --- /dev/null +++ b/ls_sample/sample_python/Res/CSPAT00800_1.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ֹ,CSPAT00800,SERVICE=CSPAT00800,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/07 09:23:48; + BEGIN_DATA_MAP + CSPAT00800InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + end + CSPAT00800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ׷ID, GrpId, GrpId, char, 20; + ڵ, StrtgCode, StrtgCode, char, 6; + ֹȸ, OrdSeqNo, OrdSeqNo, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + end + CSPAT00800OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, PrntOrdNo, PrntOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ȣ, ShtnIsuNo, ShtnIsuNo, char, 9; + α׷ȣڵ, PrgmOrdprcPtnCode, PrgmOrdprcPtnCode, char, 2; + ŵȣ, StslOrdprcTpCode, StslOrdprcTpCode, char, 1; + ŵɿ, StslAbleYn, StslAbleYn, char, 1; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ݴŸֹ, CvrgOrdTp, CvrgOrdTp, char, 1; + ڿ, LpYn, LpYn, char, 1; + ȣ, MgempNo, MgempNo, char, 9; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹȣ, SpareOrdNo, SpareOrdNo, long, 10; + ݴŸϷùȣ, CvrgSeqno, CvrgSeqno, long, 10; + ֹȣ, RsvOrdNo, RsvOrdNo, long, 10; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPAT00800 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/CSPBQ00200.res b/ls_sample/sample_python/Res/CSPBQ00200.res new file mode 100644 index 0000000..378f48e --- /dev/null +++ b/ls_sample/sample_python/Res/CSPBQ00200.res @@ -0,0 +1,71 @@ +BEGIN_FUNCTION_MAP + .Func,űݷֹɼȸ,CSPBQ00200,SERVICE=CSPBQ00200,headtype=B,CREATOR=̻,CREDATE=2011/12/12 09:22:25; + BEGIN_DATA_MAP + CSPBQ00200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 15.2; + Ÿüڵ, RegCommdaCode, RegCommdaCode, char, 2; + end + CSPBQ00200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 15.2; + Ÿüڵ, RegCommdaCode, RegCommdaCode, char, 2; + end + CSPBQ00200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + ſ㺸ݾ, CrdtPldgRuseAmt, CrdtPldgRuseAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹɱݾ, SubstOrdAbleAmt, SubstOrdAbleAmt, long, 16; + űݾ, MnyMgn, MnyMgn, long, 16; + űݾ, SubstMgn, SubstMgn, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + (D+1), PrsmptDpsD1, PrsmptDpsD1, long, 16; + (D+2), PrsmptDpsD2, PrsmptDpsD2, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + , CmsnRat, CmsnRat, double, 15.5; + ߰¡ݾ, AddLevyAmt, AddLevyAmt, long, 16; + ݾ, RuseObjAmt, RuseObjAmt, long, 16; + ݾ, MnyRuseObjAmt, MnyRuseObjAmt, long, 16; + ̿űݷ, FirmMgnRat, FirmMgnRat, double, 7.4; + ݾ, SubstRuseObjAmt, SubstRuseObjAmt, long, 16; + űݷ, IsuMgnRat, IsuMgnRat, double, 7.4; + űݷ, AcntMgnRat, AcntMgnRat, double, 7.4; + ŷűݷ, TrdMgnrt, TrdMgnrt, double, 7.4; + , Cmsn, Cmsn, long, 16; + űݷ20ۼƮֹɱݾ, MgnRat20pctOrdAbleAmt, MgnRat20pctOrdAbleAmt, long, 16; + űݷ100ۼƮֹɼ?, MgnRat20OrdAbleQty, MgnRat20OrdAbleQty, long, 16; + űݷ30ۼƮֹɱݾ, MgnRat30pctOrdAbleAmt, MgnRat30pctOrdAbleAmt, long, 16; + űݷ30ۼƮֹɼ??, MgnRat30OrdAbleQty, MgnRat30OrdAbleQty, long, 16; + űݷ40ۼƮֹɱݾ, MgnRat40pctOrdAbleAmt, MgnRat40pctOrdAbleAmt, long, 16; + űݷ40ۼƮֹɼ??, MgnRat40OrdAbleQty, MgnRat40OrdAbleQty, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + űݷ100ۼƮֹɼ??, MgnRat100OrdAbleQty, MgnRat100OrdAbleQty, long, 16; + űݷ100ۼƮֹɱݾ?, MgnRat100MnyOrdAbleAmt, MgnRat100MnyOrdAbleAmt, long, 16; + űݷ100ۼƮֹɼ, MgnRat100MnyOrdAbleQty, MgnRat100MnyOrdAbleQty, long, 16; + űݷ20ۼƮ밡ɱݾ, MgnRat20pctRuseAbleAmt, MgnRat20pctRuseAbleAmt, long, 16; + űݷ30ۼƮ밡ɱݾ, MgnRat30pctRuseAbleAmt, MgnRat30pctRuseAbleAmt, long, 16; + űݷ40ۼƮ밡ɱݾ, MgnRat40pctRuseAbleAmt, MgnRat40pctRuseAbleAmt, long, 16; + űݷ100ۼƮ밡ɱݾ, MgnRat100pctRuseAbleAmt, MgnRat100pctRuseAbleAmt, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPBQ00200 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/CSPBQ00200_1.res b/ls_sample/sample_python/Res/CSPBQ00200_1.res new file mode 100644 index 0000000..378f48e --- /dev/null +++ b/ls_sample/sample_python/Res/CSPBQ00200_1.res @@ -0,0 +1,71 @@ +BEGIN_FUNCTION_MAP + .Func,űݷֹɼȸ,CSPBQ00200,SERVICE=CSPBQ00200,headtype=B,CREATOR=̻,CREDATE=2011/12/12 09:22:25; + BEGIN_DATA_MAP + CSPBQ00200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 15.2; + Ÿüڵ, RegCommdaCode, RegCommdaCode, char, 2; + end + CSPBQ00200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 15.2; + Ÿüڵ, RegCommdaCode, RegCommdaCode, char, 2; + end + CSPBQ00200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + ſ㺸ݾ, CrdtPldgRuseAmt, CrdtPldgRuseAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹɱݾ, SubstOrdAbleAmt, SubstOrdAbleAmt, long, 16; + űݾ, MnyMgn, MnyMgn, long, 16; + űݾ, SubstMgn, SubstMgn, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + (D+1), PrsmptDpsD1, PrsmptDpsD1, long, 16; + (D+2), PrsmptDpsD2, PrsmptDpsD2, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + , CmsnRat, CmsnRat, double, 15.5; + ߰¡ݾ, AddLevyAmt, AddLevyAmt, long, 16; + ݾ, RuseObjAmt, RuseObjAmt, long, 16; + ݾ, MnyRuseObjAmt, MnyRuseObjAmt, long, 16; + ̿űݷ, FirmMgnRat, FirmMgnRat, double, 7.4; + ݾ, SubstRuseObjAmt, SubstRuseObjAmt, long, 16; + űݷ, IsuMgnRat, IsuMgnRat, double, 7.4; + űݷ, AcntMgnRat, AcntMgnRat, double, 7.4; + ŷűݷ, TrdMgnrt, TrdMgnrt, double, 7.4; + , Cmsn, Cmsn, long, 16; + űݷ20ۼƮֹɱݾ, MgnRat20pctOrdAbleAmt, MgnRat20pctOrdAbleAmt, long, 16; + űݷ100ۼƮֹɼ?, MgnRat20OrdAbleQty, MgnRat20OrdAbleQty, long, 16; + űݷ30ۼƮֹɱݾ, MgnRat30pctOrdAbleAmt, MgnRat30pctOrdAbleAmt, long, 16; + űݷ30ۼƮֹɼ??, MgnRat30OrdAbleQty, MgnRat30OrdAbleQty, long, 16; + űݷ40ۼƮֹɱݾ, MgnRat40pctOrdAbleAmt, MgnRat40pctOrdAbleAmt, long, 16; + űݷ40ۼƮֹɼ??, MgnRat40OrdAbleQty, MgnRat40OrdAbleQty, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + űݷ100ۼƮֹɼ??, MgnRat100OrdAbleQty, MgnRat100OrdAbleQty, long, 16; + űݷ100ۼƮֹɱݾ?, MgnRat100MnyOrdAbleAmt, MgnRat100MnyOrdAbleAmt, long, 16; + űݷ100ۼƮֹɼ, MgnRat100MnyOrdAbleQty, MgnRat100MnyOrdAbleQty, long, 16; + űݷ20ۼƮ밡ɱݾ, MgnRat20pctRuseAbleAmt, MgnRat20pctRuseAbleAmt, long, 16; + űݷ30ۼƮ밡ɱݾ, MgnRat30pctRuseAbleAmt, MgnRat30pctRuseAbleAmt, long, 16; + űݷ40ۼƮ밡ɱݾ, MgnRat40pctRuseAbleAmt, MgnRat40pctRuseAbleAmt, long, 16; + űݷ100ۼƮ밡ɱݾ, MgnRat100pctRuseAbleAmt, MgnRat100pctRuseAbleAmt, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPBQ00200 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/CUR.res b/ls_sample/sample_python/Res/CUR.res new file mode 100644 index 0000000..aa78773 --- /dev/null +++ b/ls_sample/sample_python/Res/CUR.res @@ -0,0 +1,24 @@ +BEGIN_FUNCTION_MAP +.Feed, USD ǽð(CUR), CUR, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڻID , base_id , base_id , char, 6; + end + OutBlock,,output; + begin + ۽ð , time , time , char, 6; + ŵȣ , offer , offer , float, 7.2; + żȣ , bid , bid , float, 7.2; + ð , open , open , float, 7.2; + , high , high , float, 7.2; + , low , low , float, 7.2; + üᰡ , price , price , float, 7.2; + ϴ񱸺 , sign , sign , char, 1; + ϴ , change , change , float, 7.2; + , drate , drate , float, 7.2; + Ÿ ߻ð , ctime , ctime , char, 6; + ڻID , base_id , base_id , char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/CUR_1.res b/ls_sample/sample_python/Res/CUR_1.res new file mode 100644 index 0000000..aa78773 --- /dev/null +++ b/ls_sample/sample_python/Res/CUR_1.res @@ -0,0 +1,24 @@ +BEGIN_FUNCTION_MAP +.Feed, USD ǽð(CUR), CUR, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڻID , base_id , base_id , char, 6; + end + OutBlock,,output; + begin + ۽ð , time , time , char, 6; + ŵȣ , offer , offer , float, 7.2; + żȣ , bid , bid , float, 7.2; + ð , open , open , float, 7.2; + , high , high , float, 7.2; + , low , low , float, 7.2; + üᰡ , price , price , float, 7.2; + ϴ񱸺 , sign , sign , char, 1; + ϴ , change , change , float, 7.2; + , drate , drate , float, 7.2; + Ÿ ߻ð , ctime , ctime , char, 6; + ڻID , base_id , base_id , char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/ChartExcel.res b/ls_sample/sample_python/Res/ChartExcel.res new file mode 100644 index 0000000..23af836 --- /dev/null +++ b/ls_sample/sample_python/Res/ChartExcel.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP + .Func,íƮȸ,CHARTEXCEL,headtype=B; + BEGIN_DATA_MAP + ChartExcelInBlock,In(*EMPTY*),input; + begin + ǥID, indexid, indexid, long, 10 + ǥ, indexname, indexname, char, 40; + ǥǼ, indexparam, indexparam, char, 40; + , indexouttype, indexouttype, char, 1; + 屸, market, market, char, 1; + ֱⱸ, period, period, char, 1; + ڵ, shcode, shcode, char, 8; + ǥ ǥ , isexcelout, isexcelout, char, 1; + ϸ, excelfilename, excelfilename, char, 256; + ǽð ͼ ڵ , IsReal, IsReal, char, 1; + end + ChartExcelOutBlock,Out(*EMPTY*),output; + begin + ǥID, indexid, indexid, long, 10; + ڵ尹, rec_cnt, rec_cnt, long, 5; + ȿ ÷ , validdata_cnt, validdata_cnt, long, 2; + end + ChartExcelOutBlock1,Out(*EMPTY*),output,occurs; + begin + , date, date, char, 8; + ð, time, time, char, 6; + ð, open, open, float, 10; + , high, high, float, 10; + , low, low, float, 10; + , close, close, float, 10; + ŷ, volume, volume, float, 12; + ǥ1, value1, value1, float, 10; + ǥ2, value2, value2, float, 10; + ǥ3, value3, value3, float, 10; + ǥ4, value4, value4, float, 10; + ǥ5, value5, value5, float, 10; + ġ, pos, pos, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/ChartExcel_1.res b/ls_sample/sample_python/Res/ChartExcel_1.res new file mode 100644 index 0000000..23af836 --- /dev/null +++ b/ls_sample/sample_python/Res/ChartExcel_1.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP + .Func,íƮȸ,CHARTEXCEL,headtype=B; + BEGIN_DATA_MAP + ChartExcelInBlock,In(*EMPTY*),input; + begin + ǥID, indexid, indexid, long, 10 + ǥ, indexname, indexname, char, 40; + ǥǼ, indexparam, indexparam, char, 40; + , indexouttype, indexouttype, char, 1; + 屸, market, market, char, 1; + ֱⱸ, period, period, char, 1; + ڵ, shcode, shcode, char, 8; + ǥ ǥ , isexcelout, isexcelout, char, 1; + ϸ, excelfilename, excelfilename, char, 256; + ǽð ͼ ڵ , IsReal, IsReal, char, 1; + end + ChartExcelOutBlock,Out(*EMPTY*),output; + begin + ǥID, indexid, indexid, long, 10; + ڵ尹, rec_cnt, rec_cnt, long, 5; + ȿ ÷ , validdata_cnt, validdata_cnt, long, 2; + end + ChartExcelOutBlock1,Out(*EMPTY*),output,occurs; + begin + , date, date, char, 8; + ð, time, time, char, 6; + ð, open, open, float, 10; + , high, high, float, 10; + , low, low, float, 10; + , close, close, float, 10; + ŷ, volume, volume, float, 12; + ǥ1, value1, value1, float, 10; + ǥ2, value2, value2, float, 10; + ǥ3, value3, value3, float, 10; + ǥ4, value4, value4, float, 10; + ǥ5, value5, value5, float, 10; + ġ, pos, pos, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/ChartIndex.res b/ls_sample/sample_python/Res/ChartIndex.res new file mode 100644 index 0000000..9ba059b --- /dev/null +++ b/ls_sample/sample_python/Res/ChartIndex.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,íƮǥȸ,CHARTINDEX,headtype=B; + BEGIN_DATA_MAP + ChartIndexInBlock,In(*EMPTY*),input; + begin + ǥID, indexid, indexid, long, 10 + ǥ, indexname, indexname, char, 40; + ǥǼ, indexparam, indexparam, char, 40; + 屸, market, market, char, 1; + ֱⱸ, period, period, char, 1; + ڵ, shcode, shcode, char, 8; + ûǼ(ִ 500), qrycnt, qrycnt, long, 4; + (nƽ/n), ncnt, ncnt, long, 4; + , sdate, sdate, char, 8; + , edate, edate, char, 8; + ְ ݿ , Isamend, Isamend, char, 1; + , Isgab, Isgab, char, 1; + ǽð ͼ ڵ , IsReal, IsReal, char, 1; + end + ChartIndexOutBlock,Out(*EMPTY*),output; + begin + ǥID, indexid, indexid, long, 10; + ڵ尹, rec_cnt, rec_cnt, long, 5; + ȿ ÷ , validdata_cnt, validdata_cnt, long, 2; + end + ChartIndexOutBlock1,Out(*EMPTY*),output,occurs; + begin + , date, date, char, 8; + ð, time, time, char, 6; + ð, open, open, float, 10; + , high, high, float, 10; + , low, low, float, 10; + , close, close, float, 10; + ŷ, volume, volume, float, 12; + ǥ1, value1, value1, float, 10; + ǥ2, value2, value2, float, 10; + ǥ3, value3, value3, float, 10; + ǥ4, value4, value4, float, 10; + ǥ5, value5, value5, float, 10; + ġ, pos, pos, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/ChartIndex_1.res b/ls_sample/sample_python/Res/ChartIndex_1.res new file mode 100644 index 0000000..9ba059b --- /dev/null +++ b/ls_sample/sample_python/Res/ChartIndex_1.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,íƮǥȸ,CHARTINDEX,headtype=B; + BEGIN_DATA_MAP + ChartIndexInBlock,In(*EMPTY*),input; + begin + ǥID, indexid, indexid, long, 10 + ǥ, indexname, indexname, char, 40; + ǥǼ, indexparam, indexparam, char, 40; + 屸, market, market, char, 1; + ֱⱸ, period, period, char, 1; + ڵ, shcode, shcode, char, 8; + ûǼ(ִ 500), qrycnt, qrycnt, long, 4; + (nƽ/n), ncnt, ncnt, long, 4; + , sdate, sdate, char, 8; + , edate, edate, char, 8; + ְ ݿ , Isamend, Isamend, char, 1; + , Isgab, Isgab, char, 1; + ǽð ͼ ڵ , IsReal, IsReal, char, 1; + end + ChartIndexOutBlock,Out(*EMPTY*),output; + begin + ǥID, indexid, indexid, long, 10; + ڵ尹, rec_cnt, rec_cnt, long, 5; + ȿ ÷ , validdata_cnt, validdata_cnt, long, 2; + end + ChartIndexOutBlock1,Out(*EMPTY*),output,occurs; + begin + , date, date, char, 8; + ð, time, time, char, 6; + ð, open, open, float, 10; + , high, high, float, 10; + , low, low, float, 10; + , close, close, float, 10; + ŷ, volume, volume, float, 12; + ǥ1, value1, value1, float, 10; + ǥ2, value2, value2, float, 10; + ǥ3, value3, value3, float, 10; + ǥ4, value4, value4, float, 10; + ǥ5, value5, value5, float, 10; + ġ, pos, pos, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/DH1.res b/ls_sample/sample_python/Res/DH1.res new file mode 100644 index 0000000..f4a8c7e --- /dev/null +++ b/ls_sample/sample_python/Res/DH1.res @@ -0,0 +1,56 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIðܴϰȣܷ(DH1), DH1, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰȣð, dan_hotime, dan_hotime, char, 6; +ðܴϰ屸, dan_hstatus, dan_hstatus, char, 2; +ðܴϰŵȣ1, dan_offerho1, dan_offerho1, long, 8; +ðܴϰżȣ1, dan_bidho1, dan_bidho1, long, 8; +ðܴϰŵȣܷ1, dan_offerrem1, dan_offerrem1, long, 12; +ðܴϰżȣܷ1, dan_bidrem1, dan_bidrem1, long, 12; +ðܴϰŵ1, dan_preoffercha1, dan_preoffercha1, long, 12; +ðܴϰż1, dan_prebidcha1, dan_prebidcha1, long, 12; +ðܴϰŵȣ2, dan_offerho2, dan_offerho2, long, 8; +ðܴϰżȣ2, dan_bidho2, dan_bidho2, long, 8; +ðܴϰŵȣܷ2, dan_offerrem2, dan_offerrem2, long, 12; +ðܴϰżȣܷ2, dan_bidrem2, dan_bidrem2, long, 12; +ðܴϰŵ2, dan_preoffercha2, dan_preoffercha2, long, 12; +ðܴϰż2, dan_prebidcha2, dan_prebidcha2, long, 12; +ðܴϰŵȣ3, dan_offerho3, dan_offerho3, long, 8; +ðܴϰżȣ3, dan_bidho3, dan_bidho3, long, 8; +ðܴϰŵȣܷ3, dan_offerrem3, dan_offerrem3, long, 12; +ðܴϰżȣܷ3, dan_bidrem3, dan_bidrem3, long, 12; +ðܴϰŵ3, dan_preoffercha3, dan_preoffercha3, long, 12; +ðܴϰż3, dan_prebidcha3, dan_prebidcha3, long, 12; +ðܴϰŵȣ4, dan_offerho4, dan_offerho4, long, 8; +ðܴϰżȣ4, dan_bidho4, dan_bidho4, long, 8; +ðܴϰŵȣܷ4, dan_offerrem4, dan_offerrem4, long, 12; +ðܴϰżȣܷ4, dan_bidrem4, dan_bidrem4, long, 12; +ðܴϰŵ4, dan_preoffercha4, dan_preoffercha4, long, 12; +ðܴϰż4, dan_prebidcha4, dan_prebidcha4, long, 12; +ðܴϰŵȣ5, dan_offerho5, dan_offerho5, long, 8; +ðܴϰżȣ5, dan_bidho5, dan_bidho5, long, 8; +ðܴϰŵȣܷ5, dan_offerrem5, dan_offerrem5, long, 12; +ðܴϰżȣܷ5, dan_bidrem5, dan_bidrem5, long, 12; +ðܴϰŵ5, dan_preoffercha5, dan_preoffercha5, long, 12; +ðܴϰż5, dan_prebidcha5, dan_prebidcha5, long, 12; +ðܴϰѸŵȣܷ, dan_totofferrem, dan_totofferrem, long, 12; +ðܴϰѸżȣܷ, dan_totbidrem, dan_totbidrem, long, 12; +ðܴϰŵȣѴ,dan_preoffercha,dan_preoffercha, long, 12; +ðܴϰżȣѴ,dan_prebidcha, dan_prebidcha, long, 12; +ðܴϰüᰡ, dan_yeprice, dan_yeprice, long, 8; +ðܴϰü, dan_yevolume, dan_yevolume, long, 12; +ðܴϰ񱸺,dan_preysign, dan_preysign, char, 1; +ðܴϰ, dan_preychange, dan_preychange, long, 8; +ðܴϰϰ񱸺,dan_jnilysign, dan_jnilysign, char, 1; +ðܴϰϰ, dan_jnilychange, dan_jnilychange, long, 8; + ڵ, shcode, shcode, char, 6; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/DH1_1.res b/ls_sample/sample_python/Res/DH1_1.res new file mode 100644 index 0000000..f4a8c7e --- /dev/null +++ b/ls_sample/sample_python/Res/DH1_1.res @@ -0,0 +1,56 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIðܴϰȣܷ(DH1), DH1, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰȣð, dan_hotime, dan_hotime, char, 6; +ðܴϰ屸, dan_hstatus, dan_hstatus, char, 2; +ðܴϰŵȣ1, dan_offerho1, dan_offerho1, long, 8; +ðܴϰżȣ1, dan_bidho1, dan_bidho1, long, 8; +ðܴϰŵȣܷ1, dan_offerrem1, dan_offerrem1, long, 12; +ðܴϰżȣܷ1, dan_bidrem1, dan_bidrem1, long, 12; +ðܴϰŵ1, dan_preoffercha1, dan_preoffercha1, long, 12; +ðܴϰż1, dan_prebidcha1, dan_prebidcha1, long, 12; +ðܴϰŵȣ2, dan_offerho2, dan_offerho2, long, 8; +ðܴϰżȣ2, dan_bidho2, dan_bidho2, long, 8; +ðܴϰŵȣܷ2, dan_offerrem2, dan_offerrem2, long, 12; +ðܴϰżȣܷ2, dan_bidrem2, dan_bidrem2, long, 12; +ðܴϰŵ2, dan_preoffercha2, dan_preoffercha2, long, 12; +ðܴϰż2, dan_prebidcha2, dan_prebidcha2, long, 12; +ðܴϰŵȣ3, dan_offerho3, dan_offerho3, long, 8; +ðܴϰżȣ3, dan_bidho3, dan_bidho3, long, 8; +ðܴϰŵȣܷ3, dan_offerrem3, dan_offerrem3, long, 12; +ðܴϰżȣܷ3, dan_bidrem3, dan_bidrem3, long, 12; +ðܴϰŵ3, dan_preoffercha3, dan_preoffercha3, long, 12; +ðܴϰż3, dan_prebidcha3, dan_prebidcha3, long, 12; +ðܴϰŵȣ4, dan_offerho4, dan_offerho4, long, 8; +ðܴϰżȣ4, dan_bidho4, dan_bidho4, long, 8; +ðܴϰŵȣܷ4, dan_offerrem4, dan_offerrem4, long, 12; +ðܴϰżȣܷ4, dan_bidrem4, dan_bidrem4, long, 12; +ðܴϰŵ4, dan_preoffercha4, dan_preoffercha4, long, 12; +ðܴϰż4, dan_prebidcha4, dan_prebidcha4, long, 12; +ðܴϰŵȣ5, dan_offerho5, dan_offerho5, long, 8; +ðܴϰżȣ5, dan_bidho5, dan_bidho5, long, 8; +ðܴϰŵȣܷ5, dan_offerrem5, dan_offerrem5, long, 12; +ðܴϰżȣܷ5, dan_bidrem5, dan_bidrem5, long, 12; +ðܴϰŵ5, dan_preoffercha5, dan_preoffercha5, long, 12; +ðܴϰż5, dan_prebidcha5, dan_prebidcha5, long, 12; +ðܴϰѸŵȣܷ, dan_totofferrem, dan_totofferrem, long, 12; +ðܴϰѸżȣܷ, dan_totbidrem, dan_totbidrem, long, 12; +ðܴϰŵȣѴ,dan_preoffercha,dan_preoffercha, long, 12; +ðܴϰżȣѴ,dan_prebidcha, dan_prebidcha, long, 12; +ðܴϰüᰡ, dan_yeprice, dan_yeprice, long, 8; +ðܴϰü, dan_yevolume, dan_yevolume, long, 12; +ðܴϰ񱸺,dan_preysign, dan_preysign, char, 1; +ðܴϰ, dan_preychange, dan_preychange, long, 8; +ðܴϰϰ񱸺,dan_jnilysign, dan_jnilysign, char, 1; +ðܴϰϰ, dan_jnilychange, dan_jnilychange, long, 8; + ڵ, shcode, shcode, char, 6; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/DHA.res b/ls_sample/sample_python/Res/DHA.res new file mode 100644 index 0000000..c190271 --- /dev/null +++ b/ls_sample/sample_python/Res/DHA.res @@ -0,0 +1,56 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQðܴϰȣܷ(DHA), DHA, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰȣð, dan_hotime, dan_hotime, char, 6; +ðܴϰ屸, dan_hstatus, dan_hstatus, char, 2; +ðܴϰŵȣ1, dan_offerho1, dan_offerho1, long, 8; +ðܴϰżȣ1, dan_bidho1, dan_bidho1, long, 8; +ðܴϰŵȣܷ1, dan_offerrem1, dan_offerrem1, long, 12; +ðܴϰżȣܷ1, dan_bidrem1, dan_bidrem1, long, 12; +ðܴϰŵ1, dan_preoffercha1, dan_preoffercha1, long, 12; +ðܴϰż1, dan_prebidcha1, dan_prebidcha1, long, 12; +ðܴϰŵȣ2, dan_offerho2, dan_offerho2, long, 8; +ðܴϰżȣ2, dan_bidho2, dan_bidho2, long, 8; +ðܴϰŵȣܷ2, dan_offerrem2, dan_offerrem2, long, 12; +ðܴϰżȣܷ2, dan_bidrem2, dan_bidrem2, long, 12; +ðܴϰŵ2, dan_preoffercha2, dan_preoffercha2, long, 12; +ðܴϰż2, dan_prebidcha2, dan_prebidcha2, long, 12; +ðܴϰŵȣ3, dan_offerho3, dan_offerho3, long, 8; +ðܴϰżȣ3, dan_bidho3, dan_bidho3, long, 8; +ðܴϰŵȣܷ3, dan_offerrem3, dan_offerrem3, long, 12; +ðܴϰżȣܷ3, dan_bidrem3, dan_bidrem3, long, 12; +ðܴϰŵ3, dan_preoffercha3, dan_preoffercha3, long, 12; +ðܴϰż3, dan_prebidcha3, dan_prebidcha3, long, 12; +ðܴϰŵȣ4, dan_offerho4, dan_offerho4, long, 8; +ðܴϰżȣ4, dan_bidho4, dan_bidho4, long, 8; +ðܴϰŵȣܷ4, dan_offerrem4, dan_offerrem4, long, 12; +ðܴϰżȣܷ4, dan_bidrem4, dan_bidrem4, long, 12; +ðܴϰŵ4, dan_preoffercha4, dan_preoffercha4, long, 12; +ðܴϰż4, dan_prebidcha4, dan_prebidcha4, long, 12; +ðܴϰŵȣ5, dan_offerho5, dan_offerho5, long, 8; +ðܴϰżȣ5, dan_bidho5, dan_bidho5, long, 8; +ðܴϰŵȣܷ5, dan_offerrem5, dan_offerrem5, long, 12; +ðܴϰżȣܷ5, dan_bidrem5, dan_bidrem5, long, 12; +ðܴϰŵ5, dan_preoffercha5, dan_preoffercha5, long, 12; +ðܴϰż5, dan_prebidcha5, dan_prebidcha5, long, 12; +ðܴϰѸŵȣܷ, dan_totofferrem, dan_totofferrem, long, 12; +ðܴϰѸżȣܷ, dan_totbidrem, dan_totbidrem, long, 12; +ðܴϰŵȣѴ,dan_preoffercha,dan_preoffercha, long, 12; +ðܴϰżȣѴ,dan_prebidcha, dan_prebidcha, long, 12; +ðܴϰüᰡ, dan_yeprice, dan_yeprice, long, 8; +ðܴϰü, dan_yevolume, dan_yevolume, long, 12; +ðܴϰ񱸺,dan_preysign, dan_preysign, char, 1; +ðܴϰ, dan_preychange, dan_preychange, long, 8; +ðܴϰϰ񱸺,dan_jnilysign, dan_jnilysign, char, 1; +ðܴϰϰ, dan_jnilychange, dan_jnilychange, long, 8; + ڵ, shcode, shcode, char, 6; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/DHA_1.res b/ls_sample/sample_python/Res/DHA_1.res new file mode 100644 index 0000000..c190271 --- /dev/null +++ b/ls_sample/sample_python/Res/DHA_1.res @@ -0,0 +1,56 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQðܴϰȣܷ(DHA), DHA, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰȣð, dan_hotime, dan_hotime, char, 6; +ðܴϰ屸, dan_hstatus, dan_hstatus, char, 2; +ðܴϰŵȣ1, dan_offerho1, dan_offerho1, long, 8; +ðܴϰżȣ1, dan_bidho1, dan_bidho1, long, 8; +ðܴϰŵȣܷ1, dan_offerrem1, dan_offerrem1, long, 12; +ðܴϰżȣܷ1, dan_bidrem1, dan_bidrem1, long, 12; +ðܴϰŵ1, dan_preoffercha1, dan_preoffercha1, long, 12; +ðܴϰż1, dan_prebidcha1, dan_prebidcha1, long, 12; +ðܴϰŵȣ2, dan_offerho2, dan_offerho2, long, 8; +ðܴϰżȣ2, dan_bidho2, dan_bidho2, long, 8; +ðܴϰŵȣܷ2, dan_offerrem2, dan_offerrem2, long, 12; +ðܴϰżȣܷ2, dan_bidrem2, dan_bidrem2, long, 12; +ðܴϰŵ2, dan_preoffercha2, dan_preoffercha2, long, 12; +ðܴϰż2, dan_prebidcha2, dan_prebidcha2, long, 12; +ðܴϰŵȣ3, dan_offerho3, dan_offerho3, long, 8; +ðܴϰżȣ3, dan_bidho3, dan_bidho3, long, 8; +ðܴϰŵȣܷ3, dan_offerrem3, dan_offerrem3, long, 12; +ðܴϰżȣܷ3, dan_bidrem3, dan_bidrem3, long, 12; +ðܴϰŵ3, dan_preoffercha3, dan_preoffercha3, long, 12; +ðܴϰż3, dan_prebidcha3, dan_prebidcha3, long, 12; +ðܴϰŵȣ4, dan_offerho4, dan_offerho4, long, 8; +ðܴϰżȣ4, dan_bidho4, dan_bidho4, long, 8; +ðܴϰŵȣܷ4, dan_offerrem4, dan_offerrem4, long, 12; +ðܴϰżȣܷ4, dan_bidrem4, dan_bidrem4, long, 12; +ðܴϰŵ4, dan_preoffercha4, dan_preoffercha4, long, 12; +ðܴϰż4, dan_prebidcha4, dan_prebidcha4, long, 12; +ðܴϰŵȣ5, dan_offerho5, dan_offerho5, long, 8; +ðܴϰżȣ5, dan_bidho5, dan_bidho5, long, 8; +ðܴϰŵȣܷ5, dan_offerrem5, dan_offerrem5, long, 12; +ðܴϰżȣܷ5, dan_bidrem5, dan_bidrem5, long, 12; +ðܴϰŵ5, dan_preoffercha5, dan_preoffercha5, long, 12; +ðܴϰż5, dan_prebidcha5, dan_prebidcha5, long, 12; +ðܴϰѸŵȣܷ, dan_totofferrem, dan_totofferrem, long, 12; +ðܴϰѸżȣܷ, dan_totbidrem, dan_totbidrem, long, 12; +ðܴϰŵȣѴ,dan_preoffercha,dan_preoffercha, long, 12; +ðܴϰżȣѴ,dan_prebidcha, dan_prebidcha, long, 12; +ðܴϰüᰡ, dan_yeprice, dan_yeprice, long, 8; +ðܴϰü, dan_yevolume, dan_yevolume, long, 12; +ðܴϰ񱸺,dan_preysign, dan_preysign, char, 1; +ðܴϰ, dan_preychange, dan_preychange, long, 8; +ðܴϰϰ񱸺,dan_jnilysign, dan_jnilysign, char, 1; +ðܴϰϰ, dan_jnilychange, dan_jnilychange, long, 8; + ڵ, shcode, shcode, char, 6; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/DK3.res b/ls_sample/sample_python/Res/DK3.res new file mode 100644 index 0000000..2f19760 --- /dev/null +++ b/ls_sample/sample_python/Res/DK3.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQðܴϰü(DK3), DK3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰüð, dan_chetime, dan_chetime, char, 6; +ðܴϰϴ񱸺, dan_sign, dan_sign, char, 1; +ðܴϰϴ, dan_change, dan_change, long, 8; +ðܴϰ, dan_drate, dan_drate, float, 6.2; +ðܴϰ簡, dan_price, dan_price, long, 8; +ðܴϰðð, dan_opentime, dan_opentime, char, 6; +ðܴϰð, dan_open, dan_open, long, 8; +ðܴϰð, dan_hightime, dan_hightime, char, 6; +ðܴϰ, dan_high, dan_high, long, 8; +ðܴϰð, dan_lowtime, dan_lowtime, char, 6; +ðܴϰ, dan_low, dan_low, long, 8; +ðܴϰüᱸ, dan_cgubun, dan_cgubun, char, 1; +ðܴϰüᷮ, dan_cvolume, dan_cvolume, long, 8; +ðܴϰŷ, dan_volume, dan_volume, long, 12; +ðܴϰŷ, dan_value, dan_value, long, 12; +ðܴϰŵüᷮ, dan_mdvolume, dan_mdvolume, long, 12; +ðܴϰŵüǼ, dan_mdchecnt, dan_mdchecnt, long, 8; +ðܴϰżüᷮ, dan_msvolume, dan_msvolume, long, 12; +ðܴϰżüǼ, dan_mschecnt, dan_mschecnt, long, 8; +ðܴϰŷ, dan_prevolume, dan_prevolume, long, 8; +ðܴϰü, dan_precvolume, dan_precvolume, long, 8; +ðܴϰüᰭ, dan_cpower, dan_cpower, float, 9.2; +ðܴϰ, dan_status, dan_status, char, 2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/DK3_1.res b/ls_sample/sample_python/Res/DK3_1.res new file mode 100644 index 0000000..2f19760 --- /dev/null +++ b/ls_sample/sample_python/Res/DK3_1.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQðܴϰü(DK3), DK3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰüð, dan_chetime, dan_chetime, char, 6; +ðܴϰϴ񱸺, dan_sign, dan_sign, char, 1; +ðܴϰϴ, dan_change, dan_change, long, 8; +ðܴϰ, dan_drate, dan_drate, float, 6.2; +ðܴϰ簡, dan_price, dan_price, long, 8; +ðܴϰðð, dan_opentime, dan_opentime, char, 6; +ðܴϰð, dan_open, dan_open, long, 8; +ðܴϰð, dan_hightime, dan_hightime, char, 6; +ðܴϰ, dan_high, dan_high, long, 8; +ðܴϰð, dan_lowtime, dan_lowtime, char, 6; +ðܴϰ, dan_low, dan_low, long, 8; +ðܴϰüᱸ, dan_cgubun, dan_cgubun, char, 1; +ðܴϰüᷮ, dan_cvolume, dan_cvolume, long, 8; +ðܴϰŷ, dan_volume, dan_volume, long, 12; +ðܴϰŷ, dan_value, dan_value, long, 12; +ðܴϰŵüᷮ, dan_mdvolume, dan_mdvolume, long, 12; +ðܴϰŵüǼ, dan_mdchecnt, dan_mdchecnt, long, 8; +ðܴϰżüᷮ, dan_msvolume, dan_msvolume, long, 12; +ðܴϰżüǼ, dan_mschecnt, dan_mschecnt, long, 8; +ðܴϰŷ, dan_prevolume, dan_prevolume, long, 8; +ðܴϰü, dan_precvolume, dan_precvolume, long, 8; +ðܴϰüᰭ, dan_cpower, dan_cpower, float, 9.2; +ðܴϰ, dan_status, dan_status, char, 2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/DS3.res b/ls_sample/sample_python/Res/DS3.res new file mode 100644 index 0000000..adc9b50 --- /dev/null +++ b/ls_sample/sample_python/Res/DS3.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIðܴϰü(DS3), DS3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰüð, dan_chetime, dan_chetime, char, 6; +ðܴϰϴ񱸺, dan_sign, dan_sign, char, 1; +ðܴϰϴ, dan_change, dan_change, long, 8; +ðܴϰ, dan_drate, dan_drate, float, 6.2; +ðܴϰ簡, dan_price, dan_price, long, 8; +ðܴϰðð, dan_opentime, dan_opentime, char, 6; +ðܴϰð, dan_open, dan_open, long, 8; +ðܴϰð, dan_hightime, dan_hightime, char, 6; +ðܴϰ, dan_high, dan_high, long, 8; +ðܴϰð, dan_lowtime, dan_lowtime, char, 6; +ðܴϰ, dan_low, dan_low, long, 8; +ðܴϰüᱸ, dan_cgubun, dan_cgubun, char, 1; +ðܴϰüᷮ, dan_cvolume, dan_cvolume, long, 8; +ðܴϰŷ, dan_volume, dan_volume, long, 12; +ðܴϰŷ, dan_value, dan_value, long, 12; +ðܴϰŵüᷮ, dan_mdvolume, dan_mdvolume, long, 12; +ðܴϰŵüǼ, dan_mdchecnt, dan_mdchecnt, long, 8; +ðܴϰżüᷮ, dan_msvolume, dan_msvolume, long, 12; +ðܴϰżüǼ, dan_mschecnt, dan_mschecnt, long, 8; +ðܴϰŷ, dan_prevolume, dan_prevolume, long, 8; +ðܴϰü, dan_precvolume, dan_precvolume, long, 8; +ðܴϰüᰭ, dan_cpower, dan_cpower, float, 9.2; +ðܴϰ, dan_status, dan_status, char, 2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/DS3_1.res b/ls_sample/sample_python/Res/DS3_1.res new file mode 100644 index 0000000..adc9b50 --- /dev/null +++ b/ls_sample/sample_python/Res/DS3_1.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIðܴϰü(DS3), DS3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰüð, dan_chetime, dan_chetime, char, 6; +ðܴϰϴ񱸺, dan_sign, dan_sign, char, 1; +ðܴϰϴ, dan_change, dan_change, long, 8; +ðܴϰ, dan_drate, dan_drate, float, 6.2; +ðܴϰ簡, dan_price, dan_price, long, 8; +ðܴϰðð, dan_opentime, dan_opentime, char, 6; +ðܴϰð, dan_open, dan_open, long, 8; +ðܴϰð, dan_hightime, dan_hightime, char, 6; +ðܴϰ, dan_high, dan_high, long, 8; +ðܴϰð, dan_lowtime, dan_lowtime, char, 6; +ðܴϰ, dan_low, dan_low, long, 8; +ðܴϰüᱸ, dan_cgubun, dan_cgubun, char, 1; +ðܴϰüᷮ, dan_cvolume, dan_cvolume, long, 8; +ðܴϰŷ, dan_volume, dan_volume, long, 12; +ðܴϰŷ, dan_value, dan_value, long, 12; +ðܴϰŵüᷮ, dan_mdvolume, dan_mdvolume, long, 12; +ðܴϰŵüǼ, dan_mdchecnt, dan_mdchecnt, long, 8; +ðܴϰżüᷮ, dan_msvolume, dan_msvolume, long, 12; +ðܴϰżüǼ, dan_mschecnt, dan_mschecnt, long, 8; +ðܴϰŷ, dan_prevolume, dan_prevolume, long, 8; +ðܴϰü, dan_precvolume, dan_precvolume, long, 8; +ðܴϰüᰭ, dan_cpower, dan_cpower, float, 9.2; +ðܴϰ, dan_status, dan_status, char, 2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/DVI.res b/ls_sample/sample_python/Res/DVI.res new file mode 100644 index 0000000..3792c79 --- /dev/null +++ b/ls_sample/sample_python/Res/DVI.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ðܴϰVIߵ(DVI), DVI, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ(KEY), shcode, shcode, char, 6; + end + OutBlock,,output; + begin + (0: 1:ߵ 2:ߵ 3:&) , vi_gubun , vi_gubun , char, 1; + VIߵذ , svi_recprice, svi_recprice, long, 8; + VIߵذ , dvi_recprice, dvi_recprice, long, 8; + VIߵ , vi_trgprice , vi_trgprice , long, 8; + ڵ(KEY) , shcode , shcode , char, 6; + ڵ(̻) , ref_shcode, ref_shcode, char, 6; + ð , time, time, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/DVI_1.res b/ls_sample/sample_python/Res/DVI_1.res new file mode 100644 index 0000000..3792c79 --- /dev/null +++ b/ls_sample/sample_python/Res/DVI_1.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ðܴϰVIߵ(DVI), DVI, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ(KEY), shcode, shcode, char, 6; + end + OutBlock,,output; + begin + (0: 1:ߵ 2:ߵ 3:&) , vi_gubun , vi_gubun , char, 1; + VIߵذ , svi_recprice, svi_recprice, long, 8; + VIߵذ , dvi_recprice, dvi_recprice, long, 8; + VIߵ , vi_trgprice , vi_trgprice , long, 8; + ڵ(KEY) , shcode , shcode , char, 6; + ڵ(̻) , ref_shcode, ref_shcode, char, 6; + ð , time, time, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/EC0.res b/ls_sample/sample_python/Res/EC0.res new file mode 100644 index 0000000..3b16655 --- /dev/null +++ b/ls_sample/sample_python/Res/EC0.res @@ -0,0 +1,42 @@ +BEGIN_FUNCTION_MAP +.Feed, EUREXKP200ɼǼü(EC0), EC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð(24ð), chetime, chetime, char, 6; + üð(36ð), chetime1, chetime1, char, 6; + 񱸺, sign, sign, char, 1; + , change, change, float, 6.2; + ص, drate, drate, float, 6.2; + 簡, price, price, float, 6.2; + ð, open, open, float, 6.2; + , high, high, float, 6.2; + , low, low, float, 6.2; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ(), value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ(),mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ(),mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + ŵȣ1, offerho1, offerho1, float, 6.2; + żȣ1, bidho1, bidho1, float, 6.2; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, float, 6.2; + KOSPI, eqva, eqva, float, 7.2; + ̷а, theoryprice, theoryprice, float, 6.2; + 纯, impv, impv, float, 6.2; + ̰, openyakcha, openyakcha, long, 8; + ðġ, timevalue, timevalue, float, 6.2; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/EC0_1.res b/ls_sample/sample_python/Res/EC0_1.res new file mode 100644 index 0000000..3b16655 --- /dev/null +++ b/ls_sample/sample_python/Res/EC0_1.res @@ -0,0 +1,42 @@ +BEGIN_FUNCTION_MAP +.Feed, EUREXKP200ɼǼü(EC0), EC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð(24ð), chetime, chetime, char, 6; + üð(36ð), chetime1, chetime1, char, 6; + 񱸺, sign, sign, char, 1; + , change, change, float, 6.2; + ص, drate, drate, float, 6.2; + 簡, price, price, float, 6.2; + ð, open, open, float, 6.2; + , high, high, float, 6.2; + , low, low, float, 6.2; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ(), value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ(),mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ(),mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + ŵȣ1, offerho1, offerho1, float, 6.2; + żȣ1, bidho1, bidho1, float, 6.2; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, float, 6.2; + KOSPI, eqva, eqva, float, 7.2; + ̷а, theoryprice, theoryprice, float, 6.2; + 纯, impv, impv, float, 6.2; + ̰, openyakcha, openyakcha, long, 8; + ðġ, timevalue, timevalue, float, 6.2; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/EH0.res b/ls_sample/sample_python/Res/EH0.res new file mode 100644 index 0000000..59390e8 --- /dev/null +++ b/ls_sample/sample_python/Res/EH0.res @@ -0,0 +1,50 @@ +BEGIN_FUNCTION_MAP +.Feed, EUREXKP200ɼǼȣ(EH0), EH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + ȣð(24ð), hotime, hotime, char, 6; + ȣð(36ð), hotime1, hotime1, char, 6; + ŵȣ1, offerho1, offerho1, double, 6.2; + żȣ1, bidho1, bidho1, double, 6.2; + ŵȣ1, offerrem1, offerrem1, long, 7; + żȣ1, bidrem1, bidrem1, long, 7; + ŵȣǼ1(), offercnt1, offercnt1, long, 5; + żȣǼ1(), bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, double, 6.2; + żȣ2, bidho2, bidho2, double, 6.2; + ŵȣ2, offerrem2, offerrem2, long, 7; + żȣ2, bidrem2, bidrem2, long, 7; + ŵȣǼ2(), offercnt2, offercnt2, long, 5; + żȣǼ2(), bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, double, 6.2; + żȣ3, bidho3, bidho3, double, 6.2; + ŵȣ3, offerrem3, offerrem3, long, 7; + żȣ3, bidrem3, bidrem3, long, 7; + ŵȣǼ3(), offercnt3, offercnt3, long, 5; + żȣǼ3(), bidcnt3, bidcnt3, long, 5; + ŵȣ4(), offerho4, offerho4, double, 6.2; + żȣ4(), bidho4, bidho4, double, 6.2; + ŵȣ4(), offerrem4, offerrem4, long, 7; + żȣ4(), bidrem4, bidrem4, long, 7; + ŵȣǼ4(), offercnt4, offercnt4, long, 5; + żȣǼ4(), bidcnt4, bidcnt4, long, 5; + ŵȣ5(), offerho5, offerho5, double, 6.2; + żȣ5(), bidho5, bidho5, double, 6.2; + ŵȣ5(), offerrem5, offerrem5, long, 7; + żȣ5(), bidrem5, bidrem5, long, 7; + ŵȣǼ5(), offercnt5, offercnt5, long, 5; + żȣǼ5(), bidcnt5, bidcnt5, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 7; + żȣѼ, totbidrem, totbidrem, long, 7; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ڵ, optcode, optcode, char, 8; + ϰȣ, danhochk, danhochk, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/EH0_1.res b/ls_sample/sample_python/Res/EH0_1.res new file mode 100644 index 0000000..59390e8 --- /dev/null +++ b/ls_sample/sample_python/Res/EH0_1.res @@ -0,0 +1,50 @@ +BEGIN_FUNCTION_MAP +.Feed, EUREXKP200ɼǼȣ(EH0), EH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + ȣð(24ð), hotime, hotime, char, 6; + ȣð(36ð), hotime1, hotime1, char, 6; + ŵȣ1, offerho1, offerho1, double, 6.2; + żȣ1, bidho1, bidho1, double, 6.2; + ŵȣ1, offerrem1, offerrem1, long, 7; + żȣ1, bidrem1, bidrem1, long, 7; + ŵȣǼ1(), offercnt1, offercnt1, long, 5; + żȣǼ1(), bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, double, 6.2; + żȣ2, bidho2, bidho2, double, 6.2; + ŵȣ2, offerrem2, offerrem2, long, 7; + żȣ2, bidrem2, bidrem2, long, 7; + ŵȣǼ2(), offercnt2, offercnt2, long, 5; + żȣǼ2(), bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, double, 6.2; + żȣ3, bidho3, bidho3, double, 6.2; + ŵȣ3, offerrem3, offerrem3, long, 7; + żȣ3, bidrem3, bidrem3, long, 7; + ŵȣǼ3(), offercnt3, offercnt3, long, 5; + żȣǼ3(), bidcnt3, bidcnt3, long, 5; + ŵȣ4(), offerho4, offerho4, double, 6.2; + żȣ4(), bidho4, bidho4, double, 6.2; + ŵȣ4(), offerrem4, offerrem4, long, 7; + żȣ4(), bidrem4, bidrem4, long, 7; + ŵȣǼ4(), offercnt4, offercnt4, long, 5; + żȣǼ4(), bidcnt4, bidcnt4, long, 5; + ŵȣ5(), offerho5, offerho5, double, 6.2; + żȣ5(), bidho5, bidho5, double, 6.2; + ŵȣ5(), offerrem5, offerrem5, long, 7; + żȣ5(), bidrem5, bidrem5, long, 7; + ŵȣǼ5(), offercnt5, offercnt5, long, 5; + żȣǼ5(), bidcnt5, bidcnt5, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 7; + żȣѼ, totbidrem, totbidrem, long, 7; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ڵ, optcode, optcode, char, 8; + ϰȣ, danhochk, danhochk, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/ESN.res b/ls_sample/sample_python/Res/ESN.res new file mode 100644 index 0000000..bc220de --- /dev/null +++ b/ls_sample/sample_python/Res/ESN.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWǥΰ(ESN), ESN, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ð, time, time, char, 6; + ̷а, theoryprice, theoryprice, float, 10.2; + Ÿ, delt, delt, float, 7.6; + , gama, gama, float, 7.6; + Ÿ, ceta, ceta, float, 12.6; + , vega, vega, float, 12.6; + ο, rhox, rhox, float, 12.6; + 纯, impv, impv, float, 5.2; + E., egearing, egearing, float, 8.2; + ڵ, shcode, shcode, char, 6; + ELW簡, elwclose, elwclose, long, 8; + ELWϴ񱸺, sign, sign, char, 1; + ELWϴ, change, change, long, 8; + , date, date, char, 8; + ƽȯ, tickvalue, tickvalue, float, 10.2; + LP纯, lp_impv, lp_impv, float, 5.2; + end + END_DATA_MAP +END_FUNCTION_MAP +ESN \ No newline at end of file diff --git a/ls_sample/sample_python/Res/ESN_1.res b/ls_sample/sample_python/Res/ESN_1.res new file mode 100644 index 0000000..bc220de --- /dev/null +++ b/ls_sample/sample_python/Res/ESN_1.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWǥΰ(ESN), ESN, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ð, time, time, char, 6; + ̷а, theoryprice, theoryprice, float, 10.2; + Ÿ, delt, delt, float, 7.6; + , gama, gama, float, 7.6; + Ÿ, ceta, ceta, float, 12.6; + , vega, vega, float, 12.6; + ο, rhox, rhox, float, 12.6; + 纯, impv, impv, float, 5.2; + E., egearing, egearing, float, 8.2; + ڵ, shcode, shcode, char, 6; + ELW簡, elwclose, elwclose, long, 8; + ELWϴ񱸺, sign, sign, char, 1; + ELWϴ, change, change, long, 8; + , date, date, char, 8; + ƽȯ, tickvalue, tickvalue, float, 10.2; + LP纯, lp_impv, lp_impv, float, 5.2; + end + END_DATA_MAP +END_FUNCTION_MAP +ESN \ No newline at end of file diff --git a/ls_sample/sample_python/Res/EU0.res b/ls_sample/sample_python/Res/EU0.res new file mode 100644 index 0000000..7666896 --- /dev/null +++ b/ls_sample/sample_python/Res/EU0.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, EUX, EU0, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, OrderID, OrderID, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 4; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/EU0_1.res b/ls_sample/sample_python/Res/EU0_1.res new file mode 100644 index 0000000..7666896 --- /dev/null +++ b/ls_sample/sample_python/Res/EU0_1.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, EUX, EU0, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, OrderID, OrderID, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 4; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/EU1.res b/ls_sample/sample_python/Res/EU1.res new file mode 100644 index 0000000..426475b --- /dev/null +++ b/ls_sample/sample_python/Res/EU1.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, EUXü, EU1, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, OrderID, OrderID, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 4; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/EU1_1.res b/ls_sample/sample_python/Res/EU1_1.res new file mode 100644 index 0000000..426475b --- /dev/null +++ b/ls_sample/sample_python/Res/EU1_1.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, EUXü, EU1, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, OrderID, OrderID, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 4; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/EU2.res b/ls_sample/sample_python/Res/EU2.res new file mode 100644 index 0000000..b31a36c --- /dev/null +++ b/ls_sample/sample_python/Res/EU2.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, EUXȮ, EU2, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, OrderID, OrderID, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 4; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/EU2_1.res b/ls_sample/sample_python/Res/EU2_1.res new file mode 100644 index 0000000..b31a36c --- /dev/null +++ b/ls_sample/sample_python/Res/EU2_1.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, EUXȮ, EU2, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, OrderID, OrderID, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 4; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/FC0.res b/ls_sample/sample_python/Res/FC0.res new file mode 100644 index 0000000..ad82903 --- /dev/null +++ b/ls_sample/sample_python/Res/FC0.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ü(C0), FC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, float, 6.2; + , drate, drate, float, 6.2; + 簡, price, price, float, 6.2; + ð, open, open, float, 6.2; + , high, high, float, 6.2; + , low, low, float, 6.2; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + ŵȣ1, offerho1, offerho1, float, 6.2; + żȣ1, bidho1, bidho1, float, 6.2; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, float, 6.2; + ̷а, theoryprice, theoryprice, float, 6.2; + , kasis, kasis, float, 6.2; + BASIS, sbasis, sbasis, float, 6.2; + ̷BASIS, ibasis, ibasis, float, 6.2; + ̰, openyakcha, openyakcha, long, 8; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/FC0_1.res b/ls_sample/sample_python/Res/FC0_1.res new file mode 100644 index 0000000..ad82903 --- /dev/null +++ b/ls_sample/sample_python/Res/FC0_1.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ü(C0), FC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, float, 6.2; + , drate, drate, float, 6.2; + 簡, price, price, float, 6.2; + ð, open, open, float, 6.2; + , high, high, float, 6.2; + , low, low, float, 6.2; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + ŵȣ1, offerho1, offerho1, float, 6.2; + żȣ1, bidho1, bidho1, float, 6.2; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, float, 6.2; + ̷а, theoryprice, theoryprice, float, 6.2; + , kasis, kasis, float, 6.2; + BASIS, sbasis, sbasis, float, 6.2; + ̷BASIS, ibasis, ibasis, float, 6.2; + ̰, openyakcha, openyakcha, long, 8; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/FD0.res b/ls_sample/sample_python/Res/FD0.res new file mode 100644 index 0000000..5d689f8 --- /dev/null +++ b/ls_sample/sample_python/Res/FD0.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ǽðѰ(D0), FD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, float, 8.2; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, float, 8.2; + ڵ , futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/FD0_1.res b/ls_sample/sample_python/Res/FD0_1.res new file mode 100644 index 0000000..5d689f8 --- /dev/null +++ b/ls_sample/sample_python/Res/FD0_1.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ǽðѰ(D0), FD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, float, 8.2; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, float, 8.2; + ڵ , futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/FH0.res b/ls_sample/sample_python/Res/FH0.res new file mode 100644 index 0000000..0178f9a --- /dev/null +++ b/ls_sample/sample_python/Res/FH0.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ȣ(H0), FH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, double, 6.2; + żȣ1, bidho1, bidho1, double, 6.2; + ŵȣ1, offerrem1, offerrem1, long, 6; + żȣ1, bidrem1, bidrem1, long, 6; + ŵȣǼ1, offercnt1, offercnt1, long, 5; + żȣǼ1, bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, double, 6.2; + żȣ2, bidho2, bidho2, double, 6.2; + ŵȣ2, offerrem2, offerrem2, long, 6; + żȣ2, bidrem2, bidrem2, long, 6; + ŵȣǼ2, offercnt2, offercnt2, long, 5; + żȣǼ2, bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, double, 6.2; + żȣ3, bidho3, bidho3, double, 6.2; + ŵȣ3, offerrem3, offerrem3, long, 6; + żȣ3, bidrem3, bidrem3, long, 6; + ŵȣǼ3, offercnt3, offercnt3, long, 5; + żȣǼ3, bidcnt3, bidcnt3, long, 5; + ŵȣ4, offerho4, offerho4, double, 6.2; + żȣ4, bidho4, bidho4, double, 6.2; + ŵȣ4, offerrem4, offerrem4, long, 6; + żȣ4, bidrem4, bidrem4, long, 6; + ŵȣǼ4, offercnt4, offercnt4, long, 5; + żȣǼ4, bidcnt4, bidcnt4, long, 5; + ŵȣ5, offerho5, offerho5, double, 6.2; + żȣ5, bidho5, bidho5, double, 6.2; + ŵȣ5, offerrem5, offerrem5, long, 6; + żȣ5, bidrem5, bidrem5, long, 6; + ŵȣǼ5, offercnt5, offercnt5, long, 5; + żȣǼ5, bidcnt5, bidcnt5, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 6; + żȣѼ, totbidrem, totbidrem, long, 6; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ڵ, futcode, futcode, char, 8; + ϰȣ, danhochk, danhochk, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP +FH0 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/FH0_1.res b/ls_sample/sample_python/Res/FH0_1.res new file mode 100644 index 0000000..0178f9a --- /dev/null +++ b/ls_sample/sample_python/Res/FH0_1.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ȣ(H0), FH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, double, 6.2; + żȣ1, bidho1, bidho1, double, 6.2; + ŵȣ1, offerrem1, offerrem1, long, 6; + żȣ1, bidrem1, bidrem1, long, 6; + ŵȣǼ1, offercnt1, offercnt1, long, 5; + żȣǼ1, bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, double, 6.2; + żȣ2, bidho2, bidho2, double, 6.2; + ŵȣ2, offerrem2, offerrem2, long, 6; + żȣ2, bidrem2, bidrem2, long, 6; + ŵȣǼ2, offercnt2, offercnt2, long, 5; + żȣǼ2, bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, double, 6.2; + żȣ3, bidho3, bidho3, double, 6.2; + ŵȣ3, offerrem3, offerrem3, long, 6; + żȣ3, bidrem3, bidrem3, long, 6; + ŵȣǼ3, offercnt3, offercnt3, long, 5; + żȣǼ3, bidcnt3, bidcnt3, long, 5; + ŵȣ4, offerho4, offerho4, double, 6.2; + żȣ4, bidho4, bidho4, double, 6.2; + ŵȣ4, offerrem4, offerrem4, long, 6; + żȣ4, bidrem4, bidrem4, long, 6; + ŵȣǼ4, offercnt4, offercnt4, long, 5; + żȣǼ4, bidcnt4, bidcnt4, long, 5; + ŵȣ5, offerho5, offerho5, double, 6.2; + żȣ5, bidho5, bidho5, double, 6.2; + ŵȣ5, offerrem5, offerrem5, long, 6; + żȣ5, bidrem5, bidrem5, long, 6; + ŵȣǼ5, offercnt5, offercnt5, long, 5; + żȣǼ5, bidcnt5, bidcnt5, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 6; + żȣѼ, totbidrem, totbidrem, long, 6; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ڵ, futcode, futcode, char, 8; + ϰȣ, danhochk, danhochk, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP +FH0 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/FOCCQ33600.res b/ls_sample/sample_python/Res/FOCCQ33600.res new file mode 100644 index 0000000..cc67e22 --- /dev/null +++ b/ls_sample/sample_python/Res/FOCCQ33600.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,ֽİ Ⱓͷ ,FOCCQ33600,SERVICE=FOCCQ33600,headtype=B,CREATOR=,CREDATE=2012/03/15 11:06:33; + BEGIN_DATA_MAP + FOCCQ33600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + Ⱓ, TermTp, TermTp, char, 1; + end + FOCCQ33600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + Ⱓ, TermTp, TermTp, char, 1; + end + FOCCQ33600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + Ÿžݾ, BnsctrAmt, BnsctrAmt, long, 16; + Աݱݾ, MnyinAmt, MnyinAmt, long, 16; + ݱݾ, MnyoutAmt, MnyoutAmt, long, 16; + ڿܱݾ, InvstAvrbalPramt, InvstAvrbalPramt, long, 16; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ڼͷ, InvstErnrat, InvstErnrat, double, 9.2; + end + FOCCQ33600OutBlock3,OutLst(*EMPTY*),output,occurs; + begin + , BaseDt, BaseDt, char, 8; + 򰡱ݾ, FdEvalAmt, FdEvalAmt, long, 19; + ⸻򰡱ݾ, EotEvalAmt, EotEvalAmt, long, 19; + ڿܱݾ, InvstAvrbalPramt, InvstAvrbalPramt, long, 16; + Ÿžݾ, BnsctrAmt, BnsctrAmt, long, 16; + Աݰ, MnyinSecinAmt, MnyinSecinAmt, long, 16; + ݰ, MnyoutSecoutAmt, MnyoutSecoutAmt, long, 16; + 򰡼ͱݾ, EvalPnlAmt, EvalPnlAmt, long, 16; + Ⱓͷ, TermErnrat, TermErnrat, double, 11.3; + , Idx, Idx, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/FOCCQ33600_1.res b/ls_sample/sample_python/Res/FOCCQ33600_1.res new file mode 100644 index 0000000..cc67e22 --- /dev/null +++ b/ls_sample/sample_python/Res/FOCCQ33600_1.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,ֽİ Ⱓͷ ,FOCCQ33600,SERVICE=FOCCQ33600,headtype=B,CREATOR=,CREDATE=2012/03/15 11:06:33; + BEGIN_DATA_MAP + FOCCQ33600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + Ⱓ, TermTp, TermTp, char, 1; + end + FOCCQ33600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + Ⱓ, TermTp, TermTp, char, 1; + end + FOCCQ33600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + Ÿžݾ, BnsctrAmt, BnsctrAmt, long, 16; + Աݱݾ, MnyinAmt, MnyinAmt, long, 16; + ݱݾ, MnyoutAmt, MnyoutAmt, long, 16; + ڿܱݾ, InvstAvrbalPramt, InvstAvrbalPramt, long, 16; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ڼͷ, InvstErnrat, InvstErnrat, double, 9.2; + end + FOCCQ33600OutBlock3,OutLst(*EMPTY*),output,occurs; + begin + , BaseDt, BaseDt, char, 8; + 򰡱ݾ, FdEvalAmt, FdEvalAmt, long, 19; + ⸻򰡱ݾ, EotEvalAmt, EotEvalAmt, long, 19; + ڿܱݾ, InvstAvrbalPramt, InvstAvrbalPramt, long, 16; + Ÿžݾ, BnsctrAmt, BnsctrAmt, long, 16; + Աݰ, MnyinSecinAmt, MnyinSecinAmt, long, 16; + ݰ, MnyoutSecoutAmt, MnyoutSecoutAmt, long, 16; + 򰡼ͱݾ, EvalPnlAmt, EvalPnlAmt, long, 16; + Ⱓͷ, TermErnrat, TermErnrat, double, 11.3; + , Idx, Idx, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/FOCCQ33700.res b/ls_sample/sample_python/Res/FOCCQ33700.res new file mode 100644 index 0000000..21f8b43 --- /dev/null +++ b/ls_sample/sample_python/Res/FOCCQ33700.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ Ⱓ ͷ Ȳ,FOCCQ33700,SERVICE=FOCCQ33700,headtype=B,CREATOR=̼,CREDATE=2013/01/08 10:45:28; + BEGIN_DATA_MAP + FOCCQ33700InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + رݾױ, BaseAmtTp, BaseAmtTp, char, 1; + ȸⰣ, QryTermTp, QryTermTp, char, 1; + ͻⱸڵ, PnlCalcTpCode, PnlCalcTpCode, char, 1; + end + FOCCQ33700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + رݾױ, BaseAmtTp, BaseAmtTp, char, 1; + ȸⰣ, QryTermTp, QryTermTp, char, 1; + ͻⱸڵ, PnlCalcTpCode, PnlCalcTpCode, char, 1; + end + FOCCQ33700OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + ɼǾݾ, FnoCtrctAmt, FnoCtrctAmt, long, 16; + ڿܱݾ, InvstPramtAvrbalAmt, InvstPramtAvrbalAmt, long, 16; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + ɼǸŸżͱݾ, OptBsnPnlAmt, OptBsnPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ͷ, ErnRat, ErnRat, double, 12.6; + end + FOCCQ33700OutBlock3,OutList(*EMPTY*),output,occurs; + begin + ŷ, TrdDt, TrdDt, char, 8; + ʿŹڻݾ, FdDpsastAmt, FdDpsastAmt, long, 16; + ⸻Źڻݾ, EotDpsastAmt, EotDpsastAmt, long, 16; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + ڿܱݾ, InvstAvrbalPramt, InvstAvrbalPramt, long, 16; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ͷ, Ernrat, Ernrat, double, 12.6; + ɼǾݾ, FnoCtrctAmt, FnoCtrctAmt, long, 16; + ȸ, Trnrat, Trnrat, double, 12.6; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + ɼǸŸżͱݾ, OptBsnPnlAmt, OptBsnPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/FOCCQ33700_1.res b/ls_sample/sample_python/Res/FOCCQ33700_1.res new file mode 100644 index 0000000..21f8b43 --- /dev/null +++ b/ls_sample/sample_python/Res/FOCCQ33700_1.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ Ⱓ ͷ Ȳ,FOCCQ33700,SERVICE=FOCCQ33700,headtype=B,CREATOR=̼,CREDATE=2013/01/08 10:45:28; + BEGIN_DATA_MAP + FOCCQ33700InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + رݾױ, BaseAmtTp, BaseAmtTp, char, 1; + ȸⰣ, QryTermTp, QryTermTp, char, 1; + ͻⱸڵ, PnlCalcTpCode, PnlCalcTpCode, char, 1; + end + FOCCQ33700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + رݾױ, BaseAmtTp, BaseAmtTp, char, 1; + ȸⰣ, QryTermTp, QryTermTp, char, 1; + ͻⱸڵ, PnlCalcTpCode, PnlCalcTpCode, char, 1; + end + FOCCQ33700OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + ɼǾݾ, FnoCtrctAmt, FnoCtrctAmt, long, 16; + ڿܱݾ, InvstPramtAvrbalAmt, InvstPramtAvrbalAmt, long, 16; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + ɼǸŸżͱݾ, OptBsnPnlAmt, OptBsnPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ͷ, ErnRat, ErnRat, double, 12.6; + end + FOCCQ33700OutBlock3,OutList(*EMPTY*),output,occurs; + begin + ŷ, TrdDt, TrdDt, char, 8; + ʿŹڻݾ, FdDpsastAmt, FdDpsastAmt, long, 16; + ⸻Źڻݾ, EotDpsastAmt, EotDpsastAmt, long, 16; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + ڿܱݾ, InvstAvrbalPramt, InvstAvrbalPramt, long, 16; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ͷ, Ernrat, Ernrat, double, 12.6; + ɼǾݾ, FnoCtrctAmt, FnoCtrctAmt, long, 16; + ȸ, Trnrat, Trnrat, double, 12.6; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + ɼǸŸżͱݾ, OptBsnPnlAmt, OptBsnPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/FX0.res b/ls_sample/sample_python/Res/FX0.res new file mode 100644 index 0000000..1db9d8c --- /dev/null +++ b/ls_sample/sample_python/Res/FX0.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200Ȯ(X0), FX0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + Ѵܰ , upstep , upstep , char, 2; + Ѵܰ , dnstep , dnstep , char, 2; + Ѱ , uplmtprice , uplmtprice , float, 6.2; + Ѱ , dnlmtprice , dnlmtprice , float, 6.2; + ڵ , futcode , futcode , char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/FX0_1.res b/ls_sample/sample_python/Res/FX0_1.res new file mode 100644 index 0000000..1db9d8c --- /dev/null +++ b/ls_sample/sample_python/Res/FX0_1.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200Ȯ(X0), FX0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + Ѵܰ , upstep , upstep , char, 2; + Ѵܰ , dnstep , dnstep , char, 2; + Ѱ , uplmtprice , uplmtprice , float, 6.2; + Ѱ , dnlmtprice , dnlmtprice , float, 6.2; + ڵ , futcode , futcode , char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/H01.res b/ls_sample/sample_python/Res/H01.res new file mode 100644 index 0000000..4fd845a --- /dev/null +++ b/ls_sample/sample_python/Res/H01.res @@ -0,0 +1,57 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹ, H01, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + Ϸùȣ, seq, seq, long, 11; + trcode, trcode, trcode, char, 11; + Ī׷ȣ, megrpno, megrpno, char, 2; + ID, boardid, boardid, char, 2; + ȸȣ, memberno, memberno, char, 5; + ȣ, bpno, bpno, char, 5; + ֹȣ, ordno, ordno, char, 10; + ֹȣ, ordordno, orgordno, char, 10; + ڵ, expcode, expcode, char, 12; + ŵ, dosugb, dosugb, char, 1; + ұ, mocagb, mocagb, char, 1; + ¹ȣ1, accno1, accno1, char, 12; + ȣ, qty2, qty2, long, 10; + ȣ, price, price, float, 11.2; + ֹ, ordgb, ordgb, char, 1; + ȣ, hogagb, hogagb, char, 1; + ȣ, sihogagb, sihogagb, char, 11; + ڻֽŰID, treaid, tradid, char, 5; + ڻָŸŹ, treacode, treacode, char, 1; + ŵڵ, askcode, askcode, char, 2; + ſ뱸ڵ, creditcode, creditcode, char, 2; + Źڱⱸ, jakigb, jakigb, char, 2; + Źȣ, trustnum, trustnum, char, 5; + α׷, ptgb, ptgb, char, 2; + ֱǰ¹ȣ,substocnum,substonum, char, 12; + ±ڵ, accgb, accgb, char, 2; + űڵ, accmarggb, accmarggb, char, 2; + ڵ, nationcode, nationcode, char, 3; + ڱ, investgb, investgb, char, 4; + ܱڵ, forecode, forecode, char, 2; + ֹü, medcode, medcode, char, 1; + ֹĺڹȣ, ordid, ordid, char, 12; + MACּ, macid, macid, char, 12; + ȣ, orddate, orddate, char, 8; + ȸֹð, rcvtime, rcvtime, char, 9; + mem_filler, mem_filler, mem_filler, char, 7; + mem_accno, mem_accno, mem_accno, char, 11; + mem_filler1, mem_filler, mem_filler1,char, 42; + Īð, ordacpttm, ordacpttm, char, 9; + Ҽ, qty, qty, long, 10; + ڵұ, autogb, autogb, char, 1; + źλ, rejcode, rejcode, char, 4; + α׷ȣŰ, prgordde, prgordde, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/H01_1.res b/ls_sample/sample_python/Res/H01_1.res new file mode 100644 index 0000000..4fd845a --- /dev/null +++ b/ls_sample/sample_python/Res/H01_1.res @@ -0,0 +1,57 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹ, H01, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + Ϸùȣ, seq, seq, long, 11; + trcode, trcode, trcode, char, 11; + Ī׷ȣ, megrpno, megrpno, char, 2; + ID, boardid, boardid, char, 2; + ȸȣ, memberno, memberno, char, 5; + ȣ, bpno, bpno, char, 5; + ֹȣ, ordno, ordno, char, 10; + ֹȣ, ordordno, orgordno, char, 10; + ڵ, expcode, expcode, char, 12; + ŵ, dosugb, dosugb, char, 1; + ұ, mocagb, mocagb, char, 1; + ¹ȣ1, accno1, accno1, char, 12; + ȣ, qty2, qty2, long, 10; + ȣ, price, price, float, 11.2; + ֹ, ordgb, ordgb, char, 1; + ȣ, hogagb, hogagb, char, 1; + ȣ, sihogagb, sihogagb, char, 11; + ڻֽŰID, treaid, tradid, char, 5; + ڻָŸŹ, treacode, treacode, char, 1; + ŵڵ, askcode, askcode, char, 2; + ſ뱸ڵ, creditcode, creditcode, char, 2; + Źڱⱸ, jakigb, jakigb, char, 2; + Źȣ, trustnum, trustnum, char, 5; + α׷, ptgb, ptgb, char, 2; + ֱǰ¹ȣ,substocnum,substonum, char, 12; + ±ڵ, accgb, accgb, char, 2; + űڵ, accmarggb, accmarggb, char, 2; + ڵ, nationcode, nationcode, char, 3; + ڱ, investgb, investgb, char, 4; + ܱڵ, forecode, forecode, char, 2; + ֹü, medcode, medcode, char, 1; + ֹĺڹȣ, ordid, ordid, char, 12; + MACּ, macid, macid, char, 12; + ȣ, orddate, orddate, char, 8; + ȸֹð, rcvtime, rcvtime, char, 9; + mem_filler, mem_filler, mem_filler, char, 7; + mem_accno, mem_accno, mem_accno, char, 11; + mem_filler1, mem_filler, mem_filler1,char, 42; + Īð, ordacpttm, ordacpttm, char, 9; + Ҽ, qty, qty, long, 10; + ڵұ, autogb, autogb, char, 1; + źλ, rejcode, rejcode, char, 4; + α׷ȣŰ, prgordde, prgordde, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/H1_.res b/ls_sample/sample_python/Res/H1_.res new file mode 100644 index 0000000..e6f03f1 --- /dev/null +++ b/ls_sample/sample_python/Res/H1_.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIȣܷ(H1), H1_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + ڵ, shcode, shcode, char, 6; + 뱸, alloc_gubun, alloc_gubun, char, 1; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/H1__1.res b/ls_sample/sample_python/Res/H1__1.res new file mode 100644 index 0000000..e6f03f1 --- /dev/null +++ b/ls_sample/sample_python/Res/H1__1.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIȣܷ(H1), H1_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + ڵ, shcode, shcode, char, 6; + 뱸, alloc_gubun, alloc_gubun, char, 1; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/H2_.res b/ls_sample/sample_python/Res/H2_.res new file mode 100644 index 0000000..b587480 --- /dev/null +++ b/ls_sample/sample_python/Res/H2_.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIðȣܷ(H2), H2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ðܸŵܷ, tmofferrem, tmofferrem, long, 12; + ðܸżܷ, tmbidrem, tmbidrem, long, 12; + ðܸŵ, pretmoffercha, pretmoffercha, long, 12; + ðܸż, pretmbidcha, pretmbidcha, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/H2__1.res b/ls_sample/sample_python/Res/H2__1.res new file mode 100644 index 0000000..b587480 --- /dev/null +++ b/ls_sample/sample_python/Res/H2__1.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIðȣܷ(H2), H2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ðܸŵܷ, tmofferrem, tmofferrem, long, 12; + ðܸżܷ, tmbidrem, tmbidrem, long, 12; + ðܸŵ, pretmoffercha, pretmoffercha, long, 12; + ðܸż, pretmbidcha, pretmbidcha, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/HA_.res b/ls_sample/sample_python/Res/HA_.res new file mode 100644 index 0000000..7aaebce --- /dev/null +++ b/ls_sample/sample_python/Res/HA_.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQȣܷ(HA), HA_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + ڵ, shcode, shcode, char, 6; + 뱸, alloc_gubun, alloc_gubun, char, 1; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/HA__1.res b/ls_sample/sample_python/Res/HA__1.res new file mode 100644 index 0000000..7aaebce --- /dev/null +++ b/ls_sample/sample_python/Res/HA__1.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQȣܷ(HA), HA_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + ڵ, shcode, shcode, char, 6; + 뱸, alloc_gubun, alloc_gubun, char, 1; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/HB_.res b/ls_sample/sample_python/Res/HB_.res new file mode 100644 index 0000000..cad0410 --- /dev/null +++ b/ls_sample/sample_python/Res/HB_.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQðȣܷ(HB), HB_, attr, key=6, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ðܸŵܷ, tmofferrem, tmofferrem, long, 12; + ðܸżܷ, tmbidrem, tmbidrem, long, 12; +ðܸŵ, pretmoffercha, pretmoffercha, long, 12; +ðܸż, pretmbidcha, pretmbidcha, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/HB__1.res b/ls_sample/sample_python/Res/HB__1.res new file mode 100644 index 0000000..cad0410 --- /dev/null +++ b/ls_sample/sample_python/Res/HB__1.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQðȣܷ(HB), HB_, attr, key=6, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ðܸŵܷ, tmofferrem, tmofferrem, long, 12; + ðܸżܷ, tmbidrem, tmbidrem, long, 12; +ðܸŵ, pretmoffercha, pretmoffercha, long, 12; +ðܸż, pretmbidcha, pretmbidcha, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/I5_.res b/ls_sample/sample_python/Res/I5_.res new file mode 100644 index 0000000..87a5e37 --- /dev/null +++ b/ls_sample/sample_python/Res/I5_.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP +.Feed, ڽETFǽðNAV(I5), I5_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ð, time, time, char, 8; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + ŷ, volume, volume, float, 12; + NAV, navdiff, navdiff, float, 9.2; + NAV, nav, nav, float, 9.2; + ϴ, navchange, navchange, float, 9.2; + , crate, crate, float, 9.2; + , grate, grate, float, 9.2; + , jisu, jisu, float, 8.2; + ϴ, jichange, jichange, float, 8.2; + ϴ, jirate, jirate, float, 8.2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/I5__1.res b/ls_sample/sample_python/Res/I5__1.res new file mode 100644 index 0000000..87a5e37 --- /dev/null +++ b/ls_sample/sample_python/Res/I5__1.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP +.Feed, ڽETFǽðNAV(I5), I5_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ð, time, time, char, 8; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + ŷ, volume, volume, float, 12; + NAV, navdiff, navdiff, float, 9.2; + NAV, nav, nav, float, 9.2; + ϴ, navchange, navchange, float, 9.2; + , crate, crate, float, 9.2; + , grate, grate, float, 9.2; + , jisu, jisu, float, 8.2; + ϴ, jichange, jichange, float, 8.2; + ϴ, jirate, jirate, float, 8.2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/IJ_.res b/ls_sample/sample_python/Res/IJ_.res new file mode 100644 index 0000000..5703d13 --- /dev/null +++ b/ls_sample/sample_python/Res/IJ_.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP +.Feed, (IJ), IJ_, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + ð, time, time, char, 6; + , jisu, jisu, float, 8.2; + ϴ񱸺, sign, sign, char, 1; + Ϻ, change, change, float, 8.2; + , drate, drate, float, 6.2; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 8; + ŷ, value, value, long, 8; + , upjo, upjo, long, 4; + , highjo, highjo, long, 4; + , unchgjo, unchgjo, long, 4; + ϶, lowjo, lowjo, long, 4; + , downjo, downjo, long, 4; + , upjrate, upjrate, float, 6.2; + ð, openjisu, openjisu, float, 8.2; + ðð, opentime, opentime, char, 6; + , highjisu, highjisu, float, 8.2; + ð, hightime, hightime, char, 6; + , lowjisu, lowjisu, float, 8.2; + ð, lowtime, lowtime, char, 6; + μż, frgsvolume, frgsvolume, long, 8; + ż, orgsvolume, orgsvolume, long, 8; + μżݾ, frgsvalue, frgsvalue, long, 10; + żݾ, orgsvalue, orgsvalue, long, 10; + ڵ, upcode, upcode, char, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/IJ__1.res b/ls_sample/sample_python/Res/IJ__1.res new file mode 100644 index 0000000..5703d13 --- /dev/null +++ b/ls_sample/sample_python/Res/IJ__1.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP +.Feed, (IJ), IJ_, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + ð, time, time, char, 6; + , jisu, jisu, float, 8.2; + ϴ񱸺, sign, sign, char, 1; + Ϻ, change, change, float, 8.2; + , drate, drate, float, 6.2; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 8; + ŷ, value, value, long, 8; + , upjo, upjo, long, 4; + , highjo, highjo, long, 4; + , unchgjo, unchgjo, long, 4; + ϶, lowjo, lowjo, long, 4; + , downjo, downjo, long, 4; + , upjrate, upjrate, float, 6.2; + ð, openjisu, openjisu, float, 8.2; + ðð, opentime, opentime, char, 6; + , highjisu, highjisu, float, 8.2; + ð, hightime, hightime, char, 6; + , lowjisu, lowjisu, float, 8.2; + ð, lowtime, lowtime, char, 6; + μż, frgsvolume, frgsvolume, long, 8; + ż, orgsvolume, orgsvolume, long, 8; + μżݾ, frgsvalue, frgsvalue, long, 10; + żݾ, orgsvalue, orgsvalue, long, 10; + ڵ, upcode, upcode, char, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/JC0.res b/ls_sample/sample_python/Res/JC0.res new file mode 100644 index 0000000..d874aad --- /dev/null +++ b/ls_sample/sample_python/Res/JC0.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļü(JC0), JC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ڵ, futcode, futcode, char, 8; + üð, chetime, chetime, char, 6; + ȣ, sign, sign, char, 1; + ϴ, change, change, long, 10; + , drate, drate, double, 6.2; + 簡, price, price, long, 10; + ð, open, open, long, 10; + , high, high, long, 10; + , low, low, long, 10; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 15; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, double, 9.2; + ŵȣ1, offerho1, offerho1, long, 10; + żȣ1, bidho1, bidho1, long, 10; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, double, 6.2; + ̷а, theoryprice, theoryprice, long, 8; + , kasis, kasis, double, 6.3; + BASIS, sbasis, sbasis, long, 6; + ̷BASIS, ibasis, ibasis, long, 6; + ̰, openyakcha, openyakcha, long, 8; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڻ簡, basprice, basprice, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +JC0 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/JC0_1.res b/ls_sample/sample_python/Res/JC0_1.res new file mode 100644 index 0000000..d874aad --- /dev/null +++ b/ls_sample/sample_python/Res/JC0_1.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļü(JC0), JC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ڵ, futcode, futcode, char, 8; + üð, chetime, chetime, char, 6; + ȣ, sign, sign, char, 1; + ϴ, change, change, long, 10; + , drate, drate, double, 6.2; + 簡, price, price, long, 10; + ð, open, open, long, 10; + , high, high, long, 10; + , low, low, long, 10; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 15; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, double, 9.2; + ŵȣ1, offerho1, offerho1, long, 10; + żȣ1, bidho1, bidho1, long, 10; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, double, 6.2; + ̷а, theoryprice, theoryprice, long, 8; + , kasis, kasis, double, 6.3; + BASIS, sbasis, sbasis, long, 6; + ̷BASIS, ibasis, ibasis, long, 6; + ̰, openyakcha, openyakcha, long, 8; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڻ簡, basprice, basprice, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +JC0 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/JD0.res b/ls_sample/sample_python/Res/JD0.res new file mode 100644 index 0000000..b5638fc --- /dev/null +++ b/ls_sample/sample_python/Res/JD0.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļǽðѰ(JD0), JD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, long, 10; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, long, 10; + ڵ , futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/JD0_1.res b/ls_sample/sample_python/Res/JD0_1.res new file mode 100644 index 0000000..b5638fc --- /dev/null +++ b/ls_sample/sample_python/Res/JD0_1.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļǽðѰ(JD0), JD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, long, 10; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, long, 10; + ڵ , futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/JH0.res b/ls_sample/sample_python/Res/JH0.res new file mode 100644 index 0000000..7fce153 --- /dev/null +++ b/ls_sample/sample_python/Res/JH0.res @@ -0,0 +1,80 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļȣ(JH0), JH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ڵ, futcode, futcode, char, 8; + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 10; + żȣ1, bidho1, bidho1, long, 10; + ŵȣ1, offerrem1, offerrem1, long, 7; + żȣ1, bidrem1, bidrem1, long, 7; + ŵȣǼ1, offercnt1, offercnt1, long, 5; + żȣǼ1, bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, long, 10; + żȣ2, bidho2, bidho2, long, 10; + ŵȣ2, offerrem2, offerrem2, long, 7; + żȣ2, bidrem2, bidrem2, long, 7; + ŵȣǼ2, offercnt2, offercnt2, long, 5; + żȣǼ2, bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, long, 10; + żȣ3, bidho3, bidho3, long, 10; + ŵȣ3, offerrem3, offerrem3, long, 7; + żȣ3, bidrem3, bidrem3, long, 7; + ŵȣǼ3, offercnt3, offercnt3, long, 5; + żȣǼ3, bidcnt3, bidcnt3, long, 5; + ŵȣ4, offerho4, offerho4, long, 10; + żȣ4, bidho4, bidho4, long, 10; + ŵȣ4, offerrem4, offerrem4, long, 7; + żȣ4, bidrem4, bidrem4, long, 7; + ŵȣǼ4, offercnt4, offercnt4, long, 5; + żȣǼ4, bidcnt4, bidcnt4, long, 5; + ŵȣ5, offerho5, offerho5, long, 10; + żȣ5, bidho5, bidho5, long, 10; + ŵȣ5, offerrem5, offerrem5, long, 7; + żȣ5, bidrem5, bidrem5, long, 7; + ŵȣǼ5, offercnt5, offercnt5, long, 5; + żȣǼ5, bidcnt5, bidcnt5, long, 5; + ŵȣ6, offerho6, offerho6, long, 10; + żȣ6, bidho6, bidho6, long, 10; + ŵȣ6, offerrem6, offerrem6, long, 7; + żȣ6, bidrem6, bidrem6, long, 7; + ŵȣǼ6, offercnt6, offercnt6, long, 5; + żȣǼ6, bidcnt6, bidcnt6, long, 5; + ŵȣ7, offerho7, offerho7, long, 10; + żȣ7, bidho7, bidho7, long, 10; + ŵȣ7, offerrem7, offerrem7, long, 7; + żȣ7, bidrem7, bidrem7, long, 7; + ŵȣǼ7, offercnt7, offercnt7, long, 5; + żȣǼ7, bidcnt7, bidcnt7, long, 5; + ŵȣ8, offerho8, offerho8, long, 10; + żȣ8, bidho8, bidho8, long, 10; + ŵȣ8, offerrem8, offerrem8, long, 7; + żȣ8, bidrem8, bidrem8, long, 7; + ŵȣǼ8, offercnt8, offercnt8, long, 5; + żȣǼ8, bidcnt8, bidcnt8, long, 5; + ŵȣ9, offerho9, offerho9, long, 10; + żȣ9, bidho9, bidho9, long, 10; + ŵȣ9, offerrem9, offerrem9, long, 7; + żȣ9, bidrem9, bidrem9, long, 7; + ŵȣǼ9, offercnt9, offercnt9, long, 5; + żȣǼ9, bidcnt9, bidcnt9, long, 5; + ŵȣ10, offerho10, offerho10, long, 10; + żȣ10, bidho10, bidho10, long, 10; + ŵȣ10, offerrem10, offerrem10, long, 7; + żȣ10, bidrem10, bidrem10, long, 7; + ŵȣǼ10, offercnt10, offercnt10, long, 5; + żȣǼ10, bidcnt10, bidcnt10, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 8; + żȣѼ, totbidrem, totbidrem, long, 8; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ϰȣ, danhochk, danhochk, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/JH0_1.res b/ls_sample/sample_python/Res/JH0_1.res new file mode 100644 index 0000000..7fce153 --- /dev/null +++ b/ls_sample/sample_python/Res/JH0_1.res @@ -0,0 +1,80 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļȣ(JH0), JH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ڵ, futcode, futcode, char, 8; + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 10; + żȣ1, bidho1, bidho1, long, 10; + ŵȣ1, offerrem1, offerrem1, long, 7; + żȣ1, bidrem1, bidrem1, long, 7; + ŵȣǼ1, offercnt1, offercnt1, long, 5; + żȣǼ1, bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, long, 10; + żȣ2, bidho2, bidho2, long, 10; + ŵȣ2, offerrem2, offerrem2, long, 7; + żȣ2, bidrem2, bidrem2, long, 7; + ŵȣǼ2, offercnt2, offercnt2, long, 5; + żȣǼ2, bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, long, 10; + żȣ3, bidho3, bidho3, long, 10; + ŵȣ3, offerrem3, offerrem3, long, 7; + żȣ3, bidrem3, bidrem3, long, 7; + ŵȣǼ3, offercnt3, offercnt3, long, 5; + żȣǼ3, bidcnt3, bidcnt3, long, 5; + ŵȣ4, offerho4, offerho4, long, 10; + żȣ4, bidho4, bidho4, long, 10; + ŵȣ4, offerrem4, offerrem4, long, 7; + żȣ4, bidrem4, bidrem4, long, 7; + ŵȣǼ4, offercnt4, offercnt4, long, 5; + żȣǼ4, bidcnt4, bidcnt4, long, 5; + ŵȣ5, offerho5, offerho5, long, 10; + żȣ5, bidho5, bidho5, long, 10; + ŵȣ5, offerrem5, offerrem5, long, 7; + żȣ5, bidrem5, bidrem5, long, 7; + ŵȣǼ5, offercnt5, offercnt5, long, 5; + żȣǼ5, bidcnt5, bidcnt5, long, 5; + ŵȣ6, offerho6, offerho6, long, 10; + żȣ6, bidho6, bidho6, long, 10; + ŵȣ6, offerrem6, offerrem6, long, 7; + żȣ6, bidrem6, bidrem6, long, 7; + ŵȣǼ6, offercnt6, offercnt6, long, 5; + żȣǼ6, bidcnt6, bidcnt6, long, 5; + ŵȣ7, offerho7, offerho7, long, 10; + żȣ7, bidho7, bidho7, long, 10; + ŵȣ7, offerrem7, offerrem7, long, 7; + żȣ7, bidrem7, bidrem7, long, 7; + ŵȣǼ7, offercnt7, offercnt7, long, 5; + żȣǼ7, bidcnt7, bidcnt7, long, 5; + ŵȣ8, offerho8, offerho8, long, 10; + żȣ8, bidho8, bidho8, long, 10; + ŵȣ8, offerrem8, offerrem8, long, 7; + żȣ8, bidrem8, bidrem8, long, 7; + ŵȣǼ8, offercnt8, offercnt8, long, 5; + żȣǼ8, bidcnt8, bidcnt8, long, 5; + ŵȣ9, offerho9, offerho9, long, 10; + żȣ9, bidho9, bidho9, long, 10; + ŵȣ9, offerrem9, offerrem9, long, 7; + żȣ9, bidrem9, bidrem9, long, 7; + ŵȣǼ9, offercnt9, offercnt9, long, 5; + żȣǼ9, bidcnt9, bidcnt9, long, 5; + ŵȣ10, offerho10, offerho10, long, 10; + żȣ10, bidho10, bidho10, long, 10; + ŵȣ10, offerrem10, offerrem10, long, 7; + żȣ10, bidrem10, bidrem10, long, 7; + ŵȣǼ10, offercnt10, offercnt10, long, 5; + żȣǼ10, bidcnt10, bidcnt10, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 8; + żȣѼ, totbidrem, totbidrem, long, 8; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ϰȣ, danhochk, danhochk, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/JIF.res b/ls_sample/sample_python/Res/JIF.res new file mode 100644 index 0000000..a675058 --- /dev/null +++ b/ls_sample/sample_python/Res/JIF.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, (JIF), JIF, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + 屸, jangubun, jangubun, char, 1; + end + OutBlock,,output; + begin + 屸, jangubun, jangubun, char, 1; + , jstatus, jstatus, char, 2; + end + END_DATA_MAP +END_FUNCTION_MAP +JIF \ No newline at end of file diff --git a/ls_sample/sample_python/Res/JIF_1.res b/ls_sample/sample_python/Res/JIF_1.res new file mode 100644 index 0000000..a675058 --- /dev/null +++ b/ls_sample/sample_python/Res/JIF_1.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, (JIF), JIF, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + 屸, jangubun, jangubun, char, 1; + end + OutBlock,,output; + begin + 屸, jangubun, jangubun, char, 1; + , jstatus, jstatus, char, 2; + end + END_DATA_MAP +END_FUNCTION_MAP +JIF \ No newline at end of file diff --git a/ls_sample/sample_python/Res/JX0.res b/ls_sample/sample_python/Res/JX0.res new file mode 100644 index 0000000..05748b7 --- /dev/null +++ b/ls_sample/sample_python/Res/JX0.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļȮ(JX0), JX0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + Ѵܰ , upstep , upstep , char, 2; + Ѵܰ , dnstep , dnstep , char, 2; + Ѱ , uplmtprice , uplmtprice , long, 10; + Ѱ , dnlmtprice , dnlmtprice , long, 10; + ڵ , futcode , futcode , char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/JX0_1.res b/ls_sample/sample_python/Res/JX0_1.res new file mode 100644 index 0000000..05748b7 --- /dev/null +++ b/ls_sample/sample_python/Res/JX0_1.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļȮ(JX0), JX0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + Ѵܰ , upstep , upstep , char, 2; + Ѵܰ , dnstep , dnstep , char, 2; + Ѱ , uplmtprice , uplmtprice , long, 10; + Ѱ , dnlmtprice , dnlmtprice , long, 10; + ڵ , futcode , futcode , char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/K1_.res b/ls_sample/sample_python/Res/K1_.res new file mode 100644 index 0000000..d1461d3 --- /dev/null +++ b/ls_sample/sample_python/Res/K1_.res @@ -0,0 +1,93 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIŷ(K1), K1_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵǻڵ1 , offerno1, offerno1, char, 3; + żǻڵ1 , bidno1, bidno1, char, 3; + ŵȸ1 , offertrad1, offertrad1, char, 6; + żȸ1 , bidtrad1, bidtrad1, char, 6; + ŵŷ1, tradmdvol1, tradmdvol1, long, 10; + żŷ1, tradmsvol1, tradmsvol1, long, 10; + ŵŷ1, tradmdrate1, tradmdrate1, float, 6.2; + ŵŷ1, tradmsrate1, tradmsrate1, float, 6.2; + ŵŷ1, tradmdcha1, tradmdcha1, long, 10; + żŷ1, tradmscha1, tradmscha1, long, 10; + ŵǻڵ2 , offerno2, offerno2, char, 3; + żǻڵ2 , bidno2, bidno2, char, 3; + ŵȸ2 , offertrad2, offertrad2, char, 6; + żȸ2 , bidtrad2, bidtrad2, char, 6; + ŵŷ2, tradmdvol2, tradmdvol2, long, 10; + żŷ2, tradmsvol2, tradmsvol2, long, 10; + ŵŷ2, tradmdrate2, tradmdrate2, float, 6.2; + żŷ2, tradmsrate2, tradmsrate2, float, 6.2; + ŵŷ2, tradmdcha2, tradmdcha2, long, 10; + żŷ2, tradmscha2, tradmscha2, long, 10; + ŵǻڵ3 , offerno3, offerno3, char, 3; + żǻڵ3 , bidno3, bidno3, char, 3; + ŵȸ3 , offertrad3, offertrad3, char, 6; + żȸ3 , bidtrad3, bidtrad3, char, 6; + ŵŷ3, tradmdvol3, tradmdvol3, long, 10; + żŷ3, tradmsvol3, tradmsvol3, long, 10; + ŵŷ3, tradmdrate3, tradmdrate3, float, 6.2; + żŷ3, tradmsrate3, tradmsrate3, float, 6.2; + ŵŷ3, tradmdcha3, tradmdcha3, long, 10; + żŷ3, tradmscha3, tradmscha3, long, 10; + ŵǻڵ4 , offerno4, offerno4, char, 3; + żǻڵ4 , bidno4, bidno4, char, 3; + ŵȸ4 , offertrad4, offertrad4, char, 6; + żȸ4 , bidtrad4, bidtrad4, char, 6; + ŵŷ4, tradmdvol4, tradmdvol4, long, 10; + żŷ4, tradmsvol4, tradmsvol4, long, 10; + ŵŷ4, tradmdrate4, tradmdrate4, float, 6.2; + żŷ4, tradmsrate4, tradmsrate4, float, 6.2; + ŵŷ4, tradmdcha4, tradmdcha4, long, 10; + żŷ4, tradmscha4, tradmscha4, long, 10; + ŵǻڵ5 , offerno5, offerno5, char, 3; + żǻڵ5 , bidno5, bidno5, char, 3; + ŵȸ5 , offertrad5, offertrad5, char, 6; + żȸ5 , bidtrad5, bidtrad5, char, 6; + ŵŷ5, tradmdvol5, tradmdvol5, long, 10; + żŷ5, tradmsvol5, tradmsvol5, long, 10; + ŵŷ5, tradmdrate5, tradmdrate5, float, 6.2; + żŷ5, tradmsrate5, tradmsrate5, float, 6.2; + ŵŷ5, tradmdcha5, tradmdcha5, long, 10; + żŷ5, tradmscha5, tradmscha5, long, 10; + ܱǻŵհ, ftradmdvol, ftradmdvol, char, 10; + ܱǻżհ, ftradmsvol, ftradmsvol, char, 10; +ܱǻŵŷ, ftradmdrate, ftradmdrate, float, 6.2; +ܱǻżŷ, ftradmsrate, ftradmsrate, float, 6.2; +ܱǻŵŷ, ftradmdcha, ftradmdcha, char, 10; +ܱǻżŷ, ftradmscha, ftradmscha, char, 10; + ڵ, shcode, shcode, char, 6; + ŵŷ1, tradmdval1, tradmdval1, long, 15; + żŷ1, tradmsval1, tradmsval1, long, 15; + ŵմܰ1, tradmdavg1, tradmdavg1, long, 7; + żմܰ1, tradmsavg1, tradmsavg1, long, 7; + ŵŷ2, tradmdval2, tradmdval2, long, 15; + żŷ2, tradmsval2, tradmsval2, long, 15; + ŵմܰ2, tradmdavg2, tradmdavg2, long, 7; + żմܰ2, tradmsavg2, tradmsavg2, long, 7; + ŵŷ3, tradmdval3, tradmdval3, long, 15; + żŷ3, tradmsval3, tradmsval3, long, 15; + ŵմܰ3, tradmdavg3, tradmdavg3, long, 7; + żմܰ3, tradmsavg3, tradmsavg3, long, 7; + ŵŷ4, tradmdval4, tradmdval4, long, 15; + żŷ4, tradmsval4, tradmsval4, long, 15; + ŵմܰ4, tradmdavg4, tradmdavg4, long, 7; + żմܰ4, tradmsavg4, tradmsavg4, long, 7; + ŵŷ5, tradmdval5, tradmdval5, long, 15; + żŷ5, tradmsval5, tradmsval5, long, 15; + ŵմܰ5, tradmdavg5, tradmdavg5, long, 7; + żմܰ5, tradmsavg5, tradmsavg5, long, 7; +ܱǻŵŷ, ftradmdval, ftradmdval, long, 15; +ܱǻżŷ, ftradmsval, ftradmsval, long, 15; +ܱǻŵմܰ, ftradmdavg, ftradmdavg, long, 7; +ܱǻżմܰ, ftradmsavg, ftradmsavg, long, 7; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/K1__1.res b/ls_sample/sample_python/Res/K1__1.res new file mode 100644 index 0000000..d1461d3 --- /dev/null +++ b/ls_sample/sample_python/Res/K1__1.res @@ -0,0 +1,93 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIŷ(K1), K1_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵǻڵ1 , offerno1, offerno1, char, 3; + żǻڵ1 , bidno1, bidno1, char, 3; + ŵȸ1 , offertrad1, offertrad1, char, 6; + żȸ1 , bidtrad1, bidtrad1, char, 6; + ŵŷ1, tradmdvol1, tradmdvol1, long, 10; + żŷ1, tradmsvol1, tradmsvol1, long, 10; + ŵŷ1, tradmdrate1, tradmdrate1, float, 6.2; + ŵŷ1, tradmsrate1, tradmsrate1, float, 6.2; + ŵŷ1, tradmdcha1, tradmdcha1, long, 10; + żŷ1, tradmscha1, tradmscha1, long, 10; + ŵǻڵ2 , offerno2, offerno2, char, 3; + żǻڵ2 , bidno2, bidno2, char, 3; + ŵȸ2 , offertrad2, offertrad2, char, 6; + żȸ2 , bidtrad2, bidtrad2, char, 6; + ŵŷ2, tradmdvol2, tradmdvol2, long, 10; + żŷ2, tradmsvol2, tradmsvol2, long, 10; + ŵŷ2, tradmdrate2, tradmdrate2, float, 6.2; + żŷ2, tradmsrate2, tradmsrate2, float, 6.2; + ŵŷ2, tradmdcha2, tradmdcha2, long, 10; + żŷ2, tradmscha2, tradmscha2, long, 10; + ŵǻڵ3 , offerno3, offerno3, char, 3; + żǻڵ3 , bidno3, bidno3, char, 3; + ŵȸ3 , offertrad3, offertrad3, char, 6; + żȸ3 , bidtrad3, bidtrad3, char, 6; + ŵŷ3, tradmdvol3, tradmdvol3, long, 10; + żŷ3, tradmsvol3, tradmsvol3, long, 10; + ŵŷ3, tradmdrate3, tradmdrate3, float, 6.2; + żŷ3, tradmsrate3, tradmsrate3, float, 6.2; + ŵŷ3, tradmdcha3, tradmdcha3, long, 10; + żŷ3, tradmscha3, tradmscha3, long, 10; + ŵǻڵ4 , offerno4, offerno4, char, 3; + żǻڵ4 , bidno4, bidno4, char, 3; + ŵȸ4 , offertrad4, offertrad4, char, 6; + żȸ4 , bidtrad4, bidtrad4, char, 6; + ŵŷ4, tradmdvol4, tradmdvol4, long, 10; + żŷ4, tradmsvol4, tradmsvol4, long, 10; + ŵŷ4, tradmdrate4, tradmdrate4, float, 6.2; + żŷ4, tradmsrate4, tradmsrate4, float, 6.2; + ŵŷ4, tradmdcha4, tradmdcha4, long, 10; + żŷ4, tradmscha4, tradmscha4, long, 10; + ŵǻڵ5 , offerno5, offerno5, char, 3; + żǻڵ5 , bidno5, bidno5, char, 3; + ŵȸ5 , offertrad5, offertrad5, char, 6; + żȸ5 , bidtrad5, bidtrad5, char, 6; + ŵŷ5, tradmdvol5, tradmdvol5, long, 10; + żŷ5, tradmsvol5, tradmsvol5, long, 10; + ŵŷ5, tradmdrate5, tradmdrate5, float, 6.2; + żŷ5, tradmsrate5, tradmsrate5, float, 6.2; + ŵŷ5, tradmdcha5, tradmdcha5, long, 10; + żŷ5, tradmscha5, tradmscha5, long, 10; + ܱǻŵհ, ftradmdvol, ftradmdvol, char, 10; + ܱǻżհ, ftradmsvol, ftradmsvol, char, 10; +ܱǻŵŷ, ftradmdrate, ftradmdrate, float, 6.2; +ܱǻżŷ, ftradmsrate, ftradmsrate, float, 6.2; +ܱǻŵŷ, ftradmdcha, ftradmdcha, char, 10; +ܱǻżŷ, ftradmscha, ftradmscha, char, 10; + ڵ, shcode, shcode, char, 6; + ŵŷ1, tradmdval1, tradmdval1, long, 15; + żŷ1, tradmsval1, tradmsval1, long, 15; + ŵմܰ1, tradmdavg1, tradmdavg1, long, 7; + żմܰ1, tradmsavg1, tradmsavg1, long, 7; + ŵŷ2, tradmdval2, tradmdval2, long, 15; + żŷ2, tradmsval2, tradmsval2, long, 15; + ŵմܰ2, tradmdavg2, tradmdavg2, long, 7; + żմܰ2, tradmsavg2, tradmsavg2, long, 7; + ŵŷ3, tradmdval3, tradmdval3, long, 15; + żŷ3, tradmsval3, tradmsval3, long, 15; + ŵմܰ3, tradmdavg3, tradmdavg3, long, 7; + żմܰ3, tradmsavg3, tradmsavg3, long, 7; + ŵŷ4, tradmdval4, tradmdval4, long, 15; + żŷ4, tradmsval4, tradmsval4, long, 15; + ŵմܰ4, tradmdavg4, tradmdavg4, long, 7; + żմܰ4, tradmsavg4, tradmsavg4, long, 7; + ŵŷ5, tradmdval5, tradmdval5, long, 15; + żŷ5, tradmsval5, tradmsval5, long, 15; + ŵմܰ5, tradmdavg5, tradmdavg5, long, 7; + żմܰ5, tradmsavg5, tradmsavg5, long, 7; +ܱǻŵŷ, ftradmdval, ftradmdval, long, 15; +ܱǻżŷ, ftradmsval, ftradmsval, long, 15; +ܱǻŵմܰ, ftradmdavg, ftradmdavg, long, 7; +ܱǻżմܰ, ftradmsavg, ftradmsavg, long, 7; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/K3_.res b/ls_sample/sample_python/Res/K3_.res new file mode 100644 index 0000000..b830393 --- /dev/null +++ b/ls_sample/sample_python/Res/K3_.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQü(K3), K3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + հ, w_avrg, w_avrg, long, 8; + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + , status, status, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/K3__1.res b/ls_sample/sample_python/Res/K3__1.res new file mode 100644 index 0000000..b830393 --- /dev/null +++ b/ls_sample/sample_python/Res/K3__1.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQü(K3), K3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + հ, w_avrg, w_avrg, long, 8; + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + , status, status, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/KH_.res b/ls_sample/sample_python/Res/KH_.res new file mode 100644 index 0000000..0d59ba7 --- /dev/null +++ b/ls_sample/sample_python/Res/KH_.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQα׷Ÿ(KH), KH_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, long, 1; + ϴ, change, change, long, 8; + ŷ, volume, volume, long, 10; + , drate, drate, float, 6.2; + + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 12; + ͸żȣ ܷ, cshrem, cshrem, long, 12; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 12; + ͸żȣ ܷ, bshrem, bshrem, long, 12; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 12; + ͸żȣ , cshvolume, cshvolume, long, 12; + ͸ŵȣ , bdhvolume, bdhvolume, long, 12; + ͸żȣ , bshvolume, bshvolume, long, 12; + + üŵŹü, dwcvolume, dwcvolume, long, 12; + üżŹü, swcvolume, swcvolume, long, 12; + üŵڱü, djcvolume, djcvolume, long, 12; + üżڱü, sjcvolume, sjcvolume, long, 12; + + üŵü, tdvolume, tdvolume, long, 12; + üżü, tsvolume, tsvolume, long, 12; + üż , tvol, tvol, long, 12; + + üŵŹüݾ, dwcvalue, dwcvalue, long, 15; + üżŹüݾ, swcvalue, swcvalue, long, 15; + üŵڱüݾ, djcvalue, djcvalue, long, 15; + üżڱüݾ, sjcvalue, sjcvalue, long, 15; + + üŵüݾ, tdvalue, tdvalue, long, 15; + üżüݾ, tsvalue, tsvalue, long, 15; + üż ݾ, tval, tval, long, 15; + + ŵ ü, pdgvolume, pdgvolume, long, 12; + ż ü, psgvolume, psgvolume, long, 12; + + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/KH__1.res b/ls_sample/sample_python/Res/KH__1.res new file mode 100644 index 0000000..0d59ba7 --- /dev/null +++ b/ls_sample/sample_python/Res/KH__1.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQα׷Ÿ(KH), KH_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, long, 1; + ϴ, change, change, long, 8; + ŷ, volume, volume, long, 10; + , drate, drate, float, 6.2; + + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 12; + ͸żȣ ܷ, cshrem, cshrem, long, 12; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 12; + ͸żȣ ܷ, bshrem, bshrem, long, 12; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 12; + ͸żȣ , cshvolume, cshvolume, long, 12; + ͸ŵȣ , bdhvolume, bdhvolume, long, 12; + ͸żȣ , bshvolume, bshvolume, long, 12; + + üŵŹü, dwcvolume, dwcvolume, long, 12; + üżŹü, swcvolume, swcvolume, long, 12; + üŵڱü, djcvolume, djcvolume, long, 12; + üżڱü, sjcvolume, sjcvolume, long, 12; + + üŵü, tdvolume, tdvolume, long, 12; + üżü, tsvolume, tsvolume, long, 12; + üż , tvol, tvol, long, 12; + + üŵŹüݾ, dwcvalue, dwcvalue, long, 15; + üżŹüݾ, swcvalue, swcvalue, long, 15; + üŵڱüݾ, djcvalue, djcvalue, long, 15; + üżڱüݾ, sjcvalue, sjcvalue, long, 15; + + üŵüݾ, tdvalue, tdvalue, long, 15; + üżüݾ, tsvalue, tsvalue, long, 15; + üż ݾ, tval, tval, long, 15; + + ŵ ü, pdgvolume, pdgvolume, long, 12; + ż ü, psgvolume, psgvolume, long, 12; + + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/KM_.res b/ls_sample/sample_python/Res/KM_.res new file mode 100644 index 0000000..1d2f725 --- /dev/null +++ b/ls_sample/sample_python/Res/KM_.res @@ -0,0 +1,119 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQα׷Ÿü(KM), KM_, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + а, gubun, gubun, char, 1; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 6; + ͸żȣ ܷ, cshrem, cshrem, long, 6; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 6; + ͸żȣ ܷ, bshrem, bshrem, long, 6; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 6; + ͸żȣ , cshvolume, cshvolume, long, 6; + ͸ŵȣ , bdhvolume, bdhvolume, long, 6; + ͸żȣ , bshvolume, bshvolume, long, 6; + + ͸ŵŹü, cdwvolume, cdwvolume, long, 6; + ͸ŵڱü, cdjvolume, cdjvolume, long, 6; + ͸żŹü, cswvolume, cswvolume, long, 6; + ͸żڱü, csjvolume, csjvolume, long, 6; + Źż , cwvol, cwvol, long, 6; + ڱż , cjvol, cjvol, long, 6; + + ͸ŵŹü, bdwvolume, bdwvolume, long, 6; + ͸ŵڱü, bdjvolume, bdjvolume, long, 6; + ͸żŹü, bswvolume, bswvolume, long, 6; + ͸żڱü, bsjvolume, bsjvolume, long, 6; + Źż , bwvol, bwvol, long, 6; + ڱż , bjvol, bjvol, long, 6; + + üŵŹü, dwvolume, dwvolume, long, 6; + üżŹü, swvolume, swvolume, long, 6; + üŹż , wvol, wvol, long, 6; + üŵڱü, djvolume, djvolume, long, 6; + üżڱü, sjvolume, sjvolume, long, 6; + üڱż , jvol, jvol, long, 6; + + ͸ŵŹüݾ, cdwvalue, cdwvalue, long, 8; + ͸ŵڱüݾ, cdjvalue, cdjvalue, long, 8; + ͸żŹüݾ, cswvalue, cswvalue, long, 8; + ͸żڱüݾ, csjvalue, csjvalue, long, 8; + Źż ݾ, cwval, cwval, long, 8; + ڱż ݾ, cjval, cjval, long, 8; + + ͸ŵŹüݾ, bdwvalue, bdwvalue, long, 8; + ͸ŵڱüݾ, bdjvalue, bdjvalue, long, 8; + ͸żŹüݾ, bswvalue, bswvalue, long, 8; + ͸żڱüݾ, bsjvalue, bsjvalue, long, 8; + Źż ݾ, bwval, bwval, long, 8; + ڱż ݾ, bjval, bjval, long, 8; + + üŵŹüݾ, dwvalue, dwvalue, long, 8; + üżŹüݾ, swvalue, swvalue, long, 8; + üŹż ݾ, wval, wval, long, 8; + üŵڱüݾ, djvalue, djvalue, long, 8; + üżڱüݾ, sjvalue, sjvalue, long, 8; + üڱż ݾ, jval, jval, long, 8; + + KOSDAQ50 , k50jisu, k50jisu, float, 6.2; + KOSDAQ50 ϴ񱸺, k50sign, k50sign, char, 1; + KOSDAQ50 ϴ, change, change, float, 6.2; + KOSDAQ50 ̽ý, k50basis, k50basis, float, 4.2; + + ͸ŵüհ, cdvolume, cdvolume, long, 6; + ͸żüհ, csvolume, csvolume, long, 6; + ͼż հ, cvol, cvol, long, 6; + + ͸ŵüհ, bdvolume, bdvolume, long, 6; + ͸żüհ, bsvolume, bsvolume, long, 6; + ͼż հ, bvol, bvol, long, 6; + + üŵüհ, tdvolume, tdvolume, long, 6; + üżüհ, tsvolume, tsvolume, long, 6; + üż հ, tvol, tvol, long, 6; + + ͸ŵüݾհ, cdvalue, cdvalue, long, 8; + ͸żüݾհ, csvalue, csvalue, long, 8; + ͼż ݾհ, cval, cval, long, 8; + + ͸ŵüݾհ, bdvalue, bdvalue, long, 8; + ͸żüݾհ, bsvalue, bsvalue, long, 8; + ͼż ݾհ, bval, bval, long, 8; + + üŵüݾհ, tdvalue, tdvalue, long, 8; + üżüݾհ, tsvalue, tsvalue, long, 8; + üż ݾհ, tval, tval, long, 8; + + ͸ŵü, p_cdvolcha, p_cdvolcha, long, 6; + ͸żü, p_csvolcha, p_csvolcha, long, 6; + ͼż , p_cvolcha, p_cvolcha, long, 6; + + ͸ŵü, p_bdvolcha, p_bdvolcha, long, 6; + ͸żü, p_bsvolcha, p_bsvolcha, long, 6; + ͼż , p_bvolcha, p_bvolcha, long, 6; + + üŵü, p_tdvolcha, p_tdvolcha, long, 6; + üżü, p_tsvolcha, p_tsvolcha, long, 6; + üż , p_tvolcha, p_tvolcha, long, 6; + + ͸ŵüݾ, p_cdvalcha, p_cdvalcha, long, 8; + ͸żüݾ, p_csvalcha, p_csvalcha, long, 8; + ͼż ݾ, p_cvalcha, p_cvalcha, long, 8; + + ͸ŵüݾ, p_bdvalcha, p_bdvalcha, long, 8; + ͸żüݾ, p_bsvalcha, p_bsvalcha, long, 8; + ͼż ݾ, p_bvalcha, p_bvalcha, long, 8; + + üŵüݾ, p_tdvalcha, p_tdvalcha, long, 8; + üżüݾ, p_tsvalcha, p_tsvalcha, long, 8; + üż ݾ, p_tvalcha, p_tvalcha, long, 8; + + а, gubun, gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/KM__1.res b/ls_sample/sample_python/Res/KM__1.res new file mode 100644 index 0000000..1d2f725 --- /dev/null +++ b/ls_sample/sample_python/Res/KM__1.res @@ -0,0 +1,119 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQα׷Ÿü(KM), KM_, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + а, gubun, gubun, char, 1; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 6; + ͸żȣ ܷ, cshrem, cshrem, long, 6; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 6; + ͸żȣ ܷ, bshrem, bshrem, long, 6; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 6; + ͸żȣ , cshvolume, cshvolume, long, 6; + ͸ŵȣ , bdhvolume, bdhvolume, long, 6; + ͸żȣ , bshvolume, bshvolume, long, 6; + + ͸ŵŹü, cdwvolume, cdwvolume, long, 6; + ͸ŵڱü, cdjvolume, cdjvolume, long, 6; + ͸żŹü, cswvolume, cswvolume, long, 6; + ͸żڱü, csjvolume, csjvolume, long, 6; + Źż , cwvol, cwvol, long, 6; + ڱż , cjvol, cjvol, long, 6; + + ͸ŵŹü, bdwvolume, bdwvolume, long, 6; + ͸ŵڱü, bdjvolume, bdjvolume, long, 6; + ͸żŹü, bswvolume, bswvolume, long, 6; + ͸żڱü, bsjvolume, bsjvolume, long, 6; + Źż , bwvol, bwvol, long, 6; + ڱż , bjvol, bjvol, long, 6; + + üŵŹü, dwvolume, dwvolume, long, 6; + üżŹü, swvolume, swvolume, long, 6; + üŹż , wvol, wvol, long, 6; + üŵڱü, djvolume, djvolume, long, 6; + üżڱü, sjvolume, sjvolume, long, 6; + üڱż , jvol, jvol, long, 6; + + ͸ŵŹüݾ, cdwvalue, cdwvalue, long, 8; + ͸ŵڱüݾ, cdjvalue, cdjvalue, long, 8; + ͸żŹüݾ, cswvalue, cswvalue, long, 8; + ͸żڱüݾ, csjvalue, csjvalue, long, 8; + Źż ݾ, cwval, cwval, long, 8; + ڱż ݾ, cjval, cjval, long, 8; + + ͸ŵŹüݾ, bdwvalue, bdwvalue, long, 8; + ͸ŵڱüݾ, bdjvalue, bdjvalue, long, 8; + ͸żŹüݾ, bswvalue, bswvalue, long, 8; + ͸żڱüݾ, bsjvalue, bsjvalue, long, 8; + Źż ݾ, bwval, bwval, long, 8; + ڱż ݾ, bjval, bjval, long, 8; + + üŵŹüݾ, dwvalue, dwvalue, long, 8; + üżŹüݾ, swvalue, swvalue, long, 8; + üŹż ݾ, wval, wval, long, 8; + üŵڱüݾ, djvalue, djvalue, long, 8; + üżڱüݾ, sjvalue, sjvalue, long, 8; + üڱż ݾ, jval, jval, long, 8; + + KOSDAQ50 , k50jisu, k50jisu, float, 6.2; + KOSDAQ50 ϴ񱸺, k50sign, k50sign, char, 1; + KOSDAQ50 ϴ, change, change, float, 6.2; + KOSDAQ50 ̽ý, k50basis, k50basis, float, 4.2; + + ͸ŵüհ, cdvolume, cdvolume, long, 6; + ͸żüհ, csvolume, csvolume, long, 6; + ͼż հ, cvol, cvol, long, 6; + + ͸ŵüհ, bdvolume, bdvolume, long, 6; + ͸żüհ, bsvolume, bsvolume, long, 6; + ͼż հ, bvol, bvol, long, 6; + + üŵüհ, tdvolume, tdvolume, long, 6; + üżüհ, tsvolume, tsvolume, long, 6; + üż հ, tvol, tvol, long, 6; + + ͸ŵüݾհ, cdvalue, cdvalue, long, 8; + ͸żüݾհ, csvalue, csvalue, long, 8; + ͼż ݾհ, cval, cval, long, 8; + + ͸ŵüݾհ, bdvalue, bdvalue, long, 8; + ͸żüݾհ, bsvalue, bsvalue, long, 8; + ͼż ݾհ, bval, bval, long, 8; + + üŵüݾհ, tdvalue, tdvalue, long, 8; + üżüݾհ, tsvalue, tsvalue, long, 8; + üż ݾհ, tval, tval, long, 8; + + ͸ŵü, p_cdvolcha, p_cdvolcha, long, 6; + ͸żü, p_csvolcha, p_csvolcha, long, 6; + ͼż , p_cvolcha, p_cvolcha, long, 6; + + ͸ŵü, p_bdvolcha, p_bdvolcha, long, 6; + ͸żü, p_bsvolcha, p_bsvolcha, long, 6; + ͼż , p_bvolcha, p_bvolcha, long, 6; + + üŵü, p_tdvolcha, p_tdvolcha, long, 6; + üżü, p_tsvolcha, p_tsvolcha, long, 6; + üż , p_tvolcha, p_tvolcha, long, 6; + + ͸ŵüݾ, p_cdvalcha, p_cdvalcha, long, 8; + ͸żüݾ, p_csvalcha, p_csvalcha, long, 8; + ͼż ݾ, p_cvalcha, p_cvalcha, long, 8; + + ͸ŵüݾ, p_bdvalcha, p_bdvalcha, long, 8; + ͸żüݾ, p_bsvalcha, p_bsvalcha, long, 8; + ͼż ݾ, p_bvalcha, p_bvalcha, long, 8; + + üŵüݾ, p_tdvalcha, p_tdvalcha, long, 8; + üżüݾ, p_tsvalcha, p_tsvalcha, long, 8; + üż ݾ, p_tvalcha, p_tvalcha, long, 8; + + а, gubun, gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/KS_.res b/ls_sample/sample_python/Res/KS_.res new file mode 100644 index 0000000..e75ed30 --- /dev/null +++ b/ls_sample/sample_python/Res/KS_.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQ켱ȣ(KS), KS_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/KS__1.res b/ls_sample/sample_python/Res/KS__1.res new file mode 100644 index 0000000..e75ed30 --- /dev/null +++ b/ls_sample/sample_python/Res/KS__1.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQ켱ȣ(KS), KS_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/MK2.res b/ls_sample/sample_python/Res/MK2.res new file mode 100644 index 0000000..ffab240 --- /dev/null +++ b/ls_sample/sample_python/Res/MK2.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, US(MK2), MK2, attr, key=16, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ɺڵ, symbol, symbol, char, 16; + end + OutBlock,,output; + begin + , date, date, char, 8; + ð, time, time, char, 6; + ѱ, kodate, kodate, char, 8; + ѱð, kotime, kotime, char, 6; + ð, open, open, float, 9.2; + , high, high, float, 9.2; + , low, low, float, 9.2; + 簡, price, price, float, 9.2; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, float, 9.2; + , uprate, uprate, float, 9.2; + żȣ, bidho, bidho, float, 9.2; + żܷ, bidrem, bidrem, long, 9; + ŵȣ, offerho, offerho, float, 9.2; + ŵܷ, offerrem, offerrem, long, 9; + ŷ, volume, volume, float, 12.0; + ɹ, xsymbol, xsymbol, char, 16; + üŷ, cvolume, cvolume, float, 8.0; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/MK2_1.res b/ls_sample/sample_python/Res/MK2_1.res new file mode 100644 index 0000000..ffab240 --- /dev/null +++ b/ls_sample/sample_python/Res/MK2_1.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, US(MK2), MK2, attr, key=16, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ɺڵ, symbol, symbol, char, 16; + end + OutBlock,,output; + begin + , date, date, char, 8; + ð, time, time, char, 6; + ѱ, kodate, kodate, char, 8; + ѱð, kotime, kotime, char, 6; + ð, open, open, float, 9.2; + , high, high, float, 9.2; + , low, low, float, 9.2; + 簡, price, price, float, 9.2; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, float, 9.2; + , uprate, uprate, float, 9.2; + żȣ, bidho, bidho, float, 9.2; + żܷ, bidrem, bidrem, long, 9; + ŵȣ, offerho, offerho, float, 9.2; + ŵܷ, offerrem, offerrem, long, 9; + ŷ, volume, volume, float, 12.0; + ɹ, xsymbol, xsymbol, char, 16; + üŷ, cvolume, cvolume, float, 8.0; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/MMDAQ91200.res b/ls_sample/sample_python/Res/MMDAQ91200.res new file mode 100644 index 0000000..95439e4 --- /dev/null +++ b/ls_sample/sample_python/Res/MMDAQ91200.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP + .Func,Ļǰűȸ,MMDAQ91200,SERVICE=MMDAQ91200,headtype=B,CREATOR=ڰ,CREDATE=2022/04/18 11:39:57; + BEGIN_DATA_MAP + MMDAQ91200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ߺзڵ, IsuMdclssCode, IsuMdclssCode, char, 2; + end + MMDAQ91200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ߺзڵ, IsuMdclssCode, IsuMdclssCode, char, 2; + end + MMDAQ91200OutBlock2,Out(*EMPTY*),output,occurs; + begin + Һзڵ, IsuSmclssCode, IsuSmclssCode, char, 3; + ߺзڵ, IsuMdclssCode, IsuMdclssCode, char, 2; + ߺз, IsuLrgMdclssNm, IsuLrgMdclssNm, char, 40; + ߼Һз, IsuLrgMidSmclssNm, IsuLrgMidSmclssNm, char, 40; + ѱ, ShtnHanglIsuNm, ShtnHanglIsuNm, char, 40; + Źű, CsgnMgnrt, CsgnMgnrt, double, 26.9; + ű, MaintMgnrt, MaintMgnrt, double, 26.9; + ű, MnyMgnrt, MnyMgnrt, double, 26.9; + ܿϼ, RmndDays, RmndDays, long, 6; + 1ֹű, OnePrcntrOrdMgn, OnePrcntrOrdMgn, long, 17; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/MMDAQ91200_1.res b/ls_sample/sample_python/Res/MMDAQ91200_1.res new file mode 100644 index 0000000..95439e4 --- /dev/null +++ b/ls_sample/sample_python/Res/MMDAQ91200_1.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP + .Func,Ļǰűȸ,MMDAQ91200,SERVICE=MMDAQ91200,headtype=B,CREATOR=ڰ,CREDATE=2022/04/18 11:39:57; + BEGIN_DATA_MAP + MMDAQ91200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ߺзڵ, IsuMdclssCode, IsuMdclssCode, char, 2; + end + MMDAQ91200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ߺзڵ, IsuMdclssCode, IsuMdclssCode, char, 2; + end + MMDAQ91200OutBlock2,Out(*EMPTY*),output,occurs; + begin + Һзڵ, IsuSmclssCode, IsuSmclssCode, char, 3; + ߺзڵ, IsuMdclssCode, IsuMdclssCode, char, 2; + ߺз, IsuLrgMdclssNm, IsuLrgMdclssNm, char, 40; + ߼Һз, IsuLrgMidSmclssNm, IsuLrgMidSmclssNm, char, 40; + ѱ, ShtnHanglIsuNm, ShtnHanglIsuNm, char, 40; + Źű, CsgnMgnrt, CsgnMgnrt, double, 26.9; + ű, MaintMgnrt, MaintMgnrt, double, 26.9; + ű, MnyMgnrt, MnyMgnrt, double, 26.9; + ܿϼ, RmndDays, RmndDays, long, 6; + 1ֹű, OnePrcntrOrdMgn, OnePrcntrOrdMgn, long, 17; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/NWS.res b/ls_sample/sample_python/Res/NWS.res new file mode 100644 index 0000000..d6d43aa --- /dev/null +++ b/ls_sample/sample_python/Res/NWS.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ǽð Ŷ(NWS), NWS, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, nwcode, nwcode, char, 6; + end + OutBlock,,output; + begin + ¥, date, date, char, 8; + ð, time, time, char, 6; + , id, id, char, 2; + Ű, realkey, realkey, char, 24; + , title, title, char, 300; + ڵ, code, code, char, 240; + BODY, bodysize, bodysize, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/NWS_1.res b/ls_sample/sample_python/Res/NWS_1.res new file mode 100644 index 0000000..d6d43aa --- /dev/null +++ b/ls_sample/sample_python/Res/NWS_1.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ǽð Ŷ(NWS), NWS, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, nwcode, nwcode, char, 6; + end + OutBlock,,output; + begin + ¥, date, date, char, 8; + ð, time, time, char, 6; + , id, id, char, 2; + Ű, realkey, realkey, char, 24; + , title, title, char, 300; + ڵ, code, code, char, 240; + BODY, bodysize, bodysize, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/O01.res b/ls_sample/sample_python/Res/O01.res new file mode 100644 index 0000000..cc0e0ce --- /dev/null +++ b/ls_sample/sample_python/Res/O01.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, , O01, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, userId, userId, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 3; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/O01_1.res b/ls_sample/sample_python/Res/O01_1.res new file mode 100644 index 0000000..cc0e0ce --- /dev/null +++ b/ls_sample/sample_python/Res/O01_1.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, , O01, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, userId, userId, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 3; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/OC0.res b/ls_sample/sample_python/Res/OC0.res new file mode 100644 index 0000000..fe1ec5b --- /dev/null +++ b/ls_sample/sample_python/Res/OC0.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼü(C0), OC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, float, 6.2; + , drate, drate, float, 6.2; + 簡, price, price, float, 6.2; + ð, open, open, float, 6.2; + , high, high, float, 6.2; + , low, low, float, 6.2; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + ŵȣ1, offerho1, offerho1, float, 6.2; + żȣ1, bidho1, bidho1, float, 6.2; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, float, 6.2; + KOSPI, eqva, eqva, float, 7.2; + ̷а, theoryprice, theoryprice, float, 6.2; + 纯, impv, impv, float, 6.2; + ̰, openyakcha, openyakcha, long, 8; + ðġ, timevalue, timevalue, float, 6.2; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/OC0_1.res b/ls_sample/sample_python/Res/OC0_1.res new file mode 100644 index 0000000..fe1ec5b --- /dev/null +++ b/ls_sample/sample_python/Res/OC0_1.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼü(C0), OC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, float, 6.2; + , drate, drate, float, 6.2; + 簡, price, price, float, 6.2; + ð, open, open, float, 6.2; + , high, high, float, 6.2; + , low, low, float, 6.2; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + ŵȣ1, offerho1, offerho1, float, 6.2; + żȣ1, bidho1, bidho1, float, 6.2; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, float, 6.2; + KOSPI, eqva, eqva, float, 7.2; + ̷а, theoryprice, theoryprice, float, 6.2; + 纯, impv, impv, float, 6.2; + ̰, openyakcha, openyakcha, long, 8; + ðġ, timevalue, timevalue, float, 6.2; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/OD0.res b/ls_sample/sample_python/Res/OD0.res new file mode 100644 index 0000000..29e321b --- /dev/null +++ b/ls_sample/sample_python/Res/OD0.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼǽǽðѰ(D0), OD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, float, 8.2; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, float, 8.2; + ڵ , opttcode, opttcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/OD0_1.res b/ls_sample/sample_python/Res/OD0_1.res new file mode 100644 index 0000000..29e321b --- /dev/null +++ b/ls_sample/sample_python/Res/OD0_1.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼǽǽðѰ(D0), OD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, float, 8.2; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, float, 8.2; + ڵ , opttcode, opttcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/OH0.res b/ls_sample/sample_python/Res/OH0.res new file mode 100644 index 0000000..a3f1af4 --- /dev/null +++ b/ls_sample/sample_python/Res/OH0.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼȣ(H0), OH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, double, 6.2; + żȣ1, bidho1, bidho1, double, 6.2; + ŵȣ1, offerrem1, offerrem1, long, 7; + żȣ1, bidrem1, bidrem1, long, 7; + ŵȣǼ1, offercnt1, offercnt1, long, 5; + żȣǼ1, bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, double, 6.2; + żȣ2, bidho2, bidho2, double, 6.2; + ŵȣ2, offerrem2, offerrem2, long, 7; + żȣ2, bidrem2, bidrem2, long, 7; + ŵȣǼ2, offercnt2, offercnt2, long, 5; + żȣǼ2, bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, double, 6.2; + żȣ3, bidho3, bidho3, double, 6.2; + ŵȣ3, offerrem3, offerrem3, long, 7; + żȣ3, bidrem3, bidrem3, long, 7; + ŵȣǼ3, offercnt3, offercnt3, long, 5; + żȣǼ3, bidcnt3, bidcnt3, long, 5; + ŵȣ4, offerho4, offerho4, double, 6.2; + żȣ4, bidho4, bidho4, double, 6.2; + ŵȣ4, offerrem4, offerrem4, long, 7; + żȣ4, bidrem4, bidrem4, long, 7; + ŵȣǼ4, offercnt4, offercnt4, long, 5; + żȣǼ4, bidcnt4, bidcnt4, long, 5; + ŵȣ5, offerho5, offerho5, double, 6.2; + żȣ5, bidho5, bidho5, double, 6.2; + ŵȣ5, offerrem5, offerrem5, long, 7; + żȣ5, bidrem5, bidrem5, long, 7; + ŵȣǼ5, offercnt5, offercnt5, long, 5; + żȣǼ5, bidcnt5, bidcnt5, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 7; + żȣѼ, totbidrem, totbidrem, long, 7; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ڵ, optcode, optcode, char, 8; + ϰȣ, danhochk, danhochk, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP +OH0 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/OH0_1.res b/ls_sample/sample_python/Res/OH0_1.res new file mode 100644 index 0000000..a3f1af4 --- /dev/null +++ b/ls_sample/sample_python/Res/OH0_1.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼȣ(H0), OH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, double, 6.2; + żȣ1, bidho1, bidho1, double, 6.2; + ŵȣ1, offerrem1, offerrem1, long, 7; + żȣ1, bidrem1, bidrem1, long, 7; + ŵȣǼ1, offercnt1, offercnt1, long, 5; + żȣǼ1, bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, double, 6.2; + żȣ2, bidho2, bidho2, double, 6.2; + ŵȣ2, offerrem2, offerrem2, long, 7; + żȣ2, bidrem2, bidrem2, long, 7; + ŵȣǼ2, offercnt2, offercnt2, long, 5; + żȣǼ2, bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, double, 6.2; + żȣ3, bidho3, bidho3, double, 6.2; + ŵȣ3, offerrem3, offerrem3, long, 7; + żȣ3, bidrem3, bidrem3, long, 7; + ŵȣǼ3, offercnt3, offercnt3, long, 5; + żȣǼ3, bidcnt3, bidcnt3, long, 5; + ŵȣ4, offerho4, offerho4, double, 6.2; + żȣ4, bidho4, bidho4, double, 6.2; + ŵȣ4, offerrem4, offerrem4, long, 7; + żȣ4, bidrem4, bidrem4, long, 7; + ŵȣǼ4, offercnt4, offercnt4, long, 5; + żȣǼ4, bidcnt4, bidcnt4, long, 5; + ŵȣ5, offerho5, offerho5, double, 6.2; + żȣ5, bidho5, bidho5, double, 6.2; + ŵȣ5, offerrem5, offerrem5, long, 7; + żȣ5, bidrem5, bidrem5, long, 7; + ŵȣǼ5, offercnt5, offercnt5, long, 5; + żȣǼ5, bidcnt5, bidcnt5, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 7; + żȣѼ, totbidrem, totbidrem, long, 7; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ڵ, optcode, optcode, char, 8; + ϰȣ, danhochk, danhochk, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP +OH0 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/OK_.res b/ls_sample/sample_python/Res/OK_.res new file mode 100644 index 0000000..140a10c --- /dev/null +++ b/ls_sample/sample_python/Res/OK_.res @@ -0,0 +1,93 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQŷ(OK), OK_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵǻڵ1 , offerno1, offerno1, char, 3; + żǻڵ1 , bidno1, bidno1, char, 3; + ŵȸ1 , offertrad1, offertrad1, char, 6; + żȸ1 , bidtrad1, bidtrad1, char, 6; + ŵŷ1, tradmdvol1, tradmdvol1, long, 10; + żŷ1, tradmsvol1, tradmsvol1, long, 10; + ŵŷ1, tradmdrate1, tradmdrate1, float, 6.2; + ŵŷ1, tradmsrate1, tradmsrate1, float, 6.2; + ŵŷ1, tradmdcha1, tradmdcha1, long, 10; + żŷ1, tradmscha1, tradmscha1, long, 10; + ŵǻڵ2 , offerno2, offerno2, char, 3; + żǻڵ2 , bidno2, bidno2, char, 3; + ŵȸ2 , offertrad2, offertrad2, char, 6; + żȸ2 , bidtrad2, bidtrad2, char, 6; + ŵŷ2, tradmdvol2, tradmdvol2, long, 10; + żŷ2, tradmsvol2, tradmsvol2, long, 10; + ŵŷ2, tradmdrate2, tradmdrate2, float, 6.2; + żŷ2, tradmsrate2, tradmsrate2, float, 6.2; + ŵŷ2, tradmdcha2, tradmdcha2, long, 10; + żŷ2, tradmscha2, tradmscha2, long, 10; + ŵǻڵ3 , offerno3, offerno3, char, 3; + żǻڵ3 , bidno3, bidno3, char, 3; + ŵȸ3 , offertrad3, offertrad3, char, 6; + żȸ3 , bidtrad3, bidtrad3, char, 6; + ŵŷ3, tradmdvol3, tradmdvol3, long, 10; + żŷ3, tradmsvol3, tradmsvol3, long, 10; + ŵŷ3, tradmdrate3, tradmdrate3, float, 6.2; + żŷ3, tradmsrate3, tradmsrate3, float, 6.2; + ŵŷ3, tradmdcha3, tradmdcha3, long, 10; + żŷ3, tradmscha3, tradmscha3, long, 10; + ŵǻڵ4 , offerno4, offerno4, char, 3; + żǻڵ4 , bidno4, bidno4, char, 3; + ŵȸ4 , offertrad4, offertrad4, char, 6; + żȸ4 , bidtrad4, bidtrad4, char, 6; + ŵŷ4, tradmdvol4, tradmdvol4, long, 10; + żŷ4, tradmsvol4, tradmsvol4, long, 10; + ŵŷ4, tradmdrate4, tradmdrate4, float, 6.2; + żŷ4, tradmsrate4, tradmsrate4, float, 6.2; + ŵŷ4, tradmdcha4, tradmdcha4, long, 10; + żŷ4, tradmscha4, tradmscha4, long, 10; + ŵǻڵ5 , offerno5, offerno5, char, 3; + żǻڵ5 , bidno5, bidno5, char, 3; + ŵȸ5 , offertrad5, offertrad5, char, 6; + żȸ5 , bidtrad5, bidtrad5, char, 6; + ŵŷ5, tradmdvol5, tradmdvol5, long, 10; + żŷ5, tradmsvol5, tradmsvol5, long, 10; + ŵŷ5, tradmdrate5, tradmdrate5, float, 6.2; + żŷ5, tradmsrate5, tradmsrate5, float, 6.2; + ŵŷ5, tradmdcha5, tradmdcha5, long, 10; + żŷ5, tradmscha5, tradmscha5, long, 10; + ܱǻŵհ, ftradmdvol, ftradmdvol, char, 10; + ܱǻżհ, ftradmsvol, ftradmsvol, char, 10; +ܱǻŵŷ, ftradmdrate, ftradmdrate, float, 6.2; +ܱǻżŷ, ftradmsrate, ftradmsrate, float, 6.2; +ܱǻŵŷ, ftradmdcha, ftradmdcha, char, 10; +ܱǻżŷ, ftradmscha, ftradmscha, char, 10; + ڵ, shcode, shcode, char, 6; + ŵŷ1, tradmdval1, tradmdval1, long, 15; + żŷ1, tradmsval1, tradmsval1, long, 15; + ŵմܰ1, tradmdavg1, tradmdavg1, long, 7; + żմܰ1, tradmsavg1, tradmsavg1, long, 7; + ŵŷ2, tradmdval2, tradmdval2, long, 15; + żŷ2, tradmsval2, tradmsval2, long, 15; + ŵմܰ2, tradmdavg2, tradmdavg2, long, 7; + żմܰ2, tradmsavg2, tradmsavg2, long, 7; + ŵŷ3, tradmdval3, tradmdval3, long, 15; + żŷ3, tradmsval3, tradmsval3, long, 15; + ŵմܰ3, tradmdavg3, tradmdavg3, long, 7; + żմܰ3, tradmsavg3, tradmsavg3, long, 7; + ŵŷ4, tradmdval4, tradmdval4, long, 15; + żŷ4, tradmsval4, tradmsval4, long, 15; + ŵմܰ4, tradmdavg4, tradmdavg4, long, 7; + żմܰ4, tradmsavg4, tradmsavg4, long, 7; + ŵŷ5, tradmdval5, tradmdval5, long, 15; + żŷ5, tradmsval5, tradmsval5, long, 15; + ŵմܰ5, tradmdavg5, tradmdavg5, long, 7; + żմܰ5, tradmsavg5, tradmsavg5, long, 7; +ܱǻŵŷ, ftradmdval, ftradmdval, long, 15; +ܱǻżŷ, ftradmsval, ftradmsval, long, 15; +ܱǻŵմܰ, ftradmdavg, ftradmdavg, long, 7; +ܱǻżմܰ, ftradmsavg, ftradmsavg, long, 7; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/OK__1.res b/ls_sample/sample_python/Res/OK__1.res new file mode 100644 index 0000000..140a10c --- /dev/null +++ b/ls_sample/sample_python/Res/OK__1.res @@ -0,0 +1,93 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQŷ(OK), OK_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵǻڵ1 , offerno1, offerno1, char, 3; + żǻڵ1 , bidno1, bidno1, char, 3; + ŵȸ1 , offertrad1, offertrad1, char, 6; + żȸ1 , bidtrad1, bidtrad1, char, 6; + ŵŷ1, tradmdvol1, tradmdvol1, long, 10; + żŷ1, tradmsvol1, tradmsvol1, long, 10; + ŵŷ1, tradmdrate1, tradmdrate1, float, 6.2; + ŵŷ1, tradmsrate1, tradmsrate1, float, 6.2; + ŵŷ1, tradmdcha1, tradmdcha1, long, 10; + żŷ1, tradmscha1, tradmscha1, long, 10; + ŵǻڵ2 , offerno2, offerno2, char, 3; + żǻڵ2 , bidno2, bidno2, char, 3; + ŵȸ2 , offertrad2, offertrad2, char, 6; + żȸ2 , bidtrad2, bidtrad2, char, 6; + ŵŷ2, tradmdvol2, tradmdvol2, long, 10; + żŷ2, tradmsvol2, tradmsvol2, long, 10; + ŵŷ2, tradmdrate2, tradmdrate2, float, 6.2; + żŷ2, tradmsrate2, tradmsrate2, float, 6.2; + ŵŷ2, tradmdcha2, tradmdcha2, long, 10; + żŷ2, tradmscha2, tradmscha2, long, 10; + ŵǻڵ3 , offerno3, offerno3, char, 3; + żǻڵ3 , bidno3, bidno3, char, 3; + ŵȸ3 , offertrad3, offertrad3, char, 6; + żȸ3 , bidtrad3, bidtrad3, char, 6; + ŵŷ3, tradmdvol3, tradmdvol3, long, 10; + żŷ3, tradmsvol3, tradmsvol3, long, 10; + ŵŷ3, tradmdrate3, tradmdrate3, float, 6.2; + żŷ3, tradmsrate3, tradmsrate3, float, 6.2; + ŵŷ3, tradmdcha3, tradmdcha3, long, 10; + żŷ3, tradmscha3, tradmscha3, long, 10; + ŵǻڵ4 , offerno4, offerno4, char, 3; + żǻڵ4 , bidno4, bidno4, char, 3; + ŵȸ4 , offertrad4, offertrad4, char, 6; + żȸ4 , bidtrad4, bidtrad4, char, 6; + ŵŷ4, tradmdvol4, tradmdvol4, long, 10; + żŷ4, tradmsvol4, tradmsvol4, long, 10; + ŵŷ4, tradmdrate4, tradmdrate4, float, 6.2; + żŷ4, tradmsrate4, tradmsrate4, float, 6.2; + ŵŷ4, tradmdcha4, tradmdcha4, long, 10; + żŷ4, tradmscha4, tradmscha4, long, 10; + ŵǻڵ5 , offerno5, offerno5, char, 3; + żǻڵ5 , bidno5, bidno5, char, 3; + ŵȸ5 , offertrad5, offertrad5, char, 6; + żȸ5 , bidtrad5, bidtrad5, char, 6; + ŵŷ5, tradmdvol5, tradmdvol5, long, 10; + żŷ5, tradmsvol5, tradmsvol5, long, 10; + ŵŷ5, tradmdrate5, tradmdrate5, float, 6.2; + żŷ5, tradmsrate5, tradmsrate5, float, 6.2; + ŵŷ5, tradmdcha5, tradmdcha5, long, 10; + żŷ5, tradmscha5, tradmscha5, long, 10; + ܱǻŵհ, ftradmdvol, ftradmdvol, char, 10; + ܱǻżհ, ftradmsvol, ftradmsvol, char, 10; +ܱǻŵŷ, ftradmdrate, ftradmdrate, float, 6.2; +ܱǻżŷ, ftradmsrate, ftradmsrate, float, 6.2; +ܱǻŵŷ, ftradmdcha, ftradmdcha, char, 10; +ܱǻżŷ, ftradmscha, ftradmscha, char, 10; + ڵ, shcode, shcode, char, 6; + ŵŷ1, tradmdval1, tradmdval1, long, 15; + żŷ1, tradmsval1, tradmsval1, long, 15; + ŵմܰ1, tradmdavg1, tradmdavg1, long, 7; + żմܰ1, tradmsavg1, tradmsavg1, long, 7; + ŵŷ2, tradmdval2, tradmdval2, long, 15; + żŷ2, tradmsval2, tradmsval2, long, 15; + ŵմܰ2, tradmdavg2, tradmdavg2, long, 7; + żմܰ2, tradmsavg2, tradmsavg2, long, 7; + ŵŷ3, tradmdval3, tradmdval3, long, 15; + żŷ3, tradmsval3, tradmsval3, long, 15; + ŵմܰ3, tradmdavg3, tradmdavg3, long, 7; + żմܰ3, tradmsavg3, tradmsavg3, long, 7; + ŵŷ4, tradmdval4, tradmdval4, long, 15; + żŷ4, tradmsval4, tradmsval4, long, 15; + ŵմܰ4, tradmdavg4, tradmdavg4, long, 7; + żմܰ4, tradmsavg4, tradmsavg4, long, 7; + ŵŷ5, tradmdval5, tradmdval5, long, 15; + żŷ5, tradmsval5, tradmsval5, long, 15; + ŵմܰ5, tradmdavg5, tradmdavg5, long, 7; + żմܰ5, tradmsavg5, tradmsavg5, long, 7; +ܱǻŵŷ, ftradmdval, ftradmdval, long, 15; +ܱǻżŷ, ftradmsval, ftradmsval, long, 15; +ܱǻŵմܰ, ftradmdavg, ftradmdavg, long, 7; +ܱǻżմܰ, ftradmsavg, ftradmsavg, long, 7; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/OMG.res b/ls_sample/sample_python/Res/OMG.res new file mode 100644 index 0000000..91e39c6 --- /dev/null +++ b/ls_sample/sample_python/Res/OMG.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼǹΰ(MG), OMG, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ɼڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + 簡, actprice, actprice, float, 6.2; + KOSPI200, k200jisu, k200jisu, float, 6.2; + , fut200jisu, fut200jisu, float, 6.2; + 簡, price, price, float, 6.2; + ǥ纯, capimpv, capimpv, float, 6.2; + 纯, impv, impv, float, 6.2; + Ÿ(), delt, delt, float, 7.4; + (), gama, gama, float, 7.4; + Ÿ(), ceta, ceta, float, 7.4; + (), vega, vega, float, 7.4; + ο(), rhox, rhox, float, 7.4; + ̷а(), theoryprice, theoryprice, float, 6.2; + ϰ纯, bimpv, bimpv, float, 6.2; + ŵ纯, offerimpv, offerimpv, float, 6.2; + ż纯, bidimpv, bidimpv, float, 6.2; + ɼڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +OMG \ No newline at end of file diff --git a/ls_sample/sample_python/Res/OMG_1.res b/ls_sample/sample_python/Res/OMG_1.res new file mode 100644 index 0000000..91e39c6 --- /dev/null +++ b/ls_sample/sample_python/Res/OMG_1.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼǹΰ(MG), OMG, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ɼڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + 簡, actprice, actprice, float, 6.2; + KOSPI200, k200jisu, k200jisu, float, 6.2; + , fut200jisu, fut200jisu, float, 6.2; + 簡, price, price, float, 6.2; + ǥ纯, capimpv, capimpv, float, 6.2; + 纯, impv, impv, float, 6.2; + Ÿ(), delt, delt, float, 7.4; + (), gama, gama, float, 7.4; + Ÿ(), ceta, ceta, float, 7.4; + (), vega, vega, float, 7.4; + ο(), rhox, rhox, float, 7.4; + ̷а(), theoryprice, theoryprice, float, 6.2; + ϰ纯, bimpv, bimpv, float, 6.2; + ŵ纯, offerimpv, offerimpv, float, 6.2; + ż纯, bidimpv, bidimpv, float, 6.2; + ɼڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +OMG \ No newline at end of file diff --git a/ls_sample/sample_python/Res/OVC.res b/ls_sample/sample_python/Res/OVC.res new file mode 100644 index 0000000..4a00809 --- /dev/null +++ b/ls_sample/sample_python/Res/OVC.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼ 簡ü(OVC), OVC, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 8; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 8; + ü() , ovsdate , ovsdate , char , 8; + ü(ѱ) , kordate , kordate , char , 8; + üð() , trdtm , trdtm , char , 6; + üð(ѱ) , kortm , kortm , char , 6; + üᰡ , curpr , curpr , double , 15.9; + ϴ , ydiffpr , ydiffpr , double , 15.9; + ϴȣ , ydiffSign , ydiffSign , char , 1; + ð , open , open , double , 15.9; + , high , high , double , 15.9; + , low , low , double , 15.9; + , chgrate , chgrate , float , 6.2; + Ǻü , trdq , trdq , long , 10; + ü , totq , totq , char , 15; + üᱸ , cgubun , cgubun , char , 1; + ŵü , mdvolume , mdvolume , char , 15; + żü , msvolume , msvolume , char , 15; + 帶 , ovsmkend , ovsmkend , char , 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/OVC_1.res b/ls_sample/sample_python/Res/OVC_1.res new file mode 100644 index 0000000..4a00809 --- /dev/null +++ b/ls_sample/sample_python/Res/OVC_1.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼ 簡ü(OVC), OVC, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 8; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 8; + ü() , ovsdate , ovsdate , char , 8; + ü(ѱ) , kordate , kordate , char , 8; + üð() , trdtm , trdtm , char , 6; + üð(ѱ) , kortm , kortm , char , 6; + üᰡ , curpr , curpr , double , 15.9; + ϴ , ydiffpr , ydiffpr , double , 15.9; + ϴȣ , ydiffSign , ydiffSign , char , 1; + ð , open , open , double , 15.9; + , high , high , double , 15.9; + , low , low , double , 15.9; + , chgrate , chgrate , float , 6.2; + Ǻü , trdq , trdq , long , 10; + ü , totq , totq , char , 15; + üᱸ , cgubun , cgubun , char , 1; + ŵü , mdvolume , mdvolume , char , 15; + żü , msvolume , msvolume , char , 15; + 帶 , ovsmkend , ovsmkend , char , 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/OVH.res b/ls_sample/sample_python/Res/OVH.res new file mode 100644 index 0000000..3510ef5 --- /dev/null +++ b/ls_sample/sample_python/Res/OVH.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼ ȣ(OVH), OVH, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 8; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 8 ; + ȣð , hotime , hotime , char , 6 ; + + ŵȣ 1 , offerho1 , offerho1 , double , 15.9; + żȣ 1 , bidho1 , bidho1 , double , 15.9; + ŵȣ ܷ 1 , offerrem1 , offerrem1 , long , 10; + żȣ ܷ 1 , bidrem1 , bidrem1 , long , 10; + ŵȣ Ǽ 1 , offerno1 , offerno1 , long , 10; + żȣ Ǽ 1 , bidno1 , bidno1 , long , 10; + + ŵȣ 2 , offerho2 , offerho2 , double , 15.9; + żȣ 2 , bidho2 , bidho2 , double , 15.9; + ŵȣ ܷ 2 , offerrem2 , offerrem2 , long , 10; + żȣ ܷ 2 , bidrem2 , bidrem2 , long , 10; + ŵȣ Ǽ 2 , offerno2 , offerno2 , long , 10; + żȣ Ǽ 2 , bidno2 , bidno2 , long , 10; + + ŵȣ 3 , offerho3 , offerho3 , double , 15.9; + żȣ 3 , bidho3 , bidho3 , double , 15.9; + ŵȣ ܷ 3 , offerrem3 , offerrem3 , long , 10; + żȣ ܷ 3 , bidrem3 , bidrem3 , long , 10; + ŵȣ Ǽ 3 , offerno3 , offerno3 , long , 10; + żȣ Ǽ 3 , bidno3 , bidno3 , long , 10; + + ŵȣ 4 , offerho4 , offerho4 , double , 15.9; + żȣ 4 , bidho4 , bidho4 , double , 15.9; + ŵȣ ܷ 4 , offerrem4 , offerrem4 , long , 10; + żȣ ܷ 4 , bidrem4 , bidrem4 , long , 10; + ŵȣ Ǽ 4 , offerno4 , offerno4 , long , 10; + żȣ Ǽ 4 , bidno4 , bidno4 , long , 10; + + ŵȣ 5 , offerho5 , offerho5 , double , 15.9; + żȣ 5 , bidho5 , bidho5 , double , 15.9; + ŵȣ ܷ 5 , offerrem5 , offerrem5 , long , 10; + żȣ ܷ 5 , bidrem5 , bidrem5 , long , 10; + ŵȣ Ǽ 5 , offerno5 , offerno5 , long , 10; + żȣ Ǽ 5 , bidno5 , bidno5 , long , 10; + + ŵȣѰǼ , totoffercnt , totoffercnt , long , 10; + żȣѰǼ , totbidcnt , totbidcnt , long , 10; + ŵȣѼ , totofferrem , totofferrem , long , 10; + żȣѼ , totbidrem , totbidrem , long , 10; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/OVH_1.res b/ls_sample/sample_python/Res/OVH_1.res new file mode 100644 index 0000000..3510ef5 --- /dev/null +++ b/ls_sample/sample_python/Res/OVH_1.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼ ȣ(OVH), OVH, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 8; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 8 ; + ȣð , hotime , hotime , char , 6 ; + + ŵȣ 1 , offerho1 , offerho1 , double , 15.9; + żȣ 1 , bidho1 , bidho1 , double , 15.9; + ŵȣ ܷ 1 , offerrem1 , offerrem1 , long , 10; + żȣ ܷ 1 , bidrem1 , bidrem1 , long , 10; + ŵȣ Ǽ 1 , offerno1 , offerno1 , long , 10; + żȣ Ǽ 1 , bidno1 , bidno1 , long , 10; + + ŵȣ 2 , offerho2 , offerho2 , double , 15.9; + żȣ 2 , bidho2 , bidho2 , double , 15.9; + ŵȣ ܷ 2 , offerrem2 , offerrem2 , long , 10; + żȣ ܷ 2 , bidrem2 , bidrem2 , long , 10; + ŵȣ Ǽ 2 , offerno2 , offerno2 , long , 10; + żȣ Ǽ 2 , bidno2 , bidno2 , long , 10; + + ŵȣ 3 , offerho3 , offerho3 , double , 15.9; + żȣ 3 , bidho3 , bidho3 , double , 15.9; + ŵȣ ܷ 3 , offerrem3 , offerrem3 , long , 10; + żȣ ܷ 3 , bidrem3 , bidrem3 , long , 10; + ŵȣ Ǽ 3 , offerno3 , offerno3 , long , 10; + żȣ Ǽ 3 , bidno3 , bidno3 , long , 10; + + ŵȣ 4 , offerho4 , offerho4 , double , 15.9; + żȣ 4 , bidho4 , bidho4 , double , 15.9; + ŵȣ ܷ 4 , offerrem4 , offerrem4 , long , 10; + żȣ ܷ 4 , bidrem4 , bidrem4 , long , 10; + ŵȣ Ǽ 4 , offerno4 , offerno4 , long , 10; + żȣ Ǽ 4 , bidno4 , bidno4 , long , 10; + + ŵȣ 5 , offerho5 , offerho5 , double , 15.9; + żȣ 5 , bidho5 , bidho5 , double , 15.9; + ŵȣ ܷ 5 , offerrem5 , offerrem5 , long , 10; + żȣ ܷ 5 , bidrem5 , bidrem5 , long , 10; + ŵȣ Ǽ 5 , offerno5 , offerno5 , long , 10; + żȣ Ǽ 5 , bidno5 , bidno5 , long , 10; + + ŵȣѰǼ , totoffercnt , totoffercnt , long , 10; + żȣѰǼ , totbidcnt , totbidcnt , long , 10; + ŵȣѼ , totofferrem , totofferrem , long , 10; + żȣѼ , totbidrem , totbidrem , long , 10; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/OX0.res b/ls_sample/sample_python/Res/OX0.res new file mode 100644 index 0000000..4524052 --- /dev/null +++ b/ls_sample/sample_python/Res/OX0.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼǰȮ(X0), OX0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + Ѵܰ , upstep , upstep , char, 2; + Ѵܰ , dnstep , dnstep , char, 2; + Ѱ , uplmtprice , uplmtprice , float, 6.2; + Ѱ , dnlmtprice , dnlmtprice , float, 6.2; + ڵ , opttcode , opttcode , char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/OX0_1.res b/ls_sample/sample_python/Res/OX0_1.res new file mode 100644 index 0000000..4524052 --- /dev/null +++ b/ls_sample/sample_python/Res/OX0_1.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼǰȮ(X0), OX0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + Ѵܰ , upstep , upstep , char, 2; + Ѵܰ , dnstep , dnstep , char, 2; + Ѱ , uplmtprice , uplmtprice , float, 6.2; + Ѱ , dnlmtprice , dnlmtprice , float, 6.2; + ڵ , opttcode , opttcode , char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/PH_.res b/ls_sample/sample_python/Res/PH_.res new file mode 100644 index 0000000..7793ec5 --- /dev/null +++ b/ls_sample/sample_python/Res/PH_.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIα׷Ÿ(PH), PH_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, long, 1; + ϴ, change, change, long, 8; + ŷ, volume, volume, long, 10; + , drate, drate, float, 6.2; + + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 12; + ͸żȣ ܷ, cshrem, cshrem, long, 12; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 12; + ͸żȣ ܷ, bshrem, bshrem, long, 12; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 12; + ͸żȣ , cshvolume, cshvolume, long, 12; + ͸ŵȣ , bdhvolume, bdhvolume, long, 12; + ͸żȣ , bshvolume, bshvolume, long, 12; + + üŵŹü, dwcvolume, dwcvolume, long, 12; + üżŹü, swcvolume, swcvolume, long, 12; + üŵڱü, djcvolume, djcvolume, long, 12; + üżڱü, sjcvolume, sjcvolume, long, 12; + + üŵü, tdvolume, tdvolume, long, 12; + üżü, tsvolume, tsvolume, long, 12; + üż , tvol, tvol, long, 12; + + üŵŹüݾ, dwcvalue, dwcvalue, long, 15; + üżŹüݾ, swcvalue, swcvalue, long, 15; + üŵڱüݾ, djcvalue, djcvalue, long, 15; + üżڱüݾ, sjcvalue, sjcvalue, long, 15; + + üŵüݾ, tdvalue, tdvalue, long, 15; + üżüݾ, tsvalue, tsvalue, long, 15; + üż ݾ, tval, tval, long, 15; + + ŵ ü, pdgvolume, pdgvolume, long, 12; + ż ü, psgvolume, psgvolume, long, 12; + + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/PH__1.res b/ls_sample/sample_python/Res/PH__1.res new file mode 100644 index 0000000..7793ec5 --- /dev/null +++ b/ls_sample/sample_python/Res/PH__1.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIα׷Ÿ(PH), PH_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, long, 1; + ϴ, change, change, long, 8; + ŷ, volume, volume, long, 10; + , drate, drate, float, 6.2; + + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 12; + ͸żȣ ܷ, cshrem, cshrem, long, 12; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 12; + ͸żȣ ܷ, bshrem, bshrem, long, 12; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 12; + ͸żȣ , cshvolume, cshvolume, long, 12; + ͸ŵȣ , bdhvolume, bdhvolume, long, 12; + ͸żȣ , bshvolume, bshvolume, long, 12; + + üŵŹü, dwcvolume, dwcvolume, long, 12; + üżŹü, swcvolume, swcvolume, long, 12; + üŵڱü, djcvolume, djcvolume, long, 12; + üżڱü, sjcvolume, sjcvolume, long, 12; + + üŵü, tdvolume, tdvolume, long, 12; + üżü, tsvolume, tsvolume, long, 12; + üż , tvol, tvol, long, 12; + + üŵŹüݾ, dwcvalue, dwcvalue, long, 15; + üżŹüݾ, swcvalue, swcvalue, long, 15; + üŵڱüݾ, djcvalue, djcvalue, long, 15; + üżڱüݾ, sjcvalue, sjcvalue, long, 15; + + üŵüݾ, tdvalue, tdvalue, long, 15; + üżüݾ, tsvalue, tsvalue, long, 15; + üż ݾ, tval, tval, long, 15; + + ŵ ü, pdgvolume, pdgvolume, long, 12; + ż ü, psgvolume, psgvolume, long, 12; + + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/PM_.res b/ls_sample/sample_python/Res/PM_.res new file mode 100644 index 0000000..f424529 --- /dev/null +++ b/ls_sample/sample_python/Res/PM_.res @@ -0,0 +1,119 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIα׷Ÿü(PM), PM_, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + а, gubun, gubun, char, 1; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 6; + ͸żȣ ܷ, cshrem, cshrem, long, 6; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 6; + ͸żȣ ܷ, bshrem, bshrem, long, 6; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 6; + ͸żȣ , cshvolume, cshvolume, long, 6; + ͸ŵȣ , bdhvolume, bdhvolume, long, 6; + ͸żȣ , bshvolume, bshvolume, long, 6; + + ͸ŵŹü, cdwvolume, cdwvolume, long, 6; + ͸ŵڱü, cdjvolume, cdjvolume, long, 6; + ͸żŹü, cswvolume, cswvolume, long, 6; + ͸żڱü, csjvolume, csjvolume, long, 6; + Źż , cwvol, cwvol, long, 6; + ڱż , cjvol, cjvol, long, 6; + + ͸ŵŹü, bdwvolume, bdwvolume, long, 6; + ͸ŵڱü, bdjvolume, bdjvolume, long, 6; + ͸żŹü, bswvolume, bswvolume, long, 6; + ͸żڱü, bsjvolume, bsjvolume, long, 6; + Źż , bwvol, bwvol, long, 6; + ڱż , bjvol, bjvol, long, 6; + + üŵŹü, dwvolume, dwvolume, long, 6; + üżŹü, swvolume, swvolume, long, 6; + üŹż , wvol, wvol, long, 6; + üŵڱü, djvolume, djvolume, long, 6; + üżڱü, sjvolume, sjvolume, long, 6; + üڱż , jvol, jvol, long, 6; + + ͸ŵŹüݾ, cdwvalue, cdwvalue, long, 8; + ͸ŵڱüݾ, cdjvalue, cdjvalue, long, 8; + ͸żŹüݾ, cswvalue, cswvalue, long, 8; + ͸żڱüݾ, csjvalue, csjvalue, long, 8; + Źż ݾ, cwval, cwval, long, 8; + ڱż ݾ, cjval, cjval, long, 8; + + ͸ŵŹüݾ, bdwvalue, bdwvalue, long, 8; + ͸ŵڱüݾ, bdjvalue, bdjvalue, long, 8; + ͸żŹüݾ, bswvalue, bswvalue, long, 8; + ͸żڱüݾ, bsjvalue, bsjvalue, long, 8; + Źż ݾ, bwval, bwval, long, 8; + ڱż ݾ, bjval, bjval, long, 8; + + üŵŹüݾ, dwvalue, dwvalue, long, 8; + üżŹüݾ, swvalue, swvalue, long, 8; + üŹż ݾ, wval, wval, long, 8; + üŵڱüݾ, djvalue, djvalue, long, 8; + üżڱüݾ, sjvalue, sjvalue, long, 8; + üڱż ݾ, jval, jval, long, 8; + + KOSPI200 , k200jisu, k200jisu, float, 6.2; + KOSPI200 ϴ񱸺, k200sign, k200sign, char, 1; + KOSPI200 ϴ, change, change, float, 6.2; + KOSPI200 ̽ý, k200basis, k200basis, float, 4.2; + + ͸ŵüհ, cdvolume, cdvolume, long, 6; + ͸żüհ, csvolume, csvolume, long, 6; + ͼż հ, cvol, cvol, long, 6; + + ͸ŵüհ, bdvolume, bdvolume, long, 6; + ͸żüհ, bsvolume, bsvolume, long, 6; + ͼż հ, bvol, bvol, long, 6; + + üŵüհ, tdvolume, tdvolume, long, 6; + üżüհ, tsvolume, tsvolume, long, 6; + üż հ, tvol, tvol, long, 6; + + ͸ŵüݾհ, cdvalue, cdvalue, long, 8; + ͸żüݾհ, csvalue, csvalue, long, 8; + ͼż ݾհ, cval, cval, long, 8; + + ͸ŵüݾհ, bdvalue, bdvalue, long, 8; + ͸żüݾհ, bsvalue, bsvalue, long, 8; + ͼż ݾհ, bval, bval, long, 8; + + üŵüݾհ, tdvalue, tdvalue, long, 8; + üżüݾհ, tsvalue, tsvalue, long, 8; + üż ݾհ, tval, tval, long, 8; + + ͸ŵü, p_cdvolcha, p_cdvolcha, long, 6; + ͸żü, p_csvolcha, p_csvolcha, long, 6; + ͼż , p_cvolcha, p_cvolcha, long, 6; + + ͸ŵü, p_bdvolcha, p_bdvolcha, long, 6; + ͸żü, p_bsvolcha, p_bsvolcha, long, 6; + ͼż , p_bvolcha, p_bvolcha, long, 6; + + üŵü, p_tdvolcha, p_tdvolcha, long, 6; + üżü, p_tsvolcha, p_tsvolcha, long, 6; + üż , p_tvolcha, p_tvolcha, long, 6; + + ͸ŵüݾ, p_cdvalcha, p_cdvalcha, long, 8; + ͸żüݾ, p_csvalcha, p_csvalcha, long, 8; + ͼż ݾ, p_cvalcha, p_cvalcha, long, 8; + + ͸ŵüݾ, p_bdvalcha, p_bdvalcha, long, 8; + ͸żüݾ, p_bsvalcha, p_bsvalcha, long, 8; + ͼż ݾ, p_bvalcha, p_bvalcha, long, 8; + + üŵüݾ, p_tdvalcha, p_tdvalcha, long, 8; + üżüݾ, p_tsvalcha, p_tsvalcha, long, 8; + üż ݾ, p_tvalcha, p_tvalcha, long, 8; + + а, gubun, gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/PM__1.res b/ls_sample/sample_python/Res/PM__1.res new file mode 100644 index 0000000..f424529 --- /dev/null +++ b/ls_sample/sample_python/Res/PM__1.res @@ -0,0 +1,119 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIα׷Ÿü(PM), PM_, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + а, gubun, gubun, char, 1; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 6; + ͸żȣ ܷ, cshrem, cshrem, long, 6; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 6; + ͸żȣ ܷ, bshrem, bshrem, long, 6; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 6; + ͸żȣ , cshvolume, cshvolume, long, 6; + ͸ŵȣ , bdhvolume, bdhvolume, long, 6; + ͸żȣ , bshvolume, bshvolume, long, 6; + + ͸ŵŹü, cdwvolume, cdwvolume, long, 6; + ͸ŵڱü, cdjvolume, cdjvolume, long, 6; + ͸żŹü, cswvolume, cswvolume, long, 6; + ͸żڱü, csjvolume, csjvolume, long, 6; + Źż , cwvol, cwvol, long, 6; + ڱż , cjvol, cjvol, long, 6; + + ͸ŵŹü, bdwvolume, bdwvolume, long, 6; + ͸ŵڱü, bdjvolume, bdjvolume, long, 6; + ͸żŹü, bswvolume, bswvolume, long, 6; + ͸żڱü, bsjvolume, bsjvolume, long, 6; + Źż , bwvol, bwvol, long, 6; + ڱż , bjvol, bjvol, long, 6; + + üŵŹü, dwvolume, dwvolume, long, 6; + üżŹü, swvolume, swvolume, long, 6; + üŹż , wvol, wvol, long, 6; + üŵڱü, djvolume, djvolume, long, 6; + üżڱü, sjvolume, sjvolume, long, 6; + üڱż , jvol, jvol, long, 6; + + ͸ŵŹüݾ, cdwvalue, cdwvalue, long, 8; + ͸ŵڱüݾ, cdjvalue, cdjvalue, long, 8; + ͸żŹüݾ, cswvalue, cswvalue, long, 8; + ͸żڱüݾ, csjvalue, csjvalue, long, 8; + Źż ݾ, cwval, cwval, long, 8; + ڱż ݾ, cjval, cjval, long, 8; + + ͸ŵŹüݾ, bdwvalue, bdwvalue, long, 8; + ͸ŵڱüݾ, bdjvalue, bdjvalue, long, 8; + ͸żŹüݾ, bswvalue, bswvalue, long, 8; + ͸żڱüݾ, bsjvalue, bsjvalue, long, 8; + Źż ݾ, bwval, bwval, long, 8; + ڱż ݾ, bjval, bjval, long, 8; + + üŵŹüݾ, dwvalue, dwvalue, long, 8; + üżŹüݾ, swvalue, swvalue, long, 8; + üŹż ݾ, wval, wval, long, 8; + üŵڱüݾ, djvalue, djvalue, long, 8; + üżڱüݾ, sjvalue, sjvalue, long, 8; + üڱż ݾ, jval, jval, long, 8; + + KOSPI200 , k200jisu, k200jisu, float, 6.2; + KOSPI200 ϴ񱸺, k200sign, k200sign, char, 1; + KOSPI200 ϴ, change, change, float, 6.2; + KOSPI200 ̽ý, k200basis, k200basis, float, 4.2; + + ͸ŵüհ, cdvolume, cdvolume, long, 6; + ͸żüհ, csvolume, csvolume, long, 6; + ͼż հ, cvol, cvol, long, 6; + + ͸ŵüհ, bdvolume, bdvolume, long, 6; + ͸żüհ, bsvolume, bsvolume, long, 6; + ͼż հ, bvol, bvol, long, 6; + + üŵüհ, tdvolume, tdvolume, long, 6; + üżüհ, tsvolume, tsvolume, long, 6; + üż հ, tvol, tvol, long, 6; + + ͸ŵüݾհ, cdvalue, cdvalue, long, 8; + ͸żüݾհ, csvalue, csvalue, long, 8; + ͼż ݾհ, cval, cval, long, 8; + + ͸ŵüݾհ, bdvalue, bdvalue, long, 8; + ͸żüݾհ, bsvalue, bsvalue, long, 8; + ͼż ݾհ, bval, bval, long, 8; + + üŵüݾհ, tdvalue, tdvalue, long, 8; + üżüݾհ, tsvalue, tsvalue, long, 8; + üż ݾհ, tval, tval, long, 8; + + ͸ŵü, p_cdvolcha, p_cdvolcha, long, 6; + ͸żü, p_csvolcha, p_csvolcha, long, 6; + ͼż , p_cvolcha, p_cvolcha, long, 6; + + ͸ŵü, p_bdvolcha, p_bdvolcha, long, 6; + ͸żü, p_bsvolcha, p_bsvolcha, long, 6; + ͼż , p_bvolcha, p_bvolcha, long, 6; + + üŵü, p_tdvolcha, p_tdvolcha, long, 6; + üżü, p_tsvolcha, p_tsvolcha, long, 6; + üż , p_tvolcha, p_tvolcha, long, 6; + + ͸ŵüݾ, p_cdvalcha, p_cdvalcha, long, 8; + ͸żüݾ, p_csvalcha, p_csvalcha, long, 8; + ͼż ݾ, p_cvalcha, p_cvalcha, long, 8; + + ͸ŵüݾ, p_bdvalcha, p_bdvalcha, long, 8; + ͸żüݾ, p_bsvalcha, p_bsvalcha, long, 8; + ͼż ݾ, p_bvalcha, p_bvalcha, long, 8; + + üŵüݾ, p_tdvalcha, p_tdvalcha, long, 8; + üżüݾ, p_tsvalcha, p_tsvalcha, long, 8; + üż ݾ, p_tvalcha, p_tvalcha, long, 8; + + а, gubun, gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/S2_.res b/ls_sample/sample_python/Res/S2_.res new file mode 100644 index 0000000..65c4be6 --- /dev/null +++ b/ls_sample/sample_python/Res/S2_.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI켱ȣ(S2), S2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/S2__1.res b/ls_sample/sample_python/Res/S2__1.res new file mode 100644 index 0000000..65c4be6 --- /dev/null +++ b/ls_sample/sample_python/Res/S2__1.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI켱ȣ(S2), S2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/S3_.res b/ls_sample/sample_python/Res/S3_.res new file mode 100644 index 0000000..4043fad --- /dev/null +++ b/ls_sample/sample_python/Res/S3_.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIü(S3), S3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + հ, w_avrg, w_avrg, long, 8; + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + , status, status, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/S3__1.res b/ls_sample/sample_python/Res/S3__1.res new file mode 100644 index 0000000..4043fad --- /dev/null +++ b/ls_sample/sample_python/Res/S3__1.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIü(S3), S3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + հ, w_avrg, w_avrg, long, 8; + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + , status, status, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/S4_.res b/ls_sample/sample_python/Res/S4_.res new file mode 100644 index 0000000..109f17f --- /dev/null +++ b/ls_sample/sample_python/Res/S4_.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI⼼(S4), S4_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/S4__1.res b/ls_sample/sample_python/Res/S4__1.res new file mode 100644 index 0000000..109f17f --- /dev/null +++ b/ls_sample/sample_python/Res/S4__1.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI⼼(S4), S4_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SC0.res b/ls_sample/sample_python/Res/SC0.res new file mode 100644 index 0000000..5942248 --- /dev/null +++ b/ls_sample/sample_python/Res/SC0.res @@ -0,0 +1,124 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽ, SC0, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüᱸ, ordchegb, ordchegb, char, 2; + 屸, marketgb, marketgb, char, 2; + ֹ, ordgb, ordgb, char, 2; + ֹȣ, orgordno, orgordno, long, 10; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + йȣ, passwd, passwd, char, 8; + ȣ, expcode, expcode, char, 12; + ȣ, shtcode, shtcode, char, 9; + , hname, hname, char, 40; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprice, ordprice, long, 13; + ֹ, hogagb, hogagb, char, 1; + ȣڵ, etfhogagb, etfhogagb, char, 2; + α׷ȣ, pgmtype, pgmtype, long, 2; + ŵȣ, gmhogagb, gmhogagb, long, 1; + ŵɿ, gmhogayn, gmhogayn, long, 1; + ſ뱸, singb, singb, char, 3; + , loandt, loandt, char, 8; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ڵ, strtgcode, strtgcode, char, 6; + ׷ID, groupid, groupid, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, prtno, prtno, long, 10; + ٽϹȣ, basketno, basketno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ƾ۹ȣ, itemno, itemno, long, 10; + Ա, brwmgmyn, brwmgmyn, long, 1; + ȸȣ, mbrno, mbrno, long, 3; + ó, procgb, procgb, char, 1; + ȣ, admbrchno, admbrchno, char, 3; + ¹ȣ, futaccno, futaccno, char, 20; + ǰ, futmarketgb, futmarketgb, char, 1; + Ÿü, tongsingb, tongsingb, char, 2; + ڱ, lpgb, lpgb, char, 1; + DUMMY, dummy, dummy, char, 20; + ֹȣ, ordno, ordno, long, 10; + ֹð, ordtm, ordtm, char, 9; + ֹȣ, prntordno, prntordno, long, 10; + ȣ, mgempno, mgempno, char, 9; + ֹü, orgordundrqty, orgordundrqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, ordordcancelqty, ordordcancelqty, long, 16; + ȸ۽Źȣ, nmcpysndno, nmcpysndno, long, 10; + ֹݾ, ordamt, ordamt, long, 16; + Ÿű, bnstp, bnstp, char, 1; + ֹȣ, spareordno, spareordno, long, 10; + ݴŸϷùȣ, cvrgseqno, cvrgseqno, long, 10; + ֹȣ, rsvordno, rsvordno, long, 10; + ֹϷùȣ, mtordseqno, mtordseqno, long, 10; + ֹ, spareordqty, spareordqty, long, 16; + ֹȣ, orduserid, orduserid, char, 16; + ǹֹ, spotordqty, spotordqty, long, 16; + ֹ, ordruseqty, ordruseqty, long, 16; + ֹݾ, mnyordamt, mnyordamt, long, 16; + ֹݾ, ordsubstamt, ordsubstamt, long, 16; + ֹݾ, ruseordamt, ruseordamt, long, 16; + ֹݾ, ordcmsnamt, ordcmsnamt, long, 16; + ſ㺸, crdtuseamt, crdtuseamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(D2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsamt, pchsamt, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SC0_1.res b/ls_sample/sample_python/Res/SC0_1.res new file mode 100644 index 0000000..5942248 --- /dev/null +++ b/ls_sample/sample_python/Res/SC0_1.res @@ -0,0 +1,124 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽ, SC0, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüᱸ, ordchegb, ordchegb, char, 2; + 屸, marketgb, marketgb, char, 2; + ֹ, ordgb, ordgb, char, 2; + ֹȣ, orgordno, orgordno, long, 10; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + йȣ, passwd, passwd, char, 8; + ȣ, expcode, expcode, char, 12; + ȣ, shtcode, shtcode, char, 9; + , hname, hname, char, 40; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprice, ordprice, long, 13; + ֹ, hogagb, hogagb, char, 1; + ȣڵ, etfhogagb, etfhogagb, char, 2; + α׷ȣ, pgmtype, pgmtype, long, 2; + ŵȣ, gmhogagb, gmhogagb, long, 1; + ŵɿ, gmhogayn, gmhogayn, long, 1; + ſ뱸, singb, singb, char, 3; + , loandt, loandt, char, 8; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ڵ, strtgcode, strtgcode, char, 6; + ׷ID, groupid, groupid, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, prtno, prtno, long, 10; + ٽϹȣ, basketno, basketno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ƾ۹ȣ, itemno, itemno, long, 10; + Ա, brwmgmyn, brwmgmyn, long, 1; + ȸȣ, mbrno, mbrno, long, 3; + ó, procgb, procgb, char, 1; + ȣ, admbrchno, admbrchno, char, 3; + ¹ȣ, futaccno, futaccno, char, 20; + ǰ, futmarketgb, futmarketgb, char, 1; + Ÿü, tongsingb, tongsingb, char, 2; + ڱ, lpgb, lpgb, char, 1; + DUMMY, dummy, dummy, char, 20; + ֹȣ, ordno, ordno, long, 10; + ֹð, ordtm, ordtm, char, 9; + ֹȣ, prntordno, prntordno, long, 10; + ȣ, mgempno, mgempno, char, 9; + ֹü, orgordundrqty, orgordundrqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, ordordcancelqty, ordordcancelqty, long, 16; + ȸ۽Źȣ, nmcpysndno, nmcpysndno, long, 10; + ֹݾ, ordamt, ordamt, long, 16; + Ÿű, bnstp, bnstp, char, 1; + ֹȣ, spareordno, spareordno, long, 10; + ݴŸϷùȣ, cvrgseqno, cvrgseqno, long, 10; + ֹȣ, rsvordno, rsvordno, long, 10; + ֹϷùȣ, mtordseqno, mtordseqno, long, 10; + ֹ, spareordqty, spareordqty, long, 16; + ֹȣ, orduserid, orduserid, char, 16; + ǹֹ, spotordqty, spotordqty, long, 16; + ֹ, ordruseqty, ordruseqty, long, 16; + ֹݾ, mnyordamt, mnyordamt, long, 16; + ֹݾ, ordsubstamt, ordsubstamt, long, 16; + ֹݾ, ruseordamt, ruseordamt, long, 16; + ֹݾ, ordcmsnamt, ordcmsnamt, long, 16; + ſ㺸, crdtuseamt, crdtuseamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(D2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsamt, pchsamt, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SC1.res b/ls_sample/sample_python/Res/SC1.res new file mode 100644 index 0000000..b31ccd3 --- /dev/null +++ b/ls_sample/sample_python/Res/SC1.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽü, SC1, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SC1_1.res b/ls_sample/sample_python/Res/SC1_1.res new file mode 100644 index 0000000..b31ccd3 --- /dev/null +++ b/ls_sample/sample_python/Res/SC1_1.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽü, SC1, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SC2.res b/ls_sample/sample_python/Res/SC2.res new file mode 100644 index 0000000..35ebc30 --- /dev/null +++ b/ls_sample/sample_python/Res/SC2.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽ, SC2, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SC2_1.res b/ls_sample/sample_python/Res/SC2_1.res new file mode 100644 index 0000000..35ebc30 --- /dev/null +++ b/ls_sample/sample_python/Res/SC2_1.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽ, SC2, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SC3.res b/ls_sample/sample_python/Res/SC3.res new file mode 100644 index 0000000..0762977 --- /dev/null +++ b/ls_sample/sample_python/Res/SC3.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽ, SC3, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SC3_1.res b/ls_sample/sample_python/Res/SC3_1.res new file mode 100644 index 0000000..0762977 --- /dev/null +++ b/ls_sample/sample_python/Res/SC3_1.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽ, SC3, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SC4.res b/ls_sample/sample_python/Res/SC4.res new file mode 100644 index 0000000..651969b --- /dev/null +++ b/ls_sample/sample_python/Res/SC4.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽź, SC4, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SC4_1.res b/ls_sample/sample_python/Res/SC4_1.res new file mode 100644 index 0000000..651969b --- /dev/null +++ b/ls_sample/sample_python/Res/SC4_1.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽź, SC4, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SHC.res b/ls_sample/sample_python/Res/SHC.res new file mode 100644 index 0000000..6b26a96 --- /dev/null +++ b/ls_sample/sample_python/Res/SHC.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP +.Feed, /Ѱ(SHC), SHC, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + /Ѱ, updnlmtprice, updnlmtprice, long, 8; + /Ѱ, updnlmtdrate, updnlmtdrate, float, 6.2; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + Ѱ/Ѱϼ, updnlmtdaycnt, updnlmtdaycnt, long, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SHC_1.res b/ls_sample/sample_python/Res/SHC_1.res new file mode 100644 index 0000000..6b26a96 --- /dev/null +++ b/ls_sample/sample_python/Res/SHC_1.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP +.Feed, /Ѱ(SHC), SHC, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + /Ѱ, updnlmtprice, updnlmtprice, long, 8; + /Ѱ, updnlmtdrate, updnlmtdrate, float, 6.2; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + Ѱ/Ѱϼ, updnlmtdaycnt, updnlmtdaycnt, long, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SHD.res b/ls_sample/sample_python/Res/SHD.res new file mode 100644 index 0000000..76065b5 --- /dev/null +++ b/ls_sample/sample_python/Res/SHD.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, /ѰŻ(SHD), SHD, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + /Ѱ, updnlmtprice, updnlmtprice, long, 8; + /Ѱ, updnlmtdrate, updnlmtdrate, float, 6.2; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SHD_1.res b/ls_sample/sample_python/Res/SHD_1.res new file mode 100644 index 0000000..76065b5 --- /dev/null +++ b/ls_sample/sample_python/Res/SHD_1.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, /ѰŻ(SHD), SHD, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + /Ѱ, updnlmtprice, updnlmtprice, long, 8; + /Ѱ, updnlmtdrate, updnlmtdrate, float, 6.2; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SHI.res b/ls_sample/sample_python/Res/SHI.res new file mode 100644 index 0000000..6d0d0c8 --- /dev/null +++ b/ls_sample/sample_python/Res/SHI.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP +.Feed, /Ѱ(SHI), SHI, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + ŵȣѼ, totofferrem, totofferrem, long, 12; + żȣѼ, totbidrem, totbidrem, long, 12; +Ѱ/ѰԽð, updnlmtstime, updnlmtstime, char, 6; + Ѱ/Ѱϼ, updnlmtdaycnt, updnlmtdaycnt, long, 3; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SHI_1.res b/ls_sample/sample_python/Res/SHI_1.res new file mode 100644 index 0000000..6d0d0c8 --- /dev/null +++ b/ls_sample/sample_python/Res/SHI_1.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP +.Feed, /Ѱ(SHI), SHI, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + ŵȣѼ, totofferrem, totofferrem, long, 12; + żȣѼ, totbidrem, totbidrem, long, 12; +Ѱ/ѰԽð, updnlmtstime, updnlmtstime, char, 6; + Ѱ/Ѱϼ, updnlmtdaycnt, updnlmtdaycnt, long, 3; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SHO.res b/ls_sample/sample_python/Res/SHO.res new file mode 100644 index 0000000..e31456e --- /dev/null +++ b/ls_sample/sample_python/Res/SHO.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP +.Feed, /ѰŻ(SHO), SHO, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + /Ѱ, updnlmtprice, updnlmtprice, long, 8; + /Ѱ, updnlmtchange, updnlmtchange, long, 8; + /Ѱ, updnlmtdrate, updnlmtdrate, float, 6.2; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/SHO_1.res b/ls_sample/sample_python/Res/SHO_1.res new file mode 100644 index 0000000..e31456e --- /dev/null +++ b/ls_sample/sample_python/Res/SHO_1.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP +.Feed, /ѰŻ(SHO), SHO, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + /Ѱ, updnlmtprice, updnlmtprice, long, 8; + /Ѱ, updnlmtchange, updnlmtchange, long, 8; + /Ѱ, updnlmtdrate, updnlmtdrate, float, 6.2; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/TC1.res b/ls_sample/sample_python/Res/TC1.res new file mode 100644 index 0000000..147a808 --- /dev/null +++ b/ls_sample/sample_python/Res/TC1.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿֹܼ, TC1, block, key=7, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + KEY, key, key, char, 11; + ID, user, user, char, 8; + + ID, svc_id, svc_id, char, 4; + ֹ, ordr_dt, ordr_dt, char, 8; + ȣ, brn_cd, brn_cd, char, 3; + ֹȣ, ordr_no, ordr_no, long, 10; + ֹȣ, orgn_ordr_no, orgn_ordr_no, long, 10; + ֹȣ, mthr_ordr_no, mthr_ordr_no, long, 10; + ¹ȣ, ac_no, ac_no, char, 11; + ڵ, is_cd, is_cd, char, 30; + ŵż, s_b_ccd, s_b_ccd, char, 1; + , ordr_ccd, ordr_ccd, char, 1; + ֹڵ, ordr_typ_cd, ordr_typ_cd, char, 1; + ֹⰣڵ, ordr_typ_prd_ccd, ordr_typ_prd_ccd, char, 2; + ֹ, ordr_aplc_strt_dt, ordr_aplc_strt_dt, char, 8; + ֹ, ordr_aplc_end_dt, ordr_aplc_end_dt, char, 8; + ֹ, ordr_prc, ordr_prc, double, 18.11; + ֹǰ, cndt_ordr_prc, cndt_ordr_prc, double, 18.11; + ֹ, ordr_q, ordr_q, long, 12; + ֹð, ordr_tm, ordr_tm, char, 9; + ID, userid, userid, char, 8; + , xrc_rsv_tcp_code, xrc_rsv_tcp_code, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/TC1_1.res b/ls_sample/sample_python/Res/TC1_1.res new file mode 100644 index 0000000..147a808 --- /dev/null +++ b/ls_sample/sample_python/Res/TC1_1.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿֹܼ, TC1, block, key=7, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + KEY, key, key, char, 11; + ID, user, user, char, 8; + + ID, svc_id, svc_id, char, 4; + ֹ, ordr_dt, ordr_dt, char, 8; + ȣ, brn_cd, brn_cd, char, 3; + ֹȣ, ordr_no, ordr_no, long, 10; + ֹȣ, orgn_ordr_no, orgn_ordr_no, long, 10; + ֹȣ, mthr_ordr_no, mthr_ordr_no, long, 10; + ¹ȣ, ac_no, ac_no, char, 11; + ڵ, is_cd, is_cd, char, 30; + ŵż, s_b_ccd, s_b_ccd, char, 1; + , ordr_ccd, ordr_ccd, char, 1; + ֹڵ, ordr_typ_cd, ordr_typ_cd, char, 1; + ֹⰣڵ, ordr_typ_prd_ccd, ordr_typ_prd_ccd, char, 2; + ֹ, ordr_aplc_strt_dt, ordr_aplc_strt_dt, char, 8; + ֹ, ordr_aplc_end_dt, ordr_aplc_end_dt, char, 8; + ֹ, ordr_prc, ordr_prc, double, 18.11; + ֹǰ, cndt_ordr_prc, cndt_ordr_prc, double, 18.11; + ֹ, ordr_q, ordr_q, long, 12; + ֹð, ordr_tm, ordr_tm, char, 9; + ID, userid, userid, char, 8; + , xrc_rsv_tcp_code, xrc_rsv_tcp_code, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/TC2.res b/ls_sample/sample_python/Res/TC2.res new file mode 100644 index 0000000..e30e1d9 --- /dev/null +++ b/ls_sample/sample_python/Res/TC2.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼ, TC2, block, key=7, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + KEY, key, key, char, 11; + ID, user, user, char, 8; + + ID, svc_id, svc_id, char, 4; + ֹ, ordr_dt, ordr_dt, char, 8; + ȣ, brn_cd, brn_cd, char, 3; + ֹȣ, ordr_no, ordr_no, long, 10; + ֹȣ, orgn_ordr_no, orgn_ordr_no, long, 10; + ֹȣ, mthr_ordr_no, mthr_ordr_no, long, 10; + ¹ȣ, ac_no, ac_no, char, 11; + ڵ, is_cd, is_cd, char, 30; + ŵż, s_b_ccd, s_b_ccd, char, 1; + , ordr_ccd, ordr_ccd, char, 1; + ֹڵ, ordr_typ_cd, ordr_typ_cd, char, 1; + ֹⰣڵ, ordr_typ_prd_ccd, ordr_typ_prd_ccd, char, 2; + ֹ, ordr_aplc_strt_dt, ordr_aplc_strt_dt, char, 8; + ֹ, ordr_aplc_end_dt, ordr_aplc_end_dt, char, 8; + ֹ, ordr_prc, ordr_prc, double, 18.11; + ֹǰ, cndt_ordr_prc, cndt_ordr_prc, double, 18.11; + ֹ, ordr_q, ordr_q, long, 12; + ֹð, ordr_tm, ordr_tm, char, 9; + ȣȮμ, cnfr_q, cnfr_q, long, 12; + ȣźλڵ, rfsl_cd, rfsl_cd, char, 4; + ȣźλڵ, text, text, char, 80; + ID, user_id, user_id, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/TC2_1.res b/ls_sample/sample_python/Res/TC2_1.res new file mode 100644 index 0000000..e30e1d9 --- /dev/null +++ b/ls_sample/sample_python/Res/TC2_1.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼ, TC2, block, key=7, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + KEY, key, key, char, 11; + ID, user, user, char, 8; + + ID, svc_id, svc_id, char, 4; + ֹ, ordr_dt, ordr_dt, char, 8; + ȣ, brn_cd, brn_cd, char, 3; + ֹȣ, ordr_no, ordr_no, long, 10; + ֹȣ, orgn_ordr_no, orgn_ordr_no, long, 10; + ֹȣ, mthr_ordr_no, mthr_ordr_no, long, 10; + ¹ȣ, ac_no, ac_no, char, 11; + ڵ, is_cd, is_cd, char, 30; + ŵż, s_b_ccd, s_b_ccd, char, 1; + , ordr_ccd, ordr_ccd, char, 1; + ֹڵ, ordr_typ_cd, ordr_typ_cd, char, 1; + ֹⰣڵ, ordr_typ_prd_ccd, ordr_typ_prd_ccd, char, 2; + ֹ, ordr_aplc_strt_dt, ordr_aplc_strt_dt, char, 8; + ֹ, ordr_aplc_end_dt, ordr_aplc_end_dt, char, 8; + ֹ, ordr_prc, ordr_prc, double, 18.11; + ֹǰ, cndt_ordr_prc, cndt_ordr_prc, double, 18.11; + ֹ, ordr_q, ordr_q, long, 12; + ֹð, ordr_tm, ordr_tm, char, 9; + ȣȮμ, cnfr_q, cnfr_q, long, 12; + ȣźλڵ, rfsl_cd, rfsl_cd, char, 4; + ȣźλڵ, text, text, char, 80; + ID, user_id, user_id, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/TC3.res b/ls_sample/sample_python/Res/TC3.res new file mode 100644 index 0000000..cd3c542 --- /dev/null +++ b/ls_sample/sample_python/Res/TC3.res @@ -0,0 +1,44 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼü, TC3, block, key=7, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + KEY, key, key, char, 11; + ID, user, user, char, 8; + + ID, svc_id, svc_id, char, 4; + ֹ, ordr_dt, ordr_dt, char, 8; + ȣ, brn_cd, brn_cd, char, 3; + ֹȣ, ordr_no, ordr_no, long, 10; + ֹȣ, orgn_ordr_no, orgn_ordr_no, long, 10; + ֹȣ, mthr_ordr_no, mthr_ordr_no, long, 10; + ¹ȣ, ac_no, ac_no, char, 11; + ڵ, is_cd, is_cd, char, 30; + ŵż, s_b_ccd, s_b_ccd, char, 1; + , ordr_ccd, ordr_ccd, char, 1; + ü, ccls_q, ccls_q, long, 15; + üᰡ, ccls_prc, ccls_prc, double, 18.11; + üȣ, ccls_no, ccls_no, char, 10; + üð, ccls_tm, ccls_tm, char, 9; + մܰ, avg_byng_uprc, avg_byng_uprc, double, 18.11; + Աݾ, byug_amt, byug_amt, double, 25.8; + û, clr_pl_amt, clr_pl_amt, double, 19.2; + Ź, ent_fee, ent_fee, double, 19.2; + ܰ, fcm_fee, fcm_fee, long, 19; + ID, userid, userid, char, 8; + 簡, now_prc, now_prc, double, 18.11; + ȭڵ, crncy_cd, crncy_cd, char, 3; + , mtrt_dt, mtrt_dt, char, 8; + ֹǰڵ, ord_prdt_tp_code, ord_prdt_tp_code, char, 1; + ֹǰڵ, exec_prdt_tp_code, exec_prdt_tp_code, char, 1; + 񿩺, sprd_base_isu_yn, sprd_base_isu_yn, char, 1; + FILLER1, filler1, filler1, char, 8; + FILLER2, filler2, filler2, char, 30; + ڵ, sprd_is_cd, sprd_is_cd, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/TC3_1.res b/ls_sample/sample_python/Res/TC3_1.res new file mode 100644 index 0000000..cd3c542 --- /dev/null +++ b/ls_sample/sample_python/Res/TC3_1.res @@ -0,0 +1,44 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼü, TC3, block, key=7, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + KEY, key, key, char, 11; + ID, user, user, char, 8; + + ID, svc_id, svc_id, char, 4; + ֹ, ordr_dt, ordr_dt, char, 8; + ȣ, brn_cd, brn_cd, char, 3; + ֹȣ, ordr_no, ordr_no, long, 10; + ֹȣ, orgn_ordr_no, orgn_ordr_no, long, 10; + ֹȣ, mthr_ordr_no, mthr_ordr_no, long, 10; + ¹ȣ, ac_no, ac_no, char, 11; + ڵ, is_cd, is_cd, char, 30; + ŵż, s_b_ccd, s_b_ccd, char, 1; + , ordr_ccd, ordr_ccd, char, 1; + ü, ccls_q, ccls_q, long, 15; + üᰡ, ccls_prc, ccls_prc, double, 18.11; + üȣ, ccls_no, ccls_no, char, 10; + üð, ccls_tm, ccls_tm, char, 9; + մܰ, avg_byng_uprc, avg_byng_uprc, double, 18.11; + Աݾ, byug_amt, byug_amt, double, 25.8; + û, clr_pl_amt, clr_pl_amt, double, 19.2; + Ź, ent_fee, ent_fee, double, 19.2; + ܰ, fcm_fee, fcm_fee, long, 19; + ID, userid, userid, char, 8; + 簡, now_prc, now_prc, double, 18.11; + ȭڵ, crncy_cd, crncy_cd, char, 3; + , mtrt_dt, mtrt_dt, char, 8; + ֹǰڵ, ord_prdt_tp_code, ord_prdt_tp_code, char, 1; + ֹǰڵ, exec_prdt_tp_code, exec_prdt_tp_code, char, 1; + 񿩺, sprd_base_isu_yn, sprd_base_isu_yn, char, 1; + FILLER1, filler1, filler1, char, 8; + FILLER2, filler2, filler2, char, 30; + ڵ, sprd_is_cd, sprd_is_cd, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/VI_.res b/ls_sample/sample_python/Res/VI_.res new file mode 100644 index 0000000..961674b --- /dev/null +++ b/ls_sample/sample_python/Res/VI_.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, VIߵ(VI_), VI_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ(KEY), shcode, shcode, char, 6; + end + OutBlock,,output; + begin + (0: 1:ߵ 2:ߵ 3:&) , vi_gubun , vi_gubun , char, 1; + VIߵذ , svi_recprice, svi_recprice, long, 8; + VIߵذ , dvi_recprice, dvi_recprice, long, 8; + VIߵ , vi_trgprice , vi_trgprice , long, 8; + ڵ(KEY) , shcode , shcode , char, 6; + ڵ , ref_shcode, ref_shcode, char, 6; + ð , time, time, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/VI__1.res b/ls_sample/sample_python/Res/VI__1.res new file mode 100644 index 0000000..961674b --- /dev/null +++ b/ls_sample/sample_python/Res/VI__1.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, VIߵ(VI_), VI_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ(KEY), shcode, shcode, char, 6; + end + OutBlock,,output; + begin + (0: 1:ߵ 2:ߵ 3:&) , vi_gubun , vi_gubun , char, 1; + VIߵذ , svi_recprice, svi_recprice, long, 8; + VIߵذ , dvi_recprice, dvi_recprice, long, 8; + VIߵ , vi_trgprice , vi_trgprice , long, 8; + ڵ(KEY) , shcode , shcode , char, 6; + ڵ , ref_shcode, ref_shcode, char, 6; + ð , time, time, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/WOC.res b/ls_sample/sample_python/Res/WOC.res new file mode 100644 index 0000000..2783489 --- /dev/null +++ b/ls_sample/sample_python/Res/WOC.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܿɼ 簡ü(WOC), WOC, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 16; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 16; + ü() , ovsdate , ovsdate , char , 8; + ü(ѱ) , kordate , kordate , char , 8; + üð() , trdtm , trdtm , char , 6; + üð(ѱ) , kortm , kortm , char , 6; + üᰡ , curpr , curpr , double , 15.9; + ϴ , ydiffpr , ydiffpr , double , 15.9; + ϴȣ , ydiffSign , ydiffSign , char , 1; + ð , open , open , double , 15.9; + , high , high , double , 15.9; + , low , low , double , 15.9; + , chgrate , chgrate , float , 6.2; + Ǻü , trdq , trdq , long , 10; + ü , totq , totq , char , 15; + üᱸ , cgubun , cgubun , char , 1; + ŵü , mdvolume , mdvolume , char , 15; + żü , msvolume , msvolume , char , 15; + 帶 , ovsmkend , ovsmkend , char , 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/WOC_1.res b/ls_sample/sample_python/Res/WOC_1.res new file mode 100644 index 0000000..2783489 --- /dev/null +++ b/ls_sample/sample_python/Res/WOC_1.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܿɼ 簡ü(WOC), WOC, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 16; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 16; + ü() , ovsdate , ovsdate , char , 8; + ü(ѱ) , kordate , kordate , char , 8; + üð() , trdtm , trdtm , char , 6; + üð(ѱ) , kortm , kortm , char , 6; + üᰡ , curpr , curpr , double , 15.9; + ϴ , ydiffpr , ydiffpr , double , 15.9; + ϴȣ , ydiffSign , ydiffSign , char , 1; + ð , open , open , double , 15.9; + , high , high , double , 15.9; + , low , low , double , 15.9; + , chgrate , chgrate , float , 6.2; + Ǻü , trdq , trdq , long , 10; + ü , totq , totq , char , 15; + üᱸ , cgubun , cgubun , char , 1; + ŵü , mdvolume , mdvolume , char , 15; + żü , msvolume , msvolume , char , 15; + 帶 , ovsmkend , ovsmkend , char , 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/WOH.res b/ls_sample/sample_python/Res/WOH.res new file mode 100644 index 0000000..e18ff8d --- /dev/null +++ b/ls_sample/sample_python/Res/WOH.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܿɼ ȣ(WOH), WOH, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 16; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 16 ; + ȣð , hotime , hotime , char , 6 ; + + ŵȣ 1 , offerho1 , offerho1 , double , 15.9; + żȣ 1 , bidho1 , bidho1 , double , 15.9; + ŵȣ ܷ 1 , offerrem1 , offerrem1 , long , 10; + żȣ ܷ 1 , bidrem1 , bidrem1 , long , 10; + ŵȣ Ǽ 1 , offerno1 , offerno1 , long , 10; + żȣ Ǽ 1 , bidno1 , bidno1 , long , 10; + + ŵȣ 2 , offerho2 , offerho2 , double , 15.9; + żȣ 2 , bidho2 , bidho2 , double , 15.9; + ŵȣ ܷ 2 , offerrem2 , offerrem2 , long , 10; + żȣ ܷ 2 , bidrem2 , bidrem2 , long , 10; + ŵȣ Ǽ 2 , offerno2 , offerno2 , long , 10; + żȣ Ǽ 2 , bidno2 , bidno2 , long , 10; + + ŵȣ 3 , offerho3 , offerho3 , double , 15.9; + żȣ 3 , bidho3 , bidho3 , double , 15.9; + ŵȣ ܷ 3 , offerrem3 , offerrem3 , long , 10; + żȣ ܷ 3 , bidrem3 , bidrem3 , long , 10; + ŵȣ Ǽ 3 , offerno3 , offerno3 , long , 10; + żȣ Ǽ 3 , bidno3 , bidno3 , long , 10; + + ŵȣ 4 , offerho4 , offerho4 , double , 15.9; + żȣ 4 , bidho4 , bidho4 , double , 15.9; + ŵȣ ܷ 4 , offerrem4 , offerrem4 , long , 10; + żȣ ܷ 4 , bidrem4 , bidrem4 , long , 10; + ŵȣ Ǽ 4 , offerno4 , offerno4 , long , 10; + żȣ Ǽ 4 , bidno4 , bidno4 , long , 10; + + ŵȣ 5 , offerho5 , offerho5 , double , 15.9; + żȣ 5 , bidho5 , bidho5 , double , 15.9; + ŵȣ ܷ 5 , offerrem5 , offerrem5 , long , 10; + żȣ ܷ 5 , bidrem5 , bidrem5 , long , 10; + ŵȣ Ǽ 5 , offerno5 , offerno5 , long , 10; + żȣ Ǽ 5 , bidno5 , bidno5 , long , 10; + + ŵȣѰǼ , totoffercnt , totoffercnt , long , 10; + żȣѰǼ , totbidcnt , totbidcnt , long , 10; + ŵȣѼ , totofferrem , totofferrem , long , 10; + żȣѼ , totbidrem , totbidrem , long , 10; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/WOH_1.res b/ls_sample/sample_python/Res/WOH_1.res new file mode 100644 index 0000000..e18ff8d --- /dev/null +++ b/ls_sample/sample_python/Res/WOH_1.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܿɼ ȣ(WOH), WOH, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 16; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 16 ; + ȣð , hotime , hotime , char , 6 ; + + ŵȣ 1 , offerho1 , offerho1 , double , 15.9; + żȣ 1 , bidho1 , bidho1 , double , 15.9; + ŵȣ ܷ 1 , offerrem1 , offerrem1 , long , 10; + żȣ ܷ 1 , bidrem1 , bidrem1 , long , 10; + ŵȣ Ǽ 1 , offerno1 , offerno1 , long , 10; + żȣ Ǽ 1 , bidno1 , bidno1 , long , 10; + + ŵȣ 2 , offerho2 , offerho2 , double , 15.9; + żȣ 2 , bidho2 , bidho2 , double , 15.9; + ŵȣ ܷ 2 , offerrem2 , offerrem2 , long , 10; + żȣ ܷ 2 , bidrem2 , bidrem2 , long , 10; + ŵȣ Ǽ 2 , offerno2 , offerno2 , long , 10; + żȣ Ǽ 2 , bidno2 , bidno2 , long , 10; + + ŵȣ 3 , offerho3 , offerho3 , double , 15.9; + żȣ 3 , bidho3 , bidho3 , double , 15.9; + ŵȣ ܷ 3 , offerrem3 , offerrem3 , long , 10; + żȣ ܷ 3 , bidrem3 , bidrem3 , long , 10; + ŵȣ Ǽ 3 , offerno3 , offerno3 , long , 10; + żȣ Ǽ 3 , bidno3 , bidno3 , long , 10; + + ŵȣ 4 , offerho4 , offerho4 , double , 15.9; + żȣ 4 , bidho4 , bidho4 , double , 15.9; + ŵȣ ܷ 4 , offerrem4 , offerrem4 , long , 10; + żȣ ܷ 4 , bidrem4 , bidrem4 , long , 10; + ŵȣ Ǽ 4 , offerno4 , offerno4 , long , 10; + żȣ Ǽ 4 , bidno4 , bidno4 , long , 10; + + ŵȣ 5 , offerho5 , offerho5 , double , 15.9; + żȣ 5 , bidho5 , bidho5 , double , 15.9; + ŵȣ ܷ 5 , offerrem5 , offerrem5 , long , 10; + żȣ ܷ 5 , bidrem5 , bidrem5 , long , 10; + ŵȣ Ǽ 5 , offerno5 , offerno5 , long , 10; + żȣ Ǽ 5 , bidno5 , bidno5 , long , 10; + + ŵȣѰǼ , totoffercnt , totoffercnt , long , 10; + żȣѰǼ , totbidcnt , totbidcnt , long , 10; + ŵȣѼ , totofferrem , totofferrem , long , 10; + żȣѼ , totbidrem , totbidrem , long , 10; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/YC3.res b/ls_sample/sample_python/Res/YC3.res new file mode 100644 index 0000000..2bafabd --- /dev/null +++ b/ls_sample/sample_python/Res/YC3.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ǰü(YC3), YC3, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, float, 9.2; + ü, yevolume, yevolume, long, 6; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, float, 9.2; +üᰡ, jnilydrate, jnilydrate, float, 9.2; + ڵ, shcode, shcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/YC3_1.res b/ls_sample/sample_python/Res/YC3_1.res new file mode 100644 index 0000000..2bafabd --- /dev/null +++ b/ls_sample/sample_python/Res/YC3_1.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ǰü(YC3), YC3, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, float, 9.2; + ü, yevolume, yevolume, long, 6; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, float, 9.2; +üᰡ, jnilydrate, jnilydrate, float, 9.2; + ڵ, shcode, shcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/YFC.res b/ls_sample/sample_python/Res/YFC.res new file mode 100644 index 0000000..cb69a08 --- /dev/null +++ b/ls_sample/sample_python/Res/YFC.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ü(YFC), YFC, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, float, 6.2; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, float, 6.2; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ڵ, futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +YFC \ No newline at end of file diff --git a/ls_sample/sample_python/Res/YFC_1.res b/ls_sample/sample_python/Res/YFC_1.res new file mode 100644 index 0000000..cb69a08 --- /dev/null +++ b/ls_sample/sample_python/Res/YFC_1.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ü(YFC), YFC, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, float, 6.2; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, float, 6.2; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ڵ, futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +YFC \ No newline at end of file diff --git a/ls_sample/sample_python/Res/YJC.res b/ls_sample/sample_python/Res/YJC.res new file mode 100644 index 0000000..2be386a --- /dev/null +++ b/ls_sample/sample_python/Res/YJC.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļü(YJC), YJC, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, long, 10; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 10; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ڵ, futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/YJC_1.res b/ls_sample/sample_python/Res/YJC_1.res new file mode 100644 index 0000000..2be386a --- /dev/null +++ b/ls_sample/sample_python/Res/YJC_1.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļü(YJC), YJC, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, long, 10; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 10; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ڵ, futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/YJ_.res b/ls_sample/sample_python/Res/YJ_.res new file mode 100644 index 0000000..9a24a54 --- /dev/null +++ b/ls_sample/sample_python/Res/YJ_.res @@ -0,0 +1,21 @@ +BEGIN_FUNCTION_MAP +.Feed, (YJ), YJ_, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + ð, time, time, char, 6; + , jisu, jisu, float, 8.2; + ϴ񱸺, sign, sign, char, 1; + Ϻ, change, change, float, 8.2; + , drate, drate, float, 6.2; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 8; + ŷ, value, value, long, 8; + ڵ, upcode, upcode, char, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/YJ__1.res b/ls_sample/sample_python/Res/YJ__1.res new file mode 100644 index 0000000..9a24a54 --- /dev/null +++ b/ls_sample/sample_python/Res/YJ__1.res @@ -0,0 +1,21 @@ +BEGIN_FUNCTION_MAP +.Feed, (YJ), YJ_, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + ð, time, time, char, 6; + , jisu, jisu, float, 8.2; + ϴ񱸺, sign, sign, char, 1; + Ϻ, change, change, float, 8.2; + , drate, drate, float, 6.2; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 8; + ŷ, value, value, long, 8; + ڵ, upcode, upcode, char, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/YK3.res b/ls_sample/sample_python/Res/YK3.res new file mode 100644 index 0000000..13ff699 --- /dev/null +++ b/ls_sample/sample_python/Res/YK3.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQü(YK3), YK3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + üᰡ, yeprice, yeprice, long, 8; + ü, yevolume, yevolume, long, 12; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 8; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ŵȣ, yofferho0, yofferho0, long, 8; + żȣ, ybidho0, ybidho0, long, 8; + ŵȣ, yofferrem0, yofferrem0, long, 12; + żȣ, ybidrem0, ybidrem0, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/YK3_1.res b/ls_sample/sample_python/Res/YK3_1.res new file mode 100644 index 0000000..13ff699 --- /dev/null +++ b/ls_sample/sample_python/Res/YK3_1.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQü(YK3), YK3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + üᰡ, yeprice, yeprice, long, 8; + ü, yevolume, yevolume, long, 12; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 8; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ŵȣ, yofferho0, yofferho0, long, 8; + żȣ, ybidho0, ybidho0, long, 8; + ŵȣ, yofferrem0, yofferrem0, long, 12; + żȣ, ybidrem0, ybidrem0, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/YOC.res b/ls_sample/sample_python/Res/YOC.res new file mode 100644 index 0000000..04783d1 --- /dev/null +++ b/ls_sample/sample_python/Res/YOC.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ɼǿü(YOC), YOC, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, float, 6.2; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, float, 6.2; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +YOC \ No newline at end of file diff --git a/ls_sample/sample_python/Res/YOC_1.res b/ls_sample/sample_python/Res/YOC_1.res new file mode 100644 index 0000000..04783d1 --- /dev/null +++ b/ls_sample/sample_python/Res/YOC_1.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ɼǿü(YOC), YOC, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, float, 6.2; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, float, 6.2; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +YOC \ No newline at end of file diff --git a/ls_sample/sample_python/Res/YS3.res b/ls_sample/sample_python/Res/YS3.res new file mode 100644 index 0000000..880424a --- /dev/null +++ b/ls_sample/sample_python/Res/YS3.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIü(YS3), YS3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + üᰡ, yeprice, yeprice, long, 8; + ü, yevolume, yevolume, long, 12; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 8; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ŵȣ, yofferho0, yofferho0, long, 8; + żȣ, ybidho0, ybidho0, long, 8; + ŵȣ, yofferrem0, yofferrem0, long, 12; + żȣ, ybidrem0, ybidrem0, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/YS3_1.res b/ls_sample/sample_python/Res/YS3_1.res new file mode 100644 index 0000000..880424a --- /dev/null +++ b/ls_sample/sample_python/Res/YS3_1.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIü(YS3), YS3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + üᰡ, yeprice, yeprice, long, 8; + ü, yevolume, yevolume, long, 12; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 8; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ŵȣ, yofferho0, yofferho0, long, 8; + żȣ, ybidho0, ybidho0, long, 8; + ŵȣ, yofferrem0, yofferrem0, long, 12; + żȣ, ybidrem0, ybidrem0, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/Ys3_4ELW.res b/ls_sample/sample_python/Res/Ys3_4ELW.res new file mode 100644 index 0000000..e5d4d36 --- /dev/null +++ b/ls_sample/sample_python/Res/Ys3_4ELW.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWü(Ys3), Ys3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + üᰡ, yeprice, yeprice, long, 8; + ü, yevolume, yevolume, long, 12; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 8; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ŵȣ, yofferho0, yofferho0, long, 8; + żȣ, ybidho0, ybidho0, long, 8; + ŵȣ, yofferrem0, yofferrem0, long, 12; + żȣ, ybidrem0, ybidrem0, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/Ys3_4ELW_1.res b/ls_sample/sample_python/Res/Ys3_4ELW_1.res new file mode 100644 index 0000000..e5d4d36 --- /dev/null +++ b/ls_sample/sample_python/Res/Ys3_4ELW_1.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWü(Ys3), Ys3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + üᰡ, yeprice, yeprice, long, 8; + ü, yevolume, yevolume, long, 12; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 8; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ŵȣ, yofferho0, yofferho0, long, 8; + żȣ, ybidho0, ybidho0, long, 8; + ŵȣ, yofferrem0, yofferrem0, long, 12; + żȣ, ybidrem0, ybidrem0, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/h2_4ELW.res b/ls_sample/sample_python/Res/h2_4ELW.res new file mode 100644 index 0000000..887fd5d --- /dev/null +++ b/ls_sample/sample_python/Res/h2_4ELW.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWðȣܷ(h2), h2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ðܸŵܷ, tmofferrem, tmofferrem, long, 12; + ðܸżܷ, tmbidrem, tmbidrem, long, 12; +ðܸŵ, pretmoffercha, pretmoffercha, long, 12; +ðܸż, pretmbidcha, pretmbidcha, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/h2_4ELW_2.res b/ls_sample/sample_python/Res/h2_4ELW_2.res new file mode 100644 index 0000000..887fd5d --- /dev/null +++ b/ls_sample/sample_python/Res/h2_4ELW_2.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWðȣܷ(h2), h2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ðܸŵܷ, tmofferrem, tmofferrem, long, 12; + ðܸżܷ, tmbidrem, tmbidrem, long, 12; +ðܸŵ, pretmoffercha, pretmoffercha, long, 12; +ðܸż, pretmbidcha, pretmbidcha, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/h3_4ELW.res b/ls_sample/sample_python/Res/h3_4ELW.res new file mode 100644 index 0000000..613d772 --- /dev/null +++ b/ls_sample/sample_python/Res/h3_4ELW.res @@ -0,0 +1,78 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWȣܷ(h3), h3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + LPŵȣ1, lp_offerho1, lp_offerho1, long, 9; + LPżȣ1, lp_bidho1, lp_bidho1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + LPŵȣ2, lp_offerho2, lp_offerho2, long, 9; + LPżȣ2, lp_bidho2, lp_bidho2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + LPŵȣ3, lp_offerho3, lp_offerho3, long, 9; + LPżȣ3, lp_bidho3, lp_bidho3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + LPŵȣ4, lp_offerho4, lp_offerho4, long, 9; + LPżȣ4, lp_bidho4, lp_bidho4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + LPŵȣ5, lp_offerho5, lp_offerho5, long, 9; + LPżȣ5, lp_bidho5, lp_bidho5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + LPŵȣ6, lp_offerho6, lp_offerho6, long, 9; + LPżȣ6, lp_bidho6, lp_bidho6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + LPŵȣ7, lp_offerho7, lp_offerho7, long, 9; + LPżȣ7, lp_bidho7, lp_bidho7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + LPŵȣ8, lp_offerho8, lp_offerho8, long, 9; + LPżȣ8, lp_bidho8, lp_bidho8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + LPŵȣ9, lp_offerho9, lp_offerho9, long, 9; + LPżȣ9, lp_bidho9, lp_bidho9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + LPŵȣ10, lp_offerho10, lp_offerho10, long, 9; + LPżȣ10, lp_bidho10, lp_bidho10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + , spread, spread, float, 6.2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/h3_4ELW_2.res b/ls_sample/sample_python/Res/h3_4ELW_2.res new file mode 100644 index 0000000..613d772 --- /dev/null +++ b/ls_sample/sample_python/Res/h3_4ELW_2.res @@ -0,0 +1,78 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWȣܷ(h3), h3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + LPŵȣ1, lp_offerho1, lp_offerho1, long, 9; + LPżȣ1, lp_bidho1, lp_bidho1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + LPŵȣ2, lp_offerho2, lp_offerho2, long, 9; + LPżȣ2, lp_bidho2, lp_bidho2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + LPŵȣ3, lp_offerho3, lp_offerho3, long, 9; + LPżȣ3, lp_bidho3, lp_bidho3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + LPŵȣ4, lp_offerho4, lp_offerho4, long, 9; + LPżȣ4, lp_bidho4, lp_bidho4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + LPŵȣ5, lp_offerho5, lp_offerho5, long, 9; + LPżȣ5, lp_bidho5, lp_bidho5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + LPŵȣ6, lp_offerho6, lp_offerho6, long, 9; + LPżȣ6, lp_bidho6, lp_bidho6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + LPŵȣ7, lp_offerho7, lp_offerho7, long, 9; + LPżȣ7, lp_bidho7, lp_bidho7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + LPŵȣ8, lp_offerho8, lp_offerho8, long, 9; + LPżȣ8, lp_bidho8, lp_bidho8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + LPŵȣ9, lp_offerho9, lp_offerho9, long, 9; + LPżȣ9, lp_bidho9, lp_bidho9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + LPŵȣ10, lp_offerho10, lp_offerho10, long, 9; + LPżȣ10, lp_bidho10, lp_bidho10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + , spread, spread, float, 6.2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/k1_4ELW.res b/ls_sample/sample_python/Res/k1_4ELW.res new file mode 100644 index 0000000..8bfb53f --- /dev/null +++ b/ls_sample/sample_python/Res/k1_4ELW.res @@ -0,0 +1,69 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWŷ(k1), k1_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵǻڵ1 , offerno1, offerno1, char, 3; + żǻڵ1 , bidno1, bidno1, char, 3; + ŵȸ1 , offertrad1, offertrad1, char, 6; + żȸ1 , bidtrad1, bidtrad1, char, 6; + ŵŷ1, tradmdvol1, tradmdvol1, long, 10; + żŷ1, tradmsvol1, tradmsvol1, long, 10; + ŵŷ1, tradmdrate1, tradmdrate1, float, 6.2; + ŵŷ1, tradmsrate1, tradmsrate1, float, 6.2; + ŵŷ1, tradmdcha1, tradmdcha1, long, 10; + żŷ1, tradmscha1, tradmscha1, long, 10; + ŵǻڵ2 , offerno2, offerno2, char, 3; + żǻڵ2 , bidno2, bidno2, char, 3; + ŵȸ2 , offertrad2, offertrad2, char, 6; + żȸ2 , bidtrad2, bidtrad2, char, 6; + ŵŷ2, tradmdvol2, tradmdvol2, long, 10; + żŷ2, tradmsvol2, tradmsvol2, long, 10; + ŵŷ2, tradmdrate2, tradmdrate2, float, 6.2; + żŷ2, tradmsrate2, tradmsrate2, float, 6.2; + ŵŷ2, tradmdcha2, tradmdcha2, long, 10; + żŷ2, tradmscha2, tradmscha2, long, 10; + ŵǻڵ3 , offerno3, offerno3, char, 3; + żǻڵ3 , bidno3, bidno3, char, 3; + ŵȸ3 , offertrad3, offertrad3, char, 6; + żȸ3 , bidtrad3, bidtrad3, char, 6; + ŵŷ3, tradmdvol3, tradmdvol3, long, 10; + żŷ3, tradmsvol3, tradmsvol3, long, 10; + ŵŷ3, tradmdrate3, tradmdrate3, float, 6.2; + żŷ3, tradmsrate3, tradmsrate3, float, 6.2; + ŵŷ3, tradmdcha3, tradmdcha3, long, 10; + żŷ3, tradmscha3, tradmscha3, long, 10; + ŵǻڵ4 , offerno4, offerno4, char, 3; + żǻڵ4 , bidno4, bidno4, char, 3; + ŵȸ4 , offertrad4, offertrad4, char, 6; + żȸ4 , bidtrad4, bidtrad4, char, 6; + ŵŷ4, tradmdvol4, tradmdvol4, long, 10; + żŷ4, tradmsvol4, tradmsvol4, long, 10; + ŵŷ4, tradmdrate4, tradmdrate4, float, 6.2; + żŷ4, tradmsrate4, tradmsrate4, float, 6.2; + ŵŷ4, tradmdcha4, tradmdcha4, long, 10; + żŷ4, tradmscha4, tradmscha4, long, 10; + ŵǻڵ5 , offerno5, offerno5, char, 3; + żǻڵ5 , bidno5, bidno5, char, 3; + ŵȸ5 , offertrad5, offertrad5, char, 6; + żȸ5 , bidtrad5, bidtrad5, char, 6; + ŵŷ5, tradmdvol5, tradmdvol5, long, 10; + żŷ5, tradmsvol5, tradmsvol5, long, 10; + ŵŷ5, tradmdrate5, tradmdrate5, float, 6.2; + żŷ5, tradmsrate5, tradmsrate5, float, 6.2; + ŵŷ5, tradmdcha5, tradmdcha5, long, 10; + żŷ5, tradmscha5, tradmscha5, long, 10; + ܱǻŵհ, ftradmdvol, ftradmdvol, char, 10; + ܱǻżհ, ftradmsvol, ftradmsvol, char, 10; +ܱǻŵŷ, ftradmdrate, ftradmdrate, float, 6.2; +ܱǻżŷ, ftradmsrate, ftradmsrate, float, 6.2; +ܱǻŵŷ, ftradmdcha, ftradmdcha, char, 10; +ܱǻżŷ, ftradmscha, ftradmscha, char, 10; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/k1_4ELW_2.res b/ls_sample/sample_python/Res/k1_4ELW_2.res new file mode 100644 index 0000000..8bfb53f --- /dev/null +++ b/ls_sample/sample_python/Res/k1_4ELW_2.res @@ -0,0 +1,69 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWŷ(k1), k1_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵǻڵ1 , offerno1, offerno1, char, 3; + żǻڵ1 , bidno1, bidno1, char, 3; + ŵȸ1 , offertrad1, offertrad1, char, 6; + żȸ1 , bidtrad1, bidtrad1, char, 6; + ŵŷ1, tradmdvol1, tradmdvol1, long, 10; + żŷ1, tradmsvol1, tradmsvol1, long, 10; + ŵŷ1, tradmdrate1, tradmdrate1, float, 6.2; + ŵŷ1, tradmsrate1, tradmsrate1, float, 6.2; + ŵŷ1, tradmdcha1, tradmdcha1, long, 10; + żŷ1, tradmscha1, tradmscha1, long, 10; + ŵǻڵ2 , offerno2, offerno2, char, 3; + żǻڵ2 , bidno2, bidno2, char, 3; + ŵȸ2 , offertrad2, offertrad2, char, 6; + żȸ2 , bidtrad2, bidtrad2, char, 6; + ŵŷ2, tradmdvol2, tradmdvol2, long, 10; + żŷ2, tradmsvol2, tradmsvol2, long, 10; + ŵŷ2, tradmdrate2, tradmdrate2, float, 6.2; + żŷ2, tradmsrate2, tradmsrate2, float, 6.2; + ŵŷ2, tradmdcha2, tradmdcha2, long, 10; + żŷ2, tradmscha2, tradmscha2, long, 10; + ŵǻڵ3 , offerno3, offerno3, char, 3; + żǻڵ3 , bidno3, bidno3, char, 3; + ŵȸ3 , offertrad3, offertrad3, char, 6; + żȸ3 , bidtrad3, bidtrad3, char, 6; + ŵŷ3, tradmdvol3, tradmdvol3, long, 10; + żŷ3, tradmsvol3, tradmsvol3, long, 10; + ŵŷ3, tradmdrate3, tradmdrate3, float, 6.2; + żŷ3, tradmsrate3, tradmsrate3, float, 6.2; + ŵŷ3, tradmdcha3, tradmdcha3, long, 10; + żŷ3, tradmscha3, tradmscha3, long, 10; + ŵǻڵ4 , offerno4, offerno4, char, 3; + żǻڵ4 , bidno4, bidno4, char, 3; + ŵȸ4 , offertrad4, offertrad4, char, 6; + żȸ4 , bidtrad4, bidtrad4, char, 6; + ŵŷ4, tradmdvol4, tradmdvol4, long, 10; + żŷ4, tradmsvol4, tradmsvol4, long, 10; + ŵŷ4, tradmdrate4, tradmdrate4, float, 6.2; + żŷ4, tradmsrate4, tradmsrate4, float, 6.2; + ŵŷ4, tradmdcha4, tradmdcha4, long, 10; + żŷ4, tradmscha4, tradmscha4, long, 10; + ŵǻڵ5 , offerno5, offerno5, char, 3; + żǻڵ5 , bidno5, bidno5, char, 3; + ŵȸ5 , offertrad5, offertrad5, char, 6; + żȸ5 , bidtrad5, bidtrad5, char, 6; + ŵŷ5, tradmdvol5, tradmdvol5, long, 10; + żŷ5, tradmsvol5, tradmsvol5, long, 10; + ŵŷ5, tradmdrate5, tradmdrate5, float, 6.2; + żŷ5, tradmsrate5, tradmsrate5, float, 6.2; + ŵŷ5, tradmdcha5, tradmdcha5, long, 10; + żŷ5, tradmscha5, tradmscha5, long, 10; + ܱǻŵհ, ftradmdvol, ftradmdvol, char, 10; + ܱǻżհ, ftradmsvol, ftradmsvol, char, 10; +ܱǻŵŷ, ftradmdrate, ftradmdrate, float, 6.2; +ܱǻżŷ, ftradmsrate, ftradmsrate, float, 6.2; +ܱǻŵŷ, ftradmdcha, ftradmdcha, char, 10; +ܱǻżŷ, ftradmscha, ftradmscha, char, 10; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/o3101.res b/ls_sample/sample_python/Res/o3101.res new file mode 100644 index 0000000..8dd1fcc --- /dev/null +++ b/ls_sample/sample_python/Res/o3101.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼȸ(o3101)-API,o3101,attr,block,headtype=A; + BEGIN_DATA_MAP + o3101InBlock,⺻Է,input; + begin + Է±(),gubun,gubun,char,1; + end + o3101OutBlock,-,output,occurs; + begin + ڵ,Symbol,Symbol,char,8; + ,SymbolNm,SymbolNm,char,50; + ġ(ѱ),ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + ǰڵ,GdsCd,GdsCd,char,3; + (),LstngYr,LstngYr,char,4; + (),LstngM,LstngM,char,1; + 갡,EcPrc,EcPrc,double,15.9; + ŷ۽ð,DlStrtTm,DlStrtTm,char,6; + ŷð,DlEndTm,DlEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3101_2.res b/ls_sample/sample_python/Res/o3101_2.res new file mode 100644 index 0000000..8dd1fcc --- /dev/null +++ b/ls_sample/sample_python/Res/o3101_2.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼȸ(o3101)-API,o3101,attr,block,headtype=A; + BEGIN_DATA_MAP + o3101InBlock,⺻Է,input; + begin + Է±(),gubun,gubun,char,1; + end + o3101OutBlock,-,output,occurs; + begin + ڵ,Symbol,Symbol,char,8; + ,SymbolNm,SymbolNm,char,50; + ġ(ѱ),ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + ǰڵ,GdsCd,GdsCd,char,3; + (),LstngYr,LstngYr,char,4; + (),LstngM,LstngM,char,1; + 갡,EcPrc,EcPrc,double,15.9; + ŷ۽ð,DlStrtTm,DlStrtTm,char,6; + ŷð,DlEndTm,DlEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3103.res b/ls_sample/sample_python/Res/o3103.res new file mode 100644 index 0000000..94a2689 --- /dev/null +++ b/ls_sample/sample_python/Res/o3103.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼƮ()(o3103)-API,o3103,attr,block,headtype=A; + BEGIN_DATA_MAP + o3103InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + Nֱ,ncnt,ncnt,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3103OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + ,timediff,timediff,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3103OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3103_2.res b/ls_sample/sample_python/Res/o3103_2.res new file mode 100644 index 0000000..94a2689 --- /dev/null +++ b/ls_sample/sample_python/Res/o3103_2.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼƮ()(o3103)-API,o3103,attr,block,headtype=A; + BEGIN_DATA_MAP + o3103InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + Nֱ,ncnt,ncnt,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3103OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + ,timediff,timediff,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3103OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3104.res b/ls_sample/sample_python/Res/o3104.res new file mode 100644 index 0000000..2a5eabb --- /dev/null +++ b/ls_sample/sample_python/Res/o3104.res @@ -0,0 +1,25 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼϺüȸ(o3104)-API,o3104,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3104InBlock,⺻Է,input; + begin + ȸ,gubun,gubun,char,1; + ڵ,shcode,shcode,char,8; + ȸ,date,date,char,8; + end + o3104OutBlock1,1,output,occurs; + begin + ,chedate,chedate,char,8; + 簡,price,price,double,15.9; + 񱸺,sign,sign,char,1; + ,change,change,double,15.9; + ,diff,diff,float,6.2; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + üᱸ,cgubun,cgubun,char,1; + ŷ,volume,volume,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3104_2.res b/ls_sample/sample_python/Res/o3104_2.res new file mode 100644 index 0000000..2a5eabb --- /dev/null +++ b/ls_sample/sample_python/Res/o3104_2.res @@ -0,0 +1,25 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼϺüȸ(o3104)-API,o3104,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3104InBlock,⺻Է,input; + begin + ȸ,gubun,gubun,char,1; + ڵ,shcode,shcode,char,8; + ȸ,date,date,char,8; + end + o3104OutBlock1,1,output,occurs; + begin + ,chedate,chedate,char,8; + 簡,price,price,double,15.9; + 񱸺,sign,sign,char,1; + ,change,change,double,15.9; + ,diff,diff,float,6.2; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + üᱸ,cgubun,cgubun,char,1; + ŷ,volume,volume,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3105.res b/ls_sample/sample_python/Res/o3105.res new file mode 100644 index 0000000..624db23 --- /dev/null +++ b/ls_sample/sample_python/Res/o3105.res @@ -0,0 +1,71 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ簡()ȸ(o3105)-API,o3105,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3105InBlock,⺻Է,input; + begin + ڵ,symbol,symbol,char,8; + end + o3105OutBlock,,output; + begin + ڵ,Symbol,Symbol,char,8; + ,SymbolNm,SymbolNm,char,50; + ġ,ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + 걸ڵ,EcCd,EcCd,char,1; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + 尳,LstngMCnt,LstngMCnt,long,2; + ǰڵ,GdsCd,GdsCd,char,3; + 屸ڵ,MrktCd,MrktCd,char,3; + Eminiڵ,EminiCd,EminiCd,char,1; + ,LstngYr,LstngYr,char,4; + ,LstngM,LstngM,char,1; + ,SeqNo,SeqNo,long,5; + ,LstngDt,LstngDt,char,8; + ŷ,MtrtDt,MtrtDt,char,8; + ŷ,FnlDlDt,FnlDlDt,char,8; + ε,FstTrsfrDt,FstTrsfrDt,char,8; + 갡,EcPrc,EcPrc,double,15.9; + ŷ(ѱ),DlDt,DlDt,char,8; + ŷ۽ð(ѱ),DlStrtTm,DlStrtTm,char,6; + ŷð(ѱ),DlEndTm,DlEndTm,char,6; + ŷ(),OvsStrDay,OvsStrDay,char,8; + ŷ۽ð(),OvsStrTm,OvsStrTm,char,6; + ŷ(),OvsEndDay,OvsEndDay,char,8; + ŷð(),OvsEndTm,OvsEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + ,TimeDiff,TimeDiff,long,5; + ü,OvsDate,OvsDate,char,8; + ѱü,KorDate,KorDate,char,8; + üð,TrdTm,TrdTm,char,6; + ѱüð,RcvTm,RcvTm,char,6; + üᰡ,TrdP,TrdP,double,15.9; + ü,TrdQ,TrdQ,long,10; + ŷ,TotQ,TotQ,long,15; + üŷ,TrdAmt,TrdAmt,double,15.2; + ŷ,TotAmt,TotAmt,double,15.2; + ð,OpenP,OpenP,double,15.9; + ,HighP,HighP,double,15.9; + ,LowP,LowP,double,15.9; + ,CloseP,CloseP,double,15.9; + ϴ,YdiffP,YdiffP,double,15.9; + ϴ񱸺,YdiffSign,YdiffSign,char,1; + üᱸ,Cgubun,Cgubun,char,1; + ,Diff,Diff,double,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3105_2.res b/ls_sample/sample_python/Res/o3105_2.res new file mode 100644 index 0000000..624db23 --- /dev/null +++ b/ls_sample/sample_python/Res/o3105_2.res @@ -0,0 +1,71 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ簡()ȸ(o3105)-API,o3105,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3105InBlock,⺻Է,input; + begin + ڵ,symbol,symbol,char,8; + end + o3105OutBlock,,output; + begin + ڵ,Symbol,Symbol,char,8; + ,SymbolNm,SymbolNm,char,50; + ġ,ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + 걸ڵ,EcCd,EcCd,char,1; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + 尳,LstngMCnt,LstngMCnt,long,2; + ǰڵ,GdsCd,GdsCd,char,3; + 屸ڵ,MrktCd,MrktCd,char,3; + Eminiڵ,EminiCd,EminiCd,char,1; + ,LstngYr,LstngYr,char,4; + ,LstngM,LstngM,char,1; + ,SeqNo,SeqNo,long,5; + ,LstngDt,LstngDt,char,8; + ŷ,MtrtDt,MtrtDt,char,8; + ŷ,FnlDlDt,FnlDlDt,char,8; + ε,FstTrsfrDt,FstTrsfrDt,char,8; + 갡,EcPrc,EcPrc,double,15.9; + ŷ(ѱ),DlDt,DlDt,char,8; + ŷ۽ð(ѱ),DlStrtTm,DlStrtTm,char,6; + ŷð(ѱ),DlEndTm,DlEndTm,char,6; + ŷ(),OvsStrDay,OvsStrDay,char,8; + ŷ۽ð(),OvsStrTm,OvsStrTm,char,6; + ŷ(),OvsEndDay,OvsEndDay,char,8; + ŷð(),OvsEndTm,OvsEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + ,TimeDiff,TimeDiff,long,5; + ü,OvsDate,OvsDate,char,8; + ѱü,KorDate,KorDate,char,8; + üð,TrdTm,TrdTm,char,6; + ѱüð,RcvTm,RcvTm,char,6; + üᰡ,TrdP,TrdP,double,15.9; + ü,TrdQ,TrdQ,long,10; + ŷ,TotQ,TotQ,long,15; + üŷ,TrdAmt,TrdAmt,double,15.2; + ŷ,TotAmt,TotAmt,double,15.2; + ð,OpenP,OpenP,double,15.9; + ,HighP,HighP,double,15.9; + ,LowP,LowP,double,15.9; + ,CloseP,CloseP,double,15.9; + ϴ,YdiffP,YdiffP,double,15.9; + ϴ񱸺,YdiffSign,YdiffSign,char,1; + üᱸ,Cgubun,Cgubun,char,1; + ,Diff,Diff,double,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3106.res b/ls_sample/sample_python/Res/o3106.res new file mode 100644 index 0000000..2d80240 --- /dev/null +++ b/ls_sample/sample_python/Res/o3106.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ簡ȣȸ(o3106)-API,o3106,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3106InBlock,⺻Է,input; + begin + ڵ,symbol,symbol,char,8; + end + o3106OutBlock,,output; + begin + ڵ,symbol,symbol,char,8; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ȣŽð,hotime,hotime,char,6; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣ2,offerho2,offerho2,double,15.9; + żȣ2,bidho2,bidho2,double,15.9; + ŵȣǼ2,offercnt2,offercnt2,long,10; + żȣǼ2,bidcnt2,bidcnt2,long,10; + ŵȣ2,offerrem2,offerrem2,long,10; + żȣ2,bidrem2,bidrem2,long,10; + ŵȣ3,offerho3,offerho3,double,15.9; + żȣ3,bidho3,bidho3,double,15.9; + ŵȣǼ3,offercnt3,offercnt3,long,10; + żȣǼ3,bidcnt3,bidcnt3,long,10; + ŵȣ3,offerrem3,offerrem3,long,10; + żȣ3,bidrem3,bidrem3,long,10; + ŵȣ4,offerho4,offerho4,double,15.9; + żȣ4,bidho4,bidho4,double,15.9; + ŵȣǼ4,offercnt4,offercnt4,long,10; + żȣǼ4,bidcnt4,bidcnt4,long,10; + ŵȣ4,offerrem4,offerrem4,long,10; + żȣ4,bidrem4,bidrem4,long,10; + ŵȣ5,offerho5,offerho5,double,15.9; + żȣ5,bidho5,bidho5,double,15.9; + ŵȣǼ5,offercnt5,offercnt5,long,10; + żȣǼ5,bidcnt5,bidcnt5,long,10; + ŵȣ5,offerrem5,offerrem5,long,10; + żȣ5,bidrem5,bidrem5,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3106_2.res b/ls_sample/sample_python/Res/o3106_2.res new file mode 100644 index 0000000..2d80240 --- /dev/null +++ b/ls_sample/sample_python/Res/o3106_2.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ簡ȣȸ(o3106)-API,o3106,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3106InBlock,⺻Է,input; + begin + ڵ,symbol,symbol,char,8; + end + o3106OutBlock,,output; + begin + ڵ,symbol,symbol,char,8; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ȣŽð,hotime,hotime,char,6; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣ2,offerho2,offerho2,double,15.9; + żȣ2,bidho2,bidho2,double,15.9; + ŵȣǼ2,offercnt2,offercnt2,long,10; + żȣǼ2,bidcnt2,bidcnt2,long,10; + ŵȣ2,offerrem2,offerrem2,long,10; + żȣ2,bidrem2,bidrem2,long,10; + ŵȣ3,offerho3,offerho3,double,15.9; + żȣ3,bidho3,bidho3,double,15.9; + ŵȣǼ3,offercnt3,offercnt3,long,10; + żȣǼ3,bidcnt3,bidcnt3,long,10; + ŵȣ3,offerrem3,offerrem3,long,10; + żȣ3,bidrem3,bidrem3,long,10; + ŵȣ4,offerho4,offerho4,double,15.9; + żȣ4,bidho4,bidho4,double,15.9; + ŵȣǼ4,offercnt4,offercnt4,long,10; + żȣǼ4,bidcnt4,bidcnt4,long,10; + ŵȣ4,offerrem4,offerrem4,long,10; + żȣ4,bidrem4,bidrem4,long,10; + ŵȣ5,offerho5,offerho5,double,15.9; + żȣ5,bidho5,bidho5,double,15.9; + ŵȣǼ5,offercnt5,offercnt5,long,10; + żȣǼ5,bidcnt5,bidcnt5,long,10; + ŵȣ5,offerrem5,offerrem5,long,10; + żȣ5,bidrem5,bidrem5,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3107.res b/ls_sample/sample_python/Res/o3107.res new file mode 100644 index 0000000..786d847 --- /dev/null +++ b/ls_sample/sample_python/Res/o3107.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼȸ(o3107)-API,o3107,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3107InBlock,⺻Է,input,occurs; + begin + ɺ,symbol,symbol,char,8; + end + o3107OutBlock,,output,occurs; + begin + ڵ,symbol,symbol,char,8; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3107_2.res b/ls_sample/sample_python/Res/o3107_2.res new file mode 100644 index 0000000..786d847 --- /dev/null +++ b/ls_sample/sample_python/Res/o3107_2.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼȸ(o3107)-API,o3107,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3107InBlock,⺻Է,input,occurs; + begin + ɺ,symbol,symbol,char,8; + end + o3107OutBlock,,output,occurs; + begin + ڵ,symbol,symbol,char,8; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3108.res b/ls_sample/sample_python/Res/o3108.res new file mode 100644 index 0000000..24cc5e1 --- /dev/null +++ b/ls_sample/sample_python/Res/o3108.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼƮ(ֿ)(o3108)-API,o3108,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3108InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,16; + ֱⱸ,gubun,gubun,char,1; + ûǼ,qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + end + o3108OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + Ͻð,jisiga,jisiga,double,15.9; + ϰ,jihigh,jihigh,double,15.9; + ,jilow,jilow,double,15.9; + ,jiclose,jiclose,double,15.9; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,double,15.9; + ϰ,dihigh,dihigh,double,15.9; + ,dilow,dilow,double,15.9; + ,diclose,diclose,double,15.9; + ۽ð,mk_stime,mk_stime,char,6; + 帶ð,mk_etime,mk_etime,char,6; + ,cts_date,cts_date,char,8; + ڵīƮ,rec_count,rec_count,long,7; + end + o3108OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3108_2.res b/ls_sample/sample_python/Res/o3108_2.res new file mode 100644 index 0000000..24cc5e1 --- /dev/null +++ b/ls_sample/sample_python/Res/o3108_2.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼƮ(ֿ)(o3108)-API,o3108,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3108InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,16; + ֱⱸ,gubun,gubun,char,1; + ûǼ,qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + end + o3108OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + Ͻð,jisiga,jisiga,double,15.9; + ϰ,jihigh,jihigh,double,15.9; + ,jilow,jilow,double,15.9; + ,jiclose,jiclose,double,15.9; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,double,15.9; + ϰ,dihigh,dihigh,double,15.9; + ,dilow,dilow,double,15.9; + ,diclose,diclose,double,15.9; + ۽ð,mk_stime,mk_stime,char,6; + 帶ð,mk_etime,mk_etime,char,6; + ,cts_date,cts_date,char,8; + ڵīƮ,rec_count,rec_count,long,7; + end + o3108OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3116.res b/ls_sample/sample_python/Res/o3116.res new file mode 100644 index 0000000..add8827 --- /dev/null +++ b/ls_sample/sample_python/Res/o3116.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼð뺰(Tick)ü(o3116)-API,o3116,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3116InBlock,⺻Է,input; + begin + ȸ(0:1:),gubun,gubun,char,1; + ڵ,shcode,shcode,char,8; + ȸ,readcnt,readcnt,long,4; + CTS,cts_seq,cts_seq,long,8; + end + o3116OutBlock,,output; + begin + CTS,cts_seq,cts_seq,long,8; + end + o3116OutBlock1,1,output,occurs; + begin + ,ovsdate,ovsdate,char,8; + ð,ovstime,ovstime,char,6; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ü,cvolume,cvolume,long,10; + ŷ,volume,volume,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3116_2.res b/ls_sample/sample_python/Res/o3116_2.res new file mode 100644 index 0000000..add8827 --- /dev/null +++ b/ls_sample/sample_python/Res/o3116_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼð뺰(Tick)ü(o3116)-API,o3116,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3116InBlock,⺻Է,input; + begin + ȸ(0:1:),gubun,gubun,char,1; + ڵ,shcode,shcode,char,8; + ȸ,readcnt,readcnt,long,4; + CTS,cts_seq,cts_seq,long,8; + end + o3116OutBlock,,output; + begin + CTS,cts_seq,cts_seq,long,8; + end + o3116OutBlock1,1,output,occurs; + begin + ,ovsdate,ovsdate,char,8; + ð,ovstime,ovstime,char,6; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ü,cvolume,cvolume,long,10; + ŷ,volume,volume,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3117.res b/ls_sample/sample_python/Res/o3117.res new file mode 100644 index 0000000..9e7b642 --- /dev/null +++ b/ls_sample/sample_python/Res/o3117.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼƮNTick(o3117)-API,o3117,attr,block,headtype=A; + BEGIN_DATA_MAP + o3117InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3117OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + ڵīƮ,rec_count,rec_count,long,7; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3117OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3117_2.res b/ls_sample/sample_python/Res/o3117_2.res new file mode 100644 index 0000000..9e7b642 --- /dev/null +++ b/ls_sample/sample_python/Res/o3117_2.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼƮNTick(o3117)-API,o3117,attr,block,headtype=A; + BEGIN_DATA_MAP + o3117InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3117OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + ڵīƮ,rec_count,rec_count,long,7; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3117OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3121.res b/ls_sample/sample_python/Res/o3121.res new file mode 100644 index 0000000..14121ba --- /dev/null +++ b/ls_sample/sample_python/Res/o3121.res @@ -0,0 +1,48 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼǸȸ(o3121)-API,o3121,attr,block,headtype=A; + BEGIN_DATA_MAP + o3121InBlock,⺻Է,input; + begin + 屸,MktGb,MktGb,char,1; + ɼDZʻǰڵ,BscGdsCd,BscGdsCd,char,10; + end + o3121OutBlock,-,output,occurs; + begin + ڵ,Symbol,Symbol,char,16; + ,SymbolNm,SymbolNm,char,50; + ġ(ѱ),ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + ǰڵ,GdsCd,GdsCd,char,3; + (),LstngYr,LstngYr,char,4; + (),LstngM,LstngM,char,1; + 갡,EcPrc,EcPrc,double,15.9; + ŷ۽ð,DlStrtTm,DlStrtTm,char,6; + ŷð,DlEndTm,DlEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + ɼ簡,XrcPrc,XrcPrc,char,15; + ڻذ,FdasBasePrc,FdasBasePrc,char,15; + ɼDz,OptTpCode,OptTpCode,char,1; + Ǹ籸ڵ,RgtXrcPtnCode,RgtXrcPtnCode,char,1; + ATM,Moneyness,Moneyness,char,1; + ؿĻڻڵ,LastSettPtnCode,LastSettPtnCode,char,30; + ؿܿɼּȣ,OptMinOrcPrc,OptMinOrcPrc,char,15; + ؿܿɼּұȣ,OptMinBaseOrcPrc,OptMinBaseOrcPrc,char,15; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3121_2.res b/ls_sample/sample_python/Res/o3121_2.res new file mode 100644 index 0000000..14121ba --- /dev/null +++ b/ls_sample/sample_python/Res/o3121_2.res @@ -0,0 +1,48 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼǸȸ(o3121)-API,o3121,attr,block,headtype=A; + BEGIN_DATA_MAP + o3121InBlock,⺻Է,input; + begin + 屸,MktGb,MktGb,char,1; + ɼDZʻǰڵ,BscGdsCd,BscGdsCd,char,10; + end + o3121OutBlock,-,output,occurs; + begin + ڵ,Symbol,Symbol,char,16; + ,SymbolNm,SymbolNm,char,50; + ġ(ѱ),ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + ǰڵ,GdsCd,GdsCd,char,3; + (),LstngYr,LstngYr,char,4; + (),LstngM,LstngM,char,1; + 갡,EcPrc,EcPrc,double,15.9; + ŷ۽ð,DlStrtTm,DlStrtTm,char,6; + ŷð,DlEndTm,DlEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + ɼ簡,XrcPrc,XrcPrc,char,15; + ڻذ,FdasBasePrc,FdasBasePrc,char,15; + ɼDz,OptTpCode,OptTpCode,char,1; + Ǹ籸ڵ,RgtXrcPtnCode,RgtXrcPtnCode,char,1; + ATM,Moneyness,Moneyness,char,1; + ؿĻڻڵ,LastSettPtnCode,LastSettPtnCode,char,30; + ؿܿɼּȣ,OptMinOrcPrc,OptMinOrcPrc,char,15; + ؿܿɼּұȣ,OptMinBaseOrcPrc,OptMinBaseOrcPrc,char,15; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3123.res b/ls_sample/sample_python/Res/o3123.res new file mode 100644 index 0000000..a9fde09 --- /dev/null +++ b/ls_sample/sample_python/Res/o3123.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮ()(o3123)-API,o3123,attr,block,headtype=A; + BEGIN_DATA_MAP + o3123InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + Nֱ,ncnt,ncnt,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3123OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + ,timediff,timediff,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3123OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3123_2.res b/ls_sample/sample_python/Res/o3123_2.res new file mode 100644 index 0000000..a9fde09 --- /dev/null +++ b/ls_sample/sample_python/Res/o3123_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮ()(o3123)-API,o3123,attr,block,headtype=A; + BEGIN_DATA_MAP + o3123InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + Nֱ,ncnt,ncnt,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3123OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + ,timediff,timediff,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3123OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3125.res b/ls_sample/sample_python/Res/o3125.res new file mode 100644 index 0000000..08a7dd1 --- /dev/null +++ b/ls_sample/sample_python/Res/o3125.res @@ -0,0 +1,74 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼ簡()ȸ(o3125)-API,o3125,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3125InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,symbol,symbol,char,16; + end + o3125OutBlock,,output; + begin + ڵ,Symbol,Symbol,char,16; + ,SymbolNm,SymbolNm,char,50; + ġ,ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + 걸ڵ,EcCd,EcCd,char,1; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + 尳,LstngMCnt,LstngMCnt,long,2; + ǰڵ,GdsCd,GdsCd,char,3; + 屸ڵ,MrktCd,MrktCd,char,3; + Eminiڵ,EminiCd,EminiCd,char,1; + ,LstngYr,LstngYr,char,4; + ,LstngM,LstngM,char,1; + ,SeqNo,SeqNo,long,5; + ,LstngDt,LstngDt,char,8; + ŷ,MtrtDt,MtrtDt,char,8; + ŷ,FnlDlDt,FnlDlDt,char,8; + ε,FstTrsfrDt,FstTrsfrDt,char,8; + 갡,EcPrc,EcPrc,double,15.9; + ŷ(ѱ),DlDt,DlDt,char,8; + ŷ۽ð(ѱ),DlStrtTm,DlStrtTm,char,6; + ŷð(ѱ),DlEndTm,DlEndTm,char,6; + ŷ(),OvsStrDay,OvsStrDay,char,8; + ŷ۽ð(),OvsStrTm,OvsStrTm,char,6; + ŷ(),OvsEndDay,OvsEndDay,char,8; + ŷð(),OvsEndTm,OvsEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + ,TimeDiff,TimeDiff,long,5; + ü,OvsDate,OvsDate,char,8; + ѱü,KorDate,KorDate,char,8; + üð,TrdTm,TrdTm,char,6; + ѱüð,RcvTm,RcvTm,char,6; + üᰡ,TrdP,TrdP,double,15.9; + ü,TrdQ,TrdQ,long,10; + ŷ,TotQ,TotQ,long,15; + üŷ,TrdAmt,TrdAmt,double,15.2; + ŷ,TotAmt,TotAmt,double,15.2; + ð,OpenP,OpenP,double,15.9; + ,HighP,HighP,double,15.9; + ,LowP,LowP,double,15.9; + ,CloseP,CloseP,double,15.9; + ϴ,YdiffP,YdiffP,double,15.9; + ϴ񱸺,YdiffSign,YdiffSign,char,1; + üᱸ,Cgubun,Cgubun,char,1; + ,Diff,Diff,double,6.2; + ּȣ,MinOrcPrc,MinOrcPrc,double,15.9; + ּұȣ,MinBaseOrcPrc,MinBaseOrcPrc,double,15.9; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3125_2.res b/ls_sample/sample_python/Res/o3125_2.res new file mode 100644 index 0000000..08a7dd1 --- /dev/null +++ b/ls_sample/sample_python/Res/o3125_2.res @@ -0,0 +1,74 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼ簡()ȸ(o3125)-API,o3125,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3125InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,symbol,symbol,char,16; + end + o3125OutBlock,,output; + begin + ڵ,Symbol,Symbol,char,16; + ,SymbolNm,SymbolNm,char,50; + ġ,ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + 걸ڵ,EcCd,EcCd,char,1; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + 尳,LstngMCnt,LstngMCnt,long,2; + ǰڵ,GdsCd,GdsCd,char,3; + 屸ڵ,MrktCd,MrktCd,char,3; + Eminiڵ,EminiCd,EminiCd,char,1; + ,LstngYr,LstngYr,char,4; + ,LstngM,LstngM,char,1; + ,SeqNo,SeqNo,long,5; + ,LstngDt,LstngDt,char,8; + ŷ,MtrtDt,MtrtDt,char,8; + ŷ,FnlDlDt,FnlDlDt,char,8; + ε,FstTrsfrDt,FstTrsfrDt,char,8; + 갡,EcPrc,EcPrc,double,15.9; + ŷ(ѱ),DlDt,DlDt,char,8; + ŷ۽ð(ѱ),DlStrtTm,DlStrtTm,char,6; + ŷð(ѱ),DlEndTm,DlEndTm,char,6; + ŷ(),OvsStrDay,OvsStrDay,char,8; + ŷ۽ð(),OvsStrTm,OvsStrTm,char,6; + ŷ(),OvsEndDay,OvsEndDay,char,8; + ŷð(),OvsEndTm,OvsEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + ,TimeDiff,TimeDiff,long,5; + ü,OvsDate,OvsDate,char,8; + ѱü,KorDate,KorDate,char,8; + üð,TrdTm,TrdTm,char,6; + ѱüð,RcvTm,RcvTm,char,6; + üᰡ,TrdP,TrdP,double,15.9; + ü,TrdQ,TrdQ,long,10; + ŷ,TotQ,TotQ,long,15; + üŷ,TrdAmt,TrdAmt,double,15.2; + ŷ,TotAmt,TotAmt,double,15.2; + ð,OpenP,OpenP,double,15.9; + ,HighP,HighP,double,15.9; + ,LowP,LowP,double,15.9; + ,CloseP,CloseP,double,15.9; + ϴ,YdiffP,YdiffP,double,15.9; + ϴ񱸺,YdiffSign,YdiffSign,char,1; + üᱸ,Cgubun,Cgubun,char,1; + ,Diff,Diff,double,6.2; + ּȣ,MinOrcPrc,MinOrcPrc,double,15.9; + ּұȣ,MinBaseOrcPrc,MinBaseOrcPrc,double,15.9; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3126.res b/ls_sample/sample_python/Res/o3126.res new file mode 100644 index 0000000..620976c --- /dev/null +++ b/ls_sample/sample_python/Res/o3126.res @@ -0,0 +1,60 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼ簡ȣȸ(o3126)-API,o3126,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3126InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,symbol,symbol,char,16; + end + o3126OutBlock,,output; + begin + ڵ,symbol,symbol,char,16; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ȣŽð,hotime,hotime,char,6; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣ2,offerho2,offerho2,double,15.9; + żȣ2,bidho2,bidho2,double,15.9; + ŵȣǼ2,offercnt2,offercnt2,long,10; + żȣǼ2,bidcnt2,bidcnt2,long,10; + ŵȣ2,offerrem2,offerrem2,long,10; + żȣ2,bidrem2,bidrem2,long,10; + ŵȣ3,offerho3,offerho3,double,15.9; + żȣ3,bidho3,bidho3,double,15.9; + ŵȣǼ3,offercnt3,offercnt3,long,10; + żȣǼ3,bidcnt3,bidcnt3,long,10; + ŵȣ3,offerrem3,offerrem3,long,10; + żȣ3,bidrem3,bidrem3,long,10; + ŵȣ4,offerho4,offerho4,double,15.9; + żȣ4,bidho4,bidho4,double,15.9; + ŵȣǼ4,offercnt4,offercnt4,long,10; + żȣǼ4,bidcnt4,bidcnt4,long,10; + ŵȣ4,offerrem4,offerrem4,long,10; + żȣ4,bidrem4,bidrem4,long,10; + ŵȣ5,offerho5,offerho5,double,15.9; + żȣ5,bidho5,bidho5,double,15.9; + ŵȣǼ5,offercnt5,offercnt5,long,10; + żȣǼ5,bidcnt5,bidcnt5,long,10; + ŵȣ5,offerrem5,offerrem5,long,10; + żȣ5,bidrem5,bidrem5,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3126_2.res b/ls_sample/sample_python/Res/o3126_2.res new file mode 100644 index 0000000..620976c --- /dev/null +++ b/ls_sample/sample_python/Res/o3126_2.res @@ -0,0 +1,60 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼ簡ȣȸ(o3126)-API,o3126,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3126InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,symbol,symbol,char,16; + end + o3126OutBlock,,output; + begin + ڵ,symbol,symbol,char,16; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ȣŽð,hotime,hotime,char,6; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣ2,offerho2,offerho2,double,15.9; + żȣ2,bidho2,bidho2,double,15.9; + ŵȣǼ2,offercnt2,offercnt2,long,10; + żȣǼ2,bidcnt2,bidcnt2,long,10; + ŵȣ2,offerrem2,offerrem2,long,10; + żȣ2,bidrem2,bidrem2,long,10; + ŵȣ3,offerho3,offerho3,double,15.9; + żȣ3,bidho3,bidho3,double,15.9; + ŵȣǼ3,offercnt3,offercnt3,long,10; + żȣǼ3,bidcnt3,bidcnt3,long,10; + ŵȣ3,offerrem3,offerrem3,long,10; + żȣ3,bidrem3,bidrem3,long,10; + ŵȣ4,offerho4,offerho4,double,15.9; + żȣ4,bidho4,bidho4,double,15.9; + ŵȣǼ4,offercnt4,offercnt4,long,10; + żȣǼ4,bidcnt4,bidcnt4,long,10; + ŵȣ4,offerrem4,offerrem4,long,10; + żȣ4,bidrem4,bidrem4,long,10; + ŵȣ5,offerho5,offerho5,double,15.9; + żȣ5,bidho5,bidho5,double,15.9; + ŵȣǼ5,offercnt5,offercnt5,long,10; + żȣǼ5,bidcnt5,bidcnt5,long,10; + ŵȣ5,offerrem5,offerrem5,long,10; + żȣ5,bidrem5,bidrem5,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3127.res b/ls_sample/sample_python/Res/o3127.res new file mode 100644 index 0000000..506cee3 --- /dev/null +++ b/ls_sample/sample_python/Res/o3127.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼǰȸ(o3127)-API,o3127,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3127InBlock,⺻Է,input; + begin + Ǽ,nrec,nrec,long,4; + end + o3127InBlock1,⺻Է1,input,occurs; + begin + 屸,mktgb,mktgb,char,1; + ɺ,symbol,symbol,char,16; + end + o3127OutBlock,,output,occurs; + begin + ڵ,symbol,symbol,char,16; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3127_2.res b/ls_sample/sample_python/Res/o3127_2.res new file mode 100644 index 0000000..506cee3 --- /dev/null +++ b/ls_sample/sample_python/Res/o3127_2.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼǰȸ(o3127)-API,o3127,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3127InBlock,⺻Է,input; + begin + Ǽ,nrec,nrec,long,4; + end + o3127InBlock1,⺻Է1,input,occurs; + begin + 屸,mktgb,mktgb,char,1; + ɺ,symbol,symbol,char,16; + end + o3127OutBlock,,output,occurs; + begin + ڵ,symbol,symbol,char,16; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3128.res b/ls_sample/sample_python/Res/o3128.res new file mode 100644 index 0000000..2c74d6d --- /dev/null +++ b/ls_sample/sample_python/Res/o3128.res @@ -0,0 +1,42 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮֿ(o3128)-API,o3128,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3128InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ֱⱸ,gubun,gubun,char,1; + ûǼ,qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + end + o3128OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + Ͻð,jisiga,jisiga,double,15.9; + ϰ,jihigh,jihigh,double,15.9; + ,jilow,jilow,double,15.9; + ,jiclose,jiclose,double,15.9; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,double,15.9; + ϰ,dihigh,dihigh,double,15.9; + ,dilow,dilow,double,15.9; + ,diclose,diclose,double,15.9; + ۽ð,mk_stime,mk_stime,char,6; + 帶ð,mk_etime,mk_etime,char,6; + ,cts_date,cts_date,char,8; + ڵīƮ,rec_count,rec_count,long,7; + end + o3128OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3128_2.res b/ls_sample/sample_python/Res/o3128_2.res new file mode 100644 index 0000000..2c74d6d --- /dev/null +++ b/ls_sample/sample_python/Res/o3128_2.res @@ -0,0 +1,42 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮֿ(o3128)-API,o3128,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3128InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ֱⱸ,gubun,gubun,char,1; + ûǼ,qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + end + o3128OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + Ͻð,jisiga,jisiga,double,15.9; + ϰ,jihigh,jihigh,double,15.9; + ,jilow,jilow,double,15.9; + ,jiclose,jiclose,double,15.9; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,double,15.9; + ϰ,dihigh,dihigh,double,15.9; + ,dilow,dilow,double,15.9; + ,diclose,diclose,double,15.9; + ۽ð,mk_stime,mk_stime,char,6; + 帶ð,mk_etime,mk_etime,char,6; + ,cts_date,cts_date,char,8; + ڵīƮ,rec_count,rec_count,long,7; + end + o3128OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3136.res b/ls_sample/sample_python/Res/o3136.res new file mode 100644 index 0000000..afcf2d1 --- /dev/null +++ b/ls_sample/sample_python/Res/o3136.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼǽð뺰(Tick)ü(o3136)-API,o3136,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3136InBlock,⺻Է,input; + begin + ȸ(0:1:),gubun,gubun,char,1; + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ȸ,readcnt,readcnt,long,4; + CTS,cts_seq,cts_seq,long,8; + end + o3136OutBlock,,output; + begin + CTS,cts_seq,cts_seq,long,8; + end + o3136OutBlock1,1,output,occurs; + begin + ,ovsdate,ovsdate,char,8; + ð,ovstime,ovstime,char,6; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ü,cvolume,cvolume,long,10; + ŷ,volume,volume,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3136_2.res b/ls_sample/sample_python/Res/o3136_2.res new file mode 100644 index 0000000..afcf2d1 --- /dev/null +++ b/ls_sample/sample_python/Res/o3136_2.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼǽð뺰(Tick)ü(o3136)-API,o3136,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3136InBlock,⺻Է,input; + begin + ȸ(0:1:),gubun,gubun,char,1; + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ȸ,readcnt,readcnt,long,4; + CTS,cts_seq,cts_seq,long,8; + end + o3136OutBlock,,output; + begin + CTS,cts_seq,cts_seq,long,8; + end + o3136OutBlock1,1,output,occurs; + begin + ,ovsdate,ovsdate,char,8; + ð,ovstime,ovstime,char,6; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ü,cvolume,cvolume,long,10; + ŷ,volume,volume,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3137.res b/ls_sample/sample_python/Res/o3137.res new file mode 100644 index 0000000..efc6643 --- /dev/null +++ b/ls_sample/sample_python/Res/o3137.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮNTick(o3137)-API,o3137,attr,block,headtype=A; + BEGIN_DATA_MAP + o3137InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3137OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + ڵīƮ,rec_count,rec_count,long,7; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3137OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3137_2.res b/ls_sample/sample_python/Res/o3137_2.res new file mode 100644 index 0000000..efc6643 --- /dev/null +++ b/ls_sample/sample_python/Res/o3137_2.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮNTick(o3137)-API,o3137,attr,block,headtype=A; + BEGIN_DATA_MAP + o3137InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3137OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + ڵīƮ,rec_count,rec_count,long,7; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3137OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3139.res b/ls_sample/sample_python/Res/o3139.res new file mode 100644 index 0000000..791c780 --- /dev/null +++ b/ls_sample/sample_python/Res/o3139.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮNTick()(o3139)-API,o3139,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3139InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3139OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + ڵīƮ,rec_count,rec_count,long,7; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + TickǼ,last_count,last_count,long,4; + end + o3139OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.8; + ,high,high,double,15.8; + ,low,low,double,15.8; + ,close,close,double,15.8; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/o3139_2.res b/ls_sample/sample_python/Res/o3139_2.res new file mode 100644 index 0000000..791c780 --- /dev/null +++ b/ls_sample/sample_python/Res/o3139_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮNTick()(o3139)-API,o3139,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3139InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3139OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + ڵīƮ,rec_count,rec_count,long,7; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + TickǼ,last_count,last_count,long,4; + end + o3139OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.8; + ,high,high,double,15.8; + ,low,low,double,15.8; + ,close,close,double,15.8; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/s2_4ELW.res b/ls_sample/sample_python/Res/s2_4ELW.res new file mode 100644 index 0000000..49fe30c --- /dev/null +++ b/ls_sample/sample_python/Res/s2_4ELW.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, ELW켱ȣ(s2), s2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/s2_4ELW_2.res b/ls_sample/sample_python/Res/s2_4ELW_2.res new file mode 100644 index 0000000..49fe30c --- /dev/null +++ b/ls_sample/sample_python/Res/s2_4ELW_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, ELW켱ȣ(s2), s2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/s3_4ELW.res b/ls_sample/sample_python/Res/s3_4ELW.res new file mode 100644 index 0000000..02be176 --- /dev/null +++ b/ls_sample/sample_python/Res/s3_4ELW.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWü(s3), s3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + հ, w_avrg, w_avrg, long, 8; + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + , status, status, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ̾, premium, premium, float, 8.2; + ATM, moneyness, moneyness, char, 1; + ڵ, shcode, shcode, char, 6; + LP, lpvolume, lpvolume, long, 15; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/s3_4ELW_2.res b/ls_sample/sample_python/Res/s3_4ELW_2.res new file mode 100644 index 0000000..02be176 --- /dev/null +++ b/ls_sample/sample_python/Res/s3_4ELW_2.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWü(s3), s3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + հ, w_avrg, w_avrg, long, 8; + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + , status, status, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ̾, premium, premium, float, 8.2; + ATM, moneyness, moneyness, char, 1; + ڵ, shcode, shcode, char, 6; + LP, lpvolume, lpvolume, long, 15; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/s4_ELW.res b/ls_sample/sample_python/Res/s4_ELW.res new file mode 100644 index 0000000..e732887 --- /dev/null +++ b/ls_sample/sample_python/Res/s4_ELW.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, ELW⼼(s4), s4_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/s4_ELW_2.res b/ls_sample/sample_python/Res/s4_ELW_2.res new file mode 100644 index 0000000..e732887 --- /dev/null +++ b/ls_sample/sample_python/Res/s4_ELW_2.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, ELW⼼(s4), s4_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/t0150.res b/ls_sample/sample_python/Res/t0150.res new file mode 100644 index 0000000..8535ba4 --- /dev/null +++ b/ls_sample/sample_python/Res/t0150.res @@ -0,0 +1,53 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĴϸŸ/(t0150),t0150,tuxcode=t0150, headtype=C; + BEGIN_DATA_MAP + t0150InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0150OutBlock,,output; + begin + ŵ,mdqty,mdqty,long,9; + ŵݾ,mdamt,mdamt,long,18; + ŵ,mdfee,mdfee,long,18; + ŵŷ,mdtax,mdtax,long,18; + ŵƯ,mdargtax,mdargtax,long,18; + ŵ,tmdtax,tmdtax,long,18; + ŵݾ,mdadjamt,mdadjamt,long,18; + ż,msqty,msqty,long,9; + żݾ,msamt,msamt,long,18; + ż,msfee,msfee,long,18; + ż,tmstax,tmstax,long,18; + żݾ,msadjamt,msadjamt,long,18; + հ,tqty,tqty,long,9; + հݾ,tamt,tamt,long,18; + հ,tfee,tfee,long,18; + հŷ,tottax,tottax,long,18; + հƯ,targtax,targtax,long,18; + հ,ttax,ttax,long,18; + հݾ,tadjamt,tadjamt,long,18; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0150OutBlock1,1,output,occurs; + begin + Ÿű,medosu,medosu,char,10; + ȣ,expcode,expcode,char,12; + ,qty,qty,long,9; + ܰ,price,price,long,9; + ݾ,amt,amt,long,18; + ,fee,fee,long,18; + ŷ,tax,tax,long,18; + Ư,argtax,argtax,long,18; + ݾ,adjamt,adjamt,long,18; + ü,middiv,middiv,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t0150_2.res b/ls_sample/sample_python/Res/t0150_2.res new file mode 100644 index 0000000..8535ba4 --- /dev/null +++ b/ls_sample/sample_python/Res/t0150_2.res @@ -0,0 +1,53 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĴϸŸ/(t0150),t0150,tuxcode=t0150, headtype=C; + BEGIN_DATA_MAP + t0150InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0150OutBlock,,output; + begin + ŵ,mdqty,mdqty,long,9; + ŵݾ,mdamt,mdamt,long,18; + ŵ,mdfee,mdfee,long,18; + ŵŷ,mdtax,mdtax,long,18; + ŵƯ,mdargtax,mdargtax,long,18; + ŵ,tmdtax,tmdtax,long,18; + ŵݾ,mdadjamt,mdadjamt,long,18; + ż,msqty,msqty,long,9; + żݾ,msamt,msamt,long,18; + ż,msfee,msfee,long,18; + ż,tmstax,tmstax,long,18; + żݾ,msadjamt,msadjamt,long,18; + հ,tqty,tqty,long,9; + հݾ,tamt,tamt,long,18; + հ,tfee,tfee,long,18; + հŷ,tottax,tottax,long,18; + հƯ,targtax,targtax,long,18; + հ,ttax,ttax,long,18; + հݾ,tadjamt,tadjamt,long,18; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0150OutBlock1,1,output,occurs; + begin + Ÿű,medosu,medosu,char,10; + ȣ,expcode,expcode,char,12; + ,qty,qty,long,9; + ܰ,price,price,long,9; + ݾ,amt,amt,long,18; + ,fee,fee,long,18; + ŷ,tax,tax,long,18; + Ư,argtax,argtax,long,18; + ݾ,adjamt,adjamt,long,18; + ü,middiv,middiv,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t0151.res b/ls_sample/sample_python/Res/t0151.res new file mode 100644 index 0000000..caf7794 --- /dev/null +++ b/ls_sample/sample_python/Res/t0151.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĴϸŸ/()(t0151),t0151,tuxcode=t0151, headtype=C; + BEGIN_DATA_MAP + t0151InBlock,⺻Է,input; + begin + ,date,date,char,8; + ¹ȣ,accno,accno,char,11; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0151OutBlock,,output; + begin + ŵ,mdqty,mdqty,long,9; + ŵݾ,mdamt,mdamt,long,18; + ŵ,mdfee,mdfee,long,18; + ŵŷ,mdtax,mdtax,long,18; + ŵƯ,mdargtax,mdargtax,long,18; + ŵ,tmdtax,tmdtax,long,18; + ŵݾ,mdadjamt,mdadjamt,long,18; + ż,msqty,msqty,long,9; + żݾ,msamt,msamt,long,18; + ż,msfee,msfee,long,18; + ż,tmstax,tmstax,long,18; + żݾ,msadjamt,msadjamt,long,18; + հ,tqty,tqty,long,9; + հݾ,tamt,tamt,long,18; + հ,tfee,tfee,long,18; + հŷ,tottax,tottax,long,18; + հƯ,targtax,targtax,long,18; + հ,ttax,ttax,long,18; + հݾ,tadjamt,tadjamt,long,18; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0151OutBlock1,1,output,occurs; + begin + Ÿű,medosu,medosu,char,10; + ȣ,expcode,expcode,char,12; + ,qty,qty,long,9; + ܰ,price,price,long,9; + ݾ,amt,amt,long,18; + ,fee,fee,long,18; + ŷ,tax,tax,long,18; + Ư,argtax,argtax,long,18; + ݾ,adjamt,adjamt,long,18; + ü,middiv,middiv,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t0151_2.res b/ls_sample/sample_python/Res/t0151_2.res new file mode 100644 index 0000000..caf7794 --- /dev/null +++ b/ls_sample/sample_python/Res/t0151_2.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĴϸŸ/()(t0151),t0151,tuxcode=t0151, headtype=C; + BEGIN_DATA_MAP + t0151InBlock,⺻Է,input; + begin + ,date,date,char,8; + ¹ȣ,accno,accno,char,11; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0151OutBlock,,output; + begin + ŵ,mdqty,mdqty,long,9; + ŵݾ,mdamt,mdamt,long,18; + ŵ,mdfee,mdfee,long,18; + ŵŷ,mdtax,mdtax,long,18; + ŵƯ,mdargtax,mdargtax,long,18; + ŵ,tmdtax,tmdtax,long,18; + ŵݾ,mdadjamt,mdadjamt,long,18; + ż,msqty,msqty,long,9; + żݾ,msamt,msamt,long,18; + ż,msfee,msfee,long,18; + ż,tmstax,tmstax,long,18; + żݾ,msadjamt,msadjamt,long,18; + հ,tqty,tqty,long,9; + հݾ,tamt,tamt,long,18; + հ,tfee,tfee,long,18; + հŷ,tottax,tottax,long,18; + հƯ,targtax,targtax,long,18; + հ,ttax,ttax,long,18; + հݾ,tadjamt,tadjamt,long,18; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0151OutBlock1,1,output,occurs; + begin + Ÿű,medosu,medosu,char,10; + ȣ,expcode,expcode,char,12; + ,qty,qty,long,9; + ܰ,price,price,long,9; + ݾ,amt,amt,long,18; + ,fee,fee,long,18; + ŷ,tax,tax,long,18; + Ư,argtax,argtax,long,18; + ݾ,adjamt,adjamt,long,18; + ü,middiv,middiv,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t0167.res b/ls_sample/sample_python/Res/t0167.res new file mode 100644 index 0000000..dc574e1 --- /dev/null +++ b/ls_sample/sample_python/Res/t0167.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ðȸ(t0167),t0167,block,headtype=A; + BEGIN_DATA_MAP + t0167InBlock,⺻Է,input; + begin + id,id,id,char,8; + end + t0167OutBlock,,output; + begin + (YYYYMMDD),dt,dt,char,8; + ð(HHMMSSssssss),time,time,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t0167_2.res b/ls_sample/sample_python/Res/t0167_2.res new file mode 100644 index 0000000..dc574e1 --- /dev/null +++ b/ls_sample/sample_python/Res/t0167_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ðȸ(t0167),t0167,block,headtype=A; + BEGIN_DATA_MAP + t0167InBlock,⺻Է,input; + begin + id,id,id,char,8; + end + t0167OutBlock,,output; + begin + (YYYYMMDD),dt,dt,char,8; + ð(HHMMSSssssss),time,time,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t0424.res b/ls_sample/sample_python/Res/t0424.res new file mode 100644 index 0000000..67c9888 --- /dev/null +++ b/ls_sample/sample_python/Res/t0424.res @@ -0,0 +1,58 @@ +BEGIN_FUNCTION_MAP + .Func,ֽܰ2(t0424),t0424,attr,tuxcode=t0424,headtype=D; + BEGIN_DATA_MAP + t0424InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + ܰ,prcgb,prcgb,char,1; + üᱸ,chegb,chegb,char,1; + ϰ,dangb,dangb,char,1; + Կ,charge,charge,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,22; + end + t0424OutBlock,,output; + begin + ڻ,sunamt,sunamt,long,18; + ,dtsunik,dtsunik,long,18; + Աݾ,mamt,mamt,long,18; + D2,sunamt1,sunamt1,long,18; + CTS_ȣ,cts_expcode,cts_expcode,char,22; + 򰡱ݾ,tappamt,tappamt,long,18; + 򰡼,tdtsunik,tdtsunik,long,18; + end + t0424OutBlock1,1,output,occurs; + begin + ȣ,expcode,expcode,char,12; + ܰ,jangb,jangb,char,10; + ܰ,janqty,janqty,long,18; + ŵɼ,mdposqt,mdposqt,long,18; + մܰ,pamt,pamt,long,18; + Աݾ,mamt,mamt,long,18; + ݾ,sinamt,sinamt,long,18; + ,lastdt,lastdt,char,8; + ϸżݾ,msat,msat,long,18; + ϸżܰ,mpms,mpms,long,18; + ϸŵݾ,mdat,mdat,long,18; + ϸŵܰ,mpmd,mpmd,long,18; + ϸżݾ,jsat,jsat,long,18; + ϸżܰ,jpms,jpms,long,18; + ϸŵݾ,jdat,jdat,long,18; + ϸŵܰ,jpmd,jpmd,long,18; + ó,sysprocseq,sysprocseq,long,10; + ,loandt,loandt,char,8; + ,hname,hname,char,20; + 屸,marketgb,marketgb,char,1; + 񱸺,jonggb,jonggb,char,1; + ,janrt,janrt,float,10.2; + 簡,price,price,long,8; + 򰡱ݾ,appamt,appamt,long,18; + 򰡼,dtsunik,dtsunik,long,18; + ,sunikrt,sunikrt,float,10.2; + ,fee,fee,long,10; + ,tax,tax,long,10; + ſ,sininter,sininter,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t0424_2.res b/ls_sample/sample_python/Res/t0424_2.res new file mode 100644 index 0000000..67c9888 --- /dev/null +++ b/ls_sample/sample_python/Res/t0424_2.res @@ -0,0 +1,58 @@ +BEGIN_FUNCTION_MAP + .Func,ֽܰ2(t0424),t0424,attr,tuxcode=t0424,headtype=D; + BEGIN_DATA_MAP + t0424InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + ܰ,prcgb,prcgb,char,1; + üᱸ,chegb,chegb,char,1; + ϰ,dangb,dangb,char,1; + Կ,charge,charge,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,22; + end + t0424OutBlock,,output; + begin + ڻ,sunamt,sunamt,long,18; + ,dtsunik,dtsunik,long,18; + Աݾ,mamt,mamt,long,18; + D2,sunamt1,sunamt1,long,18; + CTS_ȣ,cts_expcode,cts_expcode,char,22; + 򰡱ݾ,tappamt,tappamt,long,18; + 򰡼,tdtsunik,tdtsunik,long,18; + end + t0424OutBlock1,1,output,occurs; + begin + ȣ,expcode,expcode,char,12; + ܰ,jangb,jangb,char,10; + ܰ,janqty,janqty,long,18; + ŵɼ,mdposqt,mdposqt,long,18; + մܰ,pamt,pamt,long,18; + Աݾ,mamt,mamt,long,18; + ݾ,sinamt,sinamt,long,18; + ,lastdt,lastdt,char,8; + ϸżݾ,msat,msat,long,18; + ϸżܰ,mpms,mpms,long,18; + ϸŵݾ,mdat,mdat,long,18; + ϸŵܰ,mpmd,mpmd,long,18; + ϸżݾ,jsat,jsat,long,18; + ϸżܰ,jpms,jpms,long,18; + ϸŵݾ,jdat,jdat,long,18; + ϸŵܰ,jpmd,jpmd,long,18; + ó,sysprocseq,sysprocseq,long,10; + ,loandt,loandt,char,8; + ,hname,hname,char,20; + 屸,marketgb,marketgb,char,1; + 񱸺,jonggb,jonggb,char,1; + ,janrt,janrt,float,10.2; + 簡,price,price,long,8; + 򰡱ݾ,appamt,appamt,long,18; + 򰡼,dtsunik,dtsunik,long,18; + ,sunikrt,sunikrt,float,10.2; + ,fee,fee,long,10; + ,tax,tax,long,10; + ſ,sininter,sininter,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t0425.res b/ls_sample/sample_python/Res/t0425.res new file mode 100644 index 0000000..4067124 --- /dev/null +++ b/ls_sample/sample_python/Res/t0425.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func,ֽü/ü(t0425),t0425,attr,tuxcode=t0425,headtype=D; + BEGIN_DATA_MAP + t0425InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + ȣ,expcode,expcode,char,12; + üᱸ,chegb,chegb,char,1; + Ÿű,medosu,medosu,char,1; + ļ,sortgb,sortgb,char,1; + ֹȣ,cts_ordno,cts_ordno,char,10; + end + t0425OutBlock,,output; + begin + ֹ,tqty,tqty,long,18; + ü,tcheqty,tcheqty,long,18; + ѹü,tordrem,tordrem,long,18; + ,cmss,cmss,long,18; + ֹݾ,tamt,tamt,long,18; + Ѹŵüݾ,tmdamt,tmdamt,long,18; + Ѹżüݾ,tmsamt,tmsamt,long,18; + ,tax,tax,long,18; + ֹȣ,cts_ordno,cts_ordno,char,10; + end + t0425OutBlock1,1,output,occurs; + begin + ֹȣ,ordno,ordno,long,10; + ȣ,expcode,expcode,char,12; + ,medosu,medosu,char,10; + ֹ,qty,qty,long,9; + ֹ,price,price,long,9; + ü,cheqty,cheqty,long,9; + üᰡ,cheprice,cheprice,long,9; + üܷ,ordrem,ordrem,long,9; + Ȯμ,cfmqty,cfmqty,long,9; + ,status,status,char,10; + ֹȣ,orgordno,orgordno,long,10; + ,ordgb,ordgb,char,20; + ֹð,ordtime,ordtime,char,8; + ֹü,ordermtd,ordermtd,char,10; + ó,sysprocseq,sysprocseq,long,10; + ȣ,hogagb,hogagb,char,2; + 簡,price1,price1,long,8; + ֹ,orggb,orggb,char,2; + ſ뱸,singb,singb,char,2; + ,loandt,loandt,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t0425_2.res b/ls_sample/sample_python/Res/t0425_2.res new file mode 100644 index 0000000..4067124 --- /dev/null +++ b/ls_sample/sample_python/Res/t0425_2.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func,ֽü/ü(t0425),t0425,attr,tuxcode=t0425,headtype=D; + BEGIN_DATA_MAP + t0425InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + ȣ,expcode,expcode,char,12; + üᱸ,chegb,chegb,char,1; + Ÿű,medosu,medosu,char,1; + ļ,sortgb,sortgb,char,1; + ֹȣ,cts_ordno,cts_ordno,char,10; + end + t0425OutBlock,,output; + begin + ֹ,tqty,tqty,long,18; + ü,tcheqty,tcheqty,long,18; + ѹü,tordrem,tordrem,long,18; + ,cmss,cmss,long,18; + ֹݾ,tamt,tamt,long,18; + Ѹŵüݾ,tmdamt,tmdamt,long,18; + Ѹżüݾ,tmsamt,tmsamt,long,18; + ,tax,tax,long,18; + ֹȣ,cts_ordno,cts_ordno,char,10; + end + t0425OutBlock1,1,output,occurs; + begin + ֹȣ,ordno,ordno,long,10; + ȣ,expcode,expcode,char,12; + ,medosu,medosu,char,10; + ֹ,qty,qty,long,9; + ֹ,price,price,long,9; + ü,cheqty,cheqty,long,9; + üᰡ,cheprice,cheprice,long,9; + üܷ,ordrem,ordrem,long,9; + Ȯμ,cfmqty,cfmqty,long,9; + ,status,status,char,10; + ֹȣ,orgordno,orgordno,long,10; + ,ordgb,ordgb,char,20; + ֹð,ordtime,ordtime,char,8; + ֹü,ordermtd,ordermtd,char,10; + ó,sysprocseq,sysprocseq,long,10; + ȣ,hogagb,hogagb,char,2; + 簡,price1,price1,long,8; + ֹ,orggb,orggb,char,2; + ſ뱸,singb,singb,char,2; + ,loandt,loandt,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t0434.res b/ls_sample/sample_python/Res/t0434.res new file mode 100644 index 0000000..c04c4e3 --- /dev/null +++ b/ls_sample/sample_python/Res/t0434.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼü/ü(t0434),t0434,tuxcode=t0434,headtype=D; + BEGIN_DATA_MAP + t0434InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + ȣ,expcode,expcode,char,8; + üᱸ,chegb,chegb,char,1; + ļ,sortgb,sortgb,char,1; + CTS_ֹȣ,cts_ordno,cts_ordno,char,7; + end + t0434OutBlock,,output; + begin + CTS_ֹȣ,cts_ordno,cts_ordno,char,7; + end + t0434OutBlock1,1,output,occurs; + begin + ֹȣ,ordno,ordno,long,7; + ֹȣ,orgordno,orgordno,long,7; + ,medosu,medosu,char,10; + ,ordgb,ordgb,char,20; + ֹ,qty,qty,long,9; + ֹ,price,price,float,9.2; + ü,cheqty,cheqty,long,9; + üᰡ,cheprice,cheprice,float,9.2; + üܷ,ordrem,ordrem,long,9; + ,status,status,char,10; + ֹð,ordtime,ordtime,char,8; + ֹü,ordermtd,ordermtd,char,10; + ȣ,expcode,expcode,char,8; + ڵ,rtcode,rtcode,char,3; + ó,sysprocseq,sysprocseq,long,10; + ȣŸ,hogatype,hogatype,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t0434_2.res b/ls_sample/sample_python/Res/t0434_2.res new file mode 100644 index 0000000..c04c4e3 --- /dev/null +++ b/ls_sample/sample_python/Res/t0434_2.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼü/ü(t0434),t0434,tuxcode=t0434,headtype=D; + BEGIN_DATA_MAP + t0434InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + ȣ,expcode,expcode,char,8; + üᱸ,chegb,chegb,char,1; + ļ,sortgb,sortgb,char,1; + CTS_ֹȣ,cts_ordno,cts_ordno,char,7; + end + t0434OutBlock,,output; + begin + CTS_ֹȣ,cts_ordno,cts_ordno,char,7; + end + t0434OutBlock1,1,output,occurs; + begin + ֹȣ,ordno,ordno,long,7; + ֹȣ,orgordno,orgordno,long,7; + ,medosu,medosu,char,10; + ,ordgb,ordgb,char,20; + ֹ,qty,qty,long,9; + ֹ,price,price,float,9.2; + ü,cheqty,cheqty,long,9; + üᰡ,cheprice,cheprice,float,9.2; + üܷ,ordrem,ordrem,long,9; + ,status,status,char,10; + ֹð,ordtime,ordtime,char,8; + ֹü,ordermtd,ordermtd,char,10; + ȣ,expcode,expcode,char,8; + ڵ,rtcode,rtcode,char,3; + ó,sysprocseq,sysprocseq,long,10; + ȣŸ,hogatype,hogatype,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t0441.res b/ls_sample/sample_python/Res/t0441.res new file mode 100644 index 0000000..ae8dadd --- /dev/null +++ b/ls_sample/sample_python/Res/t0441.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼܰ(̵)(t0441),t0441,attr,tuxcode=t0441,headtype=D; + BEGIN_DATA_MAP + t0441InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + CTS_ȣ,cts_expcode,cts_expcode,char,8; + CTS_Ÿű,cts_medocd,cts_medocd,char,1; + end + t0441OutBlock,,output; + begin + Ÿżհ,tdtsunik,tdtsunik,long,18; + CTS_ȣ,cts_expcode,cts_expcode,char,8; + CTS_Ÿű,cts_medocd,cts_medocd,char,1; + 򰡱ݾ,tappamt,tappamt,long,18; + 򰡼,tsunik,tsunik,long,18; + end + t0441OutBlock1,1,output,occurs; + begin + ȣ,expcode,expcode,char,8; + ,medosu,medosu,char,4; + ܰ,jqty,jqty,long,10; + û갡ɼ,cqty,cqty,long,10; + մܰ,pamt,pamt,float,10.2; + ѸԱݾ,mamt,mamt,long,18; + Ÿű,medocd,medocd,char,1; + Ÿż,dtsunik,dtsunik,long,18; + ó,sysprocseq,sysprocseq,long,10; + 簡,price,price,float,9.2; + 򰡱ݾ,appamt,appamt,long,18; + 򰡼,dtsunik1,dtsunik1,long,18; + ,sunikrt,sunikrt,float,10.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t0441_2.res b/ls_sample/sample_python/Res/t0441_2.res new file mode 100644 index 0000000..ae8dadd --- /dev/null +++ b/ls_sample/sample_python/Res/t0441_2.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼܰ(̵)(t0441),t0441,attr,tuxcode=t0441,headtype=D; + BEGIN_DATA_MAP + t0441InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + CTS_ȣ,cts_expcode,cts_expcode,char,8; + CTS_Ÿű,cts_medocd,cts_medocd,char,1; + end + t0441OutBlock,,output; + begin + Ÿżհ,tdtsunik,tdtsunik,long,18; + CTS_ȣ,cts_expcode,cts_expcode,char,8; + CTS_Ÿű,cts_medocd,cts_medocd,char,1; + 򰡱ݾ,tappamt,tappamt,long,18; + 򰡼,tsunik,tsunik,long,18; + end + t0441OutBlock1,1,output,occurs; + begin + ȣ,expcode,expcode,char,8; + ,medosu,medosu,char,4; + ܰ,jqty,jqty,long,10; + û갡ɼ,cqty,cqty,long,10; + մܰ,pamt,pamt,float,10.2; + ѸԱݾ,mamt,mamt,long,18; + Ÿű,medocd,medocd,char,1; + Ÿż,dtsunik,dtsunik,long,18; + ó,sysprocseq,sysprocseq,long,10; + 簡,price,price,float,9.2; + 򰡱ݾ,appamt,appamt,long,18; + 򰡼,dtsunik1,dtsunik1,long,18; + ,sunikrt,sunikrt,float,10.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1101.res b/ls_sample/sample_python/Res/t1101.res new file mode 100644 index 0000000..728e566 --- /dev/null +++ b/ls_sample/sample_python/Res/t1101.res @@ -0,0 +1,99 @@ +BEGIN_FUNCTION_MAP + .Func,ֽ簡ȣȸ(t1101),t1101,attr,block,headtype=A; + BEGIN_DATA_MAP + t1101InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1101OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,12; + żȣ1,bidrem1,bidrem1,long,12; + ŵ1,preoffercha1,preoffercha1,long,12; + ż1,prebidcha1,prebidcha1,long,12; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,12; + żȣ2,bidrem2,bidrem2,long,12; + ŵ2,preoffercha2,preoffercha2,long,12; + ż2,prebidcha2,prebidcha2,long,12; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,12; + żȣ3,bidrem3,bidrem3,long,12; + ŵ3,preoffercha3,preoffercha3,long,12; + ż3,prebidcha3,prebidcha3,long,12; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,12; + żȣ4,bidrem4,bidrem4,long,12; + ŵ4,preoffercha4,preoffercha4,long,12; + ż4,prebidcha4,prebidcha4,long,12; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,12; + żȣ5,bidrem5,bidrem5,long,12; + ŵ5,preoffercha5,preoffercha5,long,12; + ż5,prebidcha5,prebidcha5,long,12; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,12; + żȣ6,bidrem6,bidrem6,long,12; + ŵ6,preoffercha6,preoffercha6,long,12; + ż6,prebidcha6,prebidcha6,long,12; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,12; + żȣ7,bidrem7,bidrem7,long,12; + ŵ7,preoffercha7,preoffercha7,long,12; + ż7,prebidcha7,prebidcha7,long,12; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,12; + żȣ8,bidrem8,bidrem8,long,12; + ŵ8,preoffercha8,preoffercha8,long,12; + ż8,prebidcha8,prebidcha8,long,12; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,12; + żȣ9,bidrem9,bidrem9,long,12; + ŵ9,preoffercha9,preoffercha9,long,12; + ż9,prebidcha9,prebidcha9,long,12; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,12; + żȣ10,bidrem10,bidrem10,long,12; + ŵ10,preoffercha10,preoffercha10,long,12; + ż10,prebidcha10,prebidcha10,long,12; + ŵȣ,offer,offer,long,12; + żȣ,bid,bid,long,12; + ŵ,preoffercha,preoffercha,long,12; + ż,prebidcha,prebidcha,long,12; + Žð,hotime,hotime,char,8; + üᰡ,yeprice,yeprice,long,8; + ü,yevolume,yevolume,long,12; + üϱ,yesign,yesign,char,1; + üϴ,yechange,yechange,long,8; + ü,yediff,yediff,float,6.2; + ðܸŵܷ,tmoffer,tmoffer,long,12; + ðܸżܷ,tmbid,tmbid,long,12; + ñ,ho_status,ho_status,char,1; + ڵ,shcode,shcode,char,6; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1101_2.res b/ls_sample/sample_python/Res/t1101_2.res new file mode 100644 index 0000000..728e566 --- /dev/null +++ b/ls_sample/sample_python/Res/t1101_2.res @@ -0,0 +1,99 @@ +BEGIN_FUNCTION_MAP + .Func,ֽ簡ȣȸ(t1101),t1101,attr,block,headtype=A; + BEGIN_DATA_MAP + t1101InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1101OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,12; + żȣ1,bidrem1,bidrem1,long,12; + ŵ1,preoffercha1,preoffercha1,long,12; + ż1,prebidcha1,prebidcha1,long,12; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,12; + żȣ2,bidrem2,bidrem2,long,12; + ŵ2,preoffercha2,preoffercha2,long,12; + ż2,prebidcha2,prebidcha2,long,12; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,12; + żȣ3,bidrem3,bidrem3,long,12; + ŵ3,preoffercha3,preoffercha3,long,12; + ż3,prebidcha3,prebidcha3,long,12; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,12; + żȣ4,bidrem4,bidrem4,long,12; + ŵ4,preoffercha4,preoffercha4,long,12; + ż4,prebidcha4,prebidcha4,long,12; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,12; + żȣ5,bidrem5,bidrem5,long,12; + ŵ5,preoffercha5,preoffercha5,long,12; + ż5,prebidcha5,prebidcha5,long,12; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,12; + żȣ6,bidrem6,bidrem6,long,12; + ŵ6,preoffercha6,preoffercha6,long,12; + ż6,prebidcha6,prebidcha6,long,12; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,12; + żȣ7,bidrem7,bidrem7,long,12; + ŵ7,preoffercha7,preoffercha7,long,12; + ż7,prebidcha7,prebidcha7,long,12; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,12; + żȣ8,bidrem8,bidrem8,long,12; + ŵ8,preoffercha8,preoffercha8,long,12; + ż8,prebidcha8,prebidcha8,long,12; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,12; + żȣ9,bidrem9,bidrem9,long,12; + ŵ9,preoffercha9,preoffercha9,long,12; + ż9,prebidcha9,prebidcha9,long,12; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,12; + żȣ10,bidrem10,bidrem10,long,12; + ŵ10,preoffercha10,preoffercha10,long,12; + ż10,prebidcha10,prebidcha10,long,12; + ŵȣ,offer,offer,long,12; + żȣ,bid,bid,long,12; + ŵ,preoffercha,preoffercha,long,12; + ż,prebidcha,prebidcha,long,12; + Žð,hotime,hotime,char,8; + üᰡ,yeprice,yeprice,long,8; + ü,yevolume,yevolume,long,12; + üϱ,yesign,yesign,char,1; + üϴ,yechange,yechange,long,8; + ü,yediff,yediff,float,6.2; + ðܸŵܷ,tmoffer,tmoffer,long,12; + ðܸżܷ,tmbid,tmbid,long,12; + ñ,ho_status,ho_status,char,1; + ڵ,shcode,shcode,char,6; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1102.res b/ls_sample/sample_python/Res/t1102.res new file mode 100644 index 0000000..69cd0ed --- /dev/null +++ b/ls_sample/sample_python/Res/t1102.res @@ -0,0 +1,173 @@ +BEGIN_FUNCTION_MAP + .Func,ֽ簡(ü)ȸ(t1102),t1102,attr,block,headtype=A; + BEGIN_DATA_MAP + t1102InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1102OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ذ(򰡰),recprice,recprice,long,8; + ,avg,avg,long,8; + Ѱ(ְȣ),uplmtprice,uplmtprice,long,8; + Ѱ(ȣ),dnlmtprice,dnlmtprice,long,8; + ϰŷ,jnilvolume,jnilvolume,long,12; + ŷ,volumediff,volumediff,long,12; + ð,open,open,long,8; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + PER,per,per,float,6.2; + PBRX,pbrx,pbrx,float,6.2; + ֽļ(õ),listing,listing,long,12; + ű,jkrate,jkrate,long,8; + ,memedan,memedan,char,5; + ŵǻڵ1,offernocd1,offernocd1,char,3; + żǻڵ1,bidnocd1,bidnocd1,char,3; + ŵǻ1,offerno1,offerno1,char,6; + żǻ1,bidno1,bidno1,char,6; + Ѹŵ1,dvol1,dvol1,long,8; + Ѹż1,svol1,svol1,long,8; + ŵ1,dcha1,dcha1,long,8; + ż1,scha1,scha1,long,8; + ŵ1,ddiff1,ddiff1,float,6.2; + ż1,sdiff1,sdiff1,float,6.2; + ŵǻڵ2,offernocd2,offernocd2,char,3; + żǻڵ2,bidnocd2,bidnocd2,char,3; + ŵǻ2,offerno2,offerno2,char,6; + żǻ2,bidno2,bidno2,char,6; + Ѹŵ2,dvol2,dvol2,long,8; + Ѹż2,svol2,svol2,long,8; + ŵ2,dcha2,dcha2,long,8; + ż2,scha2,scha2,long,8; + ŵ2,ddiff2,ddiff2,float,6.2; + ż2,sdiff2,sdiff2,float,6.2; + ŵǻڵ3,offernocd3,offernocd3,char,3; + żǻڵ3,bidnocd3,bidnocd3,char,3; + ŵǻ3,offerno3,offerno3,char,6; + żǻ3,bidno3,bidno3,char,6; + Ѹŵ3,dvol3,dvol3,long,8; + Ѹż3,svol3,svol3,long,8; + ŵ3,dcha3,dcha3,long,8; + ż3,scha3,scha3,long,8; + ŵ3,ddiff3,ddiff3,float,6.2; + ż3,sdiff3,sdiff3,float,6.2; + ŵǻڵ4,offernocd4,offernocd4,char,3; + żǻڵ4,bidnocd4,bidnocd4,char,3; + ŵǻ4,offerno4,offerno4,char,6; + żǻ4,bidno4,bidno4,char,6; + Ѹŵ4,dvol4,dvol4,long,8; + Ѹż4,svol4,svol4,long,8; + ŵ4,dcha4,dcha4,long,8; + ż4,scha4,scha4,long,8; + ŵ4,ddiff4,ddiff4,float,6.2; + ż4,sdiff4,sdiff4,float,6.2; + ŵǻڵ5,offernocd5,offernocd5,char,3; + żǻڵ5,bidnocd5,bidnocd5,char,3; + ŵǻ5,offerno5,offerno5,char,6; + żǻ5,bidno5,bidno5,char,6; + Ѹŵ5,dvol5,dvol5,long,8; + Ѹż5,svol5,svol5,long,8; + ŵ5,dcha5,dcha5,long,8; + ż5,scha5,scha5,long,8; + ŵ5,ddiff5,ddiff5,float,6.2; + ż5,sdiff5,sdiff5,float,6.2; + ܱŵհ,fwdvl,fwdvl,long,12; + ܱŵ,ftradmdcha,ftradmdcha,long,12; + ܱŵ,ftradmddiff,ftradmddiff,float,6.2; + ܱżհ,fwsvl,fwsvl,long,12; + ܱż,ftradmscha,ftradmscha,long,12; + ܱż,ftradmsdiff,ftradmsdiff,float,6.2; + ȸ,vol,vol,float,6.2; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + ϵðŷ,jvolume,jvolume,long,12; + ְ,highyear,highyear,long,8; + ְ,highyeardate,highyeardate,char,8; + ,lowyear,lowyear,long,8; + ,lowyeardate,lowyeardate,char,8; + ǥ,target,target,long,8; + ں,capital,capital,long,12; + ֽļ,abscnt,abscnt,long,12; + ׸鰡,parprice,parprice,long,8; + ,gsmm,gsmm,char,2; + 밡,subprice,subprice,long,8; + ðѾ,total,total,long,12; + ,listdate,listdate,char,8; + б,name,name,char,10; + б,bfsales,bfsales,long,12; + б⿵,bfoperatingincome,bfoperatingincome,long,12; + б,bfordinaryincome,bfordinaryincome,long,12; + б,bfnetincome,bfnetincome,long,12; + бEPS,bfeps,bfeps,float,13.2; + б,name2,name2,char,10; + б,bfsales2,bfsales2,long,12; + б⿵,bfoperatingincome2,bfoperatingincome2,long,12; + б,bfordinaryincome2,bfordinaryincome2,long,12; + б,bfnetincome2,bfnetincome2,long,12; + бEPS,bfeps2,bfeps2,float,13.2; + ,salert,salert,float,7.2; + 񿵾,opert,opert,float,7.2; + ,ordrt,ordrt,float,7.2; + ,netrt,netrt,float,7.2; + EPS,epsrt,epsrt,float,7.2; + ,info1,info1,char,10; + /޵,info2,info2,char,10; + /屸,info3,info3,char,10; + /ҼDZ,info4,info4,char,12; + 屸,janginfo,janginfo,char,10; + T.PER,t_per,t_per,float,6.2; + ȭISOڵ,tonghwa,tonghwa,char,3; + Ѹŵ1,dval1,dval1,long,18; + Ѹż1,sval1,sval1,long,18; + Ѹŵ2,dval2,dval2,long,18; + Ѹż2,sval2,sval2,long,18; + Ѹŵ3,dval3,dval3,long,18; + Ѹż3,sval3,sval3,long,18; + Ѹŵ4,dval4,dval4,long,18; + Ѹż4,sval4,sval4,long,18; + Ѹŵ5,dval5,dval5,long,18; + Ѹż5,sval5,sval5,long,18; + Ѹŵܰ1,davg1,davg1,long,8; + Ѹżܰ1,savg1,savg1,long,8; + Ѹŵܰ2,davg2,davg2,long,8; + Ѹżܰ2,savg2,savg2,long,8; + Ѹŵܰ3,davg3,davg3,long,8; + Ѹżܰ3,savg3,savg3,long,8; + Ѹŵܰ4,davg4,davg4,long,8; + Ѹżܰ4,savg4,savg4,long,8; + Ѹŵܰ5,davg5,davg5,long,8; + Ѹżܰ5,savg5,savg5,long,8; + ܱŵ,ftradmdval,ftradmdval,long,18; + ܱż,ftradmsval,ftradmsval,long,18; + ܱŵܰ,ftradmdvag,ftradmdavg,long,8; + ܱżܰ,ftradmsvag,ftradmsavg,long,8; + ȯ,info5,info5,char,8; + μȸ翩,spac_gubun,spac_gubun,char,1; + డ,issueprice,issueprice,long,8; + 뱸ڵ(1:й߻2:׿:̹߻),alloc_gubun,alloc_gubun,char,1; + 뱸,alloc_text,alloc_text,char,8; + ܱ/VIߵ,shterm_text,shterm_text,char,10; + VIѰ,svi_uplmtprice,svi_uplmtprice,long,8; + VIѰ,svi_dnlmtprice,svi_dnlmtprice,long,8; + 񿩺,low_lqdt_gu,low_lqdt_gu,char,1; + ̻޵񿩺,abnormal_rise_gu,abnormal_rise_gu,char,1; + Ұǥ,lend_text,lend_text,char,8; + ETF/ETN,ty_text,ty_text,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1102_2.res b/ls_sample/sample_python/Res/t1102_2.res new file mode 100644 index 0000000..69cd0ed --- /dev/null +++ b/ls_sample/sample_python/Res/t1102_2.res @@ -0,0 +1,173 @@ +BEGIN_FUNCTION_MAP + .Func,ֽ簡(ü)ȸ(t1102),t1102,attr,block,headtype=A; + BEGIN_DATA_MAP + t1102InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1102OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ذ(򰡰),recprice,recprice,long,8; + ,avg,avg,long,8; + Ѱ(ְȣ),uplmtprice,uplmtprice,long,8; + Ѱ(ȣ),dnlmtprice,dnlmtprice,long,8; + ϰŷ,jnilvolume,jnilvolume,long,12; + ŷ,volumediff,volumediff,long,12; + ð,open,open,long,8; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + PER,per,per,float,6.2; + PBRX,pbrx,pbrx,float,6.2; + ֽļ(õ),listing,listing,long,12; + ű,jkrate,jkrate,long,8; + ,memedan,memedan,char,5; + ŵǻڵ1,offernocd1,offernocd1,char,3; + żǻڵ1,bidnocd1,bidnocd1,char,3; + ŵǻ1,offerno1,offerno1,char,6; + żǻ1,bidno1,bidno1,char,6; + Ѹŵ1,dvol1,dvol1,long,8; + Ѹż1,svol1,svol1,long,8; + ŵ1,dcha1,dcha1,long,8; + ż1,scha1,scha1,long,8; + ŵ1,ddiff1,ddiff1,float,6.2; + ż1,sdiff1,sdiff1,float,6.2; + ŵǻڵ2,offernocd2,offernocd2,char,3; + żǻڵ2,bidnocd2,bidnocd2,char,3; + ŵǻ2,offerno2,offerno2,char,6; + żǻ2,bidno2,bidno2,char,6; + Ѹŵ2,dvol2,dvol2,long,8; + Ѹż2,svol2,svol2,long,8; + ŵ2,dcha2,dcha2,long,8; + ż2,scha2,scha2,long,8; + ŵ2,ddiff2,ddiff2,float,6.2; + ż2,sdiff2,sdiff2,float,6.2; + ŵǻڵ3,offernocd3,offernocd3,char,3; + żǻڵ3,bidnocd3,bidnocd3,char,3; + ŵǻ3,offerno3,offerno3,char,6; + żǻ3,bidno3,bidno3,char,6; + Ѹŵ3,dvol3,dvol3,long,8; + Ѹż3,svol3,svol3,long,8; + ŵ3,dcha3,dcha3,long,8; + ż3,scha3,scha3,long,8; + ŵ3,ddiff3,ddiff3,float,6.2; + ż3,sdiff3,sdiff3,float,6.2; + ŵǻڵ4,offernocd4,offernocd4,char,3; + żǻڵ4,bidnocd4,bidnocd4,char,3; + ŵǻ4,offerno4,offerno4,char,6; + żǻ4,bidno4,bidno4,char,6; + Ѹŵ4,dvol4,dvol4,long,8; + Ѹż4,svol4,svol4,long,8; + ŵ4,dcha4,dcha4,long,8; + ż4,scha4,scha4,long,8; + ŵ4,ddiff4,ddiff4,float,6.2; + ż4,sdiff4,sdiff4,float,6.2; + ŵǻڵ5,offernocd5,offernocd5,char,3; + żǻڵ5,bidnocd5,bidnocd5,char,3; + ŵǻ5,offerno5,offerno5,char,6; + żǻ5,bidno5,bidno5,char,6; + Ѹŵ5,dvol5,dvol5,long,8; + Ѹż5,svol5,svol5,long,8; + ŵ5,dcha5,dcha5,long,8; + ż5,scha5,scha5,long,8; + ŵ5,ddiff5,ddiff5,float,6.2; + ż5,sdiff5,sdiff5,float,6.2; + ܱŵհ,fwdvl,fwdvl,long,12; + ܱŵ,ftradmdcha,ftradmdcha,long,12; + ܱŵ,ftradmddiff,ftradmddiff,float,6.2; + ܱżհ,fwsvl,fwsvl,long,12; + ܱż,ftradmscha,ftradmscha,long,12; + ܱż,ftradmsdiff,ftradmsdiff,float,6.2; + ȸ,vol,vol,float,6.2; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + ϵðŷ,jvolume,jvolume,long,12; + ְ,highyear,highyear,long,8; + ְ,highyeardate,highyeardate,char,8; + ,lowyear,lowyear,long,8; + ,lowyeardate,lowyeardate,char,8; + ǥ,target,target,long,8; + ں,capital,capital,long,12; + ֽļ,abscnt,abscnt,long,12; + ׸鰡,parprice,parprice,long,8; + ,gsmm,gsmm,char,2; + 밡,subprice,subprice,long,8; + ðѾ,total,total,long,12; + ,listdate,listdate,char,8; + б,name,name,char,10; + б,bfsales,bfsales,long,12; + б⿵,bfoperatingincome,bfoperatingincome,long,12; + б,bfordinaryincome,bfordinaryincome,long,12; + б,bfnetincome,bfnetincome,long,12; + бEPS,bfeps,bfeps,float,13.2; + б,name2,name2,char,10; + б,bfsales2,bfsales2,long,12; + б⿵,bfoperatingincome2,bfoperatingincome2,long,12; + б,bfordinaryincome2,bfordinaryincome2,long,12; + б,bfnetincome2,bfnetincome2,long,12; + бEPS,bfeps2,bfeps2,float,13.2; + ,salert,salert,float,7.2; + 񿵾,opert,opert,float,7.2; + ,ordrt,ordrt,float,7.2; + ,netrt,netrt,float,7.2; + EPS,epsrt,epsrt,float,7.2; + ,info1,info1,char,10; + /޵,info2,info2,char,10; + /屸,info3,info3,char,10; + /ҼDZ,info4,info4,char,12; + 屸,janginfo,janginfo,char,10; + T.PER,t_per,t_per,float,6.2; + ȭISOڵ,tonghwa,tonghwa,char,3; + Ѹŵ1,dval1,dval1,long,18; + Ѹż1,sval1,sval1,long,18; + Ѹŵ2,dval2,dval2,long,18; + Ѹż2,sval2,sval2,long,18; + Ѹŵ3,dval3,dval3,long,18; + Ѹż3,sval3,sval3,long,18; + Ѹŵ4,dval4,dval4,long,18; + Ѹż4,sval4,sval4,long,18; + Ѹŵ5,dval5,dval5,long,18; + Ѹż5,sval5,sval5,long,18; + Ѹŵܰ1,davg1,davg1,long,8; + Ѹżܰ1,savg1,savg1,long,8; + Ѹŵܰ2,davg2,davg2,long,8; + Ѹżܰ2,savg2,savg2,long,8; + Ѹŵܰ3,davg3,davg3,long,8; + Ѹżܰ3,savg3,savg3,long,8; + Ѹŵܰ4,davg4,davg4,long,8; + Ѹżܰ4,savg4,savg4,long,8; + Ѹŵܰ5,davg5,davg5,long,8; + Ѹżܰ5,savg5,savg5,long,8; + ܱŵ,ftradmdval,ftradmdval,long,18; + ܱż,ftradmsval,ftradmsval,long,18; + ܱŵܰ,ftradmdvag,ftradmdavg,long,8; + ܱżܰ,ftradmsvag,ftradmsavg,long,8; + ȯ,info5,info5,char,8; + μȸ翩,spac_gubun,spac_gubun,char,1; + డ,issueprice,issueprice,long,8; + 뱸ڵ(1:й߻2:׿:̹߻),alloc_gubun,alloc_gubun,char,1; + 뱸,alloc_text,alloc_text,char,8; + ܱ/VIߵ,shterm_text,shterm_text,char,10; + VIѰ,svi_uplmtprice,svi_uplmtprice,long,8; + VIѰ,svi_dnlmtprice,svi_dnlmtprice,long,8; + 񿩺,low_lqdt_gu,low_lqdt_gu,char,1; + ̻޵񿩺,abnormal_rise_gu,abnormal_rise_gu,char,1; + Ұǥ,lend_text,lend_text,char,8; + ETF/ETN,ty_text,ty_text,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1104.res b/ls_sample/sample_python/Res/t1104.res new file mode 100644 index 0000000..e54392d --- /dev/null +++ b/ls_sample/sample_python/Res/t1104.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ֽ簡ü޸(t1104),t1104,block,headtype=A; + BEGIN_DATA_MAP + t1104InBlock,⺻Է,input; + begin + ڵ,code,code,char,6; + Ǽ,nrec,nrec,char,2; + end + t1104InBlock1,⺻Է1,input,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + Ÿ1,dat1,dat1,char,1; + Ÿ2,dat2,dat2,char,8; + end + t1104OutBlock,,output; + begin + °Ǽ,nrec,nrec,char,2; + end + t1104OutBlock1,1,output,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + °,vals,vals,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1104_2.res b/ls_sample/sample_python/Res/t1104_2.res new file mode 100644 index 0000000..e54392d --- /dev/null +++ b/ls_sample/sample_python/Res/t1104_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ֽ簡ü޸(t1104),t1104,block,headtype=A; + BEGIN_DATA_MAP + t1104InBlock,⺻Է,input; + begin + ڵ,code,code,char,6; + Ǽ,nrec,nrec,char,2; + end + t1104InBlock1,⺻Է1,input,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + Ÿ1,dat1,dat1,char,1; + Ÿ2,dat2,dat2,char,8; + end + t1104OutBlock,,output; + begin + °Ǽ,nrec,nrec,char,2; + end + t1104OutBlock1,1,output,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + °,vals,vals,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1105.res b/ls_sample/sample_python/Res/t1105.res new file mode 100644 index 0000000..6c87f15 --- /dev/null +++ b/ls_sample/sample_python/Res/t1105.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ֽǸ/ũȸ(t1105),t1105,attr,block,headtype=A; + BEGIN_DATA_MAP + t1105InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1105OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ǻ,pbot,pbot,long,8; + 1,offer1,offer1,long,8; + 1,supp1,supp1,long,8; + 2,offer2,offer2,long,8; + 2,supp2,supp2,long,8; + ذ,stdprc,stdprc,long,8; + D,offerd,offerd,long,8; + D,suppd,suppd,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1105_2.res b/ls_sample/sample_python/Res/t1105_2.res new file mode 100644 index 0000000..6c87f15 --- /dev/null +++ b/ls_sample/sample_python/Res/t1105_2.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ֽǸ/ũȸ(t1105),t1105,attr,block,headtype=A; + BEGIN_DATA_MAP + t1105InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1105OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ǻ,pbot,pbot,long,8; + 1,offer1,offer1,long,8; + 1,supp1,supp1,long,8; + 2,offer2,offer2,long,8; + 2,supp2,supp2,long,8; + ذ,stdprc,stdprc,long,8; + D,offerd,offerd,long,8; + D,suppd,suppd,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1109.res b/ls_sample/sample_python/Res/t1109.res new file mode 100644 index 0000000..fd50efb --- /dev/null +++ b/ls_sample/sample_python/Res/t1109.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ðüᷮ(t1109),t1109,attr,block,headtype=A; + BEGIN_DATA_MAP + t1109InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ücts,dan_chetime,dan_chetime,char,10; + IDX,idx,idx,long,4; + end + t1109OutBlock,,output; + begin + cts,ctsshcode,ctsshcode,char,6; + ücts,ctschetime,ctschetime,char,10; + IDX,idx,idx,long,4; + end + t1109OutBlock1,1,output,occurs; + begin + ð,dan_chetime,dan_chetime,char,10; + 簡,dan_price,dan_price,long,8; + ϴ񱸺,dan_sign,dan_sign,char,1; + ϴ,dan_change,dan_change,long,8; + ,diff,diff,float,6.2; + üᷮ,dan_cvolume,dan_cvolume,long,8; + üᰭ,chdegree,chdegree,float,9.2; + ŷ,dan_volume,dan_volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1109_2.res b/ls_sample/sample_python/Res/t1109_2.res new file mode 100644 index 0000000..fd50efb --- /dev/null +++ b/ls_sample/sample_python/Res/t1109_2.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ðüᷮ(t1109),t1109,attr,block,headtype=A; + BEGIN_DATA_MAP + t1109InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ücts,dan_chetime,dan_chetime,char,10; + IDX,idx,idx,long,4; + end + t1109OutBlock,,output; + begin + cts,ctsshcode,ctsshcode,char,6; + ücts,ctschetime,ctschetime,char,10; + IDX,idx,idx,long,4; + end + t1109OutBlock1,1,output,occurs; + begin + ð,dan_chetime,dan_chetime,char,10; + 簡,dan_price,dan_price,long,8; + ϴ񱸺,dan_sign,dan_sign,char,1; + ϴ,dan_change,dan_change,long,8; + ,diff,diff,float,6.2; + üᷮ,dan_cvolume,dan_cvolume,long,8; + üᰭ,chdegree,chdegree,float,9.2; + ŷ,dan_volume,dan_volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1301.res b/ls_sample/sample_python/Res/t1301.res new file mode 100644 index 0000000..ca6f487 --- /dev/null +++ b/ls_sample/sample_python/Res/t1301.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĽð뺰üȸ(t1301),t1301,attr,block,headtype=A; + BEGIN_DATA_MAP + t1301InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,starttime,starttime,char,4; + ð,endtime,endtime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t1301OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t1301OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,12; + üᰭ,chdegree,chdegree,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + üᷮ,revolume,revolume,long,12; + üǼ,rechecnt,rechecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1301_2.res b/ls_sample/sample_python/Res/t1301_2.res new file mode 100644 index 0000000..ca6f487 --- /dev/null +++ b/ls_sample/sample_python/Res/t1301_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĽð뺰üȸ(t1301),t1301,attr,block,headtype=A; + BEGIN_DATA_MAP + t1301InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,starttime,starttime,char,4; + ð,endtime,endtime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t1301OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t1301OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,12; + üᰭ,chdegree,chdegree,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + üᷮ,revolume,revolume,long,12; + üǼ,rechecnt,rechecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1302.res b/ls_sample/sample_python/Res/t1302.res new file mode 100644 index 0000000..1ab7fe7 --- /dev/null +++ b/ls_sample/sample_python/Res/t1302.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĺкְȸ(t1302),t1302,attr,block,headtype=A; + BEGIN_DATA_MAP + t1302InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ۾,gubun,gubun,char,1; + ð,time,time,char,6; + Ǽ,cnt,cnt,int,3; + end + t1302OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,6; + end + t1302OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,6; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᰭ,chdegree,chdegree,float,8.2; + ŵü,mdvolume,mdvolume,long,12; + żü,msvolume,msvolume,long,12; + żüᷮ,revolume,revolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żüǼ,mschecnt,mschecnt,long,8; + üǼ,rechecnt,rechecnt,long,8; + ŷ,volume,volume,long,12; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + üᷮ,cvolume,cvolume,long,12; + ŵüǼ(ð),mdchecnttm,mdchecnttm,long,8; + żüǼ(ð),mschecnttm,mschecnttm,long,8; + ŵܷ,totofferrem,totofferrem,long,12; + żܷ,totbidrem,totbidrem,long,12; + ðŵüᷮ,mdvolumetm,mdvolumetm,long,12; + ðżüᷮ,msvolumetm,msvolumetm,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1302_2.res b/ls_sample/sample_python/Res/t1302_2.res new file mode 100644 index 0000000..1ab7fe7 --- /dev/null +++ b/ls_sample/sample_python/Res/t1302_2.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĺкְȸ(t1302),t1302,attr,block,headtype=A; + BEGIN_DATA_MAP + t1302InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ۾,gubun,gubun,char,1; + ð,time,time,char,6; + Ǽ,cnt,cnt,int,3; + end + t1302OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,6; + end + t1302OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,6; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᰭ,chdegree,chdegree,float,8.2; + ŵü,mdvolume,mdvolume,long,12; + żü,msvolume,msvolume,long,12; + żüᷮ,revolume,revolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żüǼ,mschecnt,mschecnt,long,8; + üǼ,rechecnt,rechecnt,long,8; + ŷ,volume,volume,long,12; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + üᷮ,cvolume,cvolume,long,12; + ŵüǼ(ð),mdchecnttm,mdchecnttm,long,8; + żüǼ(ð),mschecnttm,mschecnttm,long,8; + ŵܷ,totofferrem,totofferrem,long,12; + żܷ,totbidrem,totbidrem,long,12; + ðŵüᷮ,mdvolumetm,mdvolumetm,long,12; + ðżüᷮ,msvolumetm,msvolumetm,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1305.res b/ls_sample/sample_python/Res/t1305.res new file mode 100644 index 0000000..e0be949 --- /dev/null +++ b/ls_sample/sample_python/Res/t1305.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓְ(t1305),t1305,attr,block,headtype=A; + BEGIN_DATA_MAP + t1305InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֿ,dwmcode,dwmcode,long,1; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + Ǽ,cnt,cnt,long,4; + end + t1305OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1305OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + üᰭ,chdegree,chdegree,float,6.2; + ,sojinrate,sojinrate,float,6.2; + ȸ,changerate,changerate,float,6.2; + μż,fpvolume,fpvolume,long,12; + ż,covolume,covolume,long,12; + ڵ,shcode,shcode,char,6; + ŷ(:鸸),value,value,long,12; + μż,ppvolume,ppvolume,long,12; + ð񱸺,o_sign,o_sign,char,1; + ð,o_change,o_change,long,8; + ðص,o_diff,o_diff,float,6.2; + 񱸺,h_sign,h_sign,char,1; + ,h_change,h_change,long,8; + ص,h_diff,h_diff,float,6.2; + 񱸺,l_sign,l_sign,char,1; + ,l_change,l_change,long,8; + ص,l_diff,l_diff,float,6.2; + ðѾ(:鸸),marketcap,marketcap,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1305 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1305_2.res b/ls_sample/sample_python/Res/t1305_2.res new file mode 100644 index 0000000..e0be949 --- /dev/null +++ b/ls_sample/sample_python/Res/t1305_2.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓְ(t1305),t1305,attr,block,headtype=A; + BEGIN_DATA_MAP + t1305InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֿ,dwmcode,dwmcode,long,1; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + Ǽ,cnt,cnt,long,4; + end + t1305OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1305OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + üᰭ,chdegree,chdegree,float,6.2; + ,sojinrate,sojinrate,float,6.2; + ȸ,changerate,changerate,float,6.2; + μż,fpvolume,fpvolume,long,12; + ż,covolume,covolume,long,12; + ڵ,shcode,shcode,char,6; + ŷ(:鸸),value,value,long,12; + μż,ppvolume,ppvolume,long,12; + ð񱸺,o_sign,o_sign,char,1; + ð,o_change,o_change,long,8; + ðص,o_diff,o_diff,float,6.2; + 񱸺,h_sign,h_sign,char,1; + ,h_change,h_change,long,8; + ص,h_diff,h_diff,float,6.2; + 񱸺,l_sign,l_sign,char,1; + ,l_change,l_change,long,8; + ص,l_diff,l_diff,float,6.2; + ðѾ(:鸸),marketcap,marketcap,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1305 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1308.res b/ls_sample/sample_python/Res/t1308.res new file mode 100644 index 0000000..5f109f9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1308.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĽð뺰üȸíƮ(t1308),t1308,attr,block,headtype=A; + BEGIN_DATA_MAP + t1308InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ۽ð,starttime,starttime,char,4; + ð,endtime,endtime,char,4; + а,bun_term,bun_term,char,2; + end + t1308OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,8; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1308_2.res b/ls_sample/sample_python/Res/t1308_2.res new file mode 100644 index 0000000..5f109f9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1308_2.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĽð뺰üȸíƮ(t1308),t1308,attr,block,headtype=A; + BEGIN_DATA_MAP + t1308InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ۽ð,starttime,starttime,char,4; + ð,endtime,endtime,char,4; + а,bun_term,bun_term,char,2; + end + t1308OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,8; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1310.res b/ls_sample/sample_python/Res/t1310.res new file mode 100644 index 0000000..2dbda1e --- /dev/null +++ b/ls_sample/sample_python/Res/t1310.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĴϺƽȸ(t1310),t1310,attr,block,headtype=A; + BEGIN_DATA_MAP + t1310InBlock,⺻Է,input; + begin + ϱ,daygb,daygb,char,1; + ƽ,timegb,timegb,char,1; + ڵ,shcode,shcode,char,6; + ð,endtime,endtime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t1310OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t1310OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,12; + üᰭ,chdegree,chdegree,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + üᷮ,revolume,revolume,long,12; + üǼ,rechecnt,rechecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1310_2.res b/ls_sample/sample_python/Res/t1310_2.res new file mode 100644 index 0000000..2dbda1e --- /dev/null +++ b/ls_sample/sample_python/Res/t1310_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĴϺƽȸ(t1310),t1310,attr,block,headtype=A; + BEGIN_DATA_MAP + t1310InBlock,⺻Է,input; + begin + ϱ,daygb,daygb,char,1; + ƽ,timegb,timegb,char,1; + ڵ,shcode,shcode,char,6; + ð,endtime,endtime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t1310OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t1310OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,12; + üᰭ,chdegree,chdegree,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + üᷮ,revolume,revolume,long,12; + üǼ,rechecnt,rechecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1403.res b/ls_sample/sample_python/Res/t1403.res new file mode 100644 index 0000000..df1b4b9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1403.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,űԻȸ(t1403),t1403,attr,block,headtype=A; + BEGIN_DATA_MAP + t1403InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ۻ,styymm,styymm,char,6; + ,enyymm,enyymm,char,6; + IDX,idx,idx,long,4; + end + t1403OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1403OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,kmprice,kmprice,long,8; + ,date,date,char,8; + ϱذ,recprice,recprice,long,8; + ذ,kmdiff,kmdiff,float,6.2; + ,close,close,long,8; + ϵ,recdiff,recdiff,float,6.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1403_2.res b/ls_sample/sample_python/Res/t1403_2.res new file mode 100644 index 0000000..df1b4b9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1403_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,űԻȸ(t1403),t1403,attr,block,headtype=A; + BEGIN_DATA_MAP + t1403InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ۻ,styymm,styymm,char,6; + ,enyymm,enyymm,char,6; + IDX,idx,idx,long,4; + end + t1403OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1403OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,kmprice,kmprice,long,8; + ,date,date,char,8; + ϱذ,recprice,recprice,long,8; + ذ,kmdiff,kmdiff,float,6.2; + ,close,close,long,8; + ϵ,recdiff,recdiff,float,6.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1404.res b/ls_sample/sample_python/Res/t1404.res new file mode 100644 index 0000000..3b7d597 --- /dev/null +++ b/ls_sample/sample_python/Res/t1404.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,/Ҽ/ȸ(t1404),t1404,attr,block,headtype=A; + BEGIN_DATA_MAP + t1404InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + üũ,jongchk,jongchk,char,1; + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1404OutBlock,,output; + begin + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1404OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,date,date,char,8; + ְ,tprice,tprice,long,8; + ϴ,tchange,tchange,long,8; + ,tdiff,tdiff,float,6.2; + ,reason,reason,char,4; + ڵ,shcode,shcode,char,6; + ,edate,edate,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1404_2.res b/ls_sample/sample_python/Res/t1404_2.res new file mode 100644 index 0000000..3b7d597 --- /dev/null +++ b/ls_sample/sample_python/Res/t1404_2.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,/Ҽ/ȸ(t1404),t1404,attr,block,headtype=A; + BEGIN_DATA_MAP + t1404InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + üũ,jongchk,jongchk,char,1; + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1404OutBlock,,output; + begin + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1404OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,date,date,char,8; + ְ,tprice,tprice,long,8; + ϴ,tchange,tchange,long,8; + ,tdiff,tdiff,float,6.2; + ,reason,reason,char,4; + ڵ,shcode,shcode,char,6; + ,edate,edate,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1405.res b/ls_sample/sample_python/Res/t1405.res new file mode 100644 index 0000000..7907366 --- /dev/null +++ b/ls_sample/sample_python/Res/t1405.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ڰ/Ÿ/Ÿȸ(t1405),t1405,attr,block,headtype=A; + BEGIN_DATA_MAP + t1405InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + üũ,jongchk,jongchk,char,1; + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1405OutBlock,,output; + begin + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1405OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,date,date,char,8; + ,edate,edate,char,8; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1405_2.res b/ls_sample/sample_python/Res/t1405_2.res new file mode 100644 index 0000000..7907366 --- /dev/null +++ b/ls_sample/sample_python/Res/t1405_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ڰ/Ÿ/Ÿȸ(t1405),t1405,attr,block,headtype=A; + BEGIN_DATA_MAP + t1405InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + üũ,jongchk,jongchk,char,1; + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1405OutBlock,,output; + begin + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1405OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,date,date,char,8; + ,edate,edate,char,8; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1410.res b/ls_sample/sample_python/Res/t1410.res new file mode 100644 index 0000000..8d18b79 --- /dev/null +++ b/ls_sample/sample_python/Res/t1410.res @@ -0,0 +1,25 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ(t1410),t1410,attr,block,headtype=A; + BEGIN_DATA_MAP + t1410InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1410OutBlock,,output; + begin + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1410OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1410_2.res b/ls_sample/sample_python/Res/t1410_2.res new file mode 100644 index 0000000..8d18b79 --- /dev/null +++ b/ls_sample/sample_python/Res/t1410_2.res @@ -0,0 +1,25 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ(t1410),t1410,attr,block,headtype=A; + BEGIN_DATA_MAP + t1410InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1410OutBlock,,output; + begin + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1410OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1411.res b/ls_sample/sample_python/Res/t1411.res new file mode 100644 index 0000000..df02ff7 --- /dev/null +++ b/ls_sample/sample_python/Res/t1411.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,űȸ(t1411),t1411,attr,block,headtype=A; + BEGIN_DATA_MAP + t1411InBlock,⺻Է,input; + begin + 屸,gubun,gubun,char,1; + Źſ뱸,jongchk,jongchk,char,1; + ű,jkrate,jkrate,char,1; + ڵ,shcode,shcode,char,6; + IDX,idx,idx,long,4; + end + t1411OutBlock,,output; + begin + Źű,jkrate,jkrate,long,3; + ſű,sjkrate,sjkrate,long,3; + IDX,idx,idx,long,4; + end + t1411OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + Źű,jkrate,jkrate,long,3; + ſű,sjkrate,sjkrate,long,3; + 밡,subprice,subprice,long,8; + ,recprice,recprice,long,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1411_2.res b/ls_sample/sample_python/Res/t1411_2.res new file mode 100644 index 0000000..df02ff7 --- /dev/null +++ b/ls_sample/sample_python/Res/t1411_2.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,űȸ(t1411),t1411,attr,block,headtype=A; + BEGIN_DATA_MAP + t1411InBlock,⺻Է,input; + begin + 屸,gubun,gubun,char,1; + Źſ뱸,jongchk,jongchk,char,1; + ű,jkrate,jkrate,char,1; + ڵ,shcode,shcode,char,6; + IDX,idx,idx,long,4; + end + t1411OutBlock,,output; + begin + Źű,jkrate,jkrate,long,3; + ſű,sjkrate,sjkrate,long,3; + IDX,idx,idx,long,4; + end + t1411OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + Źű,jkrate,jkrate,long,3; + ſű,sjkrate,sjkrate,long,3; + 밡,subprice,subprice,long,8; + ,recprice,recprice,long,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1422.res b/ls_sample/sample_python/Res/t1422.res new file mode 100644 index 0000000..5930f14 --- /dev/null +++ b/ls_sample/sample_python/Res/t1422.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,/(t1422),t1422,attr,block,headtype=A; + BEGIN_DATA_MAP + t1422InBlock,⺻Է,input; + begin + ȸ,qrygb,qrygb,char,1; + ,gubun,gubun,char,1; + ϱ,jnilgubun,jnilgubun,char,1; + ѱ,sign,sign,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + end + t1422OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + IDX,idx,idx,long,4; + end + t1422OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ,last,last,char,6; + ,lmtdaycnt,lmtdaycnt,long,8; + ϰŷ,jnilvolume,jnilvolume,long,12; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1422_2.res b/ls_sample/sample_python/Res/t1422_2.res new file mode 100644 index 0000000..5930f14 --- /dev/null +++ b/ls_sample/sample_python/Res/t1422_2.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,/(t1422),t1422,attr,block,headtype=A; + BEGIN_DATA_MAP + t1422InBlock,⺻Է,input; + begin + ȸ,qrygb,qrygb,char,1; + ,gubun,gubun,char,1; + ϱ,jnilgubun,jnilgubun,char,1; + ѱ,sign,sign,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + end + t1422OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + IDX,idx,idx,long,4; + end + t1422OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ,last,last,char,6; + ,lmtdaycnt,lmtdaycnt,long,8; + ϰŷ,jnilvolume,jnilvolume,long,12; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1427.res b/ls_sample/sample_python/Res/t1427.res new file mode 100644 index 0000000..09948f9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1427.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,/Ѱ(t1427),t1427,attr,block,headtype=A; + BEGIN_DATA_MAP + t1427InBlock,⺻Է,input; + begin + ȸ,qrygb,qrygb,char,1; + ,gubun,gubun,char,1; + Ѱ,signgubun,signgubun,char,1; + ,diff,diff,long,3; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + ϻ,jshex,jshex,char,1; + end + t1427OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + IDX,idx,idx,long,4; + end + t1427OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + Ѱ/Ѱ,lmtprice,lmtprice,long,8; + ,rate,rate,float,12.2; + ڵ,shcode,shcode,char,6; + ϰŷ,jnilvolume,jnilvolume,long,12; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,lmtdaycnt,lmtdaycnt,long,8; + ŷ,value,value,long,12; + ðѾ,total,total,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1427 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1427_2.res b/ls_sample/sample_python/Res/t1427_2.res new file mode 100644 index 0000000..09948f9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1427_2.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,/Ѱ(t1427),t1427,attr,block,headtype=A; + BEGIN_DATA_MAP + t1427InBlock,⺻Է,input; + begin + ȸ,qrygb,qrygb,char,1; + ,gubun,gubun,char,1; + Ѱ,signgubun,signgubun,char,1; + ,diff,diff,long,3; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + ϻ,jshex,jshex,char,1; + end + t1427OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + IDX,idx,idx,long,4; + end + t1427OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + Ѱ/Ѱ,lmtprice,lmtprice,long,8; + ,rate,rate,float,12.2; + ڵ,shcode,shcode,char,6; + ϰŷ,jnilvolume,jnilvolume,long,12; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,lmtdaycnt,lmtdaycnt,long,8; + ŷ,value,value,long,12; + ðѾ,total,total,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1427 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1441.res b/ls_sample/sample_python/Res/t1441.res new file mode 100644 index 0000000..922e502 --- /dev/null +++ b/ls_sample/sample_python/Res/t1441.res @@ -0,0 +1,44 @@ +BEGIN_FUNCTION_MAP + .Func,(t1441),t1441,attr,block,headtype=A; + BEGIN_DATA_MAP + t1441InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ϶,gubun2,gubun2,char,1; + ,gubun3,gubun3,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1441OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1441OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵܷ,offerrem1,offerrem1,long,12; + ŵȣ,offerho1,offerho1,long,12; + żȣ,bidho1,bidho1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ,updaycnt,updaycnt,long,4; + ϵ,jnildiff,jnildiff,float,6.2; + ڵ,shcode,shcode,char,6; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ,voldiff,voldiff,float,8.2; + ŷ,value,value,long,15; + ðѾ,total,total,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1441_2.res b/ls_sample/sample_python/Res/t1441_2.res new file mode 100644 index 0000000..922e502 --- /dev/null +++ b/ls_sample/sample_python/Res/t1441_2.res @@ -0,0 +1,44 @@ +BEGIN_FUNCTION_MAP + .Func,(t1441),t1441,attr,block,headtype=A; + BEGIN_DATA_MAP + t1441InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ϶,gubun2,gubun2,char,1; + ,gubun3,gubun3,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1441OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1441OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵܷ,offerrem1,offerrem1,long,12; + ŵȣ,offerho1,offerho1,long,12; + żȣ,bidho1,bidho1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ,updaycnt,updaycnt,long,4; + ϵ,jnildiff,jnildiff,float,6.2; + ڵ,shcode,shcode,char,6; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ,voldiff,voldiff,float,8.2; + ŷ,value,value,long,15; + ðѾ,total,total,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1442.res b/ls_sample/sample_python/Res/t1442.res new file mode 100644 index 0000000..0929cf9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1442.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,Ű/(t1442),t1442,attr,block,headtype=A; + BEGIN_DATA_MAP + t1442InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + Ű,type1,type1,char,1; + Ⱓ,type2,type2,char,1; + ,type3,type3,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1442OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1442OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,pastprice,pastprice,long,8; + 񱸺,pastsign,pastsign,char,1; + ,pastchange,pastchange,long,8; + ,pastdiff,pastdiff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1442_2.res b/ls_sample/sample_python/Res/t1442_2.res new file mode 100644 index 0000000..0929cf9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1442_2.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,Ű/(t1442),t1442,attr,block,headtype=A; + BEGIN_DATA_MAP + t1442InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + Ű,type1,type1,char,1; + Ⱓ,type2,type2,char,1; + ,type3,type3,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1442OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1442OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,pastprice,pastprice,long,8; + 񱸺,pastsign,pastsign,char,1; + ,pastchange,pastchange,long,8; + ,pastdiff,pastdiff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1444.res b/ls_sample/sample_python/Res/t1444.res new file mode 100644 index 0000000..e676738 --- /dev/null +++ b/ls_sample/sample_python/Res/t1444.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ðѾ׻(t1444),t1444,attr,block,headtype=A; + BEGIN_DATA_MAP + t1444InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + IDX,idx,idx,long,4; + end + t1444OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1444OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,vol_rate,vol_rate,float,6.2; + ðѾ,total,total,long,12; + ,rate,rate,float,6.2; + κ,for_rate,for_rate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1444_2.res b/ls_sample/sample_python/Res/t1444_2.res new file mode 100644 index 0000000..e676738 --- /dev/null +++ b/ls_sample/sample_python/Res/t1444_2.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ðѾ׻(t1444),t1444,attr,block,headtype=A; + BEGIN_DATA_MAP + t1444InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + IDX,idx,idx,long,4; + end + t1444OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1444OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,vol_rate,vol_rate,float,6.2; + ðѾ,total,total,long,12; + ,rate,rate,float,6.2; + κ,for_rate,for_rate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1449.res b/ls_sample/sample_python/Res/t1449.res new file mode 100644 index 0000000..59d9260 --- /dev/null +++ b/ls_sample/sample_python/Res/t1449.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ݴ뺰Ÿźȸ(t1449),t1449,attr,block,headtype=A; + BEGIN_DATA_MAP + t1449InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ڱ,dategb,dategb,char,1; + end + t1449OutBlock,,output; + begin + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + żüᷮ,msvolume,msvolume,long,12; + ŵüᷮ,mdvolume,mdvolume,long,12; + end + t1449OutBlock1,1,output,occurs; + begin + üᰡ,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,tickdiff,tickdiff,float,6.2; + ü,cvolume,cvolume,long,12; + ,diff,diff,float,6.2; + ŵüᷮ,mdvolume,mdvolume,long,12; + żüᷮ,msvolume,msvolume,long,12; + ż,msdiff,msdiff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1449_2.res b/ls_sample/sample_python/Res/t1449_2.res new file mode 100644 index 0000000..59d9260 --- /dev/null +++ b/ls_sample/sample_python/Res/t1449_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ݴ뺰Ÿźȸ(t1449),t1449,attr,block,headtype=A; + BEGIN_DATA_MAP + t1449InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ڱ,dategb,dategb,char,1; + end + t1449OutBlock,,output; + begin + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + żüᷮ,msvolume,msvolume,long,12; + ŵüᷮ,mdvolume,mdvolume,long,12; + end + t1449OutBlock1,1,output,occurs; + begin + üᰡ,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,tickdiff,tickdiff,float,6.2; + ü,cvolume,cvolume,long,12; + ,diff,diff,float,6.2; + ŵüᷮ,mdvolume,mdvolume,long,12; + żüᷮ,msvolume,msvolume,long,12; + ż,msdiff,msdiff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1452.res b/ls_sample/sample_python/Res/t1452.res new file mode 100644 index 0000000..d214b97 --- /dev/null +++ b/ls_sample/sample_python/Res/t1452.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ŷ(t1452),t1452,attr,block,headtype=A; + BEGIN_DATA_MAP + t1452InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ϱ,jnilgubun,jnilgubun,char,1; + ۵,sdiff,sdiff,long,3; + ,ediff,ediff,long,3; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + end + t1452OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1452OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ȸ,vol,vol,float,6.2; + ϰŷ,jnilvolume,jnilvolume,long,12; + Ϻ,bef_diff,bef_diff,float,10.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1452_2.res b/ls_sample/sample_python/Res/t1452_2.res new file mode 100644 index 0000000..d214b97 --- /dev/null +++ b/ls_sample/sample_python/Res/t1452_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ŷ(t1452),t1452,attr,block,headtype=A; + BEGIN_DATA_MAP + t1452InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ϱ,jnilgubun,jnilgubun,char,1; + ۵,sdiff,sdiff,long,3; + ,ediff,ediff,long,3; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + end + t1452OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1452OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ȸ,vol,vol,float,6.2; + ϰŷ,jnilvolume,jnilvolume,long,12; + Ϻ,bef_diff,bef_diff,float,10.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1463.res b/ls_sample/sample_python/Res/t1463.res new file mode 100644 index 0000000..e33d7be --- /dev/null +++ b/ls_sample/sample_python/Res/t1463.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ŷݻ(t1463),t1463,attr,block,headtype=A; + BEGIN_DATA_MAP + t1463InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ϱ,jnilgubun,jnilgubun,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1463OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1463OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ϰŷ,jnilvalue,jnilvalue,long,12; + Ϻ,bef_diff,bef_diff,float,10.2; + ڵ,shcode,shcode,char,6; + filler,filler,filler,char,1; + ϰŷ,jnilvolume,jnilvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1463_2.res b/ls_sample/sample_python/Res/t1463_2.res new file mode 100644 index 0000000..e33d7be --- /dev/null +++ b/ls_sample/sample_python/Res/t1463_2.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ŷݻ(t1463),t1463,attr,block,headtype=A; + BEGIN_DATA_MAP + t1463InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ϱ,jnilgubun,jnilgubun,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1463OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1463OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ϰŷ,jnilvalue,jnilvalue,long,12; + Ϻ,bef_diff,bef_diff,float,10.2; + ڵ,shcode,shcode,char,6; + filler,filler,filler,char,1; + ϰŷ,jnilvolume,jnilvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1466.res b/ls_sample/sample_python/Res/t1466.res new file mode 100644 index 0000000..4490e33 --- /dev/null +++ b/ls_sample/sample_python/Res/t1466.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ϵðŷ(t1466),t1466,attr,block,headtype=A; + BEGIN_DATA_MAP + t1466InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ϰŷ,type1,type1,char,1; + ŷ޵,type2,type2,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1466OutBlock,,output; + begin + ú,hhmm,hhmm,char,5; + IDX,idx,idx,long,4; + end + t1466OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ϰŷ,stdvolume,stdvolume,long,12; + ϰŷ,volume,volume,long,12; + ŷ޵,voldiff,voldiff,float,8.2; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1466_2.res b/ls_sample/sample_python/Res/t1466_2.res new file mode 100644 index 0000000..4490e33 --- /dev/null +++ b/ls_sample/sample_python/Res/t1466_2.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ϵðŷ(t1466),t1466,attr,block,headtype=A; + BEGIN_DATA_MAP + t1466InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ϰŷ,type1,type1,char,1; + ŷ޵,type2,type2,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1466OutBlock,,output; + begin + ú,hhmm,hhmm,char,5; + IDX,idx,idx,long,4; + end + t1466OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ϰŷ,stdvolume,stdvolume,long,12; + ϰŷ,volume,volume,long,12; + ŷ޵,voldiff,voldiff,float,8.2; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1471.res b/ls_sample/sample_python/Res/t1471.res new file mode 100644 index 0000000..b54afee --- /dev/null +++ b/ls_sample/sample_python/Res/t1471.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰ȣܷ(t1471),t1471,attr,block,headtype=A; + BEGIN_DATA_MAP + t1471InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + б,gubun,gubun,char,2; + ð,time,time,char,6; + ڷᰳ,cnt,cnt,char,3; + end + t1471OutBlock,,output; + begin + ðCTS,time,time,char,6; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + end + t1471OutBlock1,1,output,occurs; + begin + üð,time,time,char,6; + ޵,preoffercha1,preoffercha1,long,12; + ŵ켱ܷ,offerrem1,offerrem1,long,12; + ŵ켱ȣ,offerho1,offerho1,long,8; + ż켱ȣ,bidho1,bidho1,long,8; + ż켱ܷ,bidrem1,bidrem1,long,12; + ż,prebidcha1,prebidcha1,long,12; + Ѹŵ,totofferrem,totofferrem,long,12; + Ѹż,totbidrem,totbidrem,long,12; + ż,totsun,totsun,long,12; + ż,msrate,msrate,float,6.2; + ,close,close,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1471 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1471_2.res b/ls_sample/sample_python/Res/t1471_2.res new file mode 100644 index 0000000..b54afee --- /dev/null +++ b/ls_sample/sample_python/Res/t1471_2.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰ȣܷ(t1471),t1471,attr,block,headtype=A; + BEGIN_DATA_MAP + t1471InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + б,gubun,gubun,char,2; + ð,time,time,char,6; + ڷᰳ,cnt,cnt,char,3; + end + t1471OutBlock,,output; + begin + ðCTS,time,time,char,6; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + end + t1471OutBlock1,1,output,occurs; + begin + üð,time,time,char,6; + ޵,preoffercha1,preoffercha1,long,12; + ŵ켱ܷ,offerrem1,offerrem1,long,12; + ŵ켱ȣ,offerho1,offerho1,long,8; + ż켱ȣ,bidho1,bidho1,long,8; + ż켱ܷ,bidrem1,bidrem1,long,12; + ż,prebidcha1,prebidcha1,long,12; + Ѹŵ,totofferrem,totofferrem,long,12; + Ѹż,totbidrem,totbidrem,long,12; + ż,totsun,totsun,long,12; + ż,msrate,msrate,float,6.2; + ,close,close,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1471 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1475.res b/ls_sample/sample_python/Res/t1475.res new file mode 100644 index 0000000..8737c83 --- /dev/null +++ b/ls_sample/sample_python/Res/t1475.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,üᰭ(t1475),t1475,attr,block,headtype=A; + BEGIN_DATA_MAP + t1475InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ϶,vptype,vptype,char,1; + Ͱ,datacnt,datacnt,long,4; + ,date,date,long,8; + ؽð,time,time,long,6; + ũī,rankcnt,rankcnt,long,3; + ȸ,gubun,gubun,char,1; + end + t1475OutBlock,,output; + begin + ,date,date,long,8; + ؽð,time,time,long,6; + ũī,rankcnt,rankcnt,long,3; + end + t1475OutBlock1,1,output,occurs; + begin + ,datetime,datetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + VP,todayvp,todayvp,float,8.2; + 5MAVP,ma5vp,ma5vp,float,8.2; + 20MAVP,ma20vp,ma20vp,float,8.2; + 60MAVP,ma60vp,ma60vp,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1475_2.res b/ls_sample/sample_python/Res/t1475_2.res new file mode 100644 index 0000000..8737c83 --- /dev/null +++ b/ls_sample/sample_python/Res/t1475_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,üᰭ(t1475),t1475,attr,block,headtype=A; + BEGIN_DATA_MAP + t1475InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ϶,vptype,vptype,char,1; + Ͱ,datacnt,datacnt,long,4; + ,date,date,long,8; + ؽð,time,time,long,6; + ũī,rankcnt,rankcnt,long,3; + ȸ,gubun,gubun,char,1; + end + t1475OutBlock,,output; + begin + ,date,date,long,8; + ؽð,time,time,long,6; + ũī,rankcnt,rankcnt,long,3; + end + t1475OutBlock1,1,output,occurs; + begin + ,datetime,datetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + VP,todayvp,todayvp,float,8.2; + 5MAVP,ma5vp,ma5vp,float,8.2; + 20MAVP,ma20vp,ma20vp,float,8.2; + 60MAVP,ma60vp,ma60vp,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1481.res b/ls_sample/sample_python/Res/t1481.res new file mode 100644 index 0000000..cc2404c --- /dev/null +++ b/ls_sample/sample_python/Res/t1481.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ðܵ(t1481),t1481,attr,block,headtype=A; + BEGIN_DATA_MAP + t1481InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ϶,gubun2,gubun2,char,1; + üũ,jongchk,jongchk,char,1; + ŷ,volume,volume,char,1; + IDX,idx,idx,long,4; + end + t1481OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1481OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ŵȣ,offerho1,offerho1,long,12; + żȣ,bidho1,bidho1,long,12; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1481_2.res b/ls_sample/sample_python/Res/t1481_2.res new file mode 100644 index 0000000..cc2404c --- /dev/null +++ b/ls_sample/sample_python/Res/t1481_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ðܵ(t1481),t1481,attr,block,headtype=A; + BEGIN_DATA_MAP + t1481InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ϶,gubun2,gubun2,char,1; + üũ,jongchk,jongchk,char,1; + ŷ,volume,volume,char,1; + IDX,idx,idx,long,4; + end + t1481OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1481OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ŵȣ,offerho1,offerho1,long,12; + żȣ,bidho1,bidho1,long,12; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1482.res b/ls_sample/sample_python/Res/t1482.res new file mode 100644 index 0000000..5921c6d --- /dev/null +++ b/ls_sample/sample_python/Res/t1482.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ðܰŷ(t1482),t1482,attr,block,headtype=A; + BEGIN_DATA_MAP + t1482InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ŷ,jongchk,jongchk,char,1; + IDX,idx,idx,long,4; + end + t1482OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1482OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ȸ,vol,vol,float,6.2; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1482_2.res b/ls_sample/sample_python/Res/t1482_2.res new file mode 100644 index 0000000..5921c6d --- /dev/null +++ b/ls_sample/sample_python/Res/t1482_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ðܰŷ(t1482),t1482,attr,block,headtype=A; + BEGIN_DATA_MAP + t1482InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ŷ,jongchk,jongchk,char,1; + IDX,idx,idx,long,4; + end + t1482OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1482OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ȸ,vol,vol,float,6.2; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1485.res b/ls_sample/sample_python/Res/t1485.res new file mode 100644 index 0000000..20bd1eb --- /dev/null +++ b/ls_sample/sample_python/Res/t1485.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,(t1485),t1485,attr,block,headtype=A; + BEGIN_DATA_MAP + t1485InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + ȸ,gubun,gubun,char,1; + end + t1485OutBlock,,output; + begin + ,pricejisu,pricejisu,float,10.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,10.2; + ŷ,volume,volume,long,12; + ,yhighjo,yhighjo,long,4; + ,yupjo,yupjo,long,4; + ,yunchgjo,yunchgjo,long,4; + ϶,ylowjo,ylowjo,long,4; + ,ydownjo,ydownjo,long,4; + ŷ,ytrajo,ytrajo,long,4; + end + t1485OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,6; + ,jisu,jisu,float,10.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,10.2; + üᷮ,volume,volume,long,12; + üᷮ,volcha,volcha,long,12; + ,diff,diff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1485_2.res b/ls_sample/sample_python/Res/t1485_2.res new file mode 100644 index 0000000..20bd1eb --- /dev/null +++ b/ls_sample/sample_python/Res/t1485_2.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,(t1485),t1485,attr,block,headtype=A; + BEGIN_DATA_MAP + t1485InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + ȸ,gubun,gubun,char,1; + end + t1485OutBlock,,output; + begin + ,pricejisu,pricejisu,float,10.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,10.2; + ŷ,volume,volume,long,12; + ,yhighjo,yhighjo,long,4; + ,yupjo,yupjo,long,4; + ,yunchgjo,yunchgjo,long,4; + ϶,ylowjo,ylowjo,long,4; + ,ydownjo,ydownjo,long,4; + ŷ,ytrajo,ytrajo,long,4; + end + t1485OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,6; + ,jisu,jisu,float,10.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,10.2; + üᷮ,volume,volume,long,12; + üᷮ,volcha,volcha,long,12; + ,diff,diff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1486.res b/ls_sample/sample_python/Res/t1486.res new file mode 100644 index 0000000..b7799af --- /dev/null +++ b/ls_sample/sample_python/Res/t1486.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ðüᰡ(t1486),t1486,attr,block,headtype=A; + BEGIN_DATA_MAP + t1486InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ðCTS,cts_time,cts_time,char,10; + ȸǼ,cnt,cnt,int,4; + end + t1486OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t1486OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + üᰡ,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,cvolume,cvolume,long,12; + ŵȣ,offerho1,offerho1,long,8; + żȣ,bidho1,bidho1,long,8; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1486_2.res b/ls_sample/sample_python/Res/t1486_2.res new file mode 100644 index 0000000..b7799af --- /dev/null +++ b/ls_sample/sample_python/Res/t1486_2.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ðüᰡ(t1486),t1486,attr,block,headtype=A; + BEGIN_DATA_MAP + t1486InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ðCTS,cts_time,cts_time,char,10; + ȸǼ,cnt,cnt,int,4; + end + t1486OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t1486OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + üᰡ,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,cvolume,cvolume,long,12; + ŵȣ,offerho1,offerho1,long,8; + żȣ,bidho1,bidho1,long,8; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1488.res b/ls_sample/sample_python/Res/t1488.res new file mode 100644 index 0000000..ff7a71c --- /dev/null +++ b/ls_sample/sample_python/Res/t1488.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,üᰡȸ(t1488),t1488,attr,block,headtype=A; + BEGIN_DATA_MAP + t1488InBlock,⺻Է,input; + begin + ŷұ,gubun,gubun,char,1; + ϶,sign,sign,char,1; + 屸,jgubun,jgubun,char,1; + üũ,jongchk,jongchk,char,12; + IDX,idx,idx,long,4; + ŷ,volume,volume,char,1; + ü۰,yesprice,yesprice,long,8; + üᰡ,yeeprice,yeeprice,long,8; + üᷮ,yevolume,yevolume,long,12; + end + t1488OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1488OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵܷ,offerrem,offerrem,long,12; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + żܷ,bidrem,bidrem,long,12; + ϼ,cnt,cnt,long,4; + ڵ,shcode,shcode,char,6; + ű,jkrate,jkrate,char,3; + ϰŷ,jnilvolume,jnilvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1488_2.res b/ls_sample/sample_python/Res/t1488_2.res new file mode 100644 index 0000000..ff7a71c --- /dev/null +++ b/ls_sample/sample_python/Res/t1488_2.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,üᰡȸ(t1488),t1488,attr,block,headtype=A; + BEGIN_DATA_MAP + t1488InBlock,⺻Է,input; + begin + ŷұ,gubun,gubun,char,1; + ϶,sign,sign,char,1; + 屸,jgubun,jgubun,char,1; + üũ,jongchk,jongchk,char,12; + IDX,idx,idx,long,4; + ŷ,volume,volume,char,1; + ü۰,yesprice,yesprice,long,8; + üᰡ,yeeprice,yeeprice,long,8; + üᷮ,yevolume,yevolume,long,12; + end + t1488OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1488OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵܷ,offerrem,offerrem,long,12; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + żܷ,bidrem,bidrem,long,12; + ϼ,cnt,cnt,long,4; + ڵ,shcode,shcode,char,6; + ű,jkrate,jkrate,char,3; + ϰŷ,jnilvolume,jnilvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1489.res b/ls_sample/sample_python/Res/t1489.res new file mode 100644 index 0000000..9442095 --- /dev/null +++ b/ls_sample/sample_python/Res/t1489.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,üᷮȸ(t1489),t1489,attr,block,headtype=A; + BEGIN_DATA_MAP + t1489InBlock,⺻Է,input; + begin + ŷұ,gubun,gubun,char,1; + 屸,jgubun,jgubun,char,1; + üũ,jongchk,jongchk,char,12; + IDX,idx,idx,long,4; + ü۰,yesprice,yesprice,long,8; + üᰡ,yeeprice,yeeprice,long,8; + üᷮ,yevolume,yevolume,long,12; + end + t1489OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1489OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + ڵ,shcode,shcode,char,6; + ϰŷ,jnilvolume,jnilvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1489_2.res b/ls_sample/sample_python/Res/t1489_2.res new file mode 100644 index 0000000..9442095 --- /dev/null +++ b/ls_sample/sample_python/Res/t1489_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,üᷮȸ(t1489),t1489,attr,block,headtype=A; + BEGIN_DATA_MAP + t1489InBlock,⺻Է,input; + begin + ŷұ,gubun,gubun,char,1; + 屸,jgubun,jgubun,char,1; + üũ,jongchk,jongchk,char,12; + IDX,idx,idx,long,4; + ü۰,yesprice,yesprice,long,8; + üᰡ,yeeprice,yeeprice,long,8; + üᷮ,yevolume,yevolume,long,12; + end + t1489OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1489OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + ڵ,shcode,shcode,char,6; + ϰŷ,jnilvolume,jnilvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1492.res b/ls_sample/sample_python/Res/t1492.res new file mode 100644 index 0000000..dff6826 --- /dev/null +++ b/ls_sample/sample_python/Res/t1492.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,ϰ(t1492),t1492,attr,block,headtype=A; + BEGIN_DATA_MAP + t1492InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ϶,gubun2,gubun2,char,1; + üũ,jongchk,jongchk,char,1; + ŷ,volume,volume,char,1; + IDX,idx,idx,long,4; + end + t1492OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1492OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + üᰡ,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,yevolume,yevolume,long,12; + ŷ,volume,volume,long,12; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ŵȣ,offerho1,offerho1,long,12; + żȣ,bidho1,bidho1,long,12; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1492_2.res b/ls_sample/sample_python/Res/t1492_2.res new file mode 100644 index 0000000..dff6826 --- /dev/null +++ b/ls_sample/sample_python/Res/t1492_2.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,ϰ(t1492),t1492,attr,block,headtype=A; + BEGIN_DATA_MAP + t1492InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ϶,gubun2,gubun2,char,1; + üũ,jongchk,jongchk,char,1; + ŷ,volume,volume,char,1; + IDX,idx,idx,long,4; + end + t1492OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1492OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + üᰡ,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,yevolume,yevolume,long,12; + ŷ,volume,volume,long,12; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ŵȣ,offerho1,offerho1,long,12; + żȣ,bidho1,bidho1,long,12; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1511.res b/ls_sample/sample_python/Res/t1511.res new file mode 100644 index 0000000..7bcf8b1 --- /dev/null +++ b/ls_sample/sample_python/Res/t1511.res @@ -0,0 +1,78 @@ +BEGIN_FUNCTION_MAP + .Func,簡(t1511),t1511,attr,block,headtype=A; + BEGIN_DATA_MAP + t1511InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + end + t1511OutBlock,⺻,output; + begin + ,gubun,gubun,char,1; + ,hname,hname,char,20; + ,pricejisu,pricejisu,float,7.2; + ,jniljisu,jniljisu,float,7.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,7.2; + ,diffjisu,diffjisu,float,6.2; + ϰŷ,jnilvolume,jnilvolume,long,12; + ϰŷ,volume,volume,long,12; + ŷϴ,volumechange,volumechange,long,12; + ŷ,volumerate,volumerate,float,6.2; + ϰŷ,jnilvalue,jnilvalue,long,12; + ϰŷ,value,value,long,12; + ŷϴ,valuechange,valuechange,long,12; + ŷݺ,valuerate,valuerate,float,6.2; + ð,openjisu,openjisu,float,7.2; + ð,opendiff,opendiff,float,6.2; + ðð,opentime,opentime,char,6; + ,highjisu,highjisu,float,7.2; + ,highdiff,highdiff,float,6.2; + ð,hightime,hightime,char,6; + ,lowjisu,lowjisu,float,7.2; + ,lowdiff,lowdiff,float,6.2; + ð,lowtime,lowtime,char,6; + 52ְ,whjisu,whjisu,float,7.2; + 52ְ簡,whchange,whchange,float,7.2; + 52ְ,whjday,whjday,char,8; + 52,wljisu,wljisu,float,7.2; + 52簡,wlchange,wlchange,float,7.2; + 52,wljday,wljday,char,8; + ְ,yhjisu,yhjisu,float,7.2; + ְ簡,yhchange,yhchange,float,7.2; + ְ,yhjday,yhjday,char,8; + ,yljisu,yljisu,float,7.2; + 簡,ylchange,ylchange,float,7.2; + ,yljday,yljday,char,8; + ù°ڵ,firstjcode,firstjcode,char,3; + ù°,firstjname,firstjname,char,20; + ù°,firstjisu,firstjisu,float,7.2; + ù°񱸺,firsign,firsign,char,1; + ù°ϴ,firchange,firchange,float,7.2; + ù°,firdiff,firdiff,float,6.2; + ι°ڵ,secondjcode,secondjcode,char,3; + ι°,secondjname,secondjname,char,20; + ι°,secondjisu,secondjisu,float,7.2; + ι°񱸺,secsign,secsign,char,1; + ι°ϴ,secchange,secchange,float,7.2; + ι°,secdiff,secdiff,float,6.2; + °ڵ,thirdjcode,thirdjcode,char,3; + °,thirdjname,thirdjname,char,20; + °,thirdjisu,thirdjisu,float,7.2; + °񱸺,thrsign,thrsign,char,1; + °ϴ,thrchange,thrchange,float,7.2; + °,thrdiff,thrdiff,float,6.2; + ׹°ڵ,fourthjcode,fourthjcode,char,3; + ׹°,fourthjname,fourthjname,char,20; + ׹°,fourthjisu,fourthjisu,float,7.2; + ׹°񱸺,forsign,forsign,char,1; + ׹°ϴ,forchange,forchange,float,7.2; + ׹°,fordiff,fordiff,float,6.2; + ,highjo,highjo,long,4; + ,upjo,upjo,long,4; + ,unchgjo,unchgjo,long,4; + ϶,lowjo,lowjo,long,4; + ,downjo,downjo,long,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1511_2.res b/ls_sample/sample_python/Res/t1511_2.res new file mode 100644 index 0000000..7bcf8b1 --- /dev/null +++ b/ls_sample/sample_python/Res/t1511_2.res @@ -0,0 +1,78 @@ +BEGIN_FUNCTION_MAP + .Func,簡(t1511),t1511,attr,block,headtype=A; + BEGIN_DATA_MAP + t1511InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + end + t1511OutBlock,⺻,output; + begin + ,gubun,gubun,char,1; + ,hname,hname,char,20; + ,pricejisu,pricejisu,float,7.2; + ,jniljisu,jniljisu,float,7.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,7.2; + ,diffjisu,diffjisu,float,6.2; + ϰŷ,jnilvolume,jnilvolume,long,12; + ϰŷ,volume,volume,long,12; + ŷϴ,volumechange,volumechange,long,12; + ŷ,volumerate,volumerate,float,6.2; + ϰŷ,jnilvalue,jnilvalue,long,12; + ϰŷ,value,value,long,12; + ŷϴ,valuechange,valuechange,long,12; + ŷݺ,valuerate,valuerate,float,6.2; + ð,openjisu,openjisu,float,7.2; + ð,opendiff,opendiff,float,6.2; + ðð,opentime,opentime,char,6; + ,highjisu,highjisu,float,7.2; + ,highdiff,highdiff,float,6.2; + ð,hightime,hightime,char,6; + ,lowjisu,lowjisu,float,7.2; + ,lowdiff,lowdiff,float,6.2; + ð,lowtime,lowtime,char,6; + 52ְ,whjisu,whjisu,float,7.2; + 52ְ簡,whchange,whchange,float,7.2; + 52ְ,whjday,whjday,char,8; + 52,wljisu,wljisu,float,7.2; + 52簡,wlchange,wlchange,float,7.2; + 52,wljday,wljday,char,8; + ְ,yhjisu,yhjisu,float,7.2; + ְ簡,yhchange,yhchange,float,7.2; + ְ,yhjday,yhjday,char,8; + ,yljisu,yljisu,float,7.2; + 簡,ylchange,ylchange,float,7.2; + ,yljday,yljday,char,8; + ù°ڵ,firstjcode,firstjcode,char,3; + ù°,firstjname,firstjname,char,20; + ù°,firstjisu,firstjisu,float,7.2; + ù°񱸺,firsign,firsign,char,1; + ù°ϴ,firchange,firchange,float,7.2; + ù°,firdiff,firdiff,float,6.2; + ι°ڵ,secondjcode,secondjcode,char,3; + ι°,secondjname,secondjname,char,20; + ι°,secondjisu,secondjisu,float,7.2; + ι°񱸺,secsign,secsign,char,1; + ι°ϴ,secchange,secchange,float,7.2; + ι°,secdiff,secdiff,float,6.2; + °ڵ,thirdjcode,thirdjcode,char,3; + °,thirdjname,thirdjname,char,20; + °,thirdjisu,thirdjisu,float,7.2; + °񱸺,thrsign,thrsign,char,1; + °ϴ,thrchange,thrchange,float,7.2; + °,thrdiff,thrdiff,float,6.2; + ׹°ڵ,fourthjcode,fourthjcode,char,3; + ׹°,fourthjname,fourthjname,char,20; + ׹°,fourthjisu,fourthjisu,float,7.2; + ׹°񱸺,forsign,forsign,char,1; + ׹°ϴ,forchange,forchange,float,7.2; + ׹°,fordiff,fordiff,float,6.2; + ,highjo,highjo,long,4; + ,upjo,upjo,long,4; + ,unchgjo,unchgjo,long,4; + ϶,lowjo,lowjo,long,4; + ,downjo,downjo,long,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1514.res b/ls_sample/sample_python/Res/t1514.res new file mode 100644 index 0000000..1d97b91 --- /dev/null +++ b/ls_sample/sample_python/Res/t1514.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓ(t1514),t1514,attr,block,headtype=A; + BEGIN_DATA_MAP + t1514InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + 1,gubun1,gubun1,char,1; + 2,gubun2,gubun2,char,1; + CTS_,cts_date,cts_date,char,8; + ȸǼ,cnt,cnt,int,4; + ߱,rate_gbn,rate_gbn,char,1; + end + t1514OutBlock,⺻,output; + begin + CTS_,cts_date,cts_date,char,8; + end + t1514OutBlock1,⺻1,output,occurs; + begin + ,date,date,char,8; + ,jisu,jisu,float,12.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,7.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,12.2; + ŷ1,value1,value1,long,12; + ,high,high,long,4; + ,unchg,unchg,long,4; + ϶,low,low,long,4; + ,uprate,uprate,float,6.2; + μż,frgsvolume,frgsvolume,long,8; + ð,openjisu,openjisu,float,12.2; + ,highjisu,highjisu,float,12.2; + ,lowjisu,lowjisu,float,12.2; + ŷ2,value2,value2,long,12; + ,up,up,long,4; + ,down,down,long,4; + ,totjo,totjo,long,4; + ż,orgsvolume,orgsvolume,long,8; + ڵ,upcode,upcode,char,3; + ŷ,rate,rate,float,7.2; + ͷ,divrate,divrate,float,7.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1514_2.res b/ls_sample/sample_python/Res/t1514_2.res new file mode 100644 index 0000000..1d97b91 --- /dev/null +++ b/ls_sample/sample_python/Res/t1514_2.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓ(t1514),t1514,attr,block,headtype=A; + BEGIN_DATA_MAP + t1514InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + 1,gubun1,gubun1,char,1; + 2,gubun2,gubun2,char,1; + CTS_,cts_date,cts_date,char,8; + ȸǼ,cnt,cnt,int,4; + ߱,rate_gbn,rate_gbn,char,1; + end + t1514OutBlock,⺻,output; + begin + CTS_,cts_date,cts_date,char,8; + end + t1514OutBlock1,⺻1,output,occurs; + begin + ,date,date,char,8; + ,jisu,jisu,float,12.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,7.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,12.2; + ŷ1,value1,value1,long,12; + ,high,high,long,4; + ,unchg,unchg,long,4; + ϶,low,low,long,4; + ,uprate,uprate,float,6.2; + μż,frgsvolume,frgsvolume,long,8; + ð,openjisu,openjisu,float,12.2; + ,highjisu,highjisu,float,12.2; + ,lowjisu,lowjisu,float,12.2; + ŷ2,value2,value2,long,12; + ,up,up,long,4; + ,down,down,long,4; + ,totjo,totjo,long,4; + ż,orgsvolume,orgsvolume,long,8; + ڵ,upcode,upcode,char,3; + ŷ,rate,rate,float,7.2; + ͷ,divrate,divrate,float,7.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1516.res b/ls_sample/sample_python/Res/t1516.res new file mode 100644 index 0000000..cc1fe26 --- /dev/null +++ b/ls_sample/sample_python/Res/t1516.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ü(t1516),t1516,attr,block,headtype=A; + BEGIN_DATA_MAP + t1516InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + ,gubun,gubun,char,1; + ڵ,shcode,shcode,char,6; + end + t1516OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + ,pricejisu,pricejisu,float,12.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,7.2; + ,jdiff,jdiff,float,6.2; + end + t1516OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,sojinrate,sojinrate,float,6.2; + Ÿ,beta,beta,float,6.5; + PER,perx,perx,float,8.2; + μż,frgsvolume,frgsvolume,long,12; + ż,orgsvolume,orgsvolume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ڵ,shcode,shcode,char,6; + ðѾ,total,total,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1516_2.res b/ls_sample/sample_python/Res/t1516_2.res new file mode 100644 index 0000000..cc1fe26 --- /dev/null +++ b/ls_sample/sample_python/Res/t1516_2.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ü(t1516),t1516,attr,block,headtype=A; + BEGIN_DATA_MAP + t1516InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + ,gubun,gubun,char,1; + ڵ,shcode,shcode,char,6; + end + t1516OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + ,pricejisu,pricejisu,float,12.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,7.2; + ,jdiff,jdiff,float,6.2; + end + t1516OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,sojinrate,sojinrate,float,6.2; + Ÿ,beta,beta,float,6.5; + PER,perx,perx,float,8.2; + μż,frgsvolume,frgsvolume,long,12; + ż,orgsvolume,orgsvolume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ڵ,shcode,shcode,char,6; + ðѾ,total,total,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1531.res b/ls_sample/sample_python/Res/t1531.res new file mode 100644 index 0000000..2ad9936 --- /dev/null +++ b/ls_sample/sample_python/Res/t1531.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP + .Func,׸(t1531),t1531,attr,block,headtype=A; + BEGIN_DATA_MAP + t1531InBlock,⺻Է,input; + begin + ׸,tmname,tmname,char,36; + ׸ڵ,tmcode,tmcode,char,4; + end + t1531OutBlock,,output,occurs; + begin + ׸,tmname,tmname,char,36; + յ,avgdiff,avgdiff,float,6.2; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1531_2.res b/ls_sample/sample_python/Res/t1531_2.res new file mode 100644 index 0000000..2ad9936 --- /dev/null +++ b/ls_sample/sample_python/Res/t1531_2.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP + .Func,׸(t1531),t1531,attr,block,headtype=A; + BEGIN_DATA_MAP + t1531InBlock,⺻Է,input; + begin + ׸,tmname,tmname,char,36; + ׸ڵ,tmcode,tmcode,char,4; + end + t1531OutBlock,,output,occurs; + begin + ׸,tmname,tmname,char,36; + յ,avgdiff,avgdiff,float,6.2; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1532.res b/ls_sample/sample_python/Res/t1532.res new file mode 100644 index 0000000..be71da9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1532.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,׸(t1532),t1532,attr,block,headtype=A; + BEGIN_DATA_MAP + t1532InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1532OutBlock,,output,occurs; + begin + ׸,tmname,tmname,char,36; + յ,avgdiff,avgdiff,float,6.2; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1532_2.res b/ls_sample/sample_python/Res/t1532_2.res new file mode 100644 index 0000000..be71da9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1532_2.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,׸(t1532),t1532,attr,block,headtype=A; + BEGIN_DATA_MAP + t1532InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1532OutBlock,,output,occurs; + begin + ׸,tmname,tmname,char,36; + յ,avgdiff,avgdiff,float,6.2; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1533.res b/ls_sample/sample_python/Res/t1533.res new file mode 100644 index 0000000..c9180f9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1533.res @@ -0,0 +1,27 @@ +BEGIN_FUNCTION_MAP + .Func,Ư׸(t1533),t1533,attr,block,headtype=A; + BEGIN_DATA_MAP + t1533InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ,chgdate,chgdate,long,2; + end + t1533OutBlock,⺻,output; + begin + ,bdate,bdate,char,8; + end + t1533OutBlock1,1,output,occurs; + begin + ׸,tmname,tmname,char,36; + ü,totcnt,totcnt,long,4; + ,upcnt,upcnt,long,4; + ϶,dncnt,dncnt,long,4; + º,uprate,uprate,float,6.2; + ŷ,diff_vol,diff_vol,float,10.2; + յ,avgdiff,avgdiff,float,6.2; + ,chgdiff,chgdiff,float,6.2; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1533_2.res b/ls_sample/sample_python/Res/t1533_2.res new file mode 100644 index 0000000..c9180f9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1533_2.res @@ -0,0 +1,27 @@ +BEGIN_FUNCTION_MAP + .Func,Ư׸(t1533),t1533,attr,block,headtype=A; + BEGIN_DATA_MAP + t1533InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ,chgdate,chgdate,long,2; + end + t1533OutBlock,⺻,output; + begin + ,bdate,bdate,char,8; + end + t1533OutBlock1,1,output,occurs; + begin + ׸,tmname,tmname,char,36; + ü,totcnt,totcnt,long,4; + ,upcnt,upcnt,long,4; + ϶,dncnt,dncnt,long,4; + º,uprate,uprate,float,6.2; + ŷ,diff_vol,diff_vol,float,10.2; + յ,avgdiff,avgdiff,float,6.2; + ,chgdiff,chgdiff,float,6.2; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1537.res b/ls_sample/sample_python/Res/t1537.res new file mode 100644 index 0000000..877436e --- /dev/null +++ b/ls_sample/sample_python/Res/t1537.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,׸񺰽üȸ(t1537),t1537,attr,block,headtype=A; + BEGIN_DATA_MAP + t1537InBlock,⺻Է,input; + begin + ׸ڵ,tmcode,tmcode,char,4; + end + t1537OutBlock,,output; + begin + ,upcnt,upcnt,long,4; + ׸,tmcnt,tmcnt,long,4; + ,uprate,uprate,long,4; + ׸,tmname,tmname,char,36; + end + t1537OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ϵð,jniltime,jniltime,float,9.2; + ڵ,shcode,shcode,char,6; + üᰡ,yeprice,yeprice,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ(:鸸),value,value,long,12; + ðѾ(:鸸),marketcap,marketcap,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1537_2.res b/ls_sample/sample_python/Res/t1537_2.res new file mode 100644 index 0000000..877436e --- /dev/null +++ b/ls_sample/sample_python/Res/t1537_2.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,׸񺰽üȸ(t1537),t1537,attr,block,headtype=A; + BEGIN_DATA_MAP + t1537InBlock,⺻Է,input; + begin + ׸ڵ,tmcode,tmcode,char,4; + end + t1537OutBlock,,output; + begin + ,upcnt,upcnt,long,4; + ׸,tmcnt,tmcnt,long,4; + ,uprate,uprate,long,4; + ׸,tmname,tmname,char,36; + end + t1537OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ϵð,jniltime,jniltime,float,9.2; + ڵ,shcode,shcode,char,6; + üᰡ,yeprice,yeprice,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ(:鸸),value,value,long,12; + ðѾ(:鸸),marketcap,marketcap,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1601.res b/ls_sample/sample_python/Res/t1601.res new file mode 100644 index 0000000..e1a4663 --- /dev/null +++ b/ls_sample/sample_python/Res/t1601.res @@ -0,0 +1,391 @@ +BEGIN_FUNCTION_MAP + .Func,ں(t1601),t1601,attr,block,headtype=A; + BEGIN_DATA_MAP + t1601InBlock,⺻Է,input; + begin + ֽıݾ׼1,gubun1,gubun1,char,1; + ɼDZݾ׼2,gubun2,gubun2,char,1; + ݾ״,gubun3,gubun3,char,1; + ݾ׼4,gubun4,gubun4,char,1; + end + t1601OutBlock1,⺻1,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock2,⺻2,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock3,⺻3,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock4,⺻4,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock5,⺻5,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock6,⺻6,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1601_2.res b/ls_sample/sample_python/Res/t1601_2.res new file mode 100644 index 0000000..e1a4663 --- /dev/null +++ b/ls_sample/sample_python/Res/t1601_2.res @@ -0,0 +1,391 @@ +BEGIN_FUNCTION_MAP + .Func,ں(t1601),t1601,attr,block,headtype=A; + BEGIN_DATA_MAP + t1601InBlock,⺻Է,input; + begin + ֽıݾ׼1,gubun1,gubun1,char,1; + ɼDZݾ׼2,gubun2,gubun2,char,1; + ݾ״,gubun3,gubun3,char,1; + ݾ׼4,gubun4,gubun4,char,1; + end + t1601OutBlock1,⺻1,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock2,⺻2,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock3,⺻3,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock4,⺻4,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock5,⺻5,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock6,⺻6,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1602.res b/ls_sample/sample_python/Res/t1602.res new file mode 100644 index 0000000..4685772 --- /dev/null +++ b/ls_sample/sample_python/Res/t1602.res @@ -0,0 +1,97 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰ڸŸ(t1602),t1602,attr,block,headtype=A; + BEGIN_DATA_MAP + t1602InBlock,⺻Է,input; + begin + 屸,market,market,char,1; + ڵ,upcode,upcode,char,3; + ,gubun1,gubun1,char,1; + Ϻб,gubun2,gubun2,char,1; + CTSTIME,cts_time,cts_time,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ȸǼ,cnt,cnt,int,4; + 񱸺(C:),gubun3,gubun3,char,1; + end + t1602OutBlock,⺻,output; + begin + CTSTIME,cts_time,cts_time,char,8; + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1602OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + μż,sv_08,sv_08,long,12; + ܱμż,sv_17,sv_17,long,12; + ż,sv_18,sv_18,long,12; + Ǽż,sv_01,sv_01,long,12; + żż,sv_03,sv_03,long,12; + ż,sv_04,sv_04,long,12; + ż,sv_02,sv_02,long,12; + ݼż,sv_05,sv_05,long,12; + ݼż,sv_06,sv_06,long,12; + Ÿż,sv_07,sv_07,long,12; + ż,sv_11,sv_11,long,12; + ݵż,sv_00,sv_00,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1602_2.res b/ls_sample/sample_python/Res/t1602_2.res new file mode 100644 index 0000000..4685772 --- /dev/null +++ b/ls_sample/sample_python/Res/t1602_2.res @@ -0,0 +1,97 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰ڸŸ(t1602),t1602,attr,block,headtype=A; + BEGIN_DATA_MAP + t1602InBlock,⺻Է,input; + begin + 屸,market,market,char,1; + ڵ,upcode,upcode,char,3; + ,gubun1,gubun1,char,1; + Ϻб,gubun2,gubun2,char,1; + CTSTIME,cts_time,cts_time,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ȸǼ,cnt,cnt,int,4; + 񱸺(C:),gubun3,gubun3,char,1; + end + t1602OutBlock,⺻,output; + begin + CTSTIME,cts_time,cts_time,char,8; + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1602OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + μż,sv_08,sv_08,long,12; + ܱμż,sv_17,sv_17,long,12; + ż,sv_18,sv_18,long,12; + Ǽż,sv_01,sv_01,long,12; + żż,sv_03,sv_03,long,12; + ż,sv_04,sv_04,long,12; + ż,sv_02,sv_02,long,12; + ݼż,sv_05,sv_05,long,12; + ݼż,sv_06,sv_06,long,12; + Ÿż,sv_07,sv_07,long,12; + ż,sv_11,sv_11,long,12; + ݵż,sv_00,sv_00,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1603.res b/ls_sample/sample_python/Res/t1603.res new file mode 100644 index 0000000..d31fa5b --- /dev/null +++ b/ls_sample/sample_python/Res/t1603.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰ڸŸ̻(t1603),t1603,attr,block,headtype=A; + BEGIN_DATA_MAP + t1603InBlock,⺻Է,input; + begin + 屸,market,market,char,1; + ڱ,gubun1,gubun1,char,1; + Ϻб,gubun2,gubun2,char,1; + CTSTIME,cts_time,cts_time,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ȸǼ,cnt,cnt,int,3; + ڵ,upcode,upcode,char,3; + end + t1603OutBlock,,output; + begin + CTSIDX,cts_idx,cts_idx,long,4; + CTSTIME,cts_time,cts_time,char,8; + end + t1603OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + ڱ,tjjcode,tjjcode,char,4; + ż,msvolume,msvolume,long,8; + ŵ,mdvolume,mdvolume,long,8; + żݾ,msvalue,msvalue,long,12; + ŵݾ,mdvalue,mdvalue,long,12; + ż,svolume,svolume,long,8; + żݾ,svalue,svalue,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1603_2.res b/ls_sample/sample_python/Res/t1603_2.res new file mode 100644 index 0000000..d31fa5b --- /dev/null +++ b/ls_sample/sample_python/Res/t1603_2.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰ڸŸ̻(t1603),t1603,attr,block,headtype=A; + BEGIN_DATA_MAP + t1603InBlock,⺻Է,input; + begin + 屸,market,market,char,1; + ڱ,gubun1,gubun1,char,1; + Ϻб,gubun2,gubun2,char,1; + CTSTIME,cts_time,cts_time,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ȸǼ,cnt,cnt,int,3; + ڵ,upcode,upcode,char,3; + end + t1603OutBlock,,output; + begin + CTSIDX,cts_idx,cts_idx,long,4; + CTSTIME,cts_time,cts_time,char,8; + end + t1603OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + ڱ,tjjcode,tjjcode,char,4; + ż,msvolume,msvolume,long,8; + ŵ,mdvolume,mdvolume,long,8; + żݾ,msvalue,msvalue,long,12; + ŵݾ,mdvalue,mdvalue,long,12; + ż,svolume,svolume,long,8; + żݾ,svalue,svalue,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1615.res b/ls_sample/sample_python/Res/t1615.res new file mode 100644 index 0000000..77f29ca --- /dev/null +++ b/ls_sample/sample_python/Res/t1615.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ڸŸ1(t1615),t1615,attr,block,headtype=A; + BEGIN_DATA_MAP + t1615InBlock,⺻Է,input; + begin + ֽı,gubun1,gubun1,char,1; + ɼDZ,gubun2,gubun2,char,1; + end + t1615OutBlock,,output; + begin + Źŵ,dwvolume,dwvolume,long,12; + Źŵݾ,dwvalue,dwvalue,long,12; + ڱŵ,djvolume,djvolume,long,12; + ڱŵݾ,djvalue,djvalue,long,12; + հ,sum_volume,sum_volume,long,12; + հݾ,sum_value,sum_value,long,12; + end + t1615OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + ,sv_08,sv_08,long,12; + ܱ,sv_17,sv_17,long,12; + ,sv_18,sv_18,long,12; + ,sv_07,sv_07,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1615_2.res b/ls_sample/sample_python/Res/t1615_2.res new file mode 100644 index 0000000..77f29ca --- /dev/null +++ b/ls_sample/sample_python/Res/t1615_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ڸŸ1(t1615),t1615,attr,block,headtype=A; + BEGIN_DATA_MAP + t1615InBlock,⺻Է,input; + begin + ֽı,gubun1,gubun1,char,1; + ɼDZ,gubun2,gubun2,char,1; + end + t1615OutBlock,,output; + begin + Źŵ,dwvolume,dwvolume,long,12; + Źŵݾ,dwvalue,dwvalue,long,12; + ڱŵ,djvolume,djvolume,long,12; + ڱŵݾ,djvalue,djvalue,long,12; + հ,sum_volume,sum_volume,long,12; + հݾ,sum_value,sum_value,long,12; + end + t1615OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + ,sv_08,sv_08,long,12; + ܱ,sv_17,sv_17,long,12; + ,sv_18,sv_18,long,12; + ,sv_07,sv_07,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1617.res b/ls_sample/sample_python/Res/t1617.res new file mode 100644 index 0000000..c80b9e6 --- /dev/null +++ b/ls_sample/sample_python/Res/t1617.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP + .Func,ڸŸ2(t1617),t1617,attr,block,headtype=A; + BEGIN_DATA_MAP + t1617InBlock,⺻Է,input; + begin + 屸(1:ڽ2:ڽ3:4:ݿɼ5:Dzɼ6:ֽļ),gubun1,gubun1,char,1; + ݾױ(1:2:ݾ),gubun2,gubun2,char,1; + ڱ(1:ð뺰2:Ϻ),gubun3,gubun3,char,1; + CTSDATE(Ű-),cts_date,cts_date,char,8; + CTSTIME(Ű-ð),cts_time,cts_time,char,8; + end + t1617OutBlock,⺻,output; + begin + CTSDATE,cts_date,cts_date,char,8; + CTSTIME,cts_time,cts_time,char,8; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + μż,sv_08,sv_08,long,12; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱμż,sv_17,sv_17,long,12; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ż,sv_18,sv_18,long,12; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + Ǽż,sv_01,sv_01,long,12; + end + t1617OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,8; + ,sv_08,sv_08,long,12; + ܱ,sv_17,sv_17,long,12; + ,sv_18,sv_18,long,12; + ,sv_01,sv_01,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1617_2.res b/ls_sample/sample_python/Res/t1617_2.res new file mode 100644 index 0000000..c80b9e6 --- /dev/null +++ b/ls_sample/sample_python/Res/t1617_2.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP + .Func,ڸŸ2(t1617),t1617,attr,block,headtype=A; + BEGIN_DATA_MAP + t1617InBlock,⺻Է,input; + begin + 屸(1:ڽ2:ڽ3:4:ݿɼ5:Dzɼ6:ֽļ),gubun1,gubun1,char,1; + ݾױ(1:2:ݾ),gubun2,gubun2,char,1; + ڱ(1:ð뺰2:Ϻ),gubun3,gubun3,char,1; + CTSDATE(Ű-),cts_date,cts_date,char,8; + CTSTIME(Ű-ð),cts_time,cts_time,char,8; + end + t1617OutBlock,⺻,output; + begin + CTSDATE,cts_date,cts_date,char,8; + CTSTIME,cts_time,cts_time,char,8; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + μż,sv_08,sv_08,long,12; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱμż,sv_17,sv_17,long,12; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ż,sv_18,sv_18,long,12; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + Ǽż,sv_01,sv_01,long,12; + end + t1617OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,8; + ,sv_08,sv_08,long,12; + ܱ,sv_17,sv_17,long,12; + ,sv_18,sv_18,long,12; + ,sv_01,sv_01,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1621.res b/ls_sample/sample_python/Res/t1621.res new file mode 100644 index 0000000..4ef3f7e --- /dev/null +++ b/ls_sample/sample_python/Res/t1621.res @@ -0,0 +1,64 @@ +BEGIN_FUNCTION_MAP + .Func,кڸŸŵ(íƮ),t1621,attr,block,headtype=A; + BEGIN_DATA_MAP + t1621InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + N,nmin,nmin,int,2; + ȸǼ,cnt,cnt,int,3; + Ϻ,bgubun,bgubun,char,1; + end + t1621OutBlock,⺻,output; + begin + ڵ,indcode,indcode,char,4; + ܱڵ,forcode,forcode,char,4; + ڵ,syscode,syscode,char,4; + ڵ,stocode,stocode,char,4; + ڵ,invcode,invcode,char,4; + ڵ,bancode,bancode,char,4; + ڵ,inscode,inscode,char,4; + ڵ,fincode,fincode,char,4; + ڵ,moncode,moncode,char,4; + Ÿڵ,etccode,etccode,char,4; + ڵ,natcode,natcode,char,4; + ݵڵ,pefcode,pefcode,char,4; + ڵ,jisucd,jisucd,char,8; + ,jisunm,jisunm,char,20; + end + t1621OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + ڽð,datetime,datetime,char,14; + μżŷ,indmsvol,indmsvol,long,8; + μżŷ,indmsamt,indmsamt,double,12.0; + ܱμżŷ,formsvol,formsvol,long,8; + ܱμżŷ,formsamt,formsamt,double,12.0; + żŷ,sysmsvol,sysmsvol,long,8; + żŷ,sysmsamt,sysmsamt,double,12.0; + Ǽżŷ,stomsvol,stomsvol,long,8; + Ǽżŷ,stomsamt,stomsamt,double,12.0; + żżŷ,invmsvol,invmsvol,long,8; + żżŷ,invmsamt,invmsamt,double,12.0; + żŷ,banmsvol,banmsvol,long,8; + żŷ,banmsamt,banmsamt,double,12.0; + żŷ,insmsvol,insmsvol,long,8; + żŷ,insmsamt,insmsamt,double,12.0; + ݼżŷ,finmsvol,finmsvol,long,8; + ݼżŷ,finmsamt,finmsamt,double,12.0; + ݼżŷ,monmsvol,monmsvol,long,8; + ݼżŷ,monmsamt,monmsamt,double,12.0; + Ÿżŷ,etcmsvol,etcmsvol,long,8; + Ÿżŷ,etcmsamt,etcmsamt,double,12.0; + żŷ,natmsvol,natmsvol,long,8; + żŷ,natmsamt,natmsamt,double,12.0; + ݵżŷ,pefmsvol,pefmsvol,long,8; + ݵżŷ,pefmsamt,pefmsamt,double,12.0; + ,upclose,upclose,float,6.2; + üŷ,upcvolume,upcvolume,long,8; + شŷ,upvolume,upvolume,double,12.0; + ذŷ,upvalue,upvalue,double,12.0; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1621_2.res b/ls_sample/sample_python/Res/t1621_2.res new file mode 100644 index 0000000..4ef3f7e --- /dev/null +++ b/ls_sample/sample_python/Res/t1621_2.res @@ -0,0 +1,64 @@ +BEGIN_FUNCTION_MAP + .Func,кڸŸŵ(íƮ),t1621,attr,block,headtype=A; + BEGIN_DATA_MAP + t1621InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + N,nmin,nmin,int,2; + ȸǼ,cnt,cnt,int,3; + Ϻ,bgubun,bgubun,char,1; + end + t1621OutBlock,⺻,output; + begin + ڵ,indcode,indcode,char,4; + ܱڵ,forcode,forcode,char,4; + ڵ,syscode,syscode,char,4; + ڵ,stocode,stocode,char,4; + ڵ,invcode,invcode,char,4; + ڵ,bancode,bancode,char,4; + ڵ,inscode,inscode,char,4; + ڵ,fincode,fincode,char,4; + ڵ,moncode,moncode,char,4; + Ÿڵ,etccode,etccode,char,4; + ڵ,natcode,natcode,char,4; + ݵڵ,pefcode,pefcode,char,4; + ڵ,jisucd,jisucd,char,8; + ,jisunm,jisunm,char,20; + end + t1621OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + ڽð,datetime,datetime,char,14; + μżŷ,indmsvol,indmsvol,long,8; + μżŷ,indmsamt,indmsamt,double,12.0; + ܱμżŷ,formsvol,formsvol,long,8; + ܱμżŷ,formsamt,formsamt,double,12.0; + żŷ,sysmsvol,sysmsvol,long,8; + żŷ,sysmsamt,sysmsamt,double,12.0; + Ǽżŷ,stomsvol,stomsvol,long,8; + Ǽżŷ,stomsamt,stomsamt,double,12.0; + żżŷ,invmsvol,invmsvol,long,8; + żżŷ,invmsamt,invmsamt,double,12.0; + żŷ,banmsvol,banmsvol,long,8; + żŷ,banmsamt,banmsamt,double,12.0; + żŷ,insmsvol,insmsvol,long,8; + żŷ,insmsamt,insmsamt,double,12.0; + ݼżŷ,finmsvol,finmsvol,long,8; + ݼżŷ,finmsamt,finmsamt,double,12.0; + ݼżŷ,monmsvol,monmsvol,long,8; + ݼżŷ,monmsamt,monmsamt,double,12.0; + Ÿżŷ,etcmsvol,etcmsvol,long,8; + Ÿżŷ,etcmsamt,etcmsamt,double,12.0; + żŷ,natmsvol,natmsvol,long,8; + żŷ,natmsamt,natmsamt,double,12.0; + ݵżŷ,pefmsvol,pefmsvol,long,8; + ݵżŷ,pefmsamt,pefmsamt,double,12.0; + ,upclose,upclose,float,6.2; + üŷ,upcvolume,upcvolume,long,8; + شŷ,upvolume,upvolume,double,12.0; + ذŷ,upvalue,upvalue,double,12.0; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1631.res b/ls_sample/sample_python/Res/t1631.res new file mode 100644 index 0000000..7865b5e --- /dev/null +++ b/ls_sample/sample_python/Res/t1631.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿȸ(t1631),t1631,attr,block,headtype=A; + BEGIN_DATA_MAP + t1631InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ڱ,dgubun,dgubun,char,1; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + end + t1631OutBlock,,output; + begin + ŵ͹üܷ,cdhrem,cdhrem,long,8; + ŵ͹üܷ,bdhrem,bdhrem,long,8; + ŵֹ,tcdrem,tcdrem,long,8; + ŵֹ,tbdrem,tbdrem,long,8; + ż͹üܷ,cshrem,cshrem,long,8; + ż͹üܷ,bshrem,bshrem,long,8; + żֹ,tcsrem,tcsrem,long,8; + żֹ,tbsrem,tbsrem,long,8; + end + t1631OutBlock1,1,output,occurs; + begin + ŵ,offervolume,offervolume,long,8; + ŵݾ,offervalue,offervalue,long,12; + ż,bidvolume,bidvolume,long,8; + żݾ,bidvalue,bidvalue,long,12; + ż,volume,volume,long,8; + żݾ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1631_2.res b/ls_sample/sample_python/Res/t1631_2.res new file mode 100644 index 0000000..7865b5e --- /dev/null +++ b/ls_sample/sample_python/Res/t1631_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿȸ(t1631),t1631,attr,block,headtype=A; + BEGIN_DATA_MAP + t1631InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ڱ,dgubun,dgubun,char,1; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + end + t1631OutBlock,,output; + begin + ŵ͹üܷ,cdhrem,cdhrem,long,8; + ŵ͹üܷ,bdhrem,bdhrem,long,8; + ŵֹ,tcdrem,tcdrem,long,8; + ŵֹ,tbdrem,tbdrem,long,8; + ż͹üܷ,cshrem,cshrem,long,8; + ż͹üܷ,bshrem,bshrem,long,8; + żֹ,tcsrem,tcsrem,long,8; + żֹ,tbsrem,tbsrem,long,8; + end + t1631OutBlock1,1,output,occurs; + begin + ŵ,offervolume,offervolume,long,8; + ŵݾ,offervalue,offervalue,long,12; + ż,bidvolume,bidvolume,long,8; + żݾ,bidvalue,bidvalue,long,12; + ż,volume,volume,long,8; + żݾ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1632.res b/ls_sample/sample_python/Res/t1632.res new file mode 100644 index 0000000..d6d314d --- /dev/null +++ b/ls_sample/sample_python/Res/t1632.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰α׷Ÿ(t1632),t1632,attr,block,headtype=A; + BEGIN_DATA_MAP + t1632InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ,gubun2,gubun2,char,1; + ϱ,gubun3,gubun3,char,1; + ,date,date,char,8; + ð,time,time,char,6; + end + t1632OutBlock,,output; + begin + ¥CTS,date,date,char,8; + ðCTS,time,time,char,6; + IDX,idx,idx,long,4; + end + t1632OutBlock1,1,output,occurs; + begin + ð,time,time,char,6; + KP200,k200jisu,k200jisu,float,6.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + BASIS,k200basis,k200basis,float,6.2; + üż,tot3,tot3,long,12; + üż,tot1,tot1,long,12; + üŵ,tot2,tot2,long,12; + ͼż,cha3,cha3,long,12; + ͸ż,cha1,cha1,long,12; + ͸ŵ,cha2,cha2,long,12; + ͼż,bcha3,bcha3,long,12; + ͸ż,bcha1,bcha1,long,12; + ͸ŵ,bcha2,bcha2,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1632_2.res b/ls_sample/sample_python/Res/t1632_2.res new file mode 100644 index 0000000..d6d314d --- /dev/null +++ b/ls_sample/sample_python/Res/t1632_2.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰α׷Ÿ(t1632),t1632,attr,block,headtype=A; + BEGIN_DATA_MAP + t1632InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ,gubun2,gubun2,char,1; + ϱ,gubun3,gubun3,char,1; + ,date,date,char,8; + ð,time,time,char,6; + end + t1632OutBlock,,output; + begin + ¥CTS,date,date,char,8; + ðCTS,time,time,char,6; + IDX,idx,idx,long,4; + end + t1632OutBlock1,1,output,occurs; + begin + ð,time,time,char,6; + KP200,k200jisu,k200jisu,float,6.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + BASIS,k200basis,k200basis,float,6.2; + üż,tot3,tot3,long,12; + üż,tot1,tot1,long,12; + üŵ,tot2,tot2,long,12; + ͼż,cha3,cha3,long,12; + ͸ż,cha1,cha1,long,12; + ͸ŵ,cha2,cha2,long,12; + ͼż,bcha3,bcha3,long,12; + ͸ż,bcha1,bcha1,long,12; + ͸ŵ,bcha2,bcha2,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1633.res b/ls_sample/sample_python/Res/t1633.res new file mode 100644 index 0000000..cdd6120 --- /dev/null +++ b/ls_sample/sample_python/Res/t1633.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓα׷Ÿ(t1633),t1633,attr,block,headtype=A; + BEGIN_DATA_MAP + t1633InBlock,⺻Է,input; + begin + 屸,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ġ,gubun2,gubun2,char,1; + ֿ,gubun3,gubun3,char,1; + from,fdate,fdate,char,8; + to,tdate,tdate,char,8; + ,gubun4,gubun4,char,1; + ¥,date,date,char,8; + end + t1633OutBlock,,output; + begin + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1633OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + KP200,jisu,jisu,float,6.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + üż,tot3,tot3,long,12; + üż,tot1,tot1,long,12; + üŵ,tot2,tot2,long,12; + ͼż,cha3,cha3,long,12; + ͸ż,cha1,cha1,long,12; + ͸ŵ,cha2,cha2,long,12; + ͼż,bcha3,bcha3,long,12; + ͸ż,bcha1,bcha1,long,12; + ͸ŵ,bcha2,bcha2,long,12; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1633_2.res b/ls_sample/sample_python/Res/t1633_2.res new file mode 100644 index 0000000..cdd6120 --- /dev/null +++ b/ls_sample/sample_python/Res/t1633_2.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓα׷Ÿ(t1633),t1633,attr,block,headtype=A; + BEGIN_DATA_MAP + t1633InBlock,⺻Է,input; + begin + 屸,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ġ,gubun2,gubun2,char,1; + ֿ,gubun3,gubun3,char,1; + from,fdate,fdate,char,8; + to,tdate,tdate,char,8; + ,gubun4,gubun4,char,1; + ¥,date,date,char,8; + end + t1633OutBlock,,output; + begin + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1633OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + KP200,jisu,jisu,float,6.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + üż,tot3,tot3,long,12; + üż,tot1,tot1,long,12; + üŵ,tot2,tot2,long,12; + ͼż,cha3,cha3,long,12; + ͸ż,cha1,cha1,long,12; + ͸ŵ,cha2,cha2,long,12; + ͼż,bcha3,bcha3,long,12; + ͸ż,bcha1,bcha1,long,12; + ͸ŵ,bcha2,bcha2,long,12; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1636.res b/ls_sample/sample_python/Res/t1636.res new file mode 100644 index 0000000..6b17f1b --- /dev/null +++ b/ls_sample/sample_python/Res/t1636.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿŵ(t1636),t1636,attr,block,headtype=A; + BEGIN_DATA_MAP + t1636InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ı,gubun2,gubun2,char,1; + ڵ,shcode,shcode,char,6; + IDXCTS,cts_idx,cts_idx,long,4; + end + t1636OutBlock,,output; + begin + IDXCTS,cts_idx,cts_idx,long,4; + end + t1636OutBlock1,1,output,occurs; + begin + ,rank,rank,long,8; + ,hname,hname,char,20; + 簡,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + żݾ,svalue,svalue,long,12; + ŵݾ,offervalue,offervalue,long,12; + żݾ,stksvalue,stksvalue,long,12; + ż,svolume,svolume,long,12; + ŵ,offervolume,offervolume,long,12; + ż,stksvolume,stksvolume,long,12; + ðѾ,sgta,sgta,long,15; + ,rate,rate,float,6.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1636_2.res b/ls_sample/sample_python/Res/t1636_2.res new file mode 100644 index 0000000..6b17f1b --- /dev/null +++ b/ls_sample/sample_python/Res/t1636_2.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿŵ(t1636),t1636,attr,block,headtype=A; + BEGIN_DATA_MAP + t1636InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ı,gubun2,gubun2,char,1; + ڵ,shcode,shcode,char,6; + IDXCTS,cts_idx,cts_idx,long,4; + end + t1636OutBlock,,output; + begin + IDXCTS,cts_idx,cts_idx,long,4; + end + t1636OutBlock1,1,output,occurs; + begin + ,rank,rank,long,8; + ,hname,hname,char,20; + 簡,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + żݾ,svalue,svalue,long,12; + ŵݾ,offervalue,offervalue,long,12; + żݾ,stksvalue,stksvalue,long,12; + ż,svolume,svolume,long,12; + ŵ,offervolume,offervolume,long,12; + ż,stksvolume,stksvolume,long,12; + ðѾ,sgta,sgta,long,15; + ,rate,rate,float,6.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1637.res b/ls_sample/sample_python/Res/t1637.res new file mode 100644 index 0000000..7f23fcf --- /dev/null +++ b/ls_sample/sample_python/Res/t1637.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿ(t1637),t1637,attr,block,headtype=A; + BEGIN_DATA_MAP + t1637InBlock,⺻Է,input; + begin + ݾױ(0:1:ݾ),gubun1,gubun1,char,1; + ðϺ(0:ð1:),gubun2,gubun2,char,1; + ڵ,shcode,shcode,char,6; + ,date,date,char,8; + ð,time,time,char,6; + IDXCTS(9999:Ʈ),cts_idx,cts_idx,long,4; + end + t1637OutBlock,,output; + begin + IDXCTS,cts_idx,cts_idx,long,4; + end + t1637OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + 簡,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + żݾ,svalue,svalue,long,15; + ŵݾ,offervalue,offervalue,long,15; + żݾ,stksvalue,stksvalue,long,15; + ż,svolume,svolume,long,12; + ŵ,offervolume,offervolume,long,12; + ż,stksvolume,stksvolume,long,12; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1637_2.res b/ls_sample/sample_python/Res/t1637_2.res new file mode 100644 index 0000000..7f23fcf --- /dev/null +++ b/ls_sample/sample_python/Res/t1637_2.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿ(t1637),t1637,attr,block,headtype=A; + BEGIN_DATA_MAP + t1637InBlock,⺻Է,input; + begin + ݾױ(0:1:ݾ),gubun1,gubun1,char,1; + ðϺ(0:ð1:),gubun2,gubun2,char,1; + ڵ,shcode,shcode,char,6; + ,date,date,char,8; + ð,time,time,char,6; + IDXCTS(9999:Ʈ),cts_idx,cts_idx,long,4; + end + t1637OutBlock,,output; + begin + IDXCTS,cts_idx,cts_idx,long,4; + end + t1637OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + 簡,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + żݾ,svalue,svalue,long,15; + ŵݾ,offervalue,offervalue,long,15; + żݾ,stksvalue,stksvalue,long,15; + ż,svolume,svolume,long,12; + ŵ,offervolume,offervolume,long,12; + ż,stksvolume,stksvolume,long,12; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1638.res b/ls_sample/sample_python/Res/t1638.res new file mode 100644 index 0000000..e467671 --- /dev/null +++ b/ls_sample/sample_python/Res/t1638.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ܷ/(t1638),t1638,attr,block,headtype=A; + BEGIN_DATA_MAP + t1638InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ڵ,shcode,shcode,char,6; + ,gubun2,gubun2,char,1; + end + t1638OutBlock,,output,occurs; + begin + ,rank,rank,long,4; + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + Ѻ,sigatotrt,sigatotrt,float,6.2; + żܷ,obuyvol,obuyvol,long,12; + żܷ,buyrem,buyrem,long,12; + żü,psgvolume,psgvolume,long,12; + ŵܷ,sellrem,sellrem,long,12; + ŵü,pdgvolume,pdgvolume,long,12; + ðѾ,sigatot,sigatot,long,20; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1638_2.res b/ls_sample/sample_python/Res/t1638_2.res new file mode 100644 index 0000000..e467671 --- /dev/null +++ b/ls_sample/sample_python/Res/t1638_2.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ܷ/(t1638),t1638,attr,block,headtype=A; + BEGIN_DATA_MAP + t1638InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ڵ,shcode,shcode,char,6; + ,gubun2,gubun2,char,1; + end + t1638OutBlock,,output,occurs; + begin + ,rank,rank,long,4; + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + Ѻ,sigatotrt,sigatotrt,float,6.2; + żܷ,obuyvol,obuyvol,long,12; + żܷ,buyrem,buyrem,long,12; + żü,psgvolume,psgvolume,long,12; + ŵܷ,sellrem,sellrem,long,12; + ŵü,pdgvolume,pdgvolume,long,12; + ðѾ,sigatot,sigatot,long,20; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1640.res b/ls_sample/sample_python/Res/t1640.res new file mode 100644 index 0000000..ab0e0e3 --- /dev/null +++ b/ls_sample/sample_python/Res/t1640.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿȸ(̴)(t1640),t1640,attr,block,headtype=A; + BEGIN_DATA_MAP + t1640InBlock,⺻Է,input; + begin + ,gubun,gubun,char,2; + end + t1640OutBlock,,output; + begin + ŵ,offervolume,offervolume,long,8; + ż,bidvolume,bidvolume,long,8; + ż,volume,volume,long,8; + ŵ,offerdiff,offerdiff,long,8; + ż,biddiff,biddiff,long,8; + ż,sundiff,sundiff,long,8; + ̽ý,basis,basis,float,6.2; + ŵݾ,offervalue,offervalue,double,12.0; + żݾ,bidvalue,bidvalue,double,12.0; + żݾ,value,value,double,12.0; + ŵݾ,offervaldiff,offervaldiff,double,12.0; + żݾ,bidvaldiff,bidvaldiff,double,12.0; + ż,sunvaldiff,sunvaldiff,double,12.0; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1640_2.res b/ls_sample/sample_python/Res/t1640_2.res new file mode 100644 index 0000000..ab0e0e3 --- /dev/null +++ b/ls_sample/sample_python/Res/t1640_2.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿȸ(̴)(t1640),t1640,attr,block,headtype=A; + BEGIN_DATA_MAP + t1640InBlock,⺻Է,input; + begin + ,gubun,gubun,char,2; + end + t1640OutBlock,,output; + begin + ŵ,offervolume,offervolume,long,8; + ż,bidvolume,bidvolume,long,8; + ż,volume,volume,long,8; + ŵ,offerdiff,offerdiff,long,8; + ż,biddiff,biddiff,long,8; + ż,sundiff,sundiff,long,8; + ̽ý,basis,basis,float,6.2; + ŵݾ,offervalue,offervalue,double,12.0; + żݾ,bidvalue,bidvalue,double,12.0; + żݾ,value,value,double,12.0; + ŵݾ,offervaldiff,offervaldiff,double,12.0; + żݾ,bidvaldiff,bidvaldiff,double,12.0; + ż,sunvaldiff,sunvaldiff,double,12.0; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1662.res b/ls_sample/sample_python/Res/t1662.res new file mode 100644 index 0000000..3d7fd75 --- /dev/null +++ b/ls_sample/sample_python/Res/t1662.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰α׷Ÿ(Ʈ)(t1662),t1662,attr,block,headtype=A; + BEGIN_DATA_MAP + t1662InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ϱ,gubun3,gubun3,char,1; + end + t1662OutBlock,,output,occurs; + begin + ð,time,time,char,6; + KP200,k200jisu,k200jisu,float,6.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + BASIS,k200basis,k200basis,float,6.2; + üż,tot3,tot3,long,12; + üż,tot1,tot1,long,12; + üŵ,tot2,tot2,long,12; + ͼż,cha3,cha3,long,12; + ͸ż,cha1,cha1,long,12; + ͸ŵ,cha2,cha2,long,12; + ͼż,bcha3,bcha3,long,12; + ͸ż,bcha1,bcha1,long,12; + ͸ŵ,bcha2,bcha2,long,12; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1662_2.res b/ls_sample/sample_python/Res/t1662_2.res new file mode 100644 index 0000000..3d7fd75 --- /dev/null +++ b/ls_sample/sample_python/Res/t1662_2.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰α׷Ÿ(Ʈ)(t1662),t1662,attr,block,headtype=A; + BEGIN_DATA_MAP + t1662InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ϱ,gubun3,gubun3,char,1; + end + t1662OutBlock,,output,occurs; + begin + ð,time,time,char,6; + KP200,k200jisu,k200jisu,float,6.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + BASIS,k200basis,k200basis,float,6.2; + üż,tot3,tot3,long,12; + üż,tot1,tot1,long,12; + üŵ,tot2,tot2,long,12; + ͼż,cha3,cha3,long,12; + ͸ż,cha1,cha1,long,12; + ͸ŵ,cha2,cha2,long,12; + ͼż,bcha3,bcha3,long,12; + ͸ż,bcha1,bcha1,long,12; + ͸ŵ,bcha2,bcha2,long,12; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1664.res b/ls_sample/sample_python/Res/t1664.res new file mode 100644 index 0000000..39fb56a --- /dev/null +++ b/ls_sample/sample_python/Res/t1664.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP + .Func,ڸŸ(íƮ),t1664,attr,block,headtype=A; + BEGIN_DATA_MAP + t1664InBlock,⺻Է,input; + begin + 屸,mgubun,mgubun,char,1; + ݾ׼,vagubun,vagubun,char,1; + ðϺ,bdgubun,bdgubun,char,1; + ȸǼ,cnt,cnt,int,3; + end + t1664OutBlock1,1,output,occurs; + begin + ڽð,dt,dt,char,8; + Ǽż,tjj01,tjj01,double,12.0; + ż,tjj02,tjj02,double,12.0; + żż,tjj03,tjj03,double,12.0; + ż,tjj04,tjj04,double,12.0; + ݼż,tjj05,tjj05,double,12.0; + ݼż,tjj06,tjj06,double,12.0; + Ÿż,tjj07,tjj07,double,12.0; + μż,tjj08,tjj08,double,12.0; + ܱμż,tjj17,tjj17,double,12.0; + ż,tjj18,tjj18,double,12.0; + ͼż,cha,cha,double,12.0; + ͼż,bicha,bicha,double,12.0; + ռż,totcha,totcha,double,12.0; + ̽ý,basis,basis,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1664_2.res b/ls_sample/sample_python/Res/t1664_2.res new file mode 100644 index 0000000..39fb56a --- /dev/null +++ b/ls_sample/sample_python/Res/t1664_2.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP + .Func,ڸŸ(íƮ),t1664,attr,block,headtype=A; + BEGIN_DATA_MAP + t1664InBlock,⺻Է,input; + begin + 屸,mgubun,mgubun,char,1; + ݾ׼,vagubun,vagubun,char,1; + ðϺ,bdgubun,bdgubun,char,1; + ȸǼ,cnt,cnt,int,3; + end + t1664OutBlock1,1,output,occurs; + begin + ڽð,dt,dt,char,8; + Ǽż,tjj01,tjj01,double,12.0; + ż,tjj02,tjj02,double,12.0; + żż,tjj03,tjj03,double,12.0; + ż,tjj04,tjj04,double,12.0; + ݼż,tjj05,tjj05,double,12.0; + ݼż,tjj06,tjj06,double,12.0; + Ÿż,tjj07,tjj07,double,12.0; + μż,tjj08,tjj08,double,12.0; + ܱμż,tjj17,tjj17,double,12.0; + ż,tjj18,tjj18,double,12.0; + ͼż,cha,cha,double,12.0; + ͼż,bicha,bicha,double,12.0; + ռż,totcha,totcha,double,12.0; + ̽ý,basis,basis,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1665.res b/ls_sample/sample_python/Res/t1665.res new file mode 100644 index 0000000..09c71e9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1665.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ⰣڸŸ(íƮ),t1665,attr,block,headtype=A; + BEGIN_DATA_MAP + t1665InBlock,⺻Է,input; + begin + 屸(1:kospi2:kp2003:kosdaq4:5:Dzɼ6:ݿɼ),market,market,char,1; + ڵ,upcode,upcode,char,3; + ġ(1:ġ2:),gubun2,gubun2,char,1; + (1:2:3:),gubun3,gubun3,char,1; + ۳¥,from_date,from_date,char,8; + ᳯ¥,to_date,to_date,char,8; + end + t1665OutBlock,⺻,output; + begin + ڵ,mcode,mcode,char,8; + ,mname,mname,char,20; + end + t1665OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + μ,sv_08,sv_08,long,12; + ΰ(+̵),sv_17,sv_17,long,12; + ,sv_18,sv_18,long,12; + Ǽ,sv_01,sv_01,long,12; + ż,sv_03,sv_03,long,12; + ,sv_04,sv_04,long,12; + ,sv_02,sv_02,long,12; + ݼ,sv_05,sv_05,long,12; + ݼ,sv_06,sv_06,long,12; + Ÿ,sv_07,sv_07,long,12; + ݵ,sv_00,sv_00,long,12; + Ͽܱμ,sv_09,sv_09,long,12; + ̵Ͽܱμ,sv_10,sv_10,long,12; + ,sv_11,sv_11,long,12; + Ÿ(Ÿ+),sv_99,sv_99,long,12; + αݾ,sa_08,sa_08,double,12.0; + ΰݾ(+̵),sa_17,sa_17,double,12.0; + ݾ,sa_18,sa_18,double,12.0; + DZݾ,sa_01,sa_01,double,12.0; + űݾ,sa_03,sa_03,double,12.0; + ݾ,sa_04,sa_04,double,12.0; + ݾ,sa_02,sa_02,double,12.0; + ݱݾ,sa_05,sa_05,double,12.0; + ݱݾ,sa_06,sa_06,double,12.0; + Ÿݾ,sa_07,sa_07,double,12.0; + ݵݾ,sa_00,sa_00,double,12.0; + Ͽܱαݾ,sa_09,sa_09,double,12.0; + ̵Ͽܱαݾ,sa_10,sa_10,double,12.0; + ݾ,sa_11,sa_11,double,12.0; + Ÿݾ(Ÿ+),sa_99,sa_99,double,12.0; + ,jisu,jisu,float,7.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1665_2.res b/ls_sample/sample_python/Res/t1665_2.res new file mode 100644 index 0000000..09c71e9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1665_2.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ⰣڸŸ(íƮ),t1665,attr,block,headtype=A; + BEGIN_DATA_MAP + t1665InBlock,⺻Է,input; + begin + 屸(1:kospi2:kp2003:kosdaq4:5:Dzɼ6:ݿɼ),market,market,char,1; + ڵ,upcode,upcode,char,3; + ġ(1:ġ2:),gubun2,gubun2,char,1; + (1:2:3:),gubun3,gubun3,char,1; + ۳¥,from_date,from_date,char,8; + ᳯ¥,to_date,to_date,char,8; + end + t1665OutBlock,⺻,output; + begin + ڵ,mcode,mcode,char,8; + ,mname,mname,char,20; + end + t1665OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + μ,sv_08,sv_08,long,12; + ΰ(+̵),sv_17,sv_17,long,12; + ,sv_18,sv_18,long,12; + Ǽ,sv_01,sv_01,long,12; + ż,sv_03,sv_03,long,12; + ,sv_04,sv_04,long,12; + ,sv_02,sv_02,long,12; + ݼ,sv_05,sv_05,long,12; + ݼ,sv_06,sv_06,long,12; + Ÿ,sv_07,sv_07,long,12; + ݵ,sv_00,sv_00,long,12; + Ͽܱμ,sv_09,sv_09,long,12; + ̵Ͽܱμ,sv_10,sv_10,long,12; + ,sv_11,sv_11,long,12; + Ÿ(Ÿ+),sv_99,sv_99,long,12; + αݾ,sa_08,sa_08,double,12.0; + ΰݾ(+̵),sa_17,sa_17,double,12.0; + ݾ,sa_18,sa_18,double,12.0; + DZݾ,sa_01,sa_01,double,12.0; + űݾ,sa_03,sa_03,double,12.0; + ݾ,sa_04,sa_04,double,12.0; + ݾ,sa_02,sa_02,double,12.0; + ݱݾ,sa_05,sa_05,double,12.0; + ݱݾ,sa_06,sa_06,double,12.0; + Ÿݾ,sa_07,sa_07,double,12.0; + ݵݾ,sa_00,sa_00,double,12.0; + Ͽܱαݾ,sa_09,sa_09,double,12.0; + ̵Ͽܱαݾ,sa_10,sa_10,double,12.0; + ݾ,sa_11,sa_11,double,12.0; + Ÿݾ(Ÿ+),sa_99,sa_99,double,12.0; + ,jisu,jisu,float,7.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1701.res b/ls_sample/sample_python/Res/t1701.res new file mode 100644 index 0000000..533fbf5 --- /dev/null +++ b/ls_sample/sample_python/Res/t1701.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1701),t1701,attr,block,headtype=A; + BEGIN_DATA_MAP + t1701InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,gubun,gubun,char,1; + ,fromdt,fromdt,char,8; + ,todt,todt,char,8; + PR,prapp,prapp,long,3; + PR뱸,prgubun,prgubun,char,1; + ,orggubun,orggubun,char,1; + ,frggubun,frggubun,char,1; + end + t1701OutBlock,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,psnvolume,psnvolume,long,12; + ,orgvolume,orgvolume,long,12; + ܱ,frgvolume,frgvolume,long,12; + ܱ,frgvolumesum,frgvolumesum,long,12; + α׷,pgmvolume,pgmvolume,long,12; + ֽļ,listing,listing,long,12; + ,listupdn,listupdn,long,12; + ,sjrate,sjrate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1701_2.res b/ls_sample/sample_python/Res/t1701_2.res new file mode 100644 index 0000000..533fbf5 --- /dev/null +++ b/ls_sample/sample_python/Res/t1701_2.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1701),t1701,attr,block,headtype=A; + BEGIN_DATA_MAP + t1701InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,gubun,gubun,char,1; + ,fromdt,fromdt,char,8; + ,todt,todt,char,8; + PR,prapp,prapp,long,3; + PR뱸,prgubun,prgubun,char,1; + ,orggubun,orggubun,char,1; + ,frggubun,frggubun,char,1; + end + t1701OutBlock,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,psnvolume,psnvolume,long,12; + ,orgvolume,orgvolume,long,12; + ܱ,frgvolume,frgvolume,long,12; + ܱ,frgvolumesum,frgvolumesum,long,12; + α׷,pgmvolume,pgmvolume,long,12; + ֽļ,listing,listing,long,12; + ,listupdn,listupdn,long,12; + ,sjrate,sjrate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1702.res b/ls_sample/sample_python/Res/t1702.res new file mode 100644 index 0000000..e44057d --- /dev/null +++ b/ls_sample/sample_python/Res/t1702.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1702),t1702,attr,block,headtype=A; + BEGIN_DATA_MAP + t1702InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,todt,todt,char,8; + ݾ׼(0:ݾ1:2:ܰ),volvalgb,volvalgb,char,1; + żŵ(0:ż1:ż2:ŵ),msmdgb,msmdgb,char,1; + (0:ϰ1:),cumulgb,cumulgb,char,1; + CTSDATE,cts_date,cts_date,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + end + t1702OutBlock,⺻,output; + begin + CTSIDX,cts_idx,cts_idx,long,4; + CTSDATE,cts_date,cts_date,char,8; + end + t1702OutBlock1,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ݵ,amt0000,amt0000,long,12; + ,amt0001,amt0001,long,12; + ,amt0002,amt0002,long,12; + ,amt0003,amt0003,long,12; + ,amt0004,amt0004,long,12; + ,amt0005,amt0005,long,12; + ,amt0006,amt0006,long,12; + Ÿ,amt0007,amt0007,long,12; + ,amt0008,amt0008,long,12; + Ͽܱ,amt0009,amt0009,long,12; + ̵Ͽܱ,amt0010,amt0010,long,12; + ,amt0011,amt0011,long,12; + ,amt0018,amt0018,long,12; + ΰ(+̵),amt0088,amt0088,long,12; + Ÿ(Ÿ+),amt0099,amt0099,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1702 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1702_2.res b/ls_sample/sample_python/Res/t1702_2.res new file mode 100644 index 0000000..e44057d --- /dev/null +++ b/ls_sample/sample_python/Res/t1702_2.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1702),t1702,attr,block,headtype=A; + BEGIN_DATA_MAP + t1702InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,todt,todt,char,8; + ݾ׼(0:ݾ1:2:ܰ),volvalgb,volvalgb,char,1; + żŵ(0:ż1:ż2:ŵ),msmdgb,msmdgb,char,1; + (0:ϰ1:),cumulgb,cumulgb,char,1; + CTSDATE,cts_date,cts_date,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + end + t1702OutBlock,⺻,output; + begin + CTSIDX,cts_idx,cts_idx,long,4; + CTSDATE,cts_date,cts_date,char,8; + end + t1702OutBlock1,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ݵ,amt0000,amt0000,long,12; + ,amt0001,amt0001,long,12; + ,amt0002,amt0002,long,12; + ,amt0003,amt0003,long,12; + ,amt0004,amt0004,long,12; + ,amt0005,amt0005,long,12; + ,amt0006,amt0006,long,12; + Ÿ,amt0007,amt0007,long,12; + ,amt0008,amt0008,long,12; + Ͽܱ,amt0009,amt0009,long,12; + ̵Ͽܱ,amt0010,amt0010,long,12; + ,amt0011,amt0011,long,12; + ,amt0018,amt0018,long,12; + ΰ(+̵),amt0088,amt0088,long,12; + Ÿ(Ÿ+),amt0099,amt0099,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1702 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1716.res b/ls_sample/sample_python/Res/t1716.res new file mode 100644 index 0000000..b0878ab --- /dev/null +++ b/ls_sample/sample_python/Res/t1716.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1716),t1716,attr,block,headtype=A; + BEGIN_DATA_MAP + t1716InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (0:ϰż1:Ⱓż),gubun,gubun,char,1; + ,fromdt,fromdt,char,8; + ,todt,todt,char,8; + PR,prapp,prapp,long,3; + PR뱸(0:1:),prgubun,prgubun,char,1; + ,orggubun,orggubun,char,1; + ,frggubun,frggubun,char,1; + end + t1716OutBlock,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ_,krx_0008,krx_0008,long,12; + ŷ_,krx_0018,krx_0018,long,12; + ŷ_ܱ,krx_0009,krx_0009,long,12; + α׷,pgmvol,pgmvol,long,12; + ݰ_κֽļ,fsc_listing,fsc_listing,long,12; + ݰ_,fsc_sjrate,fsc_sjrate,float,6.2; + ݰ_ܱ,fsc_0009,fsc_0009,long,12; + ŵ,gm_volume,m_volume,long,12; + ŵ,gm_value,gm_value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1716_2.res b/ls_sample/sample_python/Res/t1716_2.res new file mode 100644 index 0000000..b0878ab --- /dev/null +++ b/ls_sample/sample_python/Res/t1716_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1716),t1716,attr,block,headtype=A; + BEGIN_DATA_MAP + t1716InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (0:ϰż1:Ⱓż),gubun,gubun,char,1; + ,fromdt,fromdt,char,8; + ,todt,todt,char,8; + PR,prapp,prapp,long,3; + PR뱸(0:1:),prgubun,prgubun,char,1; + ,orggubun,orggubun,char,1; + ,frggubun,frggubun,char,1; + end + t1716OutBlock,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ_,krx_0008,krx_0008,long,12; + ŷ_,krx_0018,krx_0018,long,12; + ŷ_ܱ,krx_0009,krx_0009,long,12; + α׷,pgmvol,pgmvol,long,12; + ݰ_κֽļ,fsc_listing,fsc_listing,long,12; + ݰ_,fsc_sjrate,fsc_sjrate,float,6.2; + ݰ_ܱ,fsc_0009,fsc_0009,long,12; + ŵ,gm_volume,m_volume,long,12; + ŵ,gm_value,gm_value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1717.res b/ls_sample/sample_python/Res/t1717.res new file mode 100644 index 0000000..a52d45f --- /dev/null +++ b/ls_sample/sample_python/Res/t1717.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1717),t1717,attr,block,headtype=A; + BEGIN_DATA_MAP + t1717InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (0:ϰż1:Ⱓż),gubun,gubun,char,1; + (ϰȸϰspace),fromdt,fromdt,char,8; + ,todt,todt,char,8; + end + t1717OutBlock,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ݵ(ż),tjj0000_vol,tjj0000_vol,long,12; + (ż),tjj0001_vol,tjj0001_vol,long,12; + (ż),tjj0002_vol,tjj0002_vol,long,12; + (ż),tjj0003_vol,tjj0003_vol,long,12; + (ż),tjj0004_vol,tjj0004_vol,long,12; + (ż),tjj0005_vol,tjj0005_vol,long,12; + (ż),tjj0006_vol,tjj0006_vol,long,12; + Ÿ(ż),tjj0007_vol,tjj0007_vol,long,12; + (ż),tjj0008_vol,tjj0008_vol,long,12; + Ͽܱ(ż),tjj0009_vol,tjj0009_vol,long,12; + ̵Ͽܱ(ż),tjj0010_vol,tjj0010_vol,long,12; + (ż),tjj0011_vol,tjj0011_vol,long,12; + (ż),tjj0018_vol,tjj0018_vol,long,12; + ΰ(ż)(+̵),tjj0016_vol,tjj0016_vol,long,12; + Ÿ(ż)(Ÿ+),tjj0017_vol,tjj0017_vol,long,12; + ݵ(ܰ),tjj0000_dan,tjj0000_dan,long,12; + (ܰ),tjj0001_dan,tjj0001_dan,long,12; + (ܰ),tjj0002_dan,tjj0002_dan,long,12; + (ܰ),tjj0003_dan,tjj0003_dan,long,12; + (ܰ),tjj0004_dan,tjj0004_dan,long,12; + (ܰ),tjj0005_dan,tjj0005_dan,long,12; + (ܰ),tjj0006_dan,tjj0006_dan,long,12; + Ÿ(ܰ),tjj0007_dan,tjj0007_dan,long,12; + (ܰ),tjj0008_dan,tjj0008_dan,long,12; + Ͽܱ(ܰ),tjj0009_dan,tjj0009_dan,long,12; + ̵Ͽܱ(ܰ),tjj0010_dan,tjj0010_dan,long,12; + (ܰ),tjj0011_dan,tjj0011_dan,long,12; + (ܰ),tjj0018_dan,tjj0018_dan,long,12; + ΰ(ܰ)(+̵),tjj0016_dan,tjj0016_dan,long,12; + Ÿ(ܰ)(Ÿ+),tjj0017_dan,tjj0017_dan,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1717_2.res b/ls_sample/sample_python/Res/t1717_2.res new file mode 100644 index 0000000..a52d45f --- /dev/null +++ b/ls_sample/sample_python/Res/t1717_2.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1717),t1717,attr,block,headtype=A; + BEGIN_DATA_MAP + t1717InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (0:ϰż1:Ⱓż),gubun,gubun,char,1; + (ϰȸϰspace),fromdt,fromdt,char,8; + ,todt,todt,char,8; + end + t1717OutBlock,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ݵ(ż),tjj0000_vol,tjj0000_vol,long,12; + (ż),tjj0001_vol,tjj0001_vol,long,12; + (ż),tjj0002_vol,tjj0002_vol,long,12; + (ż),tjj0003_vol,tjj0003_vol,long,12; + (ż),tjj0004_vol,tjj0004_vol,long,12; + (ż),tjj0005_vol,tjj0005_vol,long,12; + (ż),tjj0006_vol,tjj0006_vol,long,12; + Ÿ(ż),tjj0007_vol,tjj0007_vol,long,12; + (ż),tjj0008_vol,tjj0008_vol,long,12; + Ͽܱ(ż),tjj0009_vol,tjj0009_vol,long,12; + ̵Ͽܱ(ż),tjj0010_vol,tjj0010_vol,long,12; + (ż),tjj0011_vol,tjj0011_vol,long,12; + (ż),tjj0018_vol,tjj0018_vol,long,12; + ΰ(ż)(+̵),tjj0016_vol,tjj0016_vol,long,12; + Ÿ(ż)(Ÿ+),tjj0017_vol,tjj0017_vol,long,12; + ݵ(ܰ),tjj0000_dan,tjj0000_dan,long,12; + (ܰ),tjj0001_dan,tjj0001_dan,long,12; + (ܰ),tjj0002_dan,tjj0002_dan,long,12; + (ܰ),tjj0003_dan,tjj0003_dan,long,12; + (ܰ),tjj0004_dan,tjj0004_dan,long,12; + (ܰ),tjj0005_dan,tjj0005_dan,long,12; + (ܰ),tjj0006_dan,tjj0006_dan,long,12; + Ÿ(ܰ),tjj0007_dan,tjj0007_dan,long,12; + (ܰ),tjj0008_dan,tjj0008_dan,long,12; + Ͽܱ(ܰ),tjj0009_dan,tjj0009_dan,long,12; + ̵Ͽܱ(ܰ),tjj0010_dan,tjj0010_dan,long,12; + (ܰ),tjj0011_dan,tjj0011_dan,long,12; + (ܰ),tjj0018_dan,tjj0018_dan,long,12; + ΰ(ܰ)(+̵),tjj0016_dan,tjj0016_dan,long,12; + Ÿ(ܰ)(Ÿ+),tjj0017_dan,tjj0017_dan,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1752.res b/ls_sample/sample_python/Res/t1752.res new file mode 100644 index 0000000..cfa7a0a --- /dev/null +++ b/ls_sample/sample_python/Res/t1752.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,񺰻ȸ(t1752),t1752,attr,block,headtype=A; + BEGIN_DATA_MAP + t1752InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ȸ¥1,traddate1,traddate1,char,8; + ȸ¥2,traddate2,traddate2,char,8; + ܱ豸,fwgubun1,fwgubun1,char,1; + CTSIDX,cts_idx,cts_idx,long,4; + end + t1752OutBlock,⺻,output; + begin + ܱŵ,fwdvl,fwdvl,long,12; + ܱż,fwsvl,fwsvl,long,12; + CTSIDX,cts_idx,cts_idx,long,4; + end + t1752OutBlock1,1,output,occurs; + begin + ȸ,tradname,tradname,char,20; + ŵ,tradmdvol,tradmdvol,long,12; + ż,tradmsvol,tradmsvol,long,12; + ż,tradmssvol,tradmssvol,long,12; + âŷ,wintrd,wintrd,long,12; + ,winrat,winrat,float,6.1; + ȸڵ,tradno,tradno,char,3; + ܱ迩,wgubun,wgubun,char,1; + ,swinrat,swinrat,float,6.1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1752_2.res b/ls_sample/sample_python/Res/t1752_2.res new file mode 100644 index 0000000..cfa7a0a --- /dev/null +++ b/ls_sample/sample_python/Res/t1752_2.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,񺰻ȸ(t1752),t1752,attr,block,headtype=A; + BEGIN_DATA_MAP + t1752InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ȸ¥1,traddate1,traddate1,char,8; + ȸ¥2,traddate2,traddate2,char,8; + ܱ豸,fwgubun1,fwgubun1,char,1; + CTSIDX,cts_idx,cts_idx,long,4; + end + t1752OutBlock,⺻,output; + begin + ܱŵ,fwdvl,fwdvl,long,12; + ܱż,fwsvl,fwsvl,long,12; + CTSIDX,cts_idx,cts_idx,long,4; + end + t1752OutBlock1,1,output,occurs; + begin + ȸ,tradname,tradname,char,20; + ŵ,tradmdvol,tradmdvol,long,12; + ż,tradmsvol,tradmsvol,long,12; + ż,tradmssvol,tradmssvol,long,12; + âŷ,wintrd,wintrd,long,12; + ,winrat,winrat,float,6.1; + ȸڵ,tradno,tradno,char,3; + ܱ迩,wgubun,wgubun,char,1; + ,swinrat,swinrat,float,6.1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1764.res b/ls_sample/sample_python/Res/t1764.res new file mode 100644 index 0000000..390318f --- /dev/null +++ b/ls_sample/sample_python/Res/t1764.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ縮Ʈ(t1764),t1764,attr,block,headtype=A; + BEGIN_DATA_MAP + t1764InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + 1,gubun1,gubun1,char,1; + end + t1764OutBlock,1,output,occurs; + begin + ,rank,rank,long,4; + ŷȣ,tradno,tradno,char,3; + ŷ̸,tradname,tradname,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1764_2.res b/ls_sample/sample_python/Res/t1764_2.res new file mode 100644 index 0000000..390318f --- /dev/null +++ b/ls_sample/sample_python/Res/t1764_2.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ縮Ʈ(t1764),t1764,attr,block,headtype=A; + BEGIN_DATA_MAP + t1764InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + 1,gubun1,gubun1,char,1; + end + t1764OutBlock,1,output,occurs; + begin + ,rank,rank,long,4; + ŷȣ,tradno,tradno,char,3; + ŷ̸,tradname,tradname,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1771.res b/ls_sample/sample_python/Res/t1771.res new file mode 100644 index 0000000..611d2b6 --- /dev/null +++ b/ls_sample/sample_python/Res/t1771.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ(t1771),t1771,attr,block,headtype=A; + BEGIN_DATA_MAP + t1771InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ŷڵ,tradno,tradno,char,3; + 1,gubun1,gubun1,char,1; + ŷ¥1,traddate1,traddate1,char,8; + ŷ¥2,traddate2,traddate2,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ûǼ,cnt,cnt,int,3; + end + t1771OutBlock,⺻,output; + begin + CTSIDX,cts_idx,cts_idx,long,4; + end + t1771OutBlock2,2,output,occurs; + begin + ¥,traddate,traddate,char,8; + ð,tradtime,tradtime,char,8; + 簡,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵ,tradmdcha,tradmdcha,long,12; + ż,tradmscha,tradmscha,long,12; + ŵ,tradmdval,tradmdval,long,18; + ż,tradmsval,tradmsval,long,18; + ż,tradmsscha,tradmsscha,long,12; + ż,tradmttvolume,tradmttvolume,long,12; + մܰ,tradavg,tradavg,long,8; + մܰ,tradmttavg,tradmttavg,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1771_2.res b/ls_sample/sample_python/Res/t1771_2.res new file mode 100644 index 0000000..611d2b6 --- /dev/null +++ b/ls_sample/sample_python/Res/t1771_2.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ(t1771),t1771,attr,block,headtype=A; + BEGIN_DATA_MAP + t1771InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ŷڵ,tradno,tradno,char,3; + 1,gubun1,gubun1,char,1; + ŷ¥1,traddate1,traddate1,char,8; + ŷ¥2,traddate2,traddate2,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ûǼ,cnt,cnt,int,3; + end + t1771OutBlock,⺻,output; + begin + CTSIDX,cts_idx,cts_idx,long,4; + end + t1771OutBlock2,2,output,occurs; + begin + ¥,traddate,traddate,char,8; + ð,tradtime,tradtime,char,8; + 簡,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵ,tradmdcha,tradmdcha,long,12; + ż,tradmscha,tradmscha,long,12; + ŵ,tradmdval,tradmdval,long,18; + ż,tradmsval,tradmsval,long,18; + ż,tradmsscha,tradmsscha,long,12; + ż,tradmttvolume,tradmttvolume,long,12; + մܰ,tradavg,tradavg,long,8; + մܰ,tradmttavg,tradmttavg,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1809.res b/ls_sample/sample_python/Res/t1809.res new file mode 100644 index 0000000..18c280d --- /dev/null +++ b/ls_sample/sample_python/Res/t1809.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,ȣȸ(t1809),t1809,block,headtype=A; + BEGIN_DATA_MAP + t1809InBlock,⺻Է,input; + begin + ȣ,gubun,gubun,char,1; + 񱸺,jmGb,jmGb,char,1; + ڵ,jmcode,jmcode,char,6; + NEXTKEY,cts,cts,char,30; + end + t1809OutBlock,⺻,output; + begin + NEXTKEY,cts,cts,char,30; + end + t1809OutBlock1,⺻1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + ȣID,signal_id,signal_id,char,4; + ȣ,signal_desc,signal_desc,char,300; + ȣ,point,point,char,3; + ȣŰ,keyword,keyword,char,40; + ȣ,seq,seq,char,24; + ȣ,gubun,gubun,char,2; + ȣ,jmcode,jmcode,char,6; + 񰡰,price,price,long,7; + ȣ,sign,sign,char,1; + ,chgrate,chgrate,float,6.2; + ŷ,volume,volume,long,9; + ȣϽ,datetime,datetime,char,16; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1809_2.res b/ls_sample/sample_python/Res/t1809_2.res new file mode 100644 index 0000000..18c280d --- /dev/null +++ b/ls_sample/sample_python/Res/t1809_2.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,ȣȸ(t1809),t1809,block,headtype=A; + BEGIN_DATA_MAP + t1809InBlock,⺻Է,input; + begin + ȣ,gubun,gubun,char,1; + 񱸺,jmGb,jmGb,char,1; + ڵ,jmcode,jmcode,char,6; + NEXTKEY,cts,cts,char,30; + end + t1809OutBlock,⺻,output; + begin + NEXTKEY,cts,cts,char,30; + end + t1809OutBlock1,⺻1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + ȣID,signal_id,signal_id,char,4; + ȣ,signal_desc,signal_desc,char,300; + ȣ,point,point,char,3; + ȣŰ,keyword,keyword,char,40; + ȣ,seq,seq,char,24; + ȣ,gubun,gubun,char,2; + ȣ,jmcode,jmcode,char,6; + 񰡰,price,price,long,7; + ȣ,sign,sign,char,1; + ,chgrate,chgrate,float,6.2; + ŷ,volume,volume,long,9; + ȣϽ,datetime,datetime,char,16; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1825.res b/ls_sample/sample_python/Res/t1825.res new file mode 100644 index 0000000..e261433 --- /dev/null +++ b/ls_sample/sample_python/Res/t1825.res @@ -0,0 +1,27 @@ +BEGIN_FUNCTION_MAP + .Func,QŬ˻(ťƮ)(t1825),t1825,attr,block,headtype=A; + BEGIN_DATA_MAP + t1825InBlock,⺻Է,input; + begin + ˻ڵ,search_cd,search_cd,char,4; + (0:ü1:ڽ2:ڽ),gubun,gubun,char,1; + end + t1825OutBlock,,output; + begin + ˻,JongCnt,JongCnt,long,4; + end + t1825OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + ϴ񱸺,sign,sign,char,1; + Ӻ,signcnt,signcnt,long,3; + 簡,close,close,long,9; + ϴ,change,change,long,9; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,10; + ŷϴ,volumerate,volumerate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1825_2.res b/ls_sample/sample_python/Res/t1825_2.res new file mode 100644 index 0000000..e261433 --- /dev/null +++ b/ls_sample/sample_python/Res/t1825_2.res @@ -0,0 +1,27 @@ +BEGIN_FUNCTION_MAP + .Func,QŬ˻(ťƮ)(t1825),t1825,attr,block,headtype=A; + BEGIN_DATA_MAP + t1825InBlock,⺻Է,input; + begin + ˻ڵ,search_cd,search_cd,char,4; + (0:ü1:ڽ2:ڽ),gubun,gubun,char,1; + end + t1825OutBlock,,output; + begin + ˻,JongCnt,JongCnt,long,4; + end + t1825OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + ϴ񱸺,sign,sign,char,1; + Ӻ,signcnt,signcnt,long,3; + 簡,close,close,long,9; + ϴ,change,change,long,9; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,10; + ŷϴ,volumerate,volumerate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1826.res b/ls_sample/sample_python/Res/t1826.res new file mode 100644 index 0000000..d36e6c8 --- /dev/null +++ b/ls_sample/sample_python/Res/t1826.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,QŬ˻Ʈȸ(ťƮ)(t1826),t1826,block,headtype=A; + BEGIN_DATA_MAP + t1826InBlock,⺻Է,input; + begin + ˻(0:ٽɰ˻1:ǥ˻2:ü3:ڵ),search_gb,search_gb,char,1; + end + t1826OutBlock,,output,occurs; + begin + ˻ڵ,search_cd,search_cd,char,4; + ˻,search_nm,search_nm,char,40; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1826_2.res b/ls_sample/sample_python/Res/t1826_2.res new file mode 100644 index 0000000..d36e6c8 --- /dev/null +++ b/ls_sample/sample_python/Res/t1826_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,QŬ˻Ʈȸ(ťƮ)(t1826),t1826,block,headtype=A; + BEGIN_DATA_MAP + t1826InBlock,⺻Է,input; + begin + ˻(0:ٽɰ˻1:ǥ˻2:ü3:ڵ),search_gb,search_gb,char,1; + end + t1826OutBlock,,output,occurs; + begin + ˻ڵ,search_cd,search_cd,char,4; + ˻,search_nm,search_nm,char,40; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1857.res b/ls_sample/sample_python/Res/t1857.res new file mode 100644 index 0000000..d3a1ae5 --- /dev/null +++ b/ls_sample/sample_python/Res/t1857.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,e˻(ŹAPI),t1857,attr,block,headtype=A; + BEGIN_DATA_MAP + t1857InBlock,In(*EMPTY*),input; + begin + ǽð(0:ȸ 1:ǽð), sRealFlag, sRealFlag, char, 1 + ˻(F: S:), sSearchFlag, sSearchFlag, char, 1; + ˻Է°, query_index, query_index, char, 256; + end + t1857OutBlock,Out(*EMPTY*),output; + begin + ˻, result_count, result_count, long, 5; + ð, result_time, result_time, char, 6; + ǽðŰ, AlertNum, AlertNum, char, 11; + end + t1857OutBlock1,Out(*EMPTY*),output,occurs; + begin + ڵ, shcode, shcode, char, 7; + , hname, hname, char, 40; + 簡, price, price, long, 9; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 9; + , diff, diff, float, 6; + ŷ, volume, volume, long, 12; + (N: R: O:Ż), JobFlag, JobFlag, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/t1857_2.res b/ls_sample/sample_python/Res/t1857_2.res new file mode 100644 index 0000000..d3a1ae5 --- /dev/null +++ b/ls_sample/sample_python/Res/t1857_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,e˻(ŹAPI),t1857,attr,block,headtype=A; + BEGIN_DATA_MAP + t1857InBlock,In(*EMPTY*),input; + begin + ǽð(0:ȸ 1:ǽð), sRealFlag, sRealFlag, char, 1 + ˻(F: S:), sSearchFlag, sSearchFlag, char, 1; + ˻Է°, query_index, query_index, char, 256; + end + t1857OutBlock,Out(*EMPTY*),output; + begin + ˻, result_count, result_count, long, 5; + ð, result_time, result_time, char, 6; + ǽðŰ, AlertNum, AlertNum, char, 11; + end + t1857OutBlock1,Out(*EMPTY*),output,occurs; + begin + ڵ, shcode, shcode, char, 7; + , hname, hname, char, 40; + 簡, price, price, long, 9; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 9; + , diff, diff, float, 6; + ŷ, volume, volume, long, 12; + (N: R: O:Ż), JobFlag, JobFlag, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/t1866.res b/ls_sample/sample_python/Res/t1866.res new file mode 100644 index 0000000..013b7c1 --- /dev/null +++ b/ls_sample/sample_python/Res/t1866.res @@ -0,0 +1,25 @@ +BEGIN_FUNCTION_MAP + .Func,ǸƮȸ(API)(t1866),t1866,ENCRYPT,block,headtype=A; + BEGIN_DATA_MAP + t1866InBlock,⺻Է,input; + begin + αID, user_id, user_id, char, 8; + ȸ, gb, gb, char, 1; + ׷, group_name, group_name, char, 40; + ӿ, cont, cont, char, 1; + Ű, contkey, cont_key, char, 40; + end + t1866OutBlock,,output; + begin + Ǽ, result_count, result_count, long, 5; + ӿ, cont, cont, char, 1; + Ű, contkey, cont_key, char, 40; + end + t1866OutBlock1,1,output,occurs; + begin + ε, query_index, query_index, char, 12; + ׷, group_name, group_name, char, 40; + , query_name, query_name, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/t1866_2.res b/ls_sample/sample_python/Res/t1866_2.res new file mode 100644 index 0000000..013b7c1 --- /dev/null +++ b/ls_sample/sample_python/Res/t1866_2.res @@ -0,0 +1,25 @@ +BEGIN_FUNCTION_MAP + .Func,ǸƮȸ(API)(t1866),t1866,ENCRYPT,block,headtype=A; + BEGIN_DATA_MAP + t1866InBlock,⺻Է,input; + begin + αID, user_id, user_id, char, 8; + ȸ, gb, gb, char, 1; + ׷, group_name, group_name, char, 40; + ӿ, cont, cont, char, 1; + Ű, contkey, cont_key, char, 40; + end + t1866OutBlock,,output; + begin + Ǽ, result_count, result_count, long, 5; + ӿ, cont, cont, char, 1; + Ű, contkey, cont_key, char, 40; + end + t1866OutBlock1,1,output,occurs; + begin + ε, query_index, query_index, char, 12; + ׷, group_name, group_name, char, 40; + , query_name, query_name, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/t1901.res b/ls_sample/sample_python/Res/t1901.res new file mode 100644 index 0000000..89db486 --- /dev/null +++ b/ls_sample/sample_python/Res/t1901.res @@ -0,0 +1,147 @@ +BEGIN_FUNCTION_MAP + .Func,ETF簡(ü)ȸ(t1901),t1901,attr,block,headtype=A; + BEGIN_DATA_MAP + t1901InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1901OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ذ,recprice,recprice,long,8; + ,avg,avg,long,8; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ϰŷ,jnilvolume,jnilvolume,float,12; + ŷ,volumediff,volumediff,long,12; + ð,open,open,long,8; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + ܱκ,flmtvol,flmtvol,float,12; + PER,per,per,float,6.2; + ֽļ(õ),listing,listing,long,12; + ű,jkrate,jkrate,long,8; + ȸ,vol,vol,float,6.2; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + ְ,highyear,highyear,long,8; + ְ,highyeardate,highyeardate,char,8; + ,lowyear,lowyear,long,8; + ,lowyeardate,lowyeardate,char,8; + ,upname,upname,char,20; + ڵ,upcode,upcode,char,3; + 簡,upprice,upprice,float,7.2; + Ϻ񱸺,upsign,upsign,char,1; + ϴ,upchange,upchange,float,6.2; + ,updiff,updiff,float,6.2; + ֱٿ,futname,futname,char,20; + ֱٿڵ,futcode,futcode,char,8; + 簡,futprice,futprice,float,6.2; + Ϻ񱸺,futsign,futsign,char,1; + ϴ,futchange,futchange,float,6.2; + ,futdiff,futdiff,float,6.2; + NAV,nav,nav,float,8.2; + NAVϴ񱸺,navsign,navsign,char,1; + NAVϴ,navchange,navchange,float,8.2; + NAV,navdiff,navdiff,float,6.2; + ,cocrate,cocrate,float,6.2; + ,kasis,kasis,float,6.2; + 밡,subprice,subprice,long,10; + ŵǻڵ1,offerno1,offerno1,char,6; + żǻڵ1,bidno1,bidno1,char,6; + Ѹŵ1,dvol1,dvol1,long,8; + Ѹż1,svol1,svol1,long,8; + ŵ1,dcha1,dcha1,long,8; + ż1,scha1,scha1,long,8; + ŵ1,ddiff1,ddiff1,float,6.2; + ż1,sdiff1,sdiff1,float,6.2; + ŵǻڵ2,offerno2,offerno2,char,6; + żǻڵ2,bidno2,bidno2,char,6; + Ѹŵ2,dvol2,dvol2,long,8; + Ѹż2,svol2,svol2,long,8; + ŵ2,dcha2,dcha2,long,8; + ż2,scha2,scha2,long,8; + ŵ2,ddiff2,ddiff2,float,6.2; + ż2,sdiff2,sdiff2,float,6.2; + ŵǻڵ3,offerno3,offerno3,char,6; + żǻڵ3,bidno3,bidno3,char,6; + Ѹŵ3,dvol3,dvol3,long,8; + Ѹż3,svol3,svol3,long,8; + ŵ3,dcha3,dcha3,long,8; + ż3,scha3,scha3,long,8; + ŵ3,ddiff3,ddiff3,float,6.2; + ż3,sdiff3,sdiff3,float,6.2; + ŵǻڵ4,offerno4,offerno4,char,6; + żǻڵ4,bidno4,bidno4,char,6; + Ѹŵ4,dvol4,dvol4,long,8; + Ѹż4,svol4,svol4,long,8; + ŵ4,dcha4,dcha4,long,8; + ż4,scha4,scha4,long,8; + ŵ4,ddiff4,ddiff4,float,6.2; + ż4,sdiff4,sdiff4,float,6.2; + ŵǻڵ5,offerno5,offerno5,char,6; + żǻڵ5,bidno5,bidno5,char,6; + Ѹŵ5,dvol5,dvol5,long,8; + Ѹż5,svol5,svol5,long,8; + ŵ5,dcha5,dcha5,long,8; + ż5,scha5,scha5,long,8; + ŵ5,ddiff5,ddiff5,float,6.2; + ż5,sdiff5,sdiff5,float,6.2; + ܱŵհ,fwdvl,fwdvl,long,12; + ܱŵ,ftradmdcha,ftradmdcha,long,12; + ܱŵ,ftradmddiff,ftradmddiff,float,6.2; + ܱżհ,fwsvl,fwsvl,long,12; + ܱż,ftradmscha,ftradmscha,long,12; + ܱż,ftradmsdiff,ftradmsdiff,float,6.2; + ,upname2,upname2,char,20; + ڵ,upcode2,upcode2,char,3; + 簡,upprice2,upprice2,float,7.2; + NAV,jnilnav,jnilnav,float,8.2; + NAVϴ񱸺,jnilnavsign,jnilnavsign,char,1; + NAVϴ,jnilnavchange,jnilnavchange,float,8.2; + NAV,jnilnavdiff,jnilnavdiff,float,6.2; + ڻѾ(),etftotcap,etftotcap,long,12; + ,spread,spread,float,6.2; + ,leverage,leverage,long,2; + ,taxgubun,taxgubun,char,1; + ,opcom_nmk,opcom_nmk,char,20; + LP1,lp_nm1,lp_nm1,char,20; + LP2,lp_nm2,lp_nm2,char,20; + LP3,lp_nm3,lp_nm3,char,20; + LP4,lp_nm4,lp_nm4,char,20; + LP5,lp_nm5,lp_nm5,char,20; + ,etf_cp,etf_cp,char,10; + ǰ(Filler),etf_kind,etf_kind,char,10; + VIߵ,vi_gubun,vi_gubun,char,10; + ETNǰз,etn_kind_cd,etn_kind_cd,char,20; + ETN,lastymd,lastymd,char,8; + ETN,payday,payday,char,8; + ETNŷ,lastdate,lastdate,char,8; + ETN,issuernmk,issuernmk,char,20; + ETNȯݰ,last_sdate,last_sdate,char,8; + ETNȯݰ,last_edate,last_edate,char,8; + ETNLP,lp_holdvol,lp_holdvol,char,12; + ,listdate,listdate,char,8; + ETPǰڵ,etp_gb,etp_gb,char,1;/*1:ETF(ȸ)2:ETF()3:ETN4:սETN*/ + ETNȯɿ,etn_elback_yn,etn_elback_yn,char,1;/*ETNȯɿY/N2017.03.27*/ + ,settletype,settletype,char,2;/*01:02:ǹ03:+ǹ*/ + ڻзڵ(з),idx_asset_class1,idx_asset_class1,char,2; + ETF/ETN,ty_text,ty_text,char,8; + ͷ,leverage2,leverage2,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1901_2.res b/ls_sample/sample_python/Res/t1901_2.res new file mode 100644 index 0000000..89db486 --- /dev/null +++ b/ls_sample/sample_python/Res/t1901_2.res @@ -0,0 +1,147 @@ +BEGIN_FUNCTION_MAP + .Func,ETF簡(ü)ȸ(t1901),t1901,attr,block,headtype=A; + BEGIN_DATA_MAP + t1901InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1901OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ذ,recprice,recprice,long,8; + ,avg,avg,long,8; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ϰŷ,jnilvolume,jnilvolume,float,12; + ŷ,volumediff,volumediff,long,12; + ð,open,open,long,8; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + ܱκ,flmtvol,flmtvol,float,12; + PER,per,per,float,6.2; + ֽļ(õ),listing,listing,long,12; + ű,jkrate,jkrate,long,8; + ȸ,vol,vol,float,6.2; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + ְ,highyear,highyear,long,8; + ְ,highyeardate,highyeardate,char,8; + ,lowyear,lowyear,long,8; + ,lowyeardate,lowyeardate,char,8; + ,upname,upname,char,20; + ڵ,upcode,upcode,char,3; + 簡,upprice,upprice,float,7.2; + Ϻ񱸺,upsign,upsign,char,1; + ϴ,upchange,upchange,float,6.2; + ,updiff,updiff,float,6.2; + ֱٿ,futname,futname,char,20; + ֱٿڵ,futcode,futcode,char,8; + 簡,futprice,futprice,float,6.2; + Ϻ񱸺,futsign,futsign,char,1; + ϴ,futchange,futchange,float,6.2; + ,futdiff,futdiff,float,6.2; + NAV,nav,nav,float,8.2; + NAVϴ񱸺,navsign,navsign,char,1; + NAVϴ,navchange,navchange,float,8.2; + NAV,navdiff,navdiff,float,6.2; + ,cocrate,cocrate,float,6.2; + ,kasis,kasis,float,6.2; + 밡,subprice,subprice,long,10; + ŵǻڵ1,offerno1,offerno1,char,6; + żǻڵ1,bidno1,bidno1,char,6; + Ѹŵ1,dvol1,dvol1,long,8; + Ѹż1,svol1,svol1,long,8; + ŵ1,dcha1,dcha1,long,8; + ż1,scha1,scha1,long,8; + ŵ1,ddiff1,ddiff1,float,6.2; + ż1,sdiff1,sdiff1,float,6.2; + ŵǻڵ2,offerno2,offerno2,char,6; + żǻڵ2,bidno2,bidno2,char,6; + Ѹŵ2,dvol2,dvol2,long,8; + Ѹż2,svol2,svol2,long,8; + ŵ2,dcha2,dcha2,long,8; + ż2,scha2,scha2,long,8; + ŵ2,ddiff2,ddiff2,float,6.2; + ż2,sdiff2,sdiff2,float,6.2; + ŵǻڵ3,offerno3,offerno3,char,6; + żǻڵ3,bidno3,bidno3,char,6; + Ѹŵ3,dvol3,dvol3,long,8; + Ѹż3,svol3,svol3,long,8; + ŵ3,dcha3,dcha3,long,8; + ż3,scha3,scha3,long,8; + ŵ3,ddiff3,ddiff3,float,6.2; + ż3,sdiff3,sdiff3,float,6.2; + ŵǻڵ4,offerno4,offerno4,char,6; + żǻڵ4,bidno4,bidno4,char,6; + Ѹŵ4,dvol4,dvol4,long,8; + Ѹż4,svol4,svol4,long,8; + ŵ4,dcha4,dcha4,long,8; + ż4,scha4,scha4,long,8; + ŵ4,ddiff4,ddiff4,float,6.2; + ż4,sdiff4,sdiff4,float,6.2; + ŵǻڵ5,offerno5,offerno5,char,6; + żǻڵ5,bidno5,bidno5,char,6; + Ѹŵ5,dvol5,dvol5,long,8; + Ѹż5,svol5,svol5,long,8; + ŵ5,dcha5,dcha5,long,8; + ż5,scha5,scha5,long,8; + ŵ5,ddiff5,ddiff5,float,6.2; + ż5,sdiff5,sdiff5,float,6.2; + ܱŵհ,fwdvl,fwdvl,long,12; + ܱŵ,ftradmdcha,ftradmdcha,long,12; + ܱŵ,ftradmddiff,ftradmddiff,float,6.2; + ܱżհ,fwsvl,fwsvl,long,12; + ܱż,ftradmscha,ftradmscha,long,12; + ܱż,ftradmsdiff,ftradmsdiff,float,6.2; + ,upname2,upname2,char,20; + ڵ,upcode2,upcode2,char,3; + 簡,upprice2,upprice2,float,7.2; + NAV,jnilnav,jnilnav,float,8.2; + NAVϴ񱸺,jnilnavsign,jnilnavsign,char,1; + NAVϴ,jnilnavchange,jnilnavchange,float,8.2; + NAV,jnilnavdiff,jnilnavdiff,float,6.2; + ڻѾ(),etftotcap,etftotcap,long,12; + ,spread,spread,float,6.2; + ,leverage,leverage,long,2; + ,taxgubun,taxgubun,char,1; + ,opcom_nmk,opcom_nmk,char,20; + LP1,lp_nm1,lp_nm1,char,20; + LP2,lp_nm2,lp_nm2,char,20; + LP3,lp_nm3,lp_nm3,char,20; + LP4,lp_nm4,lp_nm4,char,20; + LP5,lp_nm5,lp_nm5,char,20; + ,etf_cp,etf_cp,char,10; + ǰ(Filler),etf_kind,etf_kind,char,10; + VIߵ,vi_gubun,vi_gubun,char,10; + ETNǰз,etn_kind_cd,etn_kind_cd,char,20; + ETN,lastymd,lastymd,char,8; + ETN,payday,payday,char,8; + ETNŷ,lastdate,lastdate,char,8; + ETN,issuernmk,issuernmk,char,20; + ETNȯݰ,last_sdate,last_sdate,char,8; + ETNȯݰ,last_edate,last_edate,char,8; + ETNLP,lp_holdvol,lp_holdvol,char,12; + ,listdate,listdate,char,8; + ETPǰڵ,etp_gb,etp_gb,char,1;/*1:ETF(ȸ)2:ETF()3:ETN4:սETN*/ + ETNȯɿ,etn_elback_yn,etn_elback_yn,char,1;/*ETNȯɿY/N2017.03.27*/ + ,settletype,settletype,char,2;/*01:02:ǹ03:+ǹ*/ + ڻзڵ(з),idx_asset_class1,idx_asset_class1,char,2; + ETF/ETN,ty_text,ty_text,char,8; + ͷ,leverage2,leverage2,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1902.res b/ls_sample/sample_python/Res/t1902.res new file mode 100644 index 0000000..78a7dd5 --- /dev/null +++ b/ls_sample/sample_python/Res/t1902.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ETFð(t1902),t1902,attr,block,headtype=A; + BEGIN_DATA_MAP + t1902InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ð,time,time,char,6; + end + t1902OutBlock,,output; + begin + ð,time,time,char,6; + ,hname,hname,char,20; + ,upname,upname,char,20; + end + t1902OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ŷ,volume,volume,float,12; + NAV,navdiff,navdiff,float,9.2; + NAV,nav,nav,float,9.2; + ϴ,navchange,navchange,float,9.2; + ,crate,crate,float,9.2; + ,grate,grate,float,9.2; + ,jisu,jisu,float,8.2; + ϴ,jichange,jichange,float,8.2; + ϴ,jirate,jirate,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1902_2.res b/ls_sample/sample_python/Res/t1902_2.res new file mode 100644 index 0000000..78a7dd5 --- /dev/null +++ b/ls_sample/sample_python/Res/t1902_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ETFð(t1902),t1902,attr,block,headtype=A; + BEGIN_DATA_MAP + t1902InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ð,time,time,char,6; + end + t1902OutBlock,,output; + begin + ð,time,time,char,6; + ,hname,hname,char,20; + ,upname,upname,char,20; + end + t1902OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ŷ,volume,volume,float,12; + NAV,navdiff,navdiff,float,9.2; + NAV,nav,nav,float,9.2; + ϴ,navchange,navchange,float,9.2; + ,crate,crate,float,9.2; + ,grate,grate,float,9.2; + ,jisu,jisu,float,8.2; + ϴ,jichange,jichange,float,8.2; + ϴ,jirate,jirate,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1903.res b/ls_sample/sample_python/Res/t1903.res new file mode 100644 index 0000000..c3132dc --- /dev/null +++ b/ls_sample/sample_python/Res/t1903.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ETFϺ(t1903),t1903,attr,block,headtype=A; + BEGIN_DATA_MAP + t1903InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,date,date,char,8; + end + t1903OutBlock,,output; + begin + ,date,date,char,8; + ,hname,hname,char,20; + ,upname,upname,char,20; + end + t1903OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ŷ,volume,volume,float,12; + NAV,navdiff,navdiff,float,9.2; + NAV,nav,nav,float,9.2; + ϴ,navchange,navchange,float,9.2; + ,crate,crate,float,9.2; + ,grate,grate,float,9.2; + ,jisu,jisu,float,8.2; + ϴ,jichange,jichange,float,8.2; + ϴ,jirate,jirate,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1903_2.res b/ls_sample/sample_python/Res/t1903_2.res new file mode 100644 index 0000000..c3132dc --- /dev/null +++ b/ls_sample/sample_python/Res/t1903_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ETFϺ(t1903),t1903,attr,block,headtype=A; + BEGIN_DATA_MAP + t1903InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,date,date,char,8; + end + t1903OutBlock,,output; + begin + ,date,date,char,8; + ,hname,hname,char,20; + ,upname,upname,char,20; + end + t1903OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ŷ,volume,volume,float,12; + NAV,navdiff,navdiff,float,9.2; + NAV,nav,nav,float,9.2; + ϴ,navchange,navchange,float,9.2; + ,crate,crate,float,9.2; + ,grate,grate,float,9.2; + ,jisu,jisu,float,8.2; + ϴ,jichange,jichange,float,8.2; + ϴ,jirate,jirate,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1904.res b/ls_sample/sample_python/Res/t1904.res new file mode 100644 index 0000000..5bd7cfe --- /dev/null +++ b/ls_sample/sample_python/Res/t1904.res @@ -0,0 +1,70 @@ +BEGIN_FUNCTION_MAP + .Func,ETFȸ(t1904),t1904,attr,block,headtype=A; + BEGIN_DATA_MAP + t1904InBlock,⺻Է,input; + begin + ETFڵ,shcode,shcode,char,6; + PDF,date,date,char,8; + ı(1:򰡱ݾ2:Ǽ),sgb,sgb,char,1; + end + t1904OutBlock,,output; + begin + ϱ,chk_tday,chk_tday,char,1; + PDF,date,date,char,8; + ETF簡,price,price,long,8; + ETFϴ񱸺,sign,sign,char,1; + ETFϴ,change,change,long,8; + ETF,diff,diff,float,6.2; + ETFŷ,volume,volume,long,12; + NAV,nav,nav,float,8.2; + NAVϴ񱸺,navsign,navsign,char,1; + NAVϴ,navchange,navchange,float,8.2; + NAV,navdiff,navdiff,float,6.2; + NAV,jnilnav,jnilnav,float,8.2; + NAVϴ񱸺,jnilnavsign,jnilnavsign,char,1; + NAVϴ,jnilnavchange,jnilnavchange,float,8.2; + NAV,jnilnavdiff,jnilnavdiff,float,6.2; + ,upname,upname,char,20; + ڵ,upcode,upcode,char,3; + 簡,upprice,upprice,float,7.2; + Ϻ񱸺,upsign,upsign,char,1; + ϴ,upchange,upchange,float,6.2; + ,updiff,updiff,float,6.2; + ֱٿ,futname,futname,char,20; + ֱٿڵ,futcode,futcode,char,8; + 簡,futprice,futprice,float,6.2; + Ϻ񱸺,futsign,futsign,char,1; + ϴ,futchange,futchange,float,6.2; + ,futdiff,futdiff,float,6.2; + ,upname2,upname2,char,20; + ڵ,upcode2,upcode2,char,3; + 簡,upprice2,upprice2,float,7.2; + ڻѾ(:),etftotcap,etftotcap,long,12; + ,etfnum,etfnum,long,4; + CUֽļ,etfcunum,etfcunum,long,12; + ,cash,cash,long,12; + ,opcom_nmk,opcom_nmk,char,20; + 򰡱ݾ,tot_pval,tot_pval,long,12; + 񱸼ðѾ,tot_sigatval,tot_sigatval,long,12; + end + t1904OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,12; + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ(鸸),value,value,long,12; + Ǽ(/ȭ/USD/â),icux,icux,long,12; + ׸ݾ/ݾ,parprice,parprice,long,12; + 򰡱ݾ,pvalue,pvalue,long,12; + ðѾ,sigatvalue,sigatvalue,long,12; + PDF,profitdate,profitdate,char,8; + (򰡱ݾ),weight,weight,float,6.2; + ETF,diff2,diff2,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1904_2.res b/ls_sample/sample_python/Res/t1904_2.res new file mode 100644 index 0000000..5bd7cfe --- /dev/null +++ b/ls_sample/sample_python/Res/t1904_2.res @@ -0,0 +1,70 @@ +BEGIN_FUNCTION_MAP + .Func,ETFȸ(t1904),t1904,attr,block,headtype=A; + BEGIN_DATA_MAP + t1904InBlock,⺻Է,input; + begin + ETFڵ,shcode,shcode,char,6; + PDF,date,date,char,8; + ı(1:򰡱ݾ2:Ǽ),sgb,sgb,char,1; + end + t1904OutBlock,,output; + begin + ϱ,chk_tday,chk_tday,char,1; + PDF,date,date,char,8; + ETF簡,price,price,long,8; + ETFϴ񱸺,sign,sign,char,1; + ETFϴ,change,change,long,8; + ETF,diff,diff,float,6.2; + ETFŷ,volume,volume,long,12; + NAV,nav,nav,float,8.2; + NAVϴ񱸺,navsign,navsign,char,1; + NAVϴ,navchange,navchange,float,8.2; + NAV,navdiff,navdiff,float,6.2; + NAV,jnilnav,jnilnav,float,8.2; + NAVϴ񱸺,jnilnavsign,jnilnavsign,char,1; + NAVϴ,jnilnavchange,jnilnavchange,float,8.2; + NAV,jnilnavdiff,jnilnavdiff,float,6.2; + ,upname,upname,char,20; + ڵ,upcode,upcode,char,3; + 簡,upprice,upprice,float,7.2; + Ϻ񱸺,upsign,upsign,char,1; + ϴ,upchange,upchange,float,6.2; + ,updiff,updiff,float,6.2; + ֱٿ,futname,futname,char,20; + ֱٿڵ,futcode,futcode,char,8; + 簡,futprice,futprice,float,6.2; + Ϻ񱸺,futsign,futsign,char,1; + ϴ,futchange,futchange,float,6.2; + ,futdiff,futdiff,float,6.2; + ,upname2,upname2,char,20; + ڵ,upcode2,upcode2,char,3; + 簡,upprice2,upprice2,float,7.2; + ڻѾ(:),etftotcap,etftotcap,long,12; + ,etfnum,etfnum,long,4; + CUֽļ,etfcunum,etfcunum,long,12; + ,cash,cash,long,12; + ,opcom_nmk,opcom_nmk,char,20; + 򰡱ݾ,tot_pval,tot_pval,long,12; + 񱸼ðѾ,tot_sigatval,tot_sigatval,long,12; + end + t1904OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,12; + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ(鸸),value,value,long,12; + Ǽ(/ȭ/USD/â),icux,icux,long,12; + ׸ݾ/ݾ,parprice,parprice,long,12; + 򰡱ݾ,pvalue,pvalue,long,12; + ðѾ,sigatvalue,sigatvalue,long,12; + PDF,profitdate,profitdate,char,8; + (򰡱ݾ),weight,weight,float,6.2; + ETF,diff2,diff2,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1906.res b/ls_sample/sample_python/Res/t1906.res new file mode 100644 index 0000000..8fcef05 --- /dev/null +++ b/ls_sample/sample_python/Res/t1906.res @@ -0,0 +1,119 @@ +BEGIN_FUNCTION_MAP + .Func,ETFLPȣ(t1906),t1906,attr,block,headtype=A; + BEGIN_DATA_MAP + t1906InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1906OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + LPŵȣ1,lp_offerrem1,lp_offerrem1,long,12; + LPżȣ1,lp_bidrem1,lp_bidrem1,long,12; + LPŵȣ2,lp_offerrem2,lp_offerrem2,long,12; + LPżȣ2,lp_bidrem2,lp_bidrem2,long,12; + LPŵȣ3,lp_offerrem3,lp_offerrem3,long,12; + LPżȣ3,lp_bidrem3,lp_bidrem3,long,12; + LPŵȣ4,lp_offerrem4,lp_offerrem4,long,12; + LPżȣ4,lp_bidrem4,lp_bidrem4,long,12; + LPŵȣ5,lp_offerrem5,lp_offerrem5,long,12; + LPżȣ5,lp_bidrem5,lp_bidrem5,long,12; + LPŵȣ6,lp_offerrem6,lp_offerrem6,long,12; + LPżȣ6,lp_bidrem6,lp_bidrem6,long,12; + LPŵȣ7,lp_offerrem7,lp_offerrem7,long,12; + LPżȣ7,lp_bidrem7,lp_bidrem7,long,12; + LPŵȣ8,lp_offerrem8,lp_offerrem8,long,12; + LPżȣ8,lp_bidrem8,lp_bidrem8,long,12; + LPŵȣ9,lp_offerrem9,lp_offerrem9,long,12; + LPżȣ9,lp_bidrem9,lp_bidrem9,long,12; + LPŵȣ10,lp_offerrem10,lp_offerrem10,long,12; + LPżȣ10,lp_bidrem10,lp_bidrem10,long,12; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,12; + żȣ1,bidrem1,bidrem1,long,12; + ŵ1,preoffercha1,preoffercha1,long,12; + ż1,prebidcha1,prebidcha1,long,12; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,12; + żȣ2,bidrem2,bidrem2,long,12; + ŵ2,preoffercha2,preoffercha2,long,12; + ż2,prebidcha2,prebidcha2,long,12; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,12; + żȣ3,bidrem3,bidrem3,long,12; + ŵ3,preoffercha3,preoffercha3,long,12; + ż3,prebidcha3,prebidcha3,long,12; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,12; + żȣ4,bidrem4,bidrem4,long,12; + ŵ4,preoffercha4,preoffercha4,long,12; + ż4,prebidcha4,prebidcha4,long,12; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,12; + żȣ5,bidrem5,bidrem5,long,12; + ŵ5,preoffercha5,preoffercha5,long,12; + ż5,prebidcha5,prebidcha5,long,12; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,12; + żȣ6,bidrem6,bidrem6,long,12; + ŵ6,preoffercha6,preoffercha6,long,12; + ż6,prebidcha6,prebidcha6,long,12; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,12; + żȣ7,bidrem7,bidrem7,long,12; + ŵ7,preoffercha7,preoffercha7,long,12; + ż7,prebidcha7,prebidcha7,long,12; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,12; + żȣ8,bidrem8,bidrem8,long,12; + ŵ8,preoffercha8,preoffercha8,long,12; + ż8,prebidcha8,prebidcha8,long,12; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,12; + żȣ9,bidrem9,bidrem9,long,12; + ŵ9,preoffercha9,preoffercha9,long,12; + ż9,prebidcha9,prebidcha9,long,12; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,12; + żȣ10,bidrem10,bidrem10,long,12; + ŵ10,preoffercha10,preoffercha10,long,12; + ż10,prebidcha10,prebidcha10,long,12; + ŵȣ,offer,offer,long,12; + żȣ,bid,bid,long,12; + ŵ,preoffercha,preoffercha,long,12; + ż,prebidcha,prebidcha,long,12; + Žð,hotime,hotime,char,8; + üᰡ,yeprice,yeprice,long,8; + ü,yevolume,yevolume,long,12; + üϱ,yesign,yesign,char,1; + üϴ,yechange,yechange,long,8; + ü,yediff,yediff,float,6.2; + ðܸŵܷ,tmoffer,tmoffer,long,12; + ðܸżܷ,tmbid,tmbid,long,12; + ñ,ho_status,ho_status,char,1; + ڵ,shcode,shcode,char,6; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1906_2.res b/ls_sample/sample_python/Res/t1906_2.res new file mode 100644 index 0000000..8fcef05 --- /dev/null +++ b/ls_sample/sample_python/Res/t1906_2.res @@ -0,0 +1,119 @@ +BEGIN_FUNCTION_MAP + .Func,ETFLPȣ(t1906),t1906,attr,block,headtype=A; + BEGIN_DATA_MAP + t1906InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1906OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + LPŵȣ1,lp_offerrem1,lp_offerrem1,long,12; + LPżȣ1,lp_bidrem1,lp_bidrem1,long,12; + LPŵȣ2,lp_offerrem2,lp_offerrem2,long,12; + LPżȣ2,lp_bidrem2,lp_bidrem2,long,12; + LPŵȣ3,lp_offerrem3,lp_offerrem3,long,12; + LPżȣ3,lp_bidrem3,lp_bidrem3,long,12; + LPŵȣ4,lp_offerrem4,lp_offerrem4,long,12; + LPżȣ4,lp_bidrem4,lp_bidrem4,long,12; + LPŵȣ5,lp_offerrem5,lp_offerrem5,long,12; + LPżȣ5,lp_bidrem5,lp_bidrem5,long,12; + LPŵȣ6,lp_offerrem6,lp_offerrem6,long,12; + LPżȣ6,lp_bidrem6,lp_bidrem6,long,12; + LPŵȣ7,lp_offerrem7,lp_offerrem7,long,12; + LPżȣ7,lp_bidrem7,lp_bidrem7,long,12; + LPŵȣ8,lp_offerrem8,lp_offerrem8,long,12; + LPżȣ8,lp_bidrem8,lp_bidrem8,long,12; + LPŵȣ9,lp_offerrem9,lp_offerrem9,long,12; + LPżȣ9,lp_bidrem9,lp_bidrem9,long,12; + LPŵȣ10,lp_offerrem10,lp_offerrem10,long,12; + LPżȣ10,lp_bidrem10,lp_bidrem10,long,12; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,12; + żȣ1,bidrem1,bidrem1,long,12; + ŵ1,preoffercha1,preoffercha1,long,12; + ż1,prebidcha1,prebidcha1,long,12; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,12; + żȣ2,bidrem2,bidrem2,long,12; + ŵ2,preoffercha2,preoffercha2,long,12; + ż2,prebidcha2,prebidcha2,long,12; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,12; + żȣ3,bidrem3,bidrem3,long,12; + ŵ3,preoffercha3,preoffercha3,long,12; + ż3,prebidcha3,prebidcha3,long,12; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,12; + żȣ4,bidrem4,bidrem4,long,12; + ŵ4,preoffercha4,preoffercha4,long,12; + ż4,prebidcha4,prebidcha4,long,12; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,12; + żȣ5,bidrem5,bidrem5,long,12; + ŵ5,preoffercha5,preoffercha5,long,12; + ż5,prebidcha5,prebidcha5,long,12; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,12; + żȣ6,bidrem6,bidrem6,long,12; + ŵ6,preoffercha6,preoffercha6,long,12; + ż6,prebidcha6,prebidcha6,long,12; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,12; + żȣ7,bidrem7,bidrem7,long,12; + ŵ7,preoffercha7,preoffercha7,long,12; + ż7,prebidcha7,prebidcha7,long,12; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,12; + żȣ8,bidrem8,bidrem8,long,12; + ŵ8,preoffercha8,preoffercha8,long,12; + ż8,prebidcha8,prebidcha8,long,12; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,12; + żȣ9,bidrem9,bidrem9,long,12; + ŵ9,preoffercha9,preoffercha9,long,12; + ż9,prebidcha9,prebidcha9,long,12; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,12; + żȣ10,bidrem10,bidrem10,long,12; + ŵ10,preoffercha10,preoffercha10,long,12; + ż10,prebidcha10,prebidcha10,long,12; + ŵȣ,offer,offer,long,12; + żȣ,bid,bid,long,12; + ŵ,preoffercha,preoffercha,long,12; + ż,prebidcha,prebidcha,long,12; + Žð,hotime,hotime,char,8; + üᰡ,yeprice,yeprice,long,8; + ü,yevolume,yevolume,long,12; + üϱ,yesign,yesign,char,1; + üϴ,yechange,yechange,long,8; + ü,yediff,yediff,float,6.2; + ðܸŵܷ,tmoffer,tmoffer,long,12; + ðܸżܷ,tmbid,tmbid,long,12; + ñ,ho_status,ho_status,char,1; + ڵ,shcode,shcode,char,6; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1921.res b/ls_sample/sample_python/Res/t1921.res new file mode 100644 index 0000000..d799be0 --- /dev/null +++ b/ls_sample/sample_python/Res/t1921.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ſŷ(t1921),t1921,attr,block,headtype=A; + BEGIN_DATA_MAP + t1921InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ڴֱ,gubun,gubun,char,1; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1921OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1921OutBlock1,1,output,occurs; + begin + ¥,mmdate,mmdate,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,jchange,jchange,long,8; + ,diff,diff,float,6.2; + ű,nvolume,nvolume,long,8; + ȯ,svolume,svolume,long,8; + ܰ,jvolume,jvolume,long,8; + ݾ,price,price,long,8; + ,change,change,long,8; + ,gyrate,gyrate,float,6.2; + ܰ,jkrate,jkrate,float,6.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1921_2.res b/ls_sample/sample_python/Res/t1921_2.res new file mode 100644 index 0000000..d799be0 --- /dev/null +++ b/ls_sample/sample_python/Res/t1921_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ſŷ(t1921),t1921,attr,block,headtype=A; + BEGIN_DATA_MAP + t1921InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ڴֱ,gubun,gubun,char,1; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1921OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1921OutBlock1,1,output,occurs; + begin + ¥,mmdate,mmdate,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,jchange,jchange,long,8; + ,diff,diff,float,6.2; + ű,nvolume,nvolume,long,8; + ȯ,svolume,svolume,long,8; + ܰ,jvolume,jvolume,long,8; + ݾ,price,price,long,8; + ,change,change,long,8; + ,gyrate,gyrate,float,6.2; + ܰ,jkrate,jkrate,float,6.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1926.res b/ls_sample/sample_python/Res/t1926.res new file mode 100644 index 0000000..2d2996d --- /dev/null +++ b/ls_sample/sample_python/Res/t1926.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,񺰽ſ(t1926),t1926,attr,block,headtype=A; + BEGIN_DATA_MAP + t1926InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1926OutBlock,,output; + begin + ڽűԼ,ynvolume,ynvolume,long,8; + ڻȯ,ysvolume,ysvolume,long,8; + ܰ,yjvolume,yjvolume,long,8; + ڼ,yvchange,yvchange,long,8; + ڰ,ygrate,ygrate,float,9.2; + ܰ,yjrate,yjrate,float,9.2; + ڽűԱݾ,ynprice,ynprice,long,8; + ڻȯݾ,ysprice,ysprice,long,8; + ܰݾ,yjprice,yjprice,long,8; + ڱݾ״,yachange,yachange,long,8; + ֽűԼ,dnvolume,dnvolume,long,8; + ֻȯ,dsvolume,dsvolume,long,8; + ܰ,djvolume,djvolume,long,8; + ּ,dvchange,dvchange,long,8; + ְ,dgrate,dgrate,float,9.2; + ܰ,djrate,djrate,float,9.2; + ֽűԱݾ,dnprice,dnprice,long,8; + ֻȯݾ,dsprice,dsprice,long,8; + ܰݾ,djprice,djprice,long,8; + ֱݾ״,dachange,dachange,long,8; + ,mmdate,mmdate,char,8; + ,close,close,long,8; + ϰŷ,volume,volume,long,10; + ϰŷ,value,value,long,12; + ְ5,pr5days,pr5days,float,9.2; + ְ20,pr20days,pr20days,float,9.2; + 5,yj5days,yj5days,float,9.2; + 20,yj20days,yj20days,float,9.2; + 5,dj5days,dj5days,float,9.2; + 20,dj20days,dj20days,float,9.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1926_2.res b/ls_sample/sample_python/Res/t1926_2.res new file mode 100644 index 0000000..2d2996d --- /dev/null +++ b/ls_sample/sample_python/Res/t1926_2.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,񺰽ſ(t1926),t1926,attr,block,headtype=A; + BEGIN_DATA_MAP + t1926InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1926OutBlock,,output; + begin + ڽűԼ,ynvolume,ynvolume,long,8; + ڻȯ,ysvolume,ysvolume,long,8; + ܰ,yjvolume,yjvolume,long,8; + ڼ,yvchange,yvchange,long,8; + ڰ,ygrate,ygrate,float,9.2; + ܰ,yjrate,yjrate,float,9.2; + ڽűԱݾ,ynprice,ynprice,long,8; + ڻȯݾ,ysprice,ysprice,long,8; + ܰݾ,yjprice,yjprice,long,8; + ڱݾ״,yachange,yachange,long,8; + ֽűԼ,dnvolume,dnvolume,long,8; + ֻȯ,dsvolume,dsvolume,long,8; + ܰ,djvolume,djvolume,long,8; + ּ,dvchange,dvchange,long,8; + ְ,dgrate,dgrate,float,9.2; + ܰ,djrate,djrate,float,9.2; + ֽűԱݾ,dnprice,dnprice,long,8; + ֻȯݾ,dsprice,dsprice,long,8; + ܰݾ,djprice,djprice,long,8; + ֱݾ״,dachange,dachange,long,8; + ,mmdate,mmdate,char,8; + ,close,close,long,8; + ϰŷ,volume,volume,long,10; + ϰŷ,value,value,long,12; + ְ5,pr5days,pr5days,float,9.2; + ְ20,pr20days,pr20days,float,9.2; + 5,yj5days,yj5days,float,9.2; + 20,yj20days,yj20days,float,9.2; + 5,dj5days,dj5days,float,9.2; + 20,dj20days,dj20days,float,9.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1927.res b/ls_sample/sample_python/Res/t1927.res new file mode 100644 index 0000000..947225a --- /dev/null +++ b/ls_sample/sample_python/Res/t1927.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ŵϺ(t1927),t1927,attr,block,headtype=A; + BEGIN_DATA_MAP + t1927InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,date,date,char,8; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + end + t1927OutBlock,,output; + begin + CTS,date,date,char,8; + end + t1927OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ŵ,gm_vo,gm_vo,long,12; + ŵ,gm_va,gm_va,long,12; + ŵŷ,gm_per,gm_per,float,6.2; + հŵܰ,gm_avg,gm_avg,long,12; + ŵ,gm_vo_sum,gm_vo_sum,long,12; + ƽŵ,gm_vo1,gm_vo1,long,12; + ƽŵ,gm_va1,gm_va1,long,12; + ƽ꿹ܰŵ,gm_vo2,gm_vo2,long,12; + ƽ꿹ܰŵ,gm_va2,gm_va2,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1927_2.res b/ls_sample/sample_python/Res/t1927_2.res new file mode 100644 index 0000000..947225a --- /dev/null +++ b/ls_sample/sample_python/Res/t1927_2.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ŵϺ(t1927),t1927,attr,block,headtype=A; + BEGIN_DATA_MAP + t1927InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,date,date,char,8; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + end + t1927OutBlock,,output; + begin + CTS,date,date,char,8; + end + t1927OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ŵ,gm_vo,gm_vo,long,12; + ŵ,gm_va,gm_va,long,12; + ŵŷ,gm_per,gm_per,float,6.2; + հŵܰ,gm_avg,gm_avg,long,12; + ŵ,gm_vo_sum,gm_vo_sum,long,12; + ƽŵ,gm_vo1,gm_vo1,long,12; + ƽŵ,gm_va1,gm_va1,long,12; + ƽ꿹ܰŵ,gm_vo2,gm_vo2,long,12; + ƽ꿹ܰŵ,gm_va2,gm_va2,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1941.res b/ls_sample/sample_python/Res/t1941.res new file mode 100644 index 0000000..dfa7904 --- /dev/null +++ b/ls_sample/sample_python/Res/t1941.res @@ -0,0 +1,27 @@ +BEGIN_FUNCTION_MAP + .Func,񺰴ŷϰ(t1941),t1941,attr,block,headtype=A; + BEGIN_DATA_MAP + t1941InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + end + t1941OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ü,upvolume,upvolume,long,12; + ϻȯ,dnvolume,dnvolume,long,12; + ܰ,tovolume,tovolume,long,12; + ܰݾ,tovalue,tovalue,long,12; + ڵ,shcode,shcode,char,6; + ,tovoldif,tovoldif,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1941_2.res b/ls_sample/sample_python/Res/t1941_2.res new file mode 100644 index 0000000..dfa7904 --- /dev/null +++ b/ls_sample/sample_python/Res/t1941_2.res @@ -0,0 +1,27 @@ +BEGIN_FUNCTION_MAP + .Func,񺰴ŷϰ(t1941),t1941,attr,block,headtype=A; + BEGIN_DATA_MAP + t1941InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + end + t1941OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ü,upvolume,upvolume,long,12; + ϻȯ,dnvolume,dnvolume,long,12; + ܰ,tovolume,tovolume,long,12; + ܰݾ,tovalue,tovalue,long,12; + ڵ,shcode,shcode,char,6; + ,tovoldif,tovoldif,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1950.res b/ls_sample/sample_python/Res/t1950.res new file mode 100644 index 0000000..7106f20 --- /dev/null +++ b/ls_sample/sample_python/Res/t1950.res @@ -0,0 +1,105 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡(ü)ȸ(t1950),t1950,attr,block,headtype=A; + BEGIN_DATA_MAP + t1950InBlock,⺻Է,input; + begin + ELWڵ,shcode,shcode,char,6; + end + t1950OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + üð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,cvolume,cvolume,long,10; + ŷ,volume,volume,float,12; + ذ,recprice,recprice,long,8; + ,avg,avg,long,8; + ϰŷ,jnilvolume,jnilvolume,float,12; + ϵðŷ,jvolume,jvolume,float,12; + ,jnilclose,jnilclose,long,8; + ŷ,volumechg,volumechg,float,12; + ŷ,volumediff,volumediff,float,6.2; + ð,open,open,long,8; + ð,odiff,odiff,float,6.2; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ,hdiff,hdiff,float,6.2; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ,ldiff,ldiff,float,6.2; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdiff,high52wdiff,float,6.2; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdiff,low52wdiff,float,6.2; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + ֽļ(õ),listing,listing,float,12; + ,memedan,memedan,char,5; + ȸ,vol,vol,float,6.2; + иƼ,parity,parity,float,8.2; + ͺб,berate,berate,float,8.2; + ,gearing,gearing,float,8.2; + 簡,elwexec,elwexec,float,8.2; + డ,issueprice,issueprice,long,8; + ȯ,convrate,convrate,float,12.4; + ŷ,lastdate,lastdate,char,8; + ں,capt,capt,float,8.2; + e.,egearing,egearing,float,8.2; + ̾,premium,premium,float,8.2; + ,spread,spread,float,6.2; + ִ뽺,espread,espread,float,6.2; + ̷а,theoryprice,theoryprice,float,10.2; + 纯,impv,impv,float,6.2; + ,moneyness,moneyness,char,1; + Ÿ,delt,delt,float,8.6; + ,gama,gama,float,8.6; + ,vega,vega,float,13.6; + Ÿ,ceta,ceta,float,13.6; + ,rhox,rhox,float,13.6; + ϼ,bjandatecnt,bjandatecnt,long,4; + 簳,mmsdate,mmsdate,char,8; + ,mmedate,mmedate,char,8; + ,payday,payday,char,8; + ,listdate,listdate,char,8; + LPȸ,lpmem,lpmem,char,20; + LP,lp_holdvol,lp_holdvol,float,12; + ڻڵ,bcode,bcode,char,6; + ڻ걸,bgubun,bgubun,char,1; + ڻ簡,bprice,bprice,long,8; + ڻϺ񱸺,bsign,bsign,char,1; + ڻϺ,bchange,bchange,long,8; + ڻ,bdiff,bdiff,float,6.2; + ڻŷ,bvolume,bvolume,float,12; + ,info1,info1,char,10; + /޵,info2,info2,char,10; + /屸,info3,info3,char,10; + /ҼDZ,info4,info4,char,12; + 屸,janginfo,janginfo,char,10; + ٽϱ,basketgb,basketgb,char,1; + ٽϰ,basketcnt,basketcnt,long,3; + ELWǸ,elwtype,elwtype,char,2; + ELW,settletype,settletype,char,2; + LPֹɿ,lpord,lpord,char,2; + Ǹ,elwdetail,elwdetail,char,100; + 򰡰ݹ,valuation,valuation,char,100; + end + t1950OutBlock1,1,output,occurs; + begin + ڻڵ,bskcode,bskcode,char,6; + ڻ,bskbno,bskbno,long,3; + ڻ簡,bskprice,bskprice,long,8; + ڻϺ񱸺,bsksign,bsksign,char,1; + ڻϺ,bskchange,bskchange,long,8; + ڻ,bskdiff,bskdiff,float,6.2; + ڻŷ,bskvolume,bskvolume,float,12; + ڻ,bskjnilclose,bskjnilclose,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1950 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1950_2.res b/ls_sample/sample_python/Res/t1950_2.res new file mode 100644 index 0000000..7106f20 --- /dev/null +++ b/ls_sample/sample_python/Res/t1950_2.res @@ -0,0 +1,105 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡(ü)ȸ(t1950),t1950,attr,block,headtype=A; + BEGIN_DATA_MAP + t1950InBlock,⺻Է,input; + begin + ELWڵ,shcode,shcode,char,6; + end + t1950OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + üð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,cvolume,cvolume,long,10; + ŷ,volume,volume,float,12; + ذ,recprice,recprice,long,8; + ,avg,avg,long,8; + ϰŷ,jnilvolume,jnilvolume,float,12; + ϵðŷ,jvolume,jvolume,float,12; + ,jnilclose,jnilclose,long,8; + ŷ,volumechg,volumechg,float,12; + ŷ,volumediff,volumediff,float,6.2; + ð,open,open,long,8; + ð,odiff,odiff,float,6.2; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ,hdiff,hdiff,float,6.2; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ,ldiff,ldiff,float,6.2; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdiff,high52wdiff,float,6.2; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdiff,low52wdiff,float,6.2; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + ֽļ(õ),listing,listing,float,12; + ,memedan,memedan,char,5; + ȸ,vol,vol,float,6.2; + иƼ,parity,parity,float,8.2; + ͺб,berate,berate,float,8.2; + ,gearing,gearing,float,8.2; + 簡,elwexec,elwexec,float,8.2; + డ,issueprice,issueprice,long,8; + ȯ,convrate,convrate,float,12.4; + ŷ,lastdate,lastdate,char,8; + ں,capt,capt,float,8.2; + e.,egearing,egearing,float,8.2; + ̾,premium,premium,float,8.2; + ,spread,spread,float,6.2; + ִ뽺,espread,espread,float,6.2; + ̷а,theoryprice,theoryprice,float,10.2; + 纯,impv,impv,float,6.2; + ,moneyness,moneyness,char,1; + Ÿ,delt,delt,float,8.6; + ,gama,gama,float,8.6; + ,vega,vega,float,13.6; + Ÿ,ceta,ceta,float,13.6; + ,rhox,rhox,float,13.6; + ϼ,bjandatecnt,bjandatecnt,long,4; + 簳,mmsdate,mmsdate,char,8; + ,mmedate,mmedate,char,8; + ,payday,payday,char,8; + ,listdate,listdate,char,8; + LPȸ,lpmem,lpmem,char,20; + LP,lp_holdvol,lp_holdvol,float,12; + ڻڵ,bcode,bcode,char,6; + ڻ걸,bgubun,bgubun,char,1; + ڻ簡,bprice,bprice,long,8; + ڻϺ񱸺,bsign,bsign,char,1; + ڻϺ,bchange,bchange,long,8; + ڻ,bdiff,bdiff,float,6.2; + ڻŷ,bvolume,bvolume,float,12; + ,info1,info1,char,10; + /޵,info2,info2,char,10; + /屸,info3,info3,char,10; + /ҼDZ,info4,info4,char,12; + 屸,janginfo,janginfo,char,10; + ٽϱ,basketgb,basketgb,char,1; + ٽϰ,basketcnt,basketcnt,long,3; + ELWǸ,elwtype,elwtype,char,2; + ELW,settletype,settletype,char,2; + LPֹɿ,lpord,lpord,char,2; + Ǹ,elwdetail,elwdetail,char,100; + 򰡰ݹ,valuation,valuation,char,100; + end + t1950OutBlock1,1,output,occurs; + begin + ڻڵ,bskcode,bskcode,char,6; + ڻ,bskbno,bskbno,long,3; + ڻ簡,bskprice,bskprice,long,8; + ڻϺ񱸺,bsksign,bsksign,char,1; + ڻϺ,bskchange,bskchange,long,8; + ڻ,bskdiff,bskdiff,float,6.2; + ڻŷ,bskvolume,bskvolume,float,12; + ڻ,bskjnilclose,bskjnilclose,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1950 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1951.res b/ls_sample/sample_python/Res/t1951.res new file mode 100644 index 0000000..770ff51 --- /dev/null +++ b/ls_sample/sample_python/Res/t1951.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ELWð뺰üȸ(t1951),t1951,attr,block,headtype=A; + BEGIN_DATA_MAP + t1951InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,starttime,starttime,char,4; + ð,endtime,endtime,char,4; + ðCTS,cts_time,cts_time,char,8; + end + t1951OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,8; + end + t1951OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,12; + üᰭ,chdegree,chdegree,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + üᷮ,revolume,revolume,long,12; + üǼ,rechecnt,rechecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1951 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1951_2.res b/ls_sample/sample_python/Res/t1951_2.res new file mode 100644 index 0000000..770ff51 --- /dev/null +++ b/ls_sample/sample_python/Res/t1951_2.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ELWð뺰üȸ(t1951),t1951,attr,block,headtype=A; + BEGIN_DATA_MAP + t1951InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,starttime,starttime,char,4; + ð,endtime,endtime,char,4; + ðCTS,cts_time,cts_time,char,8; + end + t1951OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,8; + end + t1951OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,12; + üᰭ,chdegree,chdegree,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + üᷮ,revolume,revolume,long,12; + üǼ,rechecnt,rechecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1951 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1954.res b/ls_sample/sample_python/Res/t1954.res new file mode 100644 index 0000000..844256f --- /dev/null +++ b/ls_sample/sample_python/Res/t1954.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,ELWϺְ(t1954),t1954,attr,block,headtype=A; + BEGIN_DATA_MAP + t1954InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ¥,date,date,char,8; + Ǽ,cnt,cnt,long,3; + end + t1954OutBlock,,output; + begin + ¥,date,date,char,8; + ڻ걸,bsjgubun,bsjgubun,char,1; + ڻڵ(),bscode,bscode,char,6; + ڻڵ(),bjcode,bjcode,char,3; + end + t1954OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ڻ(),bsprice,bsprice,long,8; + ڻ(),bjprice,bjprice,float,8.2; + ϴ񱸺,bsign,bsign,char,1; + ϴ(),bschange,bschange,long,8; + ϴ(),bjchange,bjchange,float,8.2; + ,bdiff,bdiff,float,6.2; + ڻŷ,bvolume,bvolume,float,12; + иƼ,parity,parity,float,6.2; + e.,egearing,egearing,float,6.2; + ̾,premium,premium,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + Moneyness,mness,mness,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1954 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1954_2.res b/ls_sample/sample_python/Res/t1954_2.res new file mode 100644 index 0000000..844256f --- /dev/null +++ b/ls_sample/sample_python/Res/t1954_2.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,ELWϺְ(t1954),t1954,attr,block,headtype=A; + BEGIN_DATA_MAP + t1954InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ¥,date,date,char,8; + Ǽ,cnt,cnt,long,3; + end + t1954OutBlock,,output; + begin + ¥,date,date,char,8; + ڻ걸,bsjgubun,bsjgubun,char,1; + ڻڵ(),bscode,bscode,char,6; + ڻڵ(),bjcode,bjcode,char,3; + end + t1954OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ڻ(),bsprice,bsprice,long,8; + ڻ(),bjprice,bjprice,float,8.2; + ϴ񱸺,bsign,bsign,char,1; + ϴ(),bschange,bschange,long,8; + ϴ(),bjchange,bjchange,float,8.2; + ,bdiff,bdiff,float,6.2; + ڻŷ,bvolume,bvolume,float,12; + иƼ,parity,parity,float,6.2; + e.,egearing,egearing,float,6.2; + ̾,premium,premium,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + Moneyness,mness,mness,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1954 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1955.res b/ls_sample/sample_python/Res/t1955.res new file mode 100644 index 0000000..ce77a87 --- /dev/null +++ b/ls_sample/sample_python/Res/t1955.res @@ -0,0 +1,95 @@ +BEGIN_FUNCTION_MAP + .Func,ELWǥ˻(t1955),t1955,attr,block,headtype=A; + BEGIN_DATA_MAP + t1955InBlock,Է,input; + begin + ڻchk,chkitem,chkitem,char,1; + ڻڵ,cbitem,cbitem,char,12; + chk,chkissuer,chkissuer,char,1; + ,cbissuer,cbissuer,char,12; + Ǹchk,chkcallput,chkcallput,char,1; + Ǹ(call:01.put:02),cbcallput,cbcallput,char,2; + 簡chk,chkexec,chkexec,char,1; + 簡(>=:1.<=:2),cbexec,cbexec,char,1; + chk,chktype,chktype,char,1; + ,cbtype,cbtype,char,2; + chk,chksettle,chksettle,char,1; + ,cbsettle,cbsettle,char,2; + chk,chklast,chklast,char,1; + ,cblast,cblast,char,6; + 簡chk,chkelwexec,chkelwexec,char,1; + 簡̻,elwexecs,elwexecs,float,10.2; + 簡,elwexece,elwexece,float,10.2; + ŷchk,chkvolume,chkvolume,char,1; + ŷ̻,volumes,volumes,float,12; + ŷ,volumee,volumee,float,12; + chk,chkrate,chkrate,char,1; + ̻,rates,rates,float,6.2; + ,ratee,ratee,float,6.2; + ̾chk,chkpremium,chkpremium,char,1; + ̻̾,premiums,premiums,float,6.2; + ̾,premiume,premiume,float,6.2; + иƼchk,chkparity,chkparity,char,1; + иƼ̻,paritys,paritys,float,6.2; + иƼ,paritye,paritye,float,6.2; + ͺбchk,chkberate,chkberate,char,1; + ͺб̻,berates,berates,float,6.2; + ͺб,beratee,beratee,float,6.2; + ںchk,chkcapt,chkcapt,char,1; + ں̻,capts,capts,float,6.2; + ں,capte,capte,float,6.2; + e.chk,chkegearing,chkegearing,char,1; + e.̻,egearings,egearings,float,6.2; + e.,egearinge,egearinge,float,6.2; + chk,chkgearing,chkgearing,char,1; + ̻,gearings,gearings,float,6.2; + ,gearinge,gearinge,float,6.2; + Ÿchk,chkdelta,chkdelta,char,1; + Ÿ̻,deltas,deltas,float,10.6; + Ÿ,deltae,deltae,float,10.6; + Ÿchk,chktheta,chktheta,char,1; + Ÿ̻,thetas,thetas,float,10.6; + Ÿ,thetae,thetae,float,10.6; + ŷchk,chkduedate,chkduedate,char,1; + ŷ̻,duedates,duedates,char,8; + ŷ,duedatee,duedatee,char,8; + chk,chkkoba,chkkoba,char,1; + (0:ü1:Ḹ2:),cbkoba,cbkoba,char,1; + end + t1955OutBlock,,output; + begin + 񰹼,cnt,cnt,long,4; + end + t1955OutBlock1,1,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + ,issuernmk,issuernmk,char,40; + ڻڵ,itemcode,itemcode,char,12; + /Dz,cpgubun,cpgubun,char,2; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ϰŷ,jnilvolume,jnilvolume,float,12; + 簡,elwexec,elwexec,float,10.2; + ڻ,item,item,char,20; + ڻ갡,bprice,bprice,float,10.2; + ϴ񱸺,bsign,bsign,char,1; + ϴ,bchange,bchange,float,10.2; + ʵ,bdiff,bdiff,float,6.2; + ̾,premium,premium,float,6.2; + иƼ,parity,parity,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + e.,egearing,egearing,float,6.2; + ,gearing,gearing,float,6.2; + ŷ,lastdate,lastdate,char,8; + Ÿ,delta,delta,float,10.6; + Ÿ,theta,theta,float,10.6; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1955 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1955_2.res b/ls_sample/sample_python/Res/t1955_2.res new file mode 100644 index 0000000..ce77a87 --- /dev/null +++ b/ls_sample/sample_python/Res/t1955_2.res @@ -0,0 +1,95 @@ +BEGIN_FUNCTION_MAP + .Func,ELWǥ˻(t1955),t1955,attr,block,headtype=A; + BEGIN_DATA_MAP + t1955InBlock,Է,input; + begin + ڻchk,chkitem,chkitem,char,1; + ڻڵ,cbitem,cbitem,char,12; + chk,chkissuer,chkissuer,char,1; + ,cbissuer,cbissuer,char,12; + Ǹchk,chkcallput,chkcallput,char,1; + Ǹ(call:01.put:02),cbcallput,cbcallput,char,2; + 簡chk,chkexec,chkexec,char,1; + 簡(>=:1.<=:2),cbexec,cbexec,char,1; + chk,chktype,chktype,char,1; + ,cbtype,cbtype,char,2; + chk,chksettle,chksettle,char,1; + ,cbsettle,cbsettle,char,2; + chk,chklast,chklast,char,1; + ,cblast,cblast,char,6; + 簡chk,chkelwexec,chkelwexec,char,1; + 簡̻,elwexecs,elwexecs,float,10.2; + 簡,elwexece,elwexece,float,10.2; + ŷchk,chkvolume,chkvolume,char,1; + ŷ̻,volumes,volumes,float,12; + ŷ,volumee,volumee,float,12; + chk,chkrate,chkrate,char,1; + ̻,rates,rates,float,6.2; + ,ratee,ratee,float,6.2; + ̾chk,chkpremium,chkpremium,char,1; + ̻̾,premiums,premiums,float,6.2; + ̾,premiume,premiume,float,6.2; + иƼchk,chkparity,chkparity,char,1; + иƼ̻,paritys,paritys,float,6.2; + иƼ,paritye,paritye,float,6.2; + ͺбchk,chkberate,chkberate,char,1; + ͺб̻,berates,berates,float,6.2; + ͺб,beratee,beratee,float,6.2; + ںchk,chkcapt,chkcapt,char,1; + ں̻,capts,capts,float,6.2; + ں,capte,capte,float,6.2; + e.chk,chkegearing,chkegearing,char,1; + e.̻,egearings,egearings,float,6.2; + e.,egearinge,egearinge,float,6.2; + chk,chkgearing,chkgearing,char,1; + ̻,gearings,gearings,float,6.2; + ,gearinge,gearinge,float,6.2; + Ÿchk,chkdelta,chkdelta,char,1; + Ÿ̻,deltas,deltas,float,10.6; + Ÿ,deltae,deltae,float,10.6; + Ÿchk,chktheta,chktheta,char,1; + Ÿ̻,thetas,thetas,float,10.6; + Ÿ,thetae,thetae,float,10.6; + ŷchk,chkduedate,chkduedate,char,1; + ŷ̻,duedates,duedates,char,8; + ŷ,duedatee,duedatee,char,8; + chk,chkkoba,chkkoba,char,1; + (0:ü1:Ḹ2:),cbkoba,cbkoba,char,1; + end + t1955OutBlock,,output; + begin + 񰹼,cnt,cnt,long,4; + end + t1955OutBlock1,1,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + ,issuernmk,issuernmk,char,40; + ڻڵ,itemcode,itemcode,char,12; + /Dz,cpgubun,cpgubun,char,2; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ϰŷ,jnilvolume,jnilvolume,float,12; + 簡,elwexec,elwexec,float,10.2; + ڻ,item,item,char,20; + ڻ갡,bprice,bprice,float,10.2; + ϴ񱸺,bsign,bsign,char,1; + ϴ,bchange,bchange,float,10.2; + ʵ,bdiff,bdiff,float,6.2; + ̾,premium,premium,float,6.2; + иƼ,parity,parity,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + e.,egearing,egearing,float,6.2; + ,gearing,gearing,float,6.2; + ŷ,lastdate,lastdate,char,8; + Ÿ,delta,delta,float,10.6; + Ÿ,theta,theta,float,10.6; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1955 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1956.res b/ls_sample/sample_python/Res/t1956.res new file mode 100644 index 0000000..983b540 --- /dev/null +++ b/ls_sample/sample_python/Res/t1956.res @@ -0,0 +1,106 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡(Ȯ޾)ȸ(t1956),t1956,attr,block,headtype=A; + BEGIN_DATA_MAP + t1956InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1956OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + üð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,cvolume,cvolume,long,10; + ŷ,volume,volume,float,12; + ذ,recprice,recprice,long,8; + ,avg,avg,long,8; + ϰŷ,jnilvolume,jnilvolume,float,12; + ϵðŷ,jvolume,jvolume,float,12; + ,jnilclose,jnilclose,long,8; + ŷ,volumechg,volumechg,float,12; + ŷ,volumediff,volumediff,float,6.2; + ð,open,open,long,8; + ð,odiff,odiff,float,6.2; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ,hdiff,hdiff,float,6.2; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ,ldiff,ldiff,float,6.2; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdiff,high52wdiff,float,6.2; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdiff,low52wdiff,float,6.2; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + ֽļ(õ),listing,listing,float,12; + ,memedan,memedan,char,5; + ȸ,vol,vol,float,6.2; + иƼ,parity,parity,float,8.2; + ͺб,berate,berate,float,8.2; + ,gearing,gearing,float,8.2; + 簡,elwexec,elwexec,float,8.2; + డ,issueprice,issueprice,long,8; + ȯ,convrate,convrate,float,12.4; + ŷ,lastdate,lastdate,char,8; + ں,capt,capt,float,8.2; + e.,egearing,egearing,float,8.2; + ̾,premium,premium,float,8.2; + ,spread,spread,float,6.2; + ִ뽺,espread,espread,float,6.2; + ̷а,theoryprice,theoryprice,float,10.2; + 纯,impv,impv,float,6.2; + ,moneyness,moneyness,char,1; + Ÿ,delt,delt,float,8.6; + ,gama,gama,float,8.6; + ,vega,vega,float,13.6; + Ÿ,ceta,ceta,float,13.6; + ,rhox,rhox,float,13.6; + ϼ,bjandatecnt,bjandatecnt,long,4; + 簳,mmsdate,mmsdate,char,8; + ,mmedate,mmedate,char,8; + ,payday,payday,char,8; + ,listdate,listdate,char,8; + LPȸ,lpmem,lpmem,char,20; + LP,lp_holdvol,lp_holdvol,float,12; + ڻڵ,bcode,bcode,char,6; + ڻ걸,bgubun,bgubun,char,1; + ڻ簡,bprice,bprice,long,8; + ڻϺ񱸺,bsign,bsign,char,1; + ڻϺ,bchange,bchange,long,8; + ڻ,bdiff,bdiff,float,6.2; + ڻŷ,bvolume,bvolume,float,12; + ,info1,info1,char,10; + /޵,info2,info2,char,10; + /屸,info3,info3,char,10; + /ҼDZ,info4,info4,char,12; + 屸,janginfo,janginfo,char,10; + ٽϱ,basketgb,basketgb,char,1; + ٽϰ,basketcnt,basketcnt,long,3; + ELWǸ,elwtype,elwtype,char,2; + ELW,settletype,settletype,char,2; + LPֹɿ,lpord,lpord,char,2; + Ǹ,elwdetail,elwdetail,char,100; + 򰡰ݹ,valuation,valuation,char,100; + Ȯ޾,givemoney,givemoney,float,8.3; + end + t1956OutBlock1,1,output,occurs; + begin + ڻڵ,bskcode,bskcode,char,6; + ڻ,bskbno,bskbno,long,3; + ڻ簡,bskprice,bskprice,long,8; + ڻϺ񱸺,bsksign,bsksign,char,1; + ڻϺ,bskchange,bskchange,long,8; + ڻ,bskdiff,bskdiff,float,6.2; + ڻŷ,bskvolume,bskvolume,float,12; + ڻ,bskjnilclose,bskjnilclose,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1956 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1956_2.res b/ls_sample/sample_python/Res/t1956_2.res new file mode 100644 index 0000000..983b540 --- /dev/null +++ b/ls_sample/sample_python/Res/t1956_2.res @@ -0,0 +1,106 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡(Ȯ޾)ȸ(t1956),t1956,attr,block,headtype=A; + BEGIN_DATA_MAP + t1956InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1956OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + üð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,cvolume,cvolume,long,10; + ŷ,volume,volume,float,12; + ذ,recprice,recprice,long,8; + ,avg,avg,long,8; + ϰŷ,jnilvolume,jnilvolume,float,12; + ϵðŷ,jvolume,jvolume,float,12; + ,jnilclose,jnilclose,long,8; + ŷ,volumechg,volumechg,float,12; + ŷ,volumediff,volumediff,float,6.2; + ð,open,open,long,8; + ð,odiff,odiff,float,6.2; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ,hdiff,hdiff,float,6.2; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ,ldiff,ldiff,float,6.2; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdiff,high52wdiff,float,6.2; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdiff,low52wdiff,float,6.2; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + ֽļ(õ),listing,listing,float,12; + ,memedan,memedan,char,5; + ȸ,vol,vol,float,6.2; + иƼ,parity,parity,float,8.2; + ͺб,berate,berate,float,8.2; + ,gearing,gearing,float,8.2; + 簡,elwexec,elwexec,float,8.2; + డ,issueprice,issueprice,long,8; + ȯ,convrate,convrate,float,12.4; + ŷ,lastdate,lastdate,char,8; + ں,capt,capt,float,8.2; + e.,egearing,egearing,float,8.2; + ̾,premium,premium,float,8.2; + ,spread,spread,float,6.2; + ִ뽺,espread,espread,float,6.2; + ̷а,theoryprice,theoryprice,float,10.2; + 纯,impv,impv,float,6.2; + ,moneyness,moneyness,char,1; + Ÿ,delt,delt,float,8.6; + ,gama,gama,float,8.6; + ,vega,vega,float,13.6; + Ÿ,ceta,ceta,float,13.6; + ,rhox,rhox,float,13.6; + ϼ,bjandatecnt,bjandatecnt,long,4; + 簳,mmsdate,mmsdate,char,8; + ,mmedate,mmedate,char,8; + ,payday,payday,char,8; + ,listdate,listdate,char,8; + LPȸ,lpmem,lpmem,char,20; + LP,lp_holdvol,lp_holdvol,float,12; + ڻڵ,bcode,bcode,char,6; + ڻ걸,bgubun,bgubun,char,1; + ڻ簡,bprice,bprice,long,8; + ڻϺ񱸺,bsign,bsign,char,1; + ڻϺ,bchange,bchange,long,8; + ڻ,bdiff,bdiff,float,6.2; + ڻŷ,bvolume,bvolume,float,12; + ,info1,info1,char,10; + /޵,info2,info2,char,10; + /屸,info3,info3,char,10; + /ҼDZ,info4,info4,char,12; + 屸,janginfo,janginfo,char,10; + ٽϱ,basketgb,basketgb,char,1; + ٽϰ,basketcnt,basketcnt,long,3; + ELWǸ,elwtype,elwtype,char,2; + ELW,settletype,settletype,char,2; + LPֹɿ,lpord,lpord,char,2; + Ǹ,elwdetail,elwdetail,char,100; + 򰡰ݹ,valuation,valuation,char,100; + Ȯ޾,givemoney,givemoney,float,8.3; + end + t1956OutBlock1,1,output,occurs; + begin + ڻڵ,bskcode,bskcode,char,6; + ڻ,bskbno,bskbno,long,3; + ڻ簡,bskprice,bskprice,long,8; + ڻϺ񱸺,bsksign,bsksign,char,1; + ڻϺ,bskchange,bskchange,long,8; + ڻ,bskdiff,bskdiff,float,6.2; + ڻŷ,bskvolume,bskvolume,float,12; + ڻ,bskjnilclose,bskjnilclose,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1956 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1958.res b/ls_sample/sample_python/Res/t1958.res new file mode 100644 index 0000000..044d965 --- /dev/null +++ b/ls_sample/sample_python/Res/t1958.res @@ -0,0 +1,87 @@ +BEGIN_FUNCTION_MAP + .Func,ELW(t1958),t1958,attr,block,headtype=A; + BEGIN_DATA_MAP + t1958InBlock,Է,input; + begin + ڵ1,shcode1,shcode1,char,6; + ڵ2,shcode2,shcode2,char,6; + end + t1958OutBlock,,output; + begin + ,hname,hname,char,40; + ڻ,item1,item1,char,12; + ,issuernmk,issuernmk,char,40; + Dz,elwopt,elwopt,char,2; + ,elwtype,elwtype,char,2; + ,settletype,settletype,char,2; + 簡,elwexec,elwexec,float,8.2; + ȯ,convrate,convrate,float,12.4; + ,listing,listing,float,12; + 簳,mmsdate,mmsdate,char,8; + ŷ,lastdate,lastdate,char,8; + ŷϼ,nofdays,nofdays,long,4; + ,payday,payday,char,8; + иƼ,parity,parity,float,6.2; + ̾,premium,premium,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + e.,egearing,egearing,float,6.2; + ,price,price,long,8; + ŷ,volume,volume,float,12; + ,diff,diff,float,6.2; + end + t1958OutBlock1,1,output; + begin + ,hname,hname,char,40; + ڻ,item1,item1,char,12; + ,issuernmk,issuernmk,char,40; + Dz,elwopt,elwopt,char,2; + ,elwtype,elwtype,char,2; + ,settletype,settletype,char,2; + 簡,elwexec,elwexec,float,8.2; + ȯ,convrate,convrate,float,12.4; + ,listing,listing,float,12; + 簳,mmsdate,mmsdate,char,8; + ŷ,lastdate,lastdate,char,8; + ŷϼ,nofdays,nofdays,long,4; + ,payday,payday,char,8; + иƼ,parity,parity,float,6.2; + ̾,premium,premium,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + e.,egearing,egearing,float,6.2; + ,price,price,long,8; + ŷ,volume,volume,float,12; + ,diff,diff,float,6.2; + end + t1958OutBlock2,2,output; + begin + ,hnamecmp,hnamecmp,char,6; + ڻ,item1cmp,item1cmp,char,6; + ,issuernmkcmp,issuernmkcmp,char,6; + Dzк,elwoptcmp,elwoptcmp,char,6; + ĺ,elwtypecmp,elwtypecmp,char,6; + ,settlecmp,settlecmp,char,6; + 簡,elwexeccmp,elwexeccmp,float,8.2; + ȯ,convcmp,convcmp,float,12.4; + ,listingcmp,listingcmp,float,12; + 簳Ϻ,mmsdatecmp,mmsdatecmp,char,6; + ŷϺ,lastdatecmp,lastdatecmp,char,6; + ŷϼ,nofdayscmp,nofdayscmp,char,6; + Ϻ,paydaycmp,paydaycmp,char,6; + иƼ,paritycmp,paritycmp,float,6.2; + ̾,premiumcmp,premiumcmp,float,6.2; + ͺб,beratecmp,beratecmp,float,6.2; + ں,captcmp,captcmp,float,6.2; + ,gearingcmp,gearingcmp,float,6.2; + e.,egearingcmp,egearingcmp,float,6.2; + ݺ,pricecmp,pricecmp,long,8; + ŷ,volumecmp,volumecmp,float,12; + ,diffcmp,diffcmp,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1958 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1958_2.res b/ls_sample/sample_python/Res/t1958_2.res new file mode 100644 index 0000000..044d965 --- /dev/null +++ b/ls_sample/sample_python/Res/t1958_2.res @@ -0,0 +1,87 @@ +BEGIN_FUNCTION_MAP + .Func,ELW(t1958),t1958,attr,block,headtype=A; + BEGIN_DATA_MAP + t1958InBlock,Է,input; + begin + ڵ1,shcode1,shcode1,char,6; + ڵ2,shcode2,shcode2,char,6; + end + t1958OutBlock,,output; + begin + ,hname,hname,char,40; + ڻ,item1,item1,char,12; + ,issuernmk,issuernmk,char,40; + Dz,elwopt,elwopt,char,2; + ,elwtype,elwtype,char,2; + ,settletype,settletype,char,2; + 簡,elwexec,elwexec,float,8.2; + ȯ,convrate,convrate,float,12.4; + ,listing,listing,float,12; + 簳,mmsdate,mmsdate,char,8; + ŷ,lastdate,lastdate,char,8; + ŷϼ,nofdays,nofdays,long,4; + ,payday,payday,char,8; + иƼ,parity,parity,float,6.2; + ̾,premium,premium,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + e.,egearing,egearing,float,6.2; + ,price,price,long,8; + ŷ,volume,volume,float,12; + ,diff,diff,float,6.2; + end + t1958OutBlock1,1,output; + begin + ,hname,hname,char,40; + ڻ,item1,item1,char,12; + ,issuernmk,issuernmk,char,40; + Dz,elwopt,elwopt,char,2; + ,elwtype,elwtype,char,2; + ,settletype,settletype,char,2; + 簡,elwexec,elwexec,float,8.2; + ȯ,convrate,convrate,float,12.4; + ,listing,listing,float,12; + 簳,mmsdate,mmsdate,char,8; + ŷ,lastdate,lastdate,char,8; + ŷϼ,nofdays,nofdays,long,4; + ,payday,payday,char,8; + иƼ,parity,parity,float,6.2; + ̾,premium,premium,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + e.,egearing,egearing,float,6.2; + ,price,price,long,8; + ŷ,volume,volume,float,12; + ,diff,diff,float,6.2; + end + t1958OutBlock2,2,output; + begin + ,hnamecmp,hnamecmp,char,6; + ڻ,item1cmp,item1cmp,char,6; + ,issuernmkcmp,issuernmkcmp,char,6; + Dzк,elwoptcmp,elwoptcmp,char,6; + ĺ,elwtypecmp,elwtypecmp,char,6; + ,settlecmp,settlecmp,char,6; + 簡,elwexeccmp,elwexeccmp,float,8.2; + ȯ,convcmp,convcmp,float,12.4; + ,listingcmp,listingcmp,float,12; + 簳Ϻ,mmsdatecmp,mmsdatecmp,char,6; + ŷϺ,lastdatecmp,lastdatecmp,char,6; + ŷϼ,nofdayscmp,nofdayscmp,char,6; + Ϻ,paydaycmp,paydaycmp,char,6; + иƼ,paritycmp,paritycmp,float,6.2; + ̾,premiumcmp,premiumcmp,float,6.2; + ͺб,beratecmp,beratecmp,float,6.2; + ں,captcmp,captcmp,float,6.2; + ,gearingcmp,gearingcmp,float,6.2; + e.,egearingcmp,egearingcmp,float,6.2; + ݺ,pricecmp,pricecmp,long,8; + ŷ,volumecmp,volumecmp,float,12; + ,diffcmp,diffcmp,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1958 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1959.res b/ls_sample/sample_python/Res/t1959.res new file mode 100644 index 0000000..0d26204 --- /dev/null +++ b/ls_sample/sample_python/Res/t1959.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,LPȸ(t1959),t1959,attr,block,headtype=A; + BEGIN_DATA_MAP + t1959InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1959OutBlock1,LP,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + 簡,price,price,char,12; + ȣ,sign,sign,char,1; + ,change,change,char,12; + ,rate,rate,float,5.2; + ŷ,volume,volume,char,12; + ŷ,value,value,char,12; + LPֹɿ,lp_gb,lp_gb,char,4; + LPȸ1,lp_mem_nm1,lp_mem_nm1,char,20; + LPȸ2,lp_mem_nm2,lp_mem_nm2,char,20; + LPȸ3,lp_mem_nm3,lp_mem_nm3,char,20; + LPȸ4,lp_mem_nm4,lp_mem_nm4,char,20; + LPȸ5,lp_mem_nm5,lp_mem_nm5,char,20; + LPּȣ,lp_min_qty,lp_min_qty,char,10; + LP,lp_st_date,lp_st_date,char,8; + LP,lp_end_date,lp_end_date,char,8; + LP,lp_spread,lp_spread,float,5.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1959 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1959_2.res b/ls_sample/sample_python/Res/t1959_2.res new file mode 100644 index 0000000..0d26204 --- /dev/null +++ b/ls_sample/sample_python/Res/t1959_2.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,LPȸ(t1959),t1959,attr,block,headtype=A; + BEGIN_DATA_MAP + t1959InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1959OutBlock1,LP,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + 簡,price,price,char,12; + ȣ,sign,sign,char,1; + ,change,change,char,12; + ,rate,rate,float,5.2; + ŷ,volume,volume,char,12; + ŷ,value,value,char,12; + LPֹɿ,lp_gb,lp_gb,char,4; + LPȸ1,lp_mem_nm1,lp_mem_nm1,char,20; + LPȸ2,lp_mem_nm2,lp_mem_nm2,char,20; + LPȸ3,lp_mem_nm3,lp_mem_nm3,char,20; + LPȸ4,lp_mem_nm4,lp_mem_nm4,char,20; + LPȸ5,lp_mem_nm5,lp_mem_nm5,char,20; + LPּȣ,lp_min_qty,lp_min_qty,char,10; + LP,lp_st_date,lp_st_date,char,8; + LP,lp_end_date,lp_end_date,char,8; + LP,lp_spread,lp_spread,float,5.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1959 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1960.res b/ls_sample/sample_python/Res/t1960.res new file mode 100644 index 0000000..38761e9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1960.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,ELW(t1960),t1960,attr,block,headtype=A; + BEGIN_DATA_MAP + t1960InBlock,⺻Է,input; + begin + ϶(0:1:϶),gubun,gubun,char,1; + Ǹ(00:EX01:02:Dz'':ü),ggubun,ggubun,char,2; + ڻ,itemcode,itemcode,char,12; + ȸ,lastdate,lastdate,char,8; + ,exgubun,exgubun,char,6; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + ϼ,sjanday,sjanday,long,8; + ϼ,ejanday,ejanday,long,8; + IDX,idx,idx,long,4; + end + t1960OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1960OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,double,12.0; + 簡,elwexec,elwexec,double,10.2; + ȯ,convrate,convrate,double,12.4; + ,lastdate,lastdate,char,8; + ڻڵ,itemcode,itemcode,char,12; + ڻڵ,itemshcode,itemshcode,char,9; + ڻ,itemname,itemname,char,20; + ڻ簡,itemprice,itemprice,char,10; + ڻ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,char,10; + ڻ,itemdiff,itemdiff,double,6.2; + ELWڵ,elwshcode,elwshcode,char,6; + ͺб,bepoint,bepoint,double,12.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1960 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1960_2.res b/ls_sample/sample_python/Res/t1960_2.res new file mode 100644 index 0000000..38761e9 --- /dev/null +++ b/ls_sample/sample_python/Res/t1960_2.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,ELW(t1960),t1960,attr,block,headtype=A; + BEGIN_DATA_MAP + t1960InBlock,⺻Է,input; + begin + ϶(0:1:϶),gubun,gubun,char,1; + Ǹ(00:EX01:02:Dz'':ü),ggubun,ggubun,char,2; + ڻ,itemcode,itemcode,char,12; + ȸ,lastdate,lastdate,char,8; + ,exgubun,exgubun,char,6; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + ϼ,sjanday,sjanday,long,8; + ϼ,ejanday,ejanday,long,8; + IDX,idx,idx,long,4; + end + t1960OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1960OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,double,12.0; + 簡,elwexec,elwexec,double,10.2; + ȯ,convrate,convrate,double,12.4; + ,lastdate,lastdate,char,8; + ڻڵ,itemcode,itemcode,char,12; + ڻڵ,itemshcode,itemshcode,char,9; + ڻ,itemname,itemname,char,20; + ڻ簡,itemprice,itemprice,char,10; + ڻ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,char,10; + ڻ,itemdiff,itemdiff,double,6.2; + ELWڵ,elwshcode,elwshcode,char,6; + ͺб,bepoint,bepoint,double,12.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1960 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1961.res b/ls_sample/sample_python/Res/t1961.res new file mode 100644 index 0000000..9b7fbcb --- /dev/null +++ b/ls_sample/sample_python/Res/t1961.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,ELWŷ(t1961),t1961,attr,block,headtype=A; + BEGIN_DATA_MAP + t1961InBlock,⺻Է,input; + begin + (0:1:),gubun,gubun,char,1; + Ǹ(00:EX01:02:Dz'':ü),ggubun,ggubun,char,2; + ڻ,itemcode,itemcode,char,12; + ȸ,lastdate,lastdate,char,8; + ,exgubun,exgubun,char,6; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + ϼ,sjanday,sjanday,long,8; + ϼ,ejanday,ejanday,long,8; + IDX,idx,idx,long,4; + end + t1961OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1961OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,double,12.0; + ϰŷ,jnilvolume,jnilvolume,double,12.0; + 簡,elwexec,elwexec,double,10.2; + ȯ,convrate,convrate,double,12.4; + ,lastdate,lastdate,char,8; + ڻڵ,itemcode,itemcode,char,12; + ڻڵ,itemshcode,itemshcode,char,9; + ڻ,itemname,itemname,char,20; + ڻ簡,itemprice,itemprice,char,10; + ڻ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,char,10; + ڻ,itemdiff,itemdiff,double,6.2; + ELWڵ,elwshcode,elwshcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1961_2.res b/ls_sample/sample_python/Res/t1961_2.res new file mode 100644 index 0000000..9b7fbcb --- /dev/null +++ b/ls_sample/sample_python/Res/t1961_2.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,ELWŷ(t1961),t1961,attr,block,headtype=A; + BEGIN_DATA_MAP + t1961InBlock,⺻Է,input; + begin + (0:1:),gubun,gubun,char,1; + Ǹ(00:EX01:02:Dz'':ü),ggubun,ggubun,char,2; + ڻ,itemcode,itemcode,char,12; + ȸ,lastdate,lastdate,char,8; + ,exgubun,exgubun,char,6; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + ϼ,sjanday,sjanday,long,8; + ϼ,ejanday,ejanday,long,8; + IDX,idx,idx,long,4; + end + t1961OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1961OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,double,12.0; + ϰŷ,jnilvolume,jnilvolume,double,12.0; + 簡,elwexec,elwexec,double,10.2; + ȯ,convrate,convrate,double,12.4; + ,lastdate,lastdate,char,8; + ڻڵ,itemcode,itemcode,char,12; + ڻڵ,itemshcode,itemshcode,char,9; + ڻ,itemname,itemname,char,20; + ڻ簡,itemprice,itemprice,char,10; + ڻ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,char,10; + ڻ,itemdiff,itemdiff,double,6.2; + ELWڵ,elwshcode,elwshcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1964.res b/ls_sample/sample_python/Res/t1964.res new file mode 100644 index 0000000..533a63e --- /dev/null +++ b/ls_sample/sample_python/Res/t1964.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,ELW(t1964),t1964,attr,block,headtype=A; + BEGIN_DATA_MAP + t1964InBlock,⺻Է,input; + begin + ڻڵ,item,item,char,12; + ,issuercd,issuercd,char,12; + ,lastmonth,lastmonth,char,6; + Dz,elwopt,elwopt,char,1; + Ӵϱ,atmgubun,atmgubun,char,1; + Ǹ,elwtype,elwtype,char,2; + ,settletype,settletype,char,2; + ڻ걸,elwexecgubun,elwexecgubun,char,1; + ۺ,fromrat,fromrat,char,5; + ,torat,torat,char,5; + ŷ,volume,volume,char,12; + end + t1964OutBlock1,1,output,occurs; + begin + ELWڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + ڻڵ,item1,item1,char,6; + ڻ,itemnm,itemnm,char,20; + ,issuernmk,issuernmk,char,40; + Dz,elwopt,elwopt,char,4; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + 簡,elwexec,elwexec,float,10.2; + ϼ,jandatecnt,jandatecnt,long,8; + ȯ,convrate,convrate,float,8.4; + ŷ,lastdate,lastdate,char,8; + 簳,mmsdate,mmsdate,char,8; + ,payday,payday,char,8; + ,listing,listing,long,8; + Ӵϱ,atmgbnm,atmgbnm,char,10; + иƼ,parity,parity,float,6.2; + ̾,preminum,preminum,float,10.2; + ,spread,spread,float,3.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + e,egearing,egearing,float,6.2; + ڻ簡,itemprice,itemprice,long,8; + ڻϴ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,long,8; + ڻ,itemdiff,itemdiff,float,6.2; + ڻŷ,itemvolume,itemvolume,long,12; + ϰŷ,jnilvolume,jnilvolume,long,12; + ̷а,theoryprice,theoryprice,float,10.2; + LP,lp_rate,lp_rate,float,5.2; + 纯,impv,impv,float,6.2; + Ÿ,delta,delta,float,10.6; + Ÿ,theta,theta,float,10.6; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1964 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1964_2.res b/ls_sample/sample_python/Res/t1964_2.res new file mode 100644 index 0000000..533a63e --- /dev/null +++ b/ls_sample/sample_python/Res/t1964_2.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,ELW(t1964),t1964,attr,block,headtype=A; + BEGIN_DATA_MAP + t1964InBlock,⺻Է,input; + begin + ڻڵ,item,item,char,12; + ,issuercd,issuercd,char,12; + ,lastmonth,lastmonth,char,6; + Dz,elwopt,elwopt,char,1; + Ӵϱ,atmgubun,atmgubun,char,1; + Ǹ,elwtype,elwtype,char,2; + ,settletype,settletype,char,2; + ڻ걸,elwexecgubun,elwexecgubun,char,1; + ۺ,fromrat,fromrat,char,5; + ,torat,torat,char,5; + ŷ,volume,volume,char,12; + end + t1964OutBlock1,1,output,occurs; + begin + ELWڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + ڻڵ,item1,item1,char,6; + ڻ,itemnm,itemnm,char,20; + ,issuernmk,issuernmk,char,40; + Dz,elwopt,elwopt,char,4; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + 簡,elwexec,elwexec,float,10.2; + ϼ,jandatecnt,jandatecnt,long,8; + ȯ,convrate,convrate,float,8.4; + ŷ,lastdate,lastdate,char,8; + 簳,mmsdate,mmsdate,char,8; + ,payday,payday,char,8; + ,listing,listing,long,8; + Ӵϱ,atmgbnm,atmgbnm,char,10; + иƼ,parity,parity,float,6.2; + ̾,preminum,preminum,float,10.2; + ,spread,spread,float,3.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + e,egearing,egearing,float,6.2; + ڻ簡,itemprice,itemprice,long,8; + ڻϴ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,long,8; + ڻ,itemdiff,itemdiff,float,6.2; + ڻŷ,itemvolume,itemvolume,long,12; + ϰŷ,jnilvolume,jnilvolume,long,12; + ̷а,theoryprice,theoryprice,float,10.2; + LP,lp_rate,lp_rate,float,5.2; + 纯,impv,impv,float,6.2; + Ÿ,delta,delta,float,10.6; + Ÿ,theta,theta,float,10.6; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1964 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1966.res b/ls_sample/sample_python/Res/t1966.res new file mode 100644 index 0000000..81c3b85 --- /dev/null +++ b/ls_sample/sample_python/Res/t1966.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,ELWŷݻ(t1966),t1966,attr,block,headtype=A; + BEGIN_DATA_MAP + t1966InBlock,⺻Է,input; + begin + (0:1:),gubun,gubun,char,1; + Ǹ(00:EX01:02:Dz'':ü),ggubun,ggubun,char,2; + ڻ,itemcode,itemcode,char,12; + ȸ,lastdate,lastdate,char,8; + ,exgubun,exgubun,char,6; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + ϼ,sjanday,sjanday,long,8; + ϼ,ejanday,ejanday,long,8; + IDX,idx,idx,long,4; + end + t1966OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1966OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,value,value,double,12.0; + ϰŷ,jnilvalue,jnilvalue,double,12.0; + 簡,elwexec,elwexec,double,10.2; + ȯ,convrate,convrate,double,12.4; + ,lastdate,lastdate,char,8; + ڻڵ,itemcode,itemcode,char,12; + ڻڵ,itemshcode,itemshcode,char,9; + ڻ,itemname,itemname,char,20; + ڻ簡,itemprice,itemprice,char,10; + ڻ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,char,10; + ڻ,itemdiff,itemdiff,double,6.2; + ELWڵ,elwshcode,elwshcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1966_2.res b/ls_sample/sample_python/Res/t1966_2.res new file mode 100644 index 0000000..81c3b85 --- /dev/null +++ b/ls_sample/sample_python/Res/t1966_2.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,ELWŷݻ(t1966),t1966,attr,block,headtype=A; + BEGIN_DATA_MAP + t1966InBlock,⺻Է,input; + begin + (0:1:),gubun,gubun,char,1; + Ǹ(00:EX01:02:Dz'':ü),ggubun,ggubun,char,2; + ڻ,itemcode,itemcode,char,12; + ȸ,lastdate,lastdate,char,8; + ,exgubun,exgubun,char,6; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + ϼ,sjanday,sjanday,long,8; + ϼ,ejanday,ejanday,long,8; + IDX,idx,idx,long,4; + end + t1966OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1966OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,value,value,double,12.0; + ϰŷ,jnilvalue,jnilvalue,double,12.0; + 簡,elwexec,elwexec,double,10.2; + ȯ,convrate,convrate,double,12.4; + ,lastdate,lastdate,char,8; + ڻڵ,itemcode,itemcode,char,12; + ڻڵ,itemshcode,itemshcode,char,9; + ڻ,itemname,itemname,char,20; + ڻ簡,itemprice,itemprice,char,10; + ڻ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,char,10; + ڻ,itemdiff,itemdiff,double,6.2; + ELWڵ,elwshcode,elwshcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1969.res b/ls_sample/sample_python/Res/t1969.res new file mode 100644 index 0000000..a39c980 --- /dev/null +++ b/ls_sample/sample_python/Res/t1969.res @@ -0,0 +1,104 @@ +BEGIN_FUNCTION_MAP + .Func,ELWǥ˻(t1969),t1969,attr,block,headtype=A; + BEGIN_DATA_MAP + t1969InBlock,Է,input; + begin + ڻchk,chkitem,chkitem,char,1; + ڻڵ,cbitem,cbitem,char,12; + chk,chkissuer,chkissuer,char,1; + ,cbissuer,cbissuer,char,12; + Ǹchk,chkcallput,chkcallput,char,1; + Ǹ(call:01.put:02),cbcallput,cbcallput,char,2; + 簡chk,chkexec,chkexec,char,1; + 簡(>=:1.<=:2),cbexec,cbexec,char,1; + chk,chktype,chktype,char,1; + ,cbtype,cbtype,char,2; + chk,chksettle,chksettle,char,1; + ,cbsettle,cbsettle,char,2; + chk,chklast,chklast,char,1; + ,cblast,cblast,char,6; + 簡chk,chkelwexec,chkelwexec,char,1; + 簡̻,elwexecs,elwexecs,float,10.2; + 簡,elwexece,elwexece,float,10.2; + ŷchk,chkvolume,chkvolume,char,1; + ŷ̻,volumes,volumes,float,12; + ŷ,volumee,volumee,float,12; + chk,chkrate,chkrate,char,1; + ̻,rates,rates,float,6.2; + ,ratee,ratee,float,6.2; + ̾chk,chkpremium,chkpremium,char,1; + ̻̾,premiums,premiums,float,6.2; + ̾,premiume,premiume,float,6.2; + иƼchk,chkparity,chkparity,char,1; + иƼ̻,paritys,paritys,float,6.2; + иƼ,paritye,paritye,float,6.2; + ͺбchk,chkberate,chkberate,char,1; + ͺб̻,berates,berates,float,6.2; + ͺб,beratee,beratee,float,6.2; + ںchk,chkcapt,chkcapt,char,1; + ں̻,capts,capts,float,6.2; + ں,capte,capte,float,6.2; + e.chk,chkegearing,chkegearing,char,1; + e.̻,egearings,egearings,float,6.2; + e.,egearinge,egearinge,float,6.2; + chk,chkgearing,chkgearing,char,1; + ̻,gearings,gearings,float,6.2; + ,gearinge,gearinge,float,6.2; + Ÿchk,chkdelta,chkdelta,char,1; + Ÿ̻,deltas,deltas,float,10.6; + Ÿ,deltae,deltae,float,10.6; + Ÿchk,chktheta,chktheta,char,1; + Ÿ̻,thetas,thetas,float,10.6; + Ÿ,thetae,thetae,float,10.6; + ŷchk,chkduedate,chkduedate,char,1; + ŷ̻,duedates,duedates,char,8; + ŷ,duedatee,duedatee,char,8; + LP1ƽ,onetickgubun,onetickgubun,char,1; + LP,lp_liquidity,lp_liquidity,char,1; + LPchk,chklp_code,chklp_code,char,1; + LPȸڵ,lp_code,lp_code,char,3; + chk,chkkoba,chkkoba,char,1; + (0:ü1:KOBA2:KOBA),cbkoba,cbkoba,char,1; + end + t1969OutBlock,,output; + begin + 񰹼,cnt,cnt,long,4; + end + t1969OutBlock1,1,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + ,issuernmk,issuernmk,char,40; + ڻڵ,itemcode,itemcode,char,12; + /Dz,cpgubun,cpgubun,char,2; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ϰŷ,jnilvolume,jnilvolume,float,12; + 簡,elwexec,elwexec,float,10.2; + ڻ,item,item,char,20; + ڻ갡,bprice,bprice,float,10.2; + ϴ񱸺,bsign,bsign,char,1; + ϴ,bchange,bchange,float,10.2; + ʵ,bdiff,bdiff,float,6.2; + ̾,premium,premium,float,6.2; + иƼ,parity,parity,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + e.,egearing,egearing,float,6.2; + ,gearing,gearing,float,6.2; + ŷ,lastdate,lastdate,char,8; + Ÿ,delta,delta,float,10.6; + Ÿ,theta,theta,float,10.6; + LPȸ,lpname,lpname,char,40; + LP,lphold,lphold,float,6.2; + ϼ,bjandatecnt,bjandatecnt,long,4; + ȯ,convrate,convrate,float,8.4; + 1ƽȯ,tickvalue,tickvalue,float,10.2; + ,kasis,kasis,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1969_2.res b/ls_sample/sample_python/Res/t1969_2.res new file mode 100644 index 0000000..a39c980 --- /dev/null +++ b/ls_sample/sample_python/Res/t1969_2.res @@ -0,0 +1,104 @@ +BEGIN_FUNCTION_MAP + .Func,ELWǥ˻(t1969),t1969,attr,block,headtype=A; + BEGIN_DATA_MAP + t1969InBlock,Է,input; + begin + ڻchk,chkitem,chkitem,char,1; + ڻڵ,cbitem,cbitem,char,12; + chk,chkissuer,chkissuer,char,1; + ,cbissuer,cbissuer,char,12; + Ǹchk,chkcallput,chkcallput,char,1; + Ǹ(call:01.put:02),cbcallput,cbcallput,char,2; + 簡chk,chkexec,chkexec,char,1; + 簡(>=:1.<=:2),cbexec,cbexec,char,1; + chk,chktype,chktype,char,1; + ,cbtype,cbtype,char,2; + chk,chksettle,chksettle,char,1; + ,cbsettle,cbsettle,char,2; + chk,chklast,chklast,char,1; + ,cblast,cblast,char,6; + 簡chk,chkelwexec,chkelwexec,char,1; + 簡̻,elwexecs,elwexecs,float,10.2; + 簡,elwexece,elwexece,float,10.2; + ŷchk,chkvolume,chkvolume,char,1; + ŷ̻,volumes,volumes,float,12; + ŷ,volumee,volumee,float,12; + chk,chkrate,chkrate,char,1; + ̻,rates,rates,float,6.2; + ,ratee,ratee,float,6.2; + ̾chk,chkpremium,chkpremium,char,1; + ̻̾,premiums,premiums,float,6.2; + ̾,premiume,premiume,float,6.2; + иƼchk,chkparity,chkparity,char,1; + иƼ̻,paritys,paritys,float,6.2; + иƼ,paritye,paritye,float,6.2; + ͺбchk,chkberate,chkberate,char,1; + ͺб̻,berates,berates,float,6.2; + ͺб,beratee,beratee,float,6.2; + ںchk,chkcapt,chkcapt,char,1; + ں̻,capts,capts,float,6.2; + ں,capte,capte,float,6.2; + e.chk,chkegearing,chkegearing,char,1; + e.̻,egearings,egearings,float,6.2; + e.,egearinge,egearinge,float,6.2; + chk,chkgearing,chkgearing,char,1; + ̻,gearings,gearings,float,6.2; + ,gearinge,gearinge,float,6.2; + Ÿchk,chkdelta,chkdelta,char,1; + Ÿ̻,deltas,deltas,float,10.6; + Ÿ,deltae,deltae,float,10.6; + Ÿchk,chktheta,chktheta,char,1; + Ÿ̻,thetas,thetas,float,10.6; + Ÿ,thetae,thetae,float,10.6; + ŷchk,chkduedate,chkduedate,char,1; + ŷ̻,duedates,duedates,char,8; + ŷ,duedatee,duedatee,char,8; + LP1ƽ,onetickgubun,onetickgubun,char,1; + LP,lp_liquidity,lp_liquidity,char,1; + LPchk,chklp_code,chklp_code,char,1; + LPȸڵ,lp_code,lp_code,char,3; + chk,chkkoba,chkkoba,char,1; + (0:ü1:KOBA2:KOBA),cbkoba,cbkoba,char,1; + end + t1969OutBlock,,output; + begin + 񰹼,cnt,cnt,long,4; + end + t1969OutBlock1,1,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + ,issuernmk,issuernmk,char,40; + ڻڵ,itemcode,itemcode,char,12; + /Dz,cpgubun,cpgubun,char,2; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ϰŷ,jnilvolume,jnilvolume,float,12; + 簡,elwexec,elwexec,float,10.2; + ڻ,item,item,char,20; + ڻ갡,bprice,bprice,float,10.2; + ϴ񱸺,bsign,bsign,char,1; + ϴ,bchange,bchange,float,10.2; + ʵ,bdiff,bdiff,float,6.2; + ̾,premium,premium,float,6.2; + иƼ,parity,parity,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + e.,egearing,egearing,float,6.2; + ,gearing,gearing,float,6.2; + ŷ,lastdate,lastdate,char,8; + Ÿ,delta,delta,float,10.6; + Ÿ,theta,theta,float,10.6; + LPȸ,lpname,lpname,char,40; + LP,lphold,lphold,float,6.2; + ϼ,bjandatecnt,bjandatecnt,long,4; + ȯ,convrate,convrate,float,8.4; + 1ƽȯ,tickvalue,tickvalue,float,10.2; + ,kasis,kasis,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1971.res b/ls_sample/sample_python/Res/t1971.res new file mode 100644 index 0000000..f750ed0 --- /dev/null +++ b/ls_sample/sample_python/Res/t1971.res @@ -0,0 +1,121 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡ȣȸ(t1971),t1971,attr,block,headtype=A; + BEGIN_DATA_MAP + t1971InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1971OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,12; + LPŵȣ1,lp_offerrem1,lp_offerrem1,long,12; + żȣ1,bidrem1,bidrem1,long,12; + LPżȣ1,lp_bidrem1,lp_bidrem1,long,12; + ŵ1,preoffercha1,preoffercha1,long,12; + ż1,prebidcha1,prebidcha1,long,12; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,12; + LPŵȣ2,lp_offerrem2,lp_offerrem2,long,12; + żȣ2,bidrem2,bidrem2,long,12; + LPżȣ2,lp_bidrem2,lp_bidrem2,long,12; + ŵ2,preoffercha2,preoffercha2,long,12; + ż2,prebidcha2,prebidcha2,long,12; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,12; + LPŵȣ3,lp_offerrem3,lp_offerrem3,long,12; + żȣ3,bidrem3,bidrem3,long,12; + LPżȣ3,lp_bidrem3,lp_bidrem3,long,12; + ŵ3,preoffercha3,preoffercha3,long,12; + ż3,prebidcha3,prebidcha3,long,12; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,12; + LPŵȣ4,lp_offerrem4,lp_offerrem4,long,12; + żȣ4,bidrem4,bidrem4,long,12; + LPżȣ4,lp_bidrem4,lp_bidrem4,long,12; + ŵ4,preoffercha4,preoffercha4,long,12; + ż4,prebidcha4,prebidcha4,long,12; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,12; + LPŵȣ5,lp_offerrem5,lp_offerrem5,long,12; + żȣ5,bidrem5,bidrem5,long,12; + LPżȣ5,lp_bidrem5,lp_bidrem5,long,12; + ŵ5,preoffercha5,preoffercha5,long,12; + ż5,prebidcha5,prebidcha5,long,12; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,12; + LPŵȣ6,lp_offerrem6,lp_offerrem6,long,12; + żȣ6,bidrem6,bidrem6,long,12; + LPżȣ6,lp_bidrem6,lp_bidrem6,long,12; + ŵ6,preoffercha6,preoffercha6,long,12; + ż6,prebidcha6,prebidcha6,long,12; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,12; + LPŵȣ7,lp_offerrem7,lp_offerrem7,long,12; + żȣ7,bidrem7,bidrem7,long,12; + LPżȣ7,lp_bidrem7,lp_bidrem7,long,12; + ŵ7,preoffercha7,preoffercha7,long,12; + ż7,prebidcha7,prebidcha7,long,12; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,12; + LPŵȣ8,lp_offerrem8,lp_offerrem8,long,12; + żȣ8,bidrem8,bidrem8,long,12; + LPżȣ8,lp_bidrem8,lp_bidrem8,long,12; + ŵ8,preoffercha8,preoffercha8,long,12; + ż8,prebidcha8,prebidcha8,long,12; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,12; + LPŵȣ9,lp_offerrem9,lp_offerrem9,long,12; + żȣ9,bidrem9,bidrem9,long,12; + LPżȣ9,lp_bidrem9,lp_bidrem9,long,12; + ŵ9,preoffercha9,preoffercha9,long,12; + ż9,prebidcha9,prebidcha9,long,12; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,12; + LPŵȣ10,lp_offerrem10,lp_offerrem10,long,12; + żȣ10,bidrem10,bidrem10,long,12; + LPżȣ10,lp_bidrem10,lp_bidrem10,long,12; + ŵ10,preoffercha10,preoffercha10,long,12; + ż10,prebidcha10,prebidcha10,long,12; + ŵȣ,offer,offer,long,12; + żȣ,bid,bid,long,12; + ŵ,preoffercha,preoffercha,long,12; + ż,prebidcha,prebidcha,long,12; + Žð,hotime,hotime,char,8; + üᰡ,yeprice,yeprice,long,8; + ü,yevolume,yevolume,float,12; + üϱ,yesign,yesign,char,1; + üϴ,yechange,yechange,long,8; + ü,yediff,yediff,float,6.2; + ðܸŵܷ,tmoffer,tmoffer,long,12; + ðܸżܷ,tmbid,tmbid,long,12; + ñ,ho_status,ho_status,char,1; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ELWǸ(1:ǥ2:3:),invidx,invidx,char,1; + KO,koba_stdprc,koba_stdprc,float,12.2; + KOٵ,koba_acc_rt,koba_acc_rt,float,12.2; + KO߻(Y/N),koba_yn,koba_yn,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1971 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1971_2.res b/ls_sample/sample_python/Res/t1971_2.res new file mode 100644 index 0000000..f750ed0 --- /dev/null +++ b/ls_sample/sample_python/Res/t1971_2.res @@ -0,0 +1,121 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡ȣȸ(t1971),t1971,attr,block,headtype=A; + BEGIN_DATA_MAP + t1971InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1971OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,12; + LPŵȣ1,lp_offerrem1,lp_offerrem1,long,12; + żȣ1,bidrem1,bidrem1,long,12; + LPżȣ1,lp_bidrem1,lp_bidrem1,long,12; + ŵ1,preoffercha1,preoffercha1,long,12; + ż1,prebidcha1,prebidcha1,long,12; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,12; + LPŵȣ2,lp_offerrem2,lp_offerrem2,long,12; + żȣ2,bidrem2,bidrem2,long,12; + LPżȣ2,lp_bidrem2,lp_bidrem2,long,12; + ŵ2,preoffercha2,preoffercha2,long,12; + ż2,prebidcha2,prebidcha2,long,12; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,12; + LPŵȣ3,lp_offerrem3,lp_offerrem3,long,12; + żȣ3,bidrem3,bidrem3,long,12; + LPżȣ3,lp_bidrem3,lp_bidrem3,long,12; + ŵ3,preoffercha3,preoffercha3,long,12; + ż3,prebidcha3,prebidcha3,long,12; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,12; + LPŵȣ4,lp_offerrem4,lp_offerrem4,long,12; + żȣ4,bidrem4,bidrem4,long,12; + LPżȣ4,lp_bidrem4,lp_bidrem4,long,12; + ŵ4,preoffercha4,preoffercha4,long,12; + ż4,prebidcha4,prebidcha4,long,12; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,12; + LPŵȣ5,lp_offerrem5,lp_offerrem5,long,12; + żȣ5,bidrem5,bidrem5,long,12; + LPżȣ5,lp_bidrem5,lp_bidrem5,long,12; + ŵ5,preoffercha5,preoffercha5,long,12; + ż5,prebidcha5,prebidcha5,long,12; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,12; + LPŵȣ6,lp_offerrem6,lp_offerrem6,long,12; + żȣ6,bidrem6,bidrem6,long,12; + LPżȣ6,lp_bidrem6,lp_bidrem6,long,12; + ŵ6,preoffercha6,preoffercha6,long,12; + ż6,prebidcha6,prebidcha6,long,12; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,12; + LPŵȣ7,lp_offerrem7,lp_offerrem7,long,12; + żȣ7,bidrem7,bidrem7,long,12; + LPżȣ7,lp_bidrem7,lp_bidrem7,long,12; + ŵ7,preoffercha7,preoffercha7,long,12; + ż7,prebidcha7,prebidcha7,long,12; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,12; + LPŵȣ8,lp_offerrem8,lp_offerrem8,long,12; + żȣ8,bidrem8,bidrem8,long,12; + LPżȣ8,lp_bidrem8,lp_bidrem8,long,12; + ŵ8,preoffercha8,preoffercha8,long,12; + ż8,prebidcha8,prebidcha8,long,12; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,12; + LPŵȣ9,lp_offerrem9,lp_offerrem9,long,12; + żȣ9,bidrem9,bidrem9,long,12; + LPżȣ9,lp_bidrem9,lp_bidrem9,long,12; + ŵ9,preoffercha9,preoffercha9,long,12; + ż9,prebidcha9,prebidcha9,long,12; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,12; + LPŵȣ10,lp_offerrem10,lp_offerrem10,long,12; + żȣ10,bidrem10,bidrem10,long,12; + LPżȣ10,lp_bidrem10,lp_bidrem10,long,12; + ŵ10,preoffercha10,preoffercha10,long,12; + ż10,prebidcha10,prebidcha10,long,12; + ŵȣ,offer,offer,long,12; + żȣ,bid,bid,long,12; + ŵ,preoffercha,preoffercha,long,12; + ż,prebidcha,prebidcha,long,12; + Žð,hotime,hotime,char,8; + üᰡ,yeprice,yeprice,long,8; + ü,yevolume,yevolume,float,12; + üϱ,yesign,yesign,char,1; + üϴ,yechange,yechange,long,8; + ü,yediff,yediff,float,6.2; + ðܸŵܷ,tmoffer,tmoffer,long,12; + ðܸżܷ,tmbid,tmbid,long,12; + ñ,ho_status,ho_status,char,1; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ELWǸ(1:ǥ2:3:),invidx,invidx,char,1; + KO,koba_stdprc,koba_stdprc,float,12.2; + KOٵ,koba_acc_rt,koba_acc_rt,float,12.2; + KO߻(Y/N),koba_yn,koba_yn,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1971 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1972.res b/ls_sample/sample_python/Res/t1972.res new file mode 100644 index 0000000..1b13d0c --- /dev/null +++ b/ls_sample/sample_python/Res/t1972.res @@ -0,0 +1,63 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡(ŷ)ȸ(t1972),t1972,attr,block,headtype=A; + BEGIN_DATA_MAP + t1972InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1972OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + ǥڵ,expcode,expcode,char,12; + ڵ,shcode,shcode,char,9; + ŵǻڵ1,offerno1,offerno1,char,6; + żǻڵ1,bidno1,bidno1,char,6; + Ѹŵ1,dvol1,dvol1,long,12; + Ѹż1,svol1,svol1,long,12; + ŵ1,dcha1,dcha1,long,12; + ż1,scha1,scha1,long,12; + ŵ1,ddiff1,ddiff1,float,6.2; + ż1,sdiff1,sdiff1,float,6.2; + ŵǻڵ2,offerno2,offerno2,char,6; + żǻڵ2,bidno2,bidno2,char,6; + Ѹŵ2,dvol2,dvol2,long,12; + Ѹż2,svol2,svol2,long,12; + ŵ2,dcha2,dcha2,long,12; + ż2,scha2,scha2,long,12; + ŵ2,ddiff2,ddiff2,float,6.2; + ż2,sdiff2,sdiff2,float,6.2; + ŵǻڵ3,offerno3,offerno3,char,6; + żǻڵ3,bidno3,bidno3,char,6; + Ѹŵ3,dvol3,dvol3,long,12; + Ѹż3,svol3,svol3,long,12; + ŵ3,dcha3,dcha3,long,12; + ż3,scha3,scha3,long,12; + ŵ3,ddiff3,ddiff3,float,6.2; + ż3,sdiff3,sdiff3,float,6.2; + ŵǻڵ4,offerno4,offerno4,char,6; + żǻڵ4,bidno4,bidno4,char,6; + Ѹŵ4,dvol4,dvol4,long,12; + Ѹż4,svol4,svol4,long,12; + ŵ4,dcha4,dcha4,long,12; + ż4,scha4,scha4,long,12; + ŵ4,ddiff4,ddiff4,float,6.2; + ż4,sdiff4,sdiff4,float,6.2; + ŵǻڵ5,offerno5,offerno5,char,6; + żǻڵ5,bidno5,bidno5,char,6; + Ѹŵ5,dvol5,dvol5,long,12; + Ѹż5,svol5,svol5,long,12; + ŵ5,dcha5,dcha5,long,12; + ż5,scha5,scha5,long,12; + ŵ5,ddiff5,ddiff5,float,6.2; + ż5,sdiff5,sdiff5,float,6.2; + ܱŵհ,fwdvl,fwdvl,long,12; + ܱżհ,fwsvl,fwsvl,long,12; + ܱŵ,ftradmdcha,ftradmdcha,long,12; + ܱż,ftradmscha,ftradmscha,long,12; + ܱŵհ,fwddiff,fwddiff,float,6.2; + ܱżհ,fwsdiff,fwsdiff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1972 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1972_2.res b/ls_sample/sample_python/Res/t1972_2.res new file mode 100644 index 0000000..1b13d0c --- /dev/null +++ b/ls_sample/sample_python/Res/t1972_2.res @@ -0,0 +1,63 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡(ŷ)ȸ(t1972),t1972,attr,block,headtype=A; + BEGIN_DATA_MAP + t1972InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1972OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + ǥڵ,expcode,expcode,char,12; + ڵ,shcode,shcode,char,9; + ŵǻڵ1,offerno1,offerno1,char,6; + żǻڵ1,bidno1,bidno1,char,6; + Ѹŵ1,dvol1,dvol1,long,12; + Ѹż1,svol1,svol1,long,12; + ŵ1,dcha1,dcha1,long,12; + ż1,scha1,scha1,long,12; + ŵ1,ddiff1,ddiff1,float,6.2; + ż1,sdiff1,sdiff1,float,6.2; + ŵǻڵ2,offerno2,offerno2,char,6; + żǻڵ2,bidno2,bidno2,char,6; + Ѹŵ2,dvol2,dvol2,long,12; + Ѹż2,svol2,svol2,long,12; + ŵ2,dcha2,dcha2,long,12; + ż2,scha2,scha2,long,12; + ŵ2,ddiff2,ddiff2,float,6.2; + ż2,sdiff2,sdiff2,float,6.2; + ŵǻڵ3,offerno3,offerno3,char,6; + żǻڵ3,bidno3,bidno3,char,6; + Ѹŵ3,dvol3,dvol3,long,12; + Ѹż3,svol3,svol3,long,12; + ŵ3,dcha3,dcha3,long,12; + ż3,scha3,scha3,long,12; + ŵ3,ddiff3,ddiff3,float,6.2; + ż3,sdiff3,sdiff3,float,6.2; + ŵǻڵ4,offerno4,offerno4,char,6; + żǻڵ4,bidno4,bidno4,char,6; + Ѹŵ4,dvol4,dvol4,long,12; + Ѹż4,svol4,svol4,long,12; + ŵ4,dcha4,dcha4,long,12; + ż4,scha4,scha4,long,12; + ŵ4,ddiff4,ddiff4,float,6.2; + ż4,sdiff4,sdiff4,float,6.2; + ŵǻڵ5,offerno5,offerno5,char,6; + żǻڵ5,bidno5,bidno5,char,6; + Ѹŵ5,dvol5,dvol5,long,12; + Ѹż5,svol5,svol5,long,12; + ŵ5,dcha5,dcha5,long,12; + ż5,scha5,scha5,long,12; + ŵ5,ddiff5,ddiff5,float,6.2; + ż5,sdiff5,sdiff5,float,6.2; + ܱŵհ,fwdvl,fwdvl,long,12; + ܱżհ,fwsvl,fwsvl,long,12; + ܱŵ,ftradmdcha,ftradmdcha,long,12; + ܱż,ftradmscha,ftradmscha,long,12; + ܱŵհ,fwddiff,fwddiff,float,6.2; + ܱżհ,fwsdiff,fwsdiff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1972 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1973.res b/ls_sample/sample_python/Res/t1973.res new file mode 100644 index 0000000..2024334 --- /dev/null +++ b/ls_sample/sample_python/Res/t1973.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ELWð뺰üȸ(t1973),t1973,attr,block,headtype=A; + BEGIN_DATA_MAP + t1973InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ðCTS,cts_time,cts_time,char,8; + end + t1973OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,8; + end + t1973OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + üᰡ,yeprice,yeprice,long,8; + üᱸ,yegubun,yegubun,char,1; + 񱸺,jnilysign,jnilysign,char,1; + ,jnilychange,jnilychange,long,8; + ü,yediff,yediff,float,6.2; + üᷮ,yevolume,yevolume,long,12; + ŵüᷮ,ymdvolume,ymdvolume,long,12; + żüᷮ,ymsvolume,ymsvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1973 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1973_2.res b/ls_sample/sample_python/Res/t1973_2.res new file mode 100644 index 0000000..2024334 --- /dev/null +++ b/ls_sample/sample_python/Res/t1973_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ELWð뺰üȸ(t1973),t1973,attr,block,headtype=A; + BEGIN_DATA_MAP + t1973InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ðCTS,cts_time,cts_time,char,8; + end + t1973OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,8; + end + t1973OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + üᰡ,yeprice,yeprice,long,8; + üᱸ,yegubun,yegubun,char,1; + 񱸺,jnilysign,jnilysign,char,1; + ,jnilychange,jnilychange,long,8; + ü,yediff,yediff,float,6.2; + üᷮ,yevolume,yevolume,long,12; + ŵüᷮ,ymdvolume,ymdvolume,long,12; + żüᷮ,ymsvolume,ymsvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1973 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1974.res b/ls_sample/sample_python/Res/t1974.res new file mode 100644 index 0000000..aeee258 --- /dev/null +++ b/ls_sample/sample_python/Res/t1974.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP + .Func,ELWڻ굿(t1974),t1974,attr,block,headtype=A; + BEGIN_DATA_MAP + t1974InBlock,Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1974OutBlock,,output; + begin + 񰹼,cnt,cnt,long,4; + end + t1974OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + /Dz,cpgubun,cpgubun,char,2; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1974 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1974_2.res b/ls_sample/sample_python/Res/t1974_2.res new file mode 100644 index 0000000..aeee258 --- /dev/null +++ b/ls_sample/sample_python/Res/t1974_2.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP + .Func,ELWڻ굿(t1974),t1974,attr,block,headtype=A; + BEGIN_DATA_MAP + t1974InBlock,Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1974OutBlock,,output; + begin + 񰹼,cnt,cnt,long,4; + end + t1974OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + /Dz,cpgubun,cpgubun,char,2; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1974 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1981.res b/ls_sample/sample_python/Res/t1981.res new file mode 100644 index 0000000..bd41392 --- /dev/null +++ b/ls_sample/sample_python/Res/t1981.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ڻ긮Ʈȸ(t1981),t1981,attr,block,headtype=A; + BEGIN_DATA_MAP + t1981InBlock,⺻Է,input; + begin + 屸(0:ü1:ڽ2:ڽ),mkt_gb,mkt_gb,char,1; + end + t1981OutBlock,1,output; + begin + ڽǼ,ksp_cnt,ksp_cnt,char,4; + ڽǼ,ksd_cnt,ksd_cnt,char,4; + end + t1981OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ǥڵ,expcode,expcode,char,12; + ,hname,hname,char,20; + 簡,price,price,char,12; + ȣ,sign,sign,char,1; + ,change,change,char,12; + ,rate,rate,float,5.2; + ŷ(),volume,volume,char,12; + ŷ(鸸),value,value,char,12; + 屸,mkt_gb,mkt_gb,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1981 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1981_2.res b/ls_sample/sample_python/Res/t1981_2.res new file mode 100644 index 0000000..bd41392 --- /dev/null +++ b/ls_sample/sample_python/Res/t1981_2.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ڻ긮Ʈȸ(t1981),t1981,attr,block,headtype=A; + BEGIN_DATA_MAP + t1981InBlock,⺻Է,input; + begin + 屸(0:ü1:ڽ2:ڽ),mkt_gb,mkt_gb,char,1; + end + t1981OutBlock,1,output; + begin + ڽǼ,ksp_cnt,ksp_cnt,char,4; + ڽǼ,ksd_cnt,ksd_cnt,char,4; + end + t1981OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ǥڵ,expcode,expcode,char,12; + ,hname,hname,char,20; + 簡,price,price,char,12; + ȣ,sign,sign,char,1; + ,change,change,char,12; + ,rate,rate,float,5.2; + ŷ(),volume,volume,char,12; + ŷ(鸸),value,value,char,12; + 屸,mkt_gb,mkt_gb,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1981 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t1988.res b/ls_sample/sample_python/Res/t1988.res new file mode 100644 index 0000000..6c05a29 --- /dev/null +++ b/ls_sample/sample_python/Res/t1988.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ڻ긮Ʈȸ(t1988),t1988,attr,block,headtype=A; + BEGIN_DATA_MAP + t1988InBlock,⺻Է,input; + begin + 屸(0:ü1:ڽ2:ڽ),mkt_gb,mkt_gb,char,1; + ݼ(0:ü1:Ǽ),chk_price,chk_price,char,1; + 1,from_price,from_price,char,12; + 2,to_price,to_price,char,12; + ŷ(0:ü1:Ǽ),chk_vol,chk_vol,char,1; + ŷ1,from_vol,from_vol,char,12; + ŷ2,to_vol,to_vol,char,12; + (0:ü1:Ǽ),chk_rate,chk_rate,char,1; + 1,from_rate,from_rate,float,5.2; + 2,to_rate,to_rate,float,5.2; + ŷݼ(0:ü1:Ǽ),chk_amt,chk_amt,char,1; + ŷ1,from_amt,from_amt,char,12; + ŷ2,to_amt,to_amt,char,12; + (0:ü1:Ǽ),chk_up,chk_up,char,1; + (0:ü1:Ǽ),chk_down,chk_down,char,1; + end + t1988OutBlock,1,output; + begin + ڽǼ,ksp_cnt,ksp_cnt,char,4; + ڽǼ,ksd_cnt,ksd_cnt,char,4; + end + t1988OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ǥڵ,expcode,expcode,char,12; + ,hname,hname,char,20; + 簡,price,price,char,12; + ȣ,sign,sign,char,1; + ,change,change,char,12; + ,rate,rate,float,5.2; + ŷ(),volume,volume,char,12; + ŷ(鸸),value,value,char,12; + 屸,mkt_gb,mkt_gb,char,1; + ϵðŷ(),jvolume,jvolume,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t1988_2.res b/ls_sample/sample_python/Res/t1988_2.res new file mode 100644 index 0000000..6c05a29 --- /dev/null +++ b/ls_sample/sample_python/Res/t1988_2.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ڻ긮Ʈȸ(t1988),t1988,attr,block,headtype=A; + BEGIN_DATA_MAP + t1988InBlock,⺻Է,input; + begin + 屸(0:ü1:ڽ2:ڽ),mkt_gb,mkt_gb,char,1; + ݼ(0:ü1:Ǽ),chk_price,chk_price,char,1; + 1,from_price,from_price,char,12; + 2,to_price,to_price,char,12; + ŷ(0:ü1:Ǽ),chk_vol,chk_vol,char,1; + ŷ1,from_vol,from_vol,char,12; + ŷ2,to_vol,to_vol,char,12; + (0:ü1:Ǽ),chk_rate,chk_rate,char,1; + 1,from_rate,from_rate,float,5.2; + 2,to_rate,to_rate,float,5.2; + ŷݼ(0:ü1:Ǽ),chk_amt,chk_amt,char,1; + ŷ1,from_amt,from_amt,char,12; + ŷ2,to_amt,to_amt,char,12; + (0:ü1:Ǽ),chk_up,chk_up,char,1; + (0:ü1:Ǽ),chk_down,chk_down,char,1; + end + t1988OutBlock,1,output; + begin + ڽǼ,ksp_cnt,ksp_cnt,char,4; + ڽǼ,ksd_cnt,ksd_cnt,char,4; + end + t1988OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ǥڵ,expcode,expcode,char,12; + ,hname,hname,char,20; + 簡,price,price,char,12; + ȣ,sign,sign,char,1; + ,change,change,char,12; + ,rate,rate,float,5.2; + ŷ(),volume,volume,char,12; + ŷ(鸸),value,value,char,12; + 屸,mkt_gb,mkt_gb,char,1; + ϵðŷ(),jvolume,jvolume,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2101.res b/ls_sample/sample_python/Res/t2101.res new file mode 100644 index 0000000..844e5dc --- /dev/null +++ b/ls_sample/sample_python/Res/t2101.res @@ -0,0 +1,82 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼ簡(ü)ȸ(t2101),t2101,attr,block,headtype=A; + BEGIN_DATA_MAP + t2101InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + end + t2101OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ̰,mgjv,mgjv,long,8; + ̰,mgjvdiff,mgjvdiff,long,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + 52ְ,high52w,high52w,float,6.2; + 52,low52w,low52w,float,6.2; + ̽ý,basis,basis,float,6.2; + ذ,recprice,recprice,float,6.2; + ̷а,theoryprice,theoryprice,float,6.2; + ,glyl,glyl,float,6.3; + CBѰ,cbhprice,cbhprice,float,6.2; + CBѰ,cblprice,cblprice,float,6.2; + ,lastmonth,lastmonth,char,8; + ܿ,jandatecnt,jandatecnt,long,8; + ,pricejisu,pricejisu,float,6.2; + ϴ񱸺,jisusign,jisusign,char,1; + ϴ,jisuchange,jisuchange,float,6.2; + ,jisudiff,jisudiff,float,6.2; + KOSPI200,kospijisu,kospijisu,float,6.2; + KOSPI200ϴ񱸺,kospisign,kospisign,char,1; + KOSPI200ϴ,kospichange,kospichange,float,6.2; + KOSPI200,kospidiff,kospidiff,float,6.2; + ְ,listhprice,listhprice,float,6.2; + ,listlprice,listlprice,float,6.2; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ,vega,vega,float,6.4; + ο,rhox,rhox,float,6.4; + ٿ簡,gmprice,gmprice,float,6.2; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,float,6.2; + ٿ,gmdiff,gmdiff,float,6.2; + ̷а,theorypriceg,theorypriceg,float,6.2; + ,histimpv,histimpv,float,6.2; + 纯,impv,impv,float,6.2; + BASIS,sbasis,sbasis,float,6.2; + ̷BASIS,ibasis,ibasis,float,6.2; + ٿڵ,gmfutcode,gmfutcode,char,8; + 簡,actprice,actprice,float,6.2; + ŷҹΰŽð,greeks_time,greeks_time,char,6; + ŷҹΰȮ,greeks_confirm,greeks_confirm,char,8; + ϰȣ,danhochk,danhochk,char,1; + üᰡ,yeprice,yeprice,float,6.2; + üᰡ񱸺,jnilysign,jnilysign,char,1; + üᰡ,jnilychange,jnilychange,float,6.2; + üᰡ,jnilydrate,jnilydrate,float,6.2; + б(1:а2:0:̹߻),alloc_gubun,alloc_gubun,char,1; + ܿ(),bjandatecnt,bjandatecnt,long,8; + ڵ,focode,focode,char,8; + ǽðѿ(0:ƴ1:2:3:Ͻ),dy_gubun,dy_gubun,char,1; + ǽðѰ,dy_uplmtprice,dy_uplmtprice,float,6.2; + ǽðѰ,dy_dnlmtprice,dy_dnlmtprice,float,6.2; + Ȯ(0:Ȯ1:Ȯ2:ƴ),updnstep_gubun,updnstep_gubun,char,1; + ܰ,upstep,upstep,char,2; + ܰ,dnstep,dnstep,char,2; + 3ܰѰ,uplmtprice_3rd,uplmtprice_3rd,float,6.2; + 3ܰѰ,dnlmtprice_3rd,dnlmtprice_3rd,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2101_2.res b/ls_sample/sample_python/Res/t2101_2.res new file mode 100644 index 0000000..844e5dc --- /dev/null +++ b/ls_sample/sample_python/Res/t2101_2.res @@ -0,0 +1,82 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼ簡(ü)ȸ(t2101),t2101,attr,block,headtype=A; + BEGIN_DATA_MAP + t2101InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + end + t2101OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ̰,mgjv,mgjv,long,8; + ̰,mgjvdiff,mgjvdiff,long,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + 52ְ,high52w,high52w,float,6.2; + 52,low52w,low52w,float,6.2; + ̽ý,basis,basis,float,6.2; + ذ,recprice,recprice,float,6.2; + ̷а,theoryprice,theoryprice,float,6.2; + ,glyl,glyl,float,6.3; + CBѰ,cbhprice,cbhprice,float,6.2; + CBѰ,cblprice,cblprice,float,6.2; + ,lastmonth,lastmonth,char,8; + ܿ,jandatecnt,jandatecnt,long,8; + ,pricejisu,pricejisu,float,6.2; + ϴ񱸺,jisusign,jisusign,char,1; + ϴ,jisuchange,jisuchange,float,6.2; + ,jisudiff,jisudiff,float,6.2; + KOSPI200,kospijisu,kospijisu,float,6.2; + KOSPI200ϴ񱸺,kospisign,kospisign,char,1; + KOSPI200ϴ,kospichange,kospichange,float,6.2; + KOSPI200,kospidiff,kospidiff,float,6.2; + ְ,listhprice,listhprice,float,6.2; + ,listlprice,listlprice,float,6.2; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ,vega,vega,float,6.4; + ο,rhox,rhox,float,6.4; + ٿ簡,gmprice,gmprice,float,6.2; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,float,6.2; + ٿ,gmdiff,gmdiff,float,6.2; + ̷а,theorypriceg,theorypriceg,float,6.2; + ,histimpv,histimpv,float,6.2; + 纯,impv,impv,float,6.2; + BASIS,sbasis,sbasis,float,6.2; + ̷BASIS,ibasis,ibasis,float,6.2; + ٿڵ,gmfutcode,gmfutcode,char,8; + 簡,actprice,actprice,float,6.2; + ŷҹΰŽð,greeks_time,greeks_time,char,6; + ŷҹΰȮ,greeks_confirm,greeks_confirm,char,8; + ϰȣ,danhochk,danhochk,char,1; + üᰡ,yeprice,yeprice,float,6.2; + üᰡ񱸺,jnilysign,jnilysign,char,1; + üᰡ,jnilychange,jnilychange,float,6.2; + üᰡ,jnilydrate,jnilydrate,float,6.2; + б(1:а2:0:̹߻),alloc_gubun,alloc_gubun,char,1; + ܿ(),bjandatecnt,bjandatecnt,long,8; + ڵ,focode,focode,char,8; + ǽðѿ(0:ƴ1:2:3:Ͻ),dy_gubun,dy_gubun,char,1; + ǽðѰ,dy_uplmtprice,dy_uplmtprice,float,6.2; + ǽðѰ,dy_dnlmtprice,dy_dnlmtprice,float,6.2; + Ȯ(0:Ȯ1:Ȯ2:ƴ),updnstep_gubun,updnstep_gubun,char,1; + ܰ,upstep,upstep,char,2; + ܰ,dnstep,dnstep,char,2; + 3ܰѰ,uplmtprice_3rd,uplmtprice_3rd,float,6.2; + 3ܰѰ,dnlmtprice_3rd,dnlmtprice_3rd,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2105.res b/ls_sample/sample_python/Res/t2105.res new file mode 100644 index 0000000..fcf29ce --- /dev/null +++ b/ls_sample/sample_python/Res/t2105.res @@ -0,0 +1,57 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼ簡ȣȸ(t2105),t2105,attr,block,headtype=A; + BEGIN_DATA_MAP + t2105InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + end + t2105OutBlock,,output; + begin + ,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷϵð,stimeqrt,stimeqrt,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ŵȣ1,offerho1,offerho1,float,6.2; + żȣ1,bidho1,bidho1,float,6.2; + ŵȣ1,offerrem1,offerrem1,long,8; + żȣ1,bidrem1,bidrem1,long,8; + ŵȣǼ1,dcnt1,dcnt1,long,8; + żȣǼ1,scnt1,scnt1,long,8; + ŵȣ2,offerho2,offerho2,float,6.2; + żȣ2,bidho2,bidho2,float,6.2; + ŵȣ2,offerrem2,offerrem2,long,8; + żȣ2,bidrem2,bidrem2,long,8; + ŵȣǼ2,dcnt2,dcnt2,long,8; + żȣǼ2,scnt2,scnt2,long,8; + ŵȣ3,offerho3,offerho3,float,6.2; + żȣ3,bidho3,bidho3,float,6.2; + ŵȣ3,offerrem3,offerrem3,long,8; + żȣ3,bidrem3,bidrem3,long,8; + ŵȣǼ3,dcnt3,dcnt3,long,8; + żȣǼ3,scnt3,scnt3,long,8; + ŵȣ4,offerho4,offerho4,float,6.2; + żȣ4,bidho4,bidho4,float,6.2; + ŵȣ4,offerrem4,offerrem4,long,8; + żȣ4,bidrem4,bidrem4,long,8; + ŵȣǼ4,dcnt4,dcnt4,long,8; + żȣǼ4,scnt4,scnt4,long,8; + ŵȣ5,offerho5,offerho5,float,6.2; + żȣ5,bidho5,bidho5,float,6.2; + ŵȣ5,offerrem5,offerrem5,long,8; + żȣ5,bidrem5,bidrem5,long,8; + ŵȣǼ5,dcnt5,dcnt5,long,8; + żȣǼ5,scnt5,scnt5,long,8; + ŵȣѼ,dvol,dvol,long,8; + żȣѼ,svol,svol,long,8; + ѸŵȣǼ,toffernum,toffernum,long,8; + ѸżȣǼ,tbidnum,tbidnum,long,8; + Žð,time,time,char,6; + ڵ,shcode,shcode,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2105_2.res b/ls_sample/sample_python/Res/t2105_2.res new file mode 100644 index 0000000..fcf29ce --- /dev/null +++ b/ls_sample/sample_python/Res/t2105_2.res @@ -0,0 +1,57 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼ簡ȣȸ(t2105),t2105,attr,block,headtype=A; + BEGIN_DATA_MAP + t2105InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + end + t2105OutBlock,,output; + begin + ,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷϵð,stimeqrt,stimeqrt,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ŵȣ1,offerho1,offerho1,float,6.2; + żȣ1,bidho1,bidho1,float,6.2; + ŵȣ1,offerrem1,offerrem1,long,8; + żȣ1,bidrem1,bidrem1,long,8; + ŵȣǼ1,dcnt1,dcnt1,long,8; + żȣǼ1,scnt1,scnt1,long,8; + ŵȣ2,offerho2,offerho2,float,6.2; + żȣ2,bidho2,bidho2,float,6.2; + ŵȣ2,offerrem2,offerrem2,long,8; + żȣ2,bidrem2,bidrem2,long,8; + ŵȣǼ2,dcnt2,dcnt2,long,8; + żȣǼ2,scnt2,scnt2,long,8; + ŵȣ3,offerho3,offerho3,float,6.2; + żȣ3,bidho3,bidho3,float,6.2; + ŵȣ3,offerrem3,offerrem3,long,8; + żȣ3,bidrem3,bidrem3,long,8; + ŵȣǼ3,dcnt3,dcnt3,long,8; + żȣǼ3,scnt3,scnt3,long,8; + ŵȣ4,offerho4,offerho4,float,6.2; + żȣ4,bidho4,bidho4,float,6.2; + ŵȣ4,offerrem4,offerrem4,long,8; + żȣ4,bidrem4,bidrem4,long,8; + ŵȣǼ4,dcnt4,dcnt4,long,8; + żȣǼ4,scnt4,scnt4,long,8; + ŵȣ5,offerho5,offerho5,float,6.2; + żȣ5,bidho5,bidho5,float,6.2; + ŵȣ5,offerrem5,offerrem5,long,8; + żȣ5,bidrem5,bidrem5,long,8; + ŵȣǼ5,dcnt5,dcnt5,long,8; + żȣǼ5,scnt5,scnt5,long,8; + ŵȣѼ,dvol,dvol,long,8; + żȣѼ,svol,svol,long,8; + ѸŵȣǼ,toffernum,toffernum,long,8; + ѸżȣǼ,tbidnum,tbidnum,long,8; + Žð,time,time,char,6; + ڵ,shcode,shcode,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2106.res b/ls_sample/sample_python/Res/t2106.res new file mode 100644 index 0000000..f953bd7 --- /dev/null +++ b/ls_sample/sample_python/Res/t2106.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼ簡ü޸(t2106),t2106,block,headtype=A; + BEGIN_DATA_MAP + t2106InBlock,⺻Է,input; + begin + ڵ,code,code,char,8; + Ǽ,nrec,nrec,char,2; + end + t2106InBlock1,⺻Է1,input,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + Ÿ1,dat1,dat1,char,1; + Ÿ2,dat2,dat2,char,8; + end + t2106OutBlock,,output; + begin + °Ǽ,nrec,nrec,char,2; + end + t2106OutBlock1,1,output,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + °,vals,vals,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2106_2.res b/ls_sample/sample_python/Res/t2106_2.res new file mode 100644 index 0000000..f953bd7 --- /dev/null +++ b/ls_sample/sample_python/Res/t2106_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼ簡ü޸(t2106),t2106,block,headtype=A; + BEGIN_DATA_MAP + t2106InBlock,⺻Է,input; + begin + ڵ,code,code,char,8; + Ǽ,nrec,nrec,char,2; + end + t2106InBlock1,⺻Է1,input,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + Ÿ1,dat1,dat1,char,1; + Ÿ2,dat2,dat2,char,8; + end + t2106OutBlock,,output; + begin + °Ǽ,nrec,nrec,char,2; + end + t2106OutBlock1,1,output,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + °,vals,vals,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2201.res b/ls_sample/sample_python/Res/t2201.res new file mode 100644 index 0000000..6d75c9c --- /dev/null +++ b/ls_sample/sample_python/Res/t2201.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǽð뺰üȸ(t2201),t2201,attr,block,headtype=A; + BEGIN_DATA_MAP + t2201InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t2201OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t2201OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,8.2; + ŵȣ,offerho,offerho,float,6.2; + żȣ,bidho,bidho,float,6.2; + ŷ,volume,volume,double,12.0; + ̰,openyak,openyak,long,8; + ̰,jnilopenupdn,jnilopenupdn,long,8; + ̷BASIS,ibasis,ibasis,float,6.2; + BASIS,sbasis,sbasis,float,6.2; + ,kasis,kasis,float,6.2; + ŷ,value,value,double,12.0; + ̰,j_openupdn,j_openupdn,long,8; + żüᷮ,n_msvolume,n_msvolume,double,12.0; + ŵüᷮ,n_mdvolume,n_mdvolume,double,12.0; + żüᷮ,s_msvolume,s_msvolume,double,12.0; + żüǼ,n_mschecnt,n_mschecnt,long,8; + ŵüǼ,n_mdchecnt,n_mdchecnt,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2201_2.res b/ls_sample/sample_python/Res/t2201_2.res new file mode 100644 index 0000000..6d75c9c --- /dev/null +++ b/ls_sample/sample_python/Res/t2201_2.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǽð뺰üȸ(t2201),t2201,attr,block,headtype=A; + BEGIN_DATA_MAP + t2201InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t2201OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t2201OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,8.2; + ŵȣ,offerho,offerho,float,6.2; + żȣ,bidho,bidho,float,6.2; + ŷ,volume,volume,double,12.0; + ̰,openyak,openyak,long,8; + ̰,jnilopenupdn,jnilopenupdn,long,8; + ̷BASIS,ibasis,ibasis,float,6.2; + BASIS,sbasis,sbasis,float,6.2; + ,kasis,kasis,float,6.2; + ŷ,value,value,double,12.0; + ̰,j_openupdn,j_openupdn,long,8; + żüᷮ,n_msvolume,n_msvolume,double,12.0; + ŵüᷮ,n_mdvolume,n_mdvolume,double,12.0; + żüᷮ,s_msvolume,s_msvolume,double,12.0; + żüǼ,n_mschecnt,n_mschecnt,long,8; + ŵüǼ,n_mdchecnt,n_mdchecnt,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2203.res b/ls_sample/sample_python/Res/t2203.res new file mode 100644 index 0000000..1bb1d49 --- /dev/null +++ b/ls_sample/sample_python/Res/t2203.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓְ(t2203),t2203,attr,block,headtype=A; + BEGIN_DATA_MAP + t2203InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱٿ,futcheck,futcheck,char,1; + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ȸûǼ,cnt,cnt,int,3; + end + t2203OutBlock,,output; + begin + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ֱٿ,nowfutyn,nowfutyn,char,1; + end + t2203OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ̰,openyak,openyak,long,8; + ̰,openyakupdn,openyakupdn,long,8; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2203_2.res b/ls_sample/sample_python/Res/t2203_2.res new file mode 100644 index 0000000..1bb1d49 --- /dev/null +++ b/ls_sample/sample_python/Res/t2203_2.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓְ(t2203),t2203,attr,block,headtype=A; + BEGIN_DATA_MAP + t2203InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱٿ,futcheck,futcheck,char,1; + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ȸûǼ,cnt,cnt,int,3; + end + t2203OutBlock,,output; + begin + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ֱٿ,nowfutyn,nowfutyn,char,1; + end + t2203OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ̰,openyak,openyak,long,8; + ̰,openyakupdn,openyakupdn,long,8; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2209.res b/ls_sample/sample_python/Res/t2209.res new file mode 100644 index 0000000..e94edb6 --- /dev/null +++ b/ls_sample/sample_python/Res/t2209.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ɼƽкüȸíƮ(t2209),t2209,attr,block,headtype=A; + BEGIN_DATA_MAP + t2209InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + íƮ,cgubun,cgubun,char,1; + б,bgubun,bgubun,int,3; + ȸǼ,cnt,cnt,int,3; + end + t2209OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ŷ,volume,volume,double,12.0; + ŷ,value,value,double,12.0; + ̰,openyak,openyak,long,8; + ̰,openupdn,openupdn,long,8; + ü,cvolume,cvolume,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + ŵüǼ,s_mdchecnt,s_mdchecnt,long,8; + żüǼ,ss_mschecnt,ss_mschecnt,long,8; + żüᷮ,s_mschevol,s_mschevol,double,12.0; + ŵüᷮ,s_mdchevol,s_mdchevol,double,12.0; + żüᷮ,ss_mschevol,ss_mschevol,double,12.0; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2209_2.res b/ls_sample/sample_python/Res/t2209_2.res new file mode 100644 index 0000000..e94edb6 --- /dev/null +++ b/ls_sample/sample_python/Res/t2209_2.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ɼƽкüȸíƮ(t2209),t2209,attr,block,headtype=A; + BEGIN_DATA_MAP + t2209InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + íƮ,cgubun,cgubun,char,1; + б,bgubun,bgubun,int,3; + ȸǼ,cnt,cnt,int,3; + end + t2209OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ŷ,volume,volume,double,12.0; + ŷ,value,value,double,12.0; + ̰,openyak,openyak,long,8; + ̰,openupdn,openupdn,long,8; + ü,cvolume,cvolume,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + ŵüǼ,s_mdchecnt,s_mdchecnt,long,8; + żüǼ,ss_mschecnt,ss_mschecnt,long,8; + żüᷮ,s_mschevol,s_mschevol,double,12.0; + ŵüᷮ,s_mdchevol,s_mdchevol,double,12.0; + żüᷮ,ss_mschevol,ss_mschevol,double,12.0; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2210.res b/ls_sample/sample_python/Res/t2210.res new file mode 100644 index 0000000..9db799b --- /dev/null +++ b/ls_sample/sample_python/Res/t2210.res @@ -0,0 +1,20 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǽð뺰üȸ(¿),t2210,attr,block,headtype=A; + BEGIN_DATA_MAP + t2210InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + end + t2210OutBlock,,output; + begin + ŵü,mdvolume,mdvolume,long,8; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,8; + żüǼ,mschecnt,mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2210_2.res b/ls_sample/sample_python/Res/t2210_2.res new file mode 100644 index 0000000..9db799b --- /dev/null +++ b/ls_sample/sample_python/Res/t2210_2.res @@ -0,0 +1,20 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǽð뺰üȸ(¿),t2210,attr,block,headtype=A; + BEGIN_DATA_MAP + t2210InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + end + t2210OutBlock,,output; + begin + ŵü,mdvolume,mdvolume,long,8; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,8; + żüǼ,mschecnt,mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2301.res b/ls_sample/sample_python/Res/t2301.res new file mode 100644 index 0000000..4bcb69d --- /dev/null +++ b/ls_sample/sample_python/Res/t2301.res @@ -0,0 +1,94 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ(t2301),t2301,attr,block,headtype=A; + BEGIN_DATA_MAP + t2301InBlock,⺻Է,input; + begin + ,yyyymm,yyyymm,char,6; + ̴ϱ(M:̴G:),gubun,gubun,char,1; + end + t2301OutBlock,,output; + begin + ,histimpv,histimpv,long,4; + ɼ,jandatecnt,jandatecnt,long,4; + ݿɼǴǥIV,cimpv,cimpv,float,6.3; + DzɼǴǥIV,pimpv,pimpv,float,6.3; + ٿ簡,gmprice,gmprice,float,6.2; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,float,6.2; + ٿ,gmdiff,gmdiff,float,6.2; + ٿŷ,gmvolume,gmvolume,long,12; + ٿڵ,gmshcode,gmshcode,char,8; + end + t2301OutBlock1,1,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + ݿɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + IV,iv,iv,float,6.2; + ̰,mgjv,mgjv,long,12; + ̰,mgjvupdn,mgjvupdn,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + ,vega,vega,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ο,rhox,rhox,float,6.4; + ̷а,theoryprice,theoryprice,float,6.2; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ܰ,jvolume,jvolume,long,12; + 򰡼,parpl,parpl,long,12; + û갡ɼ,jngo,jngo,long,6; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + ŷ,value,value,float,12; + end + t2301OutBlock2,2,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + Dzɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + IV,iv,iv,float,6.2; + ̰,mgjv,mgjv,long,12; + ̰,mgjvupdn,mgjvupdn,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + ,vega,vega,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ο,rhox,rhox,float,6.4; + ̷а,theoryprice,theoryprice,float,6.2; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ܰ,jvolume,jvolume,long,12; + 򰡼,parpl,parpl,long,12; + û갡ɼ,jngo,jngo,long,6; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2301_2.res b/ls_sample/sample_python/Res/t2301_2.res new file mode 100644 index 0000000..4bcb69d --- /dev/null +++ b/ls_sample/sample_python/Res/t2301_2.res @@ -0,0 +1,94 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ(t2301),t2301,attr,block,headtype=A; + BEGIN_DATA_MAP + t2301InBlock,⺻Է,input; + begin + ,yyyymm,yyyymm,char,6; + ̴ϱ(M:̴G:),gubun,gubun,char,1; + end + t2301OutBlock,,output; + begin + ,histimpv,histimpv,long,4; + ɼ,jandatecnt,jandatecnt,long,4; + ݿɼǴǥIV,cimpv,cimpv,float,6.3; + DzɼǴǥIV,pimpv,pimpv,float,6.3; + ٿ簡,gmprice,gmprice,float,6.2; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,float,6.2; + ٿ,gmdiff,gmdiff,float,6.2; + ٿŷ,gmvolume,gmvolume,long,12; + ٿڵ,gmshcode,gmshcode,char,8; + end + t2301OutBlock1,1,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + ݿɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + IV,iv,iv,float,6.2; + ̰,mgjv,mgjv,long,12; + ̰,mgjvupdn,mgjvupdn,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + ,vega,vega,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ο,rhox,rhox,float,6.4; + ̷а,theoryprice,theoryprice,float,6.2; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ܰ,jvolume,jvolume,long,12; + 򰡼,parpl,parpl,long,12; + û갡ɼ,jngo,jngo,long,6; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + ŷ,value,value,float,12; + end + t2301OutBlock2,2,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + Dzɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + IV,iv,iv,float,6.2; + ̰,mgjv,mgjv,long,12; + ̰,mgjvupdn,mgjvupdn,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + ,vega,vega,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ο,rhox,rhox,float,6.4; + ̷а,theoryprice,theoryprice,float,6.2; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ܰ,jvolume,jvolume,long,12; + 򰡼,parpl,parpl,long,12; + û갡ɼ,jngo,jngo,long,6; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2405.res b/ls_sample/sample_python/Res/t2405.res new file mode 100644 index 0000000..14f490a --- /dev/null +++ b/ls_sample/sample_python/Res/t2405.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,ɼȣܷíƮ(t2405),t2405,attr,block,headtype=A; + BEGIN_DATA_MAP + t2405InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + б,bgubun,bgubun,char,1; + N,nmin,nmin,int,2; + ð,etime,etime,char,4; + ȣ,hgubun,hgubun,char,1; + ȸǼ,cnt,cnt,int,3; + ðCTS,cts_time,cts_time,char,6; + end + t2405OutBlock,,output; + begin + ŵü,mdvolume,mdvolume,double,12.0; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,double,12.0; + żüǼ,mschecnt,mschecnt,long,8; + ðCTS,cts_time,cts_time,char,6; + end + t2405OutBlock1,1,output,occurs; + begin + ð,time,time,char,6; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ŷ,volume,volume,double,12.0; + ü,cvolume,cvolume,long,8; + ŵ1ȣ,offerho1,offerho1,float,6.2; + ż1ȣ,bidho1,bidho1,float,6.2; + ŵ,offerrem,offerrem,long,8; + ż,bidrem,bidrem,long,8; + ŵǼ,offercnt,offercnt,long,8; + żǼ,bidcnt,bidcnt,long,8; + ŵ,c_offerrem,c_offerrem,long,8; + ż,c_bidrem,c_bidrem,long,8; + ŵǼ,c_offercnt,c_offercnt,long,8; + żǼ,c_bidcnt,c_bidcnt,long,8; + ż,r_bidrem,r_bidrem,float,6.2; + żǼ,r_bidcnt,r_bidcnt,float,6.2; + ż,r_sign,r_sign,char,1; + ,date,date,date,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2405_2.res b/ls_sample/sample_python/Res/t2405_2.res new file mode 100644 index 0000000..14f490a --- /dev/null +++ b/ls_sample/sample_python/Res/t2405_2.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,ɼȣܷíƮ(t2405),t2405,attr,block,headtype=A; + BEGIN_DATA_MAP + t2405InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + б,bgubun,bgubun,char,1; + N,nmin,nmin,int,2; + ð,etime,etime,char,4; + ȣ,hgubun,hgubun,char,1; + ȸǼ,cnt,cnt,int,3; + ðCTS,cts_time,cts_time,char,6; + end + t2405OutBlock,,output; + begin + ŵü,mdvolume,mdvolume,double,12.0; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,double,12.0; + żüǼ,mschecnt,mschecnt,long,8; + ðCTS,cts_time,cts_time,char,6; + end + t2405OutBlock1,1,output,occurs; + begin + ð,time,time,char,6; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ŷ,volume,volume,double,12.0; + ü,cvolume,cvolume,long,8; + ŵ1ȣ,offerho1,offerho1,float,6.2; + ż1ȣ,bidho1,bidho1,float,6.2; + ŵ,offerrem,offerrem,long,8; + ż,bidrem,bidrem,long,8; + ŵǼ,offercnt,offercnt,long,8; + żǼ,bidcnt,bidcnt,long,8; + ŵ,c_offerrem,c_offerrem,long,8; + ż,c_bidrem,c_bidrem,long,8; + ŵǼ,c_offercnt,c_offercnt,long,8; + żǼ,c_bidcnt,c_bidcnt,long,8; + ż,r_bidrem,r_bidrem,float,6.2; + żǼ,r_bidcnt,r_bidcnt,float,6.2; + ż,r_sign,r_sign,char,1; + ,date,date,date,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2421.res b/ls_sample/sample_python/Res/t2421.res new file mode 100644 index 0000000..f6aa0a1 --- /dev/null +++ b/ls_sample/sample_python/Res/t2421.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,̰(t2421),t2421,attr,block,headtype=A; + BEGIN_DATA_MAP + t2421InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + ϱ,bdgubun,bdgubun,char,1; + N,nmin,nmin,int,3; + Ͽᱸ,tcgubun,tcgubun,char,1; + ȸǼ,cnt,cnt,int,4; + end + t2421OutBlock,,output; + begin + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,8; + ŷ,volume,volume,double,15.0; + ̰,openyak,openyak,long,8; + end + t2421OutBlock1,1,output,occurs; + begin + ڽð,dt,dt,char,14; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ̰÷,openopenyak,openopenyak,long,8; + ̰,highopenyak,highopenyak,long,8; + ̰,lowopenyak,lowopenyak,long,8; + ̰,closeopenyak,closeopenyak,long,8; + ̰,openupdn,openupdn,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2421_2.res b/ls_sample/sample_python/Res/t2421_2.res new file mode 100644 index 0000000..f6aa0a1 --- /dev/null +++ b/ls_sample/sample_python/Res/t2421_2.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,̰(t2421),t2421,attr,block,headtype=A; + BEGIN_DATA_MAP + t2421InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + ϱ,bdgubun,bdgubun,char,1; + N,nmin,nmin,int,3; + Ͽᱸ,tcgubun,tcgubun,char,1; + ȸǼ,cnt,cnt,int,4; + end + t2421OutBlock,,output; + begin + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,8; + ŷ,volume,volume,double,15.0; + ̰,openyak,openyak,long,8; + end + t2421OutBlock1,1,output,occurs; + begin + ڽð,dt,dt,char,14; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ̰÷,openopenyak,openopenyak,long,8; + ̰,highopenyak,highopenyak,long,8; + ̰,lowopenyak,lowopenyak,long,8; + ̰,closeopenyak,closeopenyak,long,8; + ̰,openupdn,openupdn,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2541.res b/ls_sample/sample_python/Res/t2541.res new file mode 100644 index 0000000..a650d77 --- /dev/null +++ b/ls_sample/sample_python/Res/t2541.res @@ -0,0 +1,99 @@ +BEGIN_FUNCTION_MAP + .Func,ǰڸŸŵ(ǽð)(t2541),t2541,attr,block,headtype=A; + BEGIN_DATA_MAP + t2541InBlock,⺻Է,input; + begin + ǰID,eitem,eitem,char,2; + 屸,market,market,char,1; + ڵ,upcode,upcode,char,3; + ,gubun1,gubun1,char,1; + Ϻб,gubun2,gubun2,char,1; + CTSTIME,cts_time,cts_time,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ȸǼ,cnt,cnt,int,4; + end + t2541OutBlock,⺻,output; + begin + ǰID,eitem,eitem,char,2; + 屸,sgubun,sgubun,char,1; + CTSTIME,cts_time,cts_time,char,8; + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t2541OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + μż,sv_08,sv_08,long,12; + ܱμż,sv_17,sv_17,long,12; + ż,sv_18,sv_18,long,12; + Ǽż,sv_01,sv_01,long,12; + żż,sv_03,sv_03,long,12; + ż,sv_04,sv_04,long,12; + ż,sv_02,sv_02,long,12; + ݼż,sv_05,sv_05,long,12; + ݼż,sv_06,sv_06,long,12; + Ÿż,sv_07,sv_07,long,12; + ż,sv_11,sv_11,long,12; + ݵż,sv_00,sv_00,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2541_2.res b/ls_sample/sample_python/Res/t2541_2.res new file mode 100644 index 0000000..a650d77 --- /dev/null +++ b/ls_sample/sample_python/Res/t2541_2.res @@ -0,0 +1,99 @@ +BEGIN_FUNCTION_MAP + .Func,ǰڸŸŵ(ǽð)(t2541),t2541,attr,block,headtype=A; + BEGIN_DATA_MAP + t2541InBlock,⺻Է,input; + begin + ǰID,eitem,eitem,char,2; + 屸,market,market,char,1; + ڵ,upcode,upcode,char,3; + ,gubun1,gubun1,char,1; + Ϻб,gubun2,gubun2,char,1; + CTSTIME,cts_time,cts_time,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ȸǼ,cnt,cnt,int,4; + end + t2541OutBlock,⺻,output; + begin + ǰID,eitem,eitem,char,2; + 屸,sgubun,sgubun,char,1; + CTSTIME,cts_time,cts_time,char,8; + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t2541OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + μż,sv_08,sv_08,long,12; + ܱμż,sv_17,sv_17,long,12; + ż,sv_18,sv_18,long,12; + Ǽż,sv_01,sv_01,long,12; + żż,sv_03,sv_03,long,12; + ż,sv_04,sv_04,long,12; + ż,sv_02,sv_02,long,12; + ݼż,sv_05,sv_05,long,12; + ݼż,sv_06,sv_06,long,12; + Ÿż,sv_07,sv_07,long,12; + ż,sv_11,sv_11,long,12; + ݵż,sv_00,sv_00,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2545.res b/ls_sample/sample_python/Res/t2545.res new file mode 100644 index 0000000..078ebbc --- /dev/null +++ b/ls_sample/sample_python/Res/t2545.res @@ -0,0 +1,68 @@ +BEGIN_FUNCTION_MAP + .Func,ǰڸŸŵ(íƮ),t2545,attr,block,headtype=A; + BEGIN_DATA_MAP + t2545InBlock,⺻Է,input; + begin + ǰID,eitem,eitem,char,2; + 屸,sgubun,sgubun,char,1; + ڵ,upcode,upcode,char,3; + N,nmin,nmin,int,2; + ȸǼ,cnt,cnt,int,3; + Ϻ,bgubun,bgubun,char,1; + end + t2545OutBlock,⺻,output; + begin + ǰID,eitem,eitem,char,2; + 屸,sgubun,sgubun,char,1; + ڵ,indcode,indcode,char,4; + ܱڵ,forcode,forcode,char,4; + ڵ,syscode,syscode,char,4; + ڵ,stocode,stocode,char,4; + ڵ,invcode,invcode,char,4; + ڵ,bancode,bancode,char,4; + ڵ,inscode,inscode,char,4; + ڵ,fincode,fincode,char,4; + ڵ,moncode,moncode,char,4; + Ÿڵ,etccode,etccode,char,4; + ڵ,natcode,natcode,char,4; + ݵڵ,pefcode,pefcode,char,4; + ڵ,jisucd,jisucd,char,8; + ,jisunm,jisunm,char,20; + end + t2545OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + ڽð,datetime,datetime,char,14; + μżŷ,indmsvol,indmsvol,long,8; + μżŷ,indmsamt,indmsamt,double,12.0; + ܱμżŷ,formsvol,formsvol,long,8; + ܱμżŷ,formsamt,formsamt,double,12.0; + żŷ,sysmsvol,sysmsvol,long,8; + żŷ,sysmsamt,sysmsamt,double,12.0; + Ǽżŷ,stomsvol,stomsvol,long,8; + Ǽżŷ,stomsamt,stomsamt,double,12.0; + żżŷ,invmsvol,invmsvol,long,8; + żżŷ,invmsamt,invmsamt,double,12.0; + żŷ,banmsvol,banmsvol,long,8; + żŷ,banmsamt,banmsamt,double,12.0; + żŷ,insmsvol,insmsvol,long,8; + żŷ,insmsamt,insmsamt,double,12.0; + ݼżŷ,finmsvol,finmsvol,long,8; + ݼżŷ,finmsamt,finmsamt,double,12.0; + ݼżŷ,monmsvol,monmsvol,long,8; + ݼżŷ,monmsamt,monmsamt,double,12.0; + Ÿżŷ,etcmsvol,etcmsvol,long,8; + Ÿżŷ,etcmsamt,etcmsamt,double,12.0; + żŷ,natmsvol,natmsvol,long,8; + żŷ,natmsamt,natmsamt,double,12.0; + ݵżŷ,pefmsvol,pefmsvol,long,8; + ݵżŷ,pefmsamt,pefmsamt,double,12.0; + ,upclose,upclose,float,6.2; + üŷ,upcvolume,upcvolume,long,8; + شŷ,upvolume,upvolume,double,12.0; + ذŷ,upvalue,upvalue,double,12.0; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2545_2.res b/ls_sample/sample_python/Res/t2545_2.res new file mode 100644 index 0000000..078ebbc --- /dev/null +++ b/ls_sample/sample_python/Res/t2545_2.res @@ -0,0 +1,68 @@ +BEGIN_FUNCTION_MAP + .Func,ǰڸŸŵ(íƮ),t2545,attr,block,headtype=A; + BEGIN_DATA_MAP + t2545InBlock,⺻Է,input; + begin + ǰID,eitem,eitem,char,2; + 屸,sgubun,sgubun,char,1; + ڵ,upcode,upcode,char,3; + N,nmin,nmin,int,2; + ȸǼ,cnt,cnt,int,3; + Ϻ,bgubun,bgubun,char,1; + end + t2545OutBlock,⺻,output; + begin + ǰID,eitem,eitem,char,2; + 屸,sgubun,sgubun,char,1; + ڵ,indcode,indcode,char,4; + ܱڵ,forcode,forcode,char,4; + ڵ,syscode,syscode,char,4; + ڵ,stocode,stocode,char,4; + ڵ,invcode,invcode,char,4; + ڵ,bancode,bancode,char,4; + ڵ,inscode,inscode,char,4; + ڵ,fincode,fincode,char,4; + ڵ,moncode,moncode,char,4; + Ÿڵ,etccode,etccode,char,4; + ڵ,natcode,natcode,char,4; + ݵڵ,pefcode,pefcode,char,4; + ڵ,jisucd,jisucd,char,8; + ,jisunm,jisunm,char,20; + end + t2545OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + ڽð,datetime,datetime,char,14; + μżŷ,indmsvol,indmsvol,long,8; + μżŷ,indmsamt,indmsamt,double,12.0; + ܱμżŷ,formsvol,formsvol,long,8; + ܱμżŷ,formsamt,formsamt,double,12.0; + żŷ,sysmsvol,sysmsvol,long,8; + żŷ,sysmsamt,sysmsamt,double,12.0; + Ǽżŷ,stomsvol,stomsvol,long,8; + Ǽżŷ,stomsamt,stomsamt,double,12.0; + żżŷ,invmsvol,invmsvol,long,8; + żżŷ,invmsamt,invmsamt,double,12.0; + żŷ,banmsvol,banmsvol,long,8; + żŷ,banmsamt,banmsamt,double,12.0; + żŷ,insmsvol,insmsvol,long,8; + żŷ,insmsamt,insmsamt,double,12.0; + ݼżŷ,finmsvol,finmsvol,long,8; + ݼżŷ,finmsamt,finmsamt,double,12.0; + ݼżŷ,monmsvol,monmsvol,long,8; + ݼżŷ,monmsamt,monmsamt,double,12.0; + Ÿżŷ,etcmsvol,etcmsvol,long,8; + Ÿżŷ,etcmsamt,etcmsamt,double,12.0; + żŷ,natmsvol,natmsvol,long,8; + żŷ,natmsamt,natmsamt,double,12.0; + ݵżŷ,pefmsvol,pefmsvol,long,8; + ݵżŷ,pefmsamt,pefmsamt,double,12.0; + ,upclose,upclose,float,6.2; + üŷ,upcvolume,upcvolume,long,8; + شŷ,upvolume,upvolume,double,12.0; + ذŷ,upvalue,upvalue,double,12.0; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2830.res b/ls_sample/sample_python/Res/t2830.res new file mode 100644 index 0000000..d7e5749 --- /dev/null +++ b/ls_sample/sample_python/Res/t2830.res @@ -0,0 +1,50 @@ +BEGIN_FUNCTION_MAP + .Func,EUREXKOSPI200ɼǼ簡(ü)ȸ(t2830),t2830,attr,block,headtype=A; + BEGIN_DATA_MAP + t2830InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + end + t2830OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ذ,recprice,recprice,float,6.2; + ̷а,theoryprice,theoryprice,float,6.2; + 簡,actprice,actprice,float,6.2; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + KOSPI200,kospijisu,kospijisu,float,6.2; + KOSPI200ϴ񱸺,kospisign,kospisign,char,1; + KOSPI200ϴ,kospichange,kospichange,float,6.2; + KOSPI200,kospidiff,kospidiff,float,6.2; + CME߰簡,cmeprice,cmeprice,float,6.2; + CME߰ϴ񱸺,cmesign,cmesign,char,1; + CME߰ϴ,cmechange,cmechange,float,6.2; + CME߰,cmediff,cmediff,float,6.2; + CME߰ڵ,cmefocode,cmefocode,char,8; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + ڵ,focode,focode,char,8; + üᰡ,yeprice,yeprice,float,6.2; + ϴ񱸺,ysign,ysign,char,1; + ϴ,ychange,ychange,float,6.2; + ,ydiff,ydiff,float,6.2; + ϰȣ,danhochk,danhochk,char,1; + ϰŷ,jnilvolume,jnilvolume,long,12; + ϰŷ,jnilvalue,jnilvalue,long,12; + 3ܰѰ,uplmtprice_3rd,uplmtprice_3rd,float,6.2; + 3ܰѰ,dnlmtprice_3rd,dnlmtprice_3rd,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2830_2.res b/ls_sample/sample_python/Res/t2830_2.res new file mode 100644 index 0000000..d7e5749 --- /dev/null +++ b/ls_sample/sample_python/Res/t2830_2.res @@ -0,0 +1,50 @@ +BEGIN_FUNCTION_MAP + .Func,EUREXKOSPI200ɼǼ簡(ü)ȸ(t2830),t2830,attr,block,headtype=A; + BEGIN_DATA_MAP + t2830InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + end + t2830OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ذ,recprice,recprice,float,6.2; + ̷а,theoryprice,theoryprice,float,6.2; + 簡,actprice,actprice,float,6.2; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + KOSPI200,kospijisu,kospijisu,float,6.2; + KOSPI200ϴ񱸺,kospisign,kospisign,char,1; + KOSPI200ϴ,kospichange,kospichange,float,6.2; + KOSPI200,kospidiff,kospidiff,float,6.2; + CME߰簡,cmeprice,cmeprice,float,6.2; + CME߰ϴ񱸺,cmesign,cmesign,char,1; + CME߰ϴ,cmechange,cmechange,float,6.2; + CME߰,cmediff,cmediff,float,6.2; + CME߰ڵ,cmefocode,cmefocode,char,8; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + ڵ,focode,focode,char,8; + üᰡ,yeprice,yeprice,float,6.2; + ϴ񱸺,ysign,ysign,char,1; + ϴ,ychange,ychange,float,6.2; + ,ydiff,ydiff,float,6.2; + ϰȣ,danhochk,danhochk,char,1; + ϰŷ,jnilvolume,jnilvolume,long,12; + ϰŷ,jnilvalue,jnilvalue,long,12; + 3ܰѰ,uplmtprice_3rd,uplmtprice_3rd,float,6.2; + 3ܰѰ,dnlmtprice_3rd,dnlmtprice_3rd,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2831.res b/ls_sample/sample_python/Res/t2831.res new file mode 100644 index 0000000..b9fdb10 --- /dev/null +++ b/ls_sample/sample_python/Res/t2831.res @@ -0,0 +1,56 @@ +BEGIN_FUNCTION_MAP + .Func,EUREXKOSPI200ɼǼȣȸ(t2831),t2831,attr,block,headtype=A; + BEGIN_DATA_MAP + t2831InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + end + t2831OutBlock,,output; + begin + ,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,jnilclose,jnilclose,float,6.2; + ŵȣ1,offerho1,offerho1,float,6.2; + żȣ1,bidho1,bidho1,float,6.2; + ŵȣ1,offerrem1,offerrem1,long,8; + żȣ1,bidrem1,bidrem1,long,8; + ŵȣǼ1,dcnt1,dcnt1,long,8; + żȣǼ1,scnt1,scnt1,long,8; + ŵȣ2,offerho2,offerho2,float,6.2; + żȣ2,bidho2,bidho2,float,6.2; + ŵȣ2,offerrem2,offerrem2,long,8; + żȣ2,bidrem2,bidrem2,long,8; + ŵȣǼ2,dcnt2,dcnt2,long,8; + żȣǼ2,scnt2,scnt2,long,8; + ŵȣ3,offerho3,offerho3,float,6.2; + żȣ3,bidho3,bidho3,float,6.2; + ŵȣ3,offerrem3,offerrem3,long,8; + żȣ3,bidrem3,bidrem3,long,8; + ŵȣǼ3,dcnt3,dcnt3,long,8; + żȣǼ3,scnt3,scnt3,long,8; + ŵȣ4,offerho4,offerho4,float,6.2; + żȣ4,bidho4,bidho4,float,6.2; + ŵȣ4,offerrem4,offerrem4,long,8; + żȣ4,bidrem4,bidrem4,long,8; + ŵȣǼ4,dcnt4,dcnt4,long,8; + żȣǼ4,scnt4,scnt4,long,8; + ŵȣ5,offerho5,offerho5,float,6.2; + żȣ5,bidho5,bidho5,float,6.2; + ŵȣ5,offerrem5,offerrem5,long,8; + żȣ5,bidrem5,bidrem5,long,8; + ŵȣǼ5,dcnt5,dcnt5,long,8; + żȣǼ5,scnt5,scnt5,long,8; + ŵȣѼ,dvol,dvol,long,8; + żȣѼ,svol,svol,long,8; + ѸŵȣǼ,toffernum,toffernum,long,8; + ѸżȣǼ,tbidnum,tbidnum,long,8; + Žð,time,time,char,6; + ڵ,shcode,shcode,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2831_2.res b/ls_sample/sample_python/Res/t2831_2.res new file mode 100644 index 0000000..b9fdb10 --- /dev/null +++ b/ls_sample/sample_python/Res/t2831_2.res @@ -0,0 +1,56 @@ +BEGIN_FUNCTION_MAP + .Func,EUREXKOSPI200ɼǼȣȸ(t2831),t2831,attr,block,headtype=A; + BEGIN_DATA_MAP + t2831InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + end + t2831OutBlock,,output; + begin + ,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,jnilclose,jnilclose,float,6.2; + ŵȣ1,offerho1,offerho1,float,6.2; + żȣ1,bidho1,bidho1,float,6.2; + ŵȣ1,offerrem1,offerrem1,long,8; + żȣ1,bidrem1,bidrem1,long,8; + ŵȣǼ1,dcnt1,dcnt1,long,8; + żȣǼ1,scnt1,scnt1,long,8; + ŵȣ2,offerho2,offerho2,float,6.2; + żȣ2,bidho2,bidho2,float,6.2; + ŵȣ2,offerrem2,offerrem2,long,8; + żȣ2,bidrem2,bidrem2,long,8; + ŵȣǼ2,dcnt2,dcnt2,long,8; + żȣǼ2,scnt2,scnt2,long,8; + ŵȣ3,offerho3,offerho3,float,6.2; + żȣ3,bidho3,bidho3,float,6.2; + ŵȣ3,offerrem3,offerrem3,long,8; + żȣ3,bidrem3,bidrem3,long,8; + ŵȣǼ3,dcnt3,dcnt3,long,8; + żȣǼ3,scnt3,scnt3,long,8; + ŵȣ4,offerho4,offerho4,float,6.2; + żȣ4,bidho4,bidho4,float,6.2; + ŵȣ4,offerrem4,offerrem4,long,8; + żȣ4,bidrem4,bidrem4,long,8; + ŵȣǼ4,dcnt4,dcnt4,long,8; + żȣǼ4,scnt4,scnt4,long,8; + ŵȣ5,offerho5,offerho5,float,6.2; + żȣ5,bidho5,bidho5,float,6.2; + ŵȣ5,offerrem5,offerrem5,long,8; + żȣ5,bidrem5,bidrem5,long,8; + ŵȣǼ5,dcnt5,dcnt5,long,8; + żȣǼ5,scnt5,scnt5,long,8; + ŵȣѼ,dvol,dvol,long,8; + żȣѼ,svol,svol,long,8; + ѸŵȣǼ,toffernum,toffernum,long,8; + ѸżȣǼ,tbidnum,tbidnum,long,8; + Žð,time,time,char,6; + ڵ,shcode,shcode,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2832.res b/ls_sample/sample_python/Res/t2832.res new file mode 100644 index 0000000..065c0f2 --- /dev/null +++ b/ls_sample/sample_python/Res/t2832.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX߰ɼǼð뺰üȸ(t2832),t2832,attr,block,headtype=A; + BEGIN_DATA_MAP + t2832InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t2832OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t2832OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,8.2; + ŵȣ,offerho,offerho,float,6.2; + żȣ,bidho,bidho,float,6.2; + ŷ,volume,volume,double,12.0; + żüᷮ,n_msvolume,n_msvolume,double,12.0; + ŵüᷮ,n_mdvolume,n_mdvolume,double,12.0; + żüᷮ,s_msvolume,s_msvolume,double,12.0; + żüǼ,n_mschecnt,n_mschecnt,long,8; + ŵüǼ,n_mdchecnt,n_mdchecnt,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2832_2.res b/ls_sample/sample_python/Res/t2832_2.res new file mode 100644 index 0000000..065c0f2 --- /dev/null +++ b/ls_sample/sample_python/Res/t2832_2.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX߰ɼǼð뺰üȸ(t2832),t2832,attr,block,headtype=A; + BEGIN_DATA_MAP + t2832InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t2832OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t2832OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,8.2; + ŵȣ,offerho,offerho,float,6.2; + żȣ,bidho,bidho,float,6.2; + ŷ,volume,volume,double,12.0; + żüᷮ,n_msvolume,n_msvolume,double,12.0; + ŵüᷮ,n_mdvolume,n_mdvolume,double,12.0; + żüᷮ,s_msvolume,s_msvolume,double,12.0; + żüǼ,n_mschecnt,n_mschecnt,long,8; + ŵüǼ,n_mdchecnt,n_mdchecnt,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2833.res b/ls_sample/sample_python/Res/t2833.res new file mode 100644 index 0000000..5e54280 --- /dev/null +++ b/ls_sample/sample_python/Res/t2833.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX߰ɼǼⰣ(t2833),t2833,attr,block,headtype=A; + BEGIN_DATA_MAP + t2833InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱٿ,futcheck,futcheck,char,1; + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ȸûǼ,cnt,cnt,int,3; + end + t2833OutBlock,,output; + begin + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ֱٿ,nowfutyn,nowfutyn,char,1; + end + t2833OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2833_2.res b/ls_sample/sample_python/Res/t2833_2.res new file mode 100644 index 0000000..5e54280 --- /dev/null +++ b/ls_sample/sample_python/Res/t2833_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX߰ɼǼⰣ(t2833),t2833,attr,block,headtype=A; + BEGIN_DATA_MAP + t2833InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱٿ,futcheck,futcheck,char,1; + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ȸûǼ,cnt,cnt,int,3; + end + t2833OutBlock,,output; + begin + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ֱٿ,nowfutyn,nowfutyn,char,1; + end + t2833OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2835.res b/ls_sample/sample_python/Res/t2835.res new file mode 100644 index 0000000..c4f6975 --- /dev/null +++ b/ls_sample/sample_python/Res/t2835.res @@ -0,0 +1,64 @@ +BEGIN_FUNCTION_MAP + .Func,EUREXɼǼü(t2835),t2835,attr,block,headtype=A; + BEGIN_DATA_MAP + t2835InBlock,⺻Է,input; + begin + (ȤֹWN),yyyymm,yyyymm,char,6; + (G:W:Ŭ),gubun,gubun,char,1; + end + t2835OutBlock,,output; + begin + ٿ簡,gmprice,gmprice,float,6.2; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,float,6.2; + ٿ,gmdiff,gmdiff,float,6.2; + ٿŷ,gmvolume,gmvolume,long,12; + ٿڵ,gmshcode,gmshcode,char,8; + end + t2835OutBlock1,1,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + ݿɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + end + t2835OutBlock2,2,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + Dzɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t2835_2.res b/ls_sample/sample_python/Res/t2835_2.res new file mode 100644 index 0000000..c4f6975 --- /dev/null +++ b/ls_sample/sample_python/Res/t2835_2.res @@ -0,0 +1,64 @@ +BEGIN_FUNCTION_MAP + .Func,EUREXɼǼü(t2835),t2835,attr,block,headtype=A; + BEGIN_DATA_MAP + t2835InBlock,⺻Է,input; + begin + (ȤֹWN),yyyymm,yyyymm,char,6; + (G:W:Ŭ),gubun,gubun,char,1; + end + t2835OutBlock,,output; + begin + ٿ簡,gmprice,gmprice,float,6.2; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,float,6.2; + ٿ,gmdiff,gmdiff,float,6.2; + ٿŷ,gmvolume,gmvolume,long,12; + ٿڵ,gmshcode,gmshcode,char,8; + end + t2835OutBlock1,1,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + ݿɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + end + t2835OutBlock2,2,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + Dzɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t3102.res b/ls_sample/sample_python/Res/t3102.res new file mode 100644 index 0000000..c60701b --- /dev/null +++ b/ls_sample/sample_python/Res/t3102.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,(t3102),t3102,block,headtype=A; + BEGIN_DATA_MAP + t3102InBlock,⺻Է,input; + begin + ȣ,sNewsno,sNewsno,char,24; + end + t3102OutBlock,⺻,output,occurs; + begin + ,sJongcode,sJongcode,char,6; + end + t3102OutBlock1,⺻1,output,occurs; + begin + ,sBody,sBody,char,100; + end + t3102OutBlock2,⺻2,output; + begin + ŸƲ,sTitle,sTitle,char,300; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t3102_2.res b/ls_sample/sample_python/Res/t3102_2.res new file mode 100644 index 0000000..c60701b --- /dev/null +++ b/ls_sample/sample_python/Res/t3102_2.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,(t3102),t3102,block,headtype=A; + BEGIN_DATA_MAP + t3102InBlock,⺻Է,input; + begin + ȣ,sNewsno,sNewsno,char,24; + end + t3102OutBlock,⺻,output,occurs; + begin + ,sJongcode,sJongcode,char,6; + end + t3102OutBlock1,⺻1,output,occurs; + begin + ,sBody,sBody,char,100; + end + t3102OutBlock2,⺻2,output; + begin + ŸƲ,sTitle,sTitle,char,300; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t3202.res b/ls_sample/sample_python/Res/t3202.res new file mode 100644 index 0000000..6a6139e --- /dev/null +++ b/ls_sample/sample_python/Res/t3202.res @@ -0,0 +1,21 @@ +BEGIN_FUNCTION_MAP + .Func,(t3202),t3202,attr,block,headtype=A; + BEGIN_DATA_MAP + t3202InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ȸ,date,date,char,8; + end + t3202OutBlock,,output,occurs; + begin + ,recdt,recdt,char,8; + ̵̺,tableid,tableid,char,6; + ,upgu,upgu,char,2; + üȣ,custno,custno,char,5; + ȸ,custnm,custnm,char,80; + ڵ,shcode,shcode,char,6; + ,upunm,upnm,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t3202_2.res b/ls_sample/sample_python/Res/t3202_2.res new file mode 100644 index 0000000..6a6139e --- /dev/null +++ b/ls_sample/sample_python/Res/t3202_2.res @@ -0,0 +1,21 @@ +BEGIN_FUNCTION_MAP + .Func,(t3202),t3202,attr,block,headtype=A; + BEGIN_DATA_MAP + t3202InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ȸ,date,date,char,8; + end + t3202OutBlock,,output,occurs; + begin + ,recdt,recdt,char,8; + ̵̺,tableid,tableid,char,6; + ,upgu,upgu,char,2; + üȣ,custno,custno,char,5; + ȸ,custnm,custnm,char,80; + ڵ,shcode,shcode,char,6; + ,upunm,upnm,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t3320.res b/ls_sample/sample_python/Res/t3320.res new file mode 100644 index 0000000..66b32a0 --- /dev/null +++ b/ls_sample/sample_python/Res/t3320.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,FNG_(t3320),t3320,attr,block,headtype=A; + BEGIN_DATA_MAP + t3320InBlock,⺻Է,input; + begin + ڵ,gicode,gicode,char,7; + end + t3320OutBlock,⺻,output; + begin + и,upgubunnm,upgubunnm,char,20; + 屸,sijangcd,sijangcd,char,1; + 屸и,marketnm,marketnm,char,10; + ѱ۱,company,company,char,100; + ּ,baddress,baddress,char,100; + ȭȣ,btelno,btelno,char,20; + ֱٰ⵵,gsyyyy,gsyyyy,char,4; + ,gsmm,gsmm,char,2; + ֱٰ,gsym,gsym,char,6; + ִ׸鰡,lstprice,lstprice,long,12; + ֽļ,gstock,gstock,long,12; + Homepage,homeurl,homeurl,char,50; + ׷,grdnm,grdnm,char,30; + ܱ,foreignratio,foreignratio,float,6.2; + ִȭ,irtel,irtel,char,30; + ں,capital,capital,float,12.0; + ðѾ,sigavalue,sigavalue,float,12.0; + ,cashsis,cashsis,float,12.0; + ,cashrate,cashrate,float,13.2; + 簡,price,price,long,8; + ,jnilclose,jnilclose,long,8; + 1_Ÿ,notice1,notice1,char,1; + 2_,notice2,notice2,char,1; + 3_ܱ,notice3,notice3,char,1; + end + t3320OutBlock1,繫,output; + begin + ڵ,gicode,gicode,char,7; + ,gsym,gsym,char,6; + 걸,gsgb,gsgb,char,1; + PER,per,per,float,13.2; + EPS,eps,eps,float,13.0; + PBR,pbr,pbr,float,13.2; + ROA,roa,roa,float,13.2; + ROE,roe,roe,float,13.2; + EBITDA,ebitda,ebitda,float,13.2; + EVEBITDA,evebitda,evebitda,float,13.2; + ׸鰡,par,par,float,13.2; + SPS,sps,sps,float,13.2; + CPS,cps,cps,float,13.2; + BPS,bps,bps,float,13.0; + T.PER,t_per,t_per,float,13.2; + T.EPS,t_eps,t_eps,float,13.0; + PEG,peg,peg,float,13.2; + T.PEG,t_peg,t_peg,float,13.2; + ֱٺб⵵,t_gsym,t_gsym,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t3320_2.res b/ls_sample/sample_python/Res/t3320_2.res new file mode 100644 index 0000000..66b32a0 --- /dev/null +++ b/ls_sample/sample_python/Res/t3320_2.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,FNG_(t3320),t3320,attr,block,headtype=A; + BEGIN_DATA_MAP + t3320InBlock,⺻Է,input; + begin + ڵ,gicode,gicode,char,7; + end + t3320OutBlock,⺻,output; + begin + и,upgubunnm,upgubunnm,char,20; + 屸,sijangcd,sijangcd,char,1; + 屸и,marketnm,marketnm,char,10; + ѱ۱,company,company,char,100; + ּ,baddress,baddress,char,100; + ȭȣ,btelno,btelno,char,20; + ֱٰ⵵,gsyyyy,gsyyyy,char,4; + ,gsmm,gsmm,char,2; + ֱٰ,gsym,gsym,char,6; + ִ׸鰡,lstprice,lstprice,long,12; + ֽļ,gstock,gstock,long,12; + Homepage,homeurl,homeurl,char,50; + ׷,grdnm,grdnm,char,30; + ܱ,foreignratio,foreignratio,float,6.2; + ִȭ,irtel,irtel,char,30; + ں,capital,capital,float,12.0; + ðѾ,sigavalue,sigavalue,float,12.0; + ,cashsis,cashsis,float,12.0; + ,cashrate,cashrate,float,13.2; + 簡,price,price,long,8; + ,jnilclose,jnilclose,long,8; + 1_Ÿ,notice1,notice1,char,1; + 2_,notice2,notice2,char,1; + 3_ܱ,notice3,notice3,char,1; + end + t3320OutBlock1,繫,output; + begin + ڵ,gicode,gicode,char,7; + ,gsym,gsym,char,6; + 걸,gsgb,gsgb,char,1; + PER,per,per,float,13.2; + EPS,eps,eps,float,13.0; + PBR,pbr,pbr,float,13.2; + ROA,roa,roa,float,13.2; + ROE,roe,roe,float,13.2; + EBITDA,ebitda,ebitda,float,13.2; + EVEBITDA,evebitda,evebitda,float,13.2; + ׸鰡,par,par,float,13.2; + SPS,sps,sps,float,13.2; + CPS,cps,cps,float,13.2; + BPS,bps,bps,float,13.0; + T.PER,t_per,t_per,float,13.2; + T.EPS,t_eps,t_eps,float,13.0; + PEG,peg,peg,float,13.2; + T.PEG,t_peg,t_peg,float,13.2; + ֱٺб⵵,t_gsym,t_gsym,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t3341.res b/ls_sample/sample_python/Res/t3341.res new file mode 100644 index 0000000..a0642b6 --- /dev/null +++ b/ls_sample/sample_python/Res/t3341.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,繫(t3341),t3341,attr,block,headtype=A; + BEGIN_DATA_MAP + t3341InBlock,⺻Է,input; + begin + 屸,gubun,gubun,char,1; + (1:2:3:4:ä5:6:EPS7:BPS8:ROE9:PERa:PBRb:PEG),gubun1,gubun1,char,1; + 񱸺,gubun2,gubun2,char,1; + IDX,idx,idx,long,4; + end + t3341OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + IDX,idx,idx,long,4; + end + t3341OutBlock1,1,output,occurs; + begin + ,rank,rank,long,4; + ,hname,hname,char,20; + ,salesgrowth,salesgrowth,long,12; + ,operatingincomegrowt,operatingincomegrowt,long,12; + ,ordinaryincomegrowth,ordinaryincomegrowth,long,12; + ä,liabilitytoequity,liabilitytoequity,long,12; + ,enterpriseratio,enterpriseratio,long,12; + EPS,eps,eps,long,12; + BPS,bps,bps,long,12; + ROE,roe,roe,long,12; + ڵ,shcode,shcode,char,6; + PER,per,per,float,13.2; + PBR,pbr,pbr,float,13.2; + PEG,peg,peg,float,13.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t3341_2.res b/ls_sample/sample_python/Res/t3341_2.res new file mode 100644 index 0000000..a0642b6 --- /dev/null +++ b/ls_sample/sample_python/Res/t3341_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,繫(t3341),t3341,attr,block,headtype=A; + BEGIN_DATA_MAP + t3341InBlock,⺻Է,input; + begin + 屸,gubun,gubun,char,1; + (1:2:3:4:ä5:6:EPS7:BPS8:ROE9:PERa:PBRb:PEG),gubun1,gubun1,char,1; + 񱸺,gubun2,gubun2,char,1; + IDX,idx,idx,long,4; + end + t3341OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + IDX,idx,idx,long,4; + end + t3341OutBlock1,1,output,occurs; + begin + ,rank,rank,long,4; + ,hname,hname,char,20; + ,salesgrowth,salesgrowth,long,12; + ,operatingincomegrowt,operatingincomegrowt,long,12; + ,ordinaryincomegrowth,ordinaryincomegrowth,long,12; + ä,liabilitytoequity,liabilitytoequity,long,12; + ,enterpriseratio,enterpriseratio,long,12; + EPS,eps,eps,long,12; + BPS,bps,bps,long,12; + ROE,roe,roe,long,12; + ڵ,shcode,shcode,char,6; + PER,per,per,float,13.2; + PBR,pbr,pbr,float,13.2; + PEG,peg,peg,float,13.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t3401.res b/ls_sample/sample_python/Res/t3401.res new file mode 100644 index 0000000..d5f07f0 --- /dev/null +++ b/ls_sample/sample_python/Res/t3401.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ǰ(t3401),t3401,attr,block,headtype=A; + BEGIN_DATA_MAP + t3401InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,9; + ,gubun1,gubun1,char,1; + ȸڵ,tradno,tradno,char,3; + IDXDATE,cts_date,cts_date,char,8; + end + t3401OutBlock,,output; + begin + IDXDATE,cts_date,cts_date,char,8; + 簡,price,price,long,8; + Ӽ,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + end + t3401OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,9; + ȸڵ,tradno,tradno,char,3; + ǰ,date,date,char,8; + ȸ,tradname,tradname,char,30; + ǰߺ,bopn,bopn,char,30; + ǰߺ,nopn,nopn,char,30; + ǥ,boga,boga,long,12; + ǥ,noga,noga,long,12; + ǰ,close,close,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t3401_2.res b/ls_sample/sample_python/Res/t3401_2.res new file mode 100644 index 0000000..d5f07f0 --- /dev/null +++ b/ls_sample/sample_python/Res/t3401_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ǰ(t3401),t3401,attr,block,headtype=A; + BEGIN_DATA_MAP + t3401InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,9; + ,gubun1,gubun1,char,1; + ȸڵ,tradno,tradno,char,3; + IDXDATE,cts_date,cts_date,char,8; + end + t3401OutBlock,,output; + begin + IDXDATE,cts_date,cts_date,char,8; + 簡,price,price,long,8; + Ӽ,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + end + t3401OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,9; + ȸڵ,tradno,tradno,char,3; + ǰ,date,date,char,8; + ȸ,tradname,tradname,char,30; + ǰߺ,bopn,bopn,char,30; + ǰߺ,nopn,nopn,char,30; + ǥ,boga,boga,long,12; + ǥ,noga,noga,long,12; + ǰ,close,close,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t3518.res b/ls_sample/sample_python/Res/t3518.res new file mode 100644 index 0000000..2b85633 --- /dev/null +++ b/ls_sample/sample_python/Res/t3518.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܽǽð(t3518),t3518,attr,block,headtype=A; + BEGIN_DATA_MAP + t3518InBlock,Է,input; + begin + ,kind,kind,char,1; + SYMBOL,symbol,symbol,char,16; + Է°Ǽ,cnt,cnt,long,4; + ȸ,jgbn,jgbn,char,1; + N,nmin,nmin,long,3; + CTS_DATE,cts_date,cts_date,char,8; + CTS_TIME,cts_time,cts_time,char,6; + end + t3518OutBlock,,output; + begin + CTS_DATE,cts_date,cts_date,char,8; + CTS_TIME,cts_time,cts_time,char,6; + end + t3518OutBlock1,Ƽ,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,8; + ð,open,open,double,9.4; + ,high,high,double,9.4; + ,low,low,double,9.4; + 簡,price,price,double,9.4; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,9.4; + ,uprate,uprate,double,9.4; + ŷ,volume,volume,double,12.0; + żȣ,bidho,bidho,double,9.4; + ŵȣ,offerho,offerho,double,9.4; + żܷ,bidrem,bidrem,double,12.0; + ŵܷ,offerrem,offerrem,double,12.0; + ,kind,kind,char,1; + SYMBOL,symbol,symbol,char,16; + EXID,exid,exid,char,4; + ѱ,kodate,kodate,char,8; + ѱð,kotime,kotime,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t3518_2.res b/ls_sample/sample_python/Res/t3518_2.res new file mode 100644 index 0000000..2b85633 --- /dev/null +++ b/ls_sample/sample_python/Res/t3518_2.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܽǽð(t3518),t3518,attr,block,headtype=A; + BEGIN_DATA_MAP + t3518InBlock,Է,input; + begin + ,kind,kind,char,1; + SYMBOL,symbol,symbol,char,16; + Է°Ǽ,cnt,cnt,long,4; + ȸ,jgbn,jgbn,char,1; + N,nmin,nmin,long,3; + CTS_DATE,cts_date,cts_date,char,8; + CTS_TIME,cts_time,cts_time,char,6; + end + t3518OutBlock,,output; + begin + CTS_DATE,cts_date,cts_date,char,8; + CTS_TIME,cts_time,cts_time,char,6; + end + t3518OutBlock1,Ƽ,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,8; + ð,open,open,double,9.4; + ,high,high,double,9.4; + ,low,low,double,9.4; + 簡,price,price,double,9.4; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,9.4; + ,uprate,uprate,double,9.4; + ŷ,volume,volume,double,12.0; + żȣ,bidho,bidho,double,9.4; + ŵȣ,offerho,offerho,double,9.4; + żܷ,bidrem,bidrem,double,12.0; + ŵܷ,offerrem,offerrem,double,12.0; + ,kind,kind,char,1; + SYMBOL,symbol,symbol,char,16; + EXID,exid,exid,char,4; + ѱ,kodate,kodate,char,8; + ѱð,kotime,kotime,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t3521.res b/ls_sample/sample_python/Res/t3521.res new file mode 100644 index 0000000..e540836 --- /dev/null +++ b/ls_sample/sample_python/Res/t3521.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ؿȸ(API)(t3521),t3521,attr,block,headtype=A; + BEGIN_DATA_MAP + t3521InBlock,⺻Է,input; + begin + ,kind,kind,char,1; + SYMBOL,symbol,symbol,char,16; + end + t3521OutBlock,,output; + begin + ɹ,symbol,symbol,char,16; + ,hname,hname,char,20; + ,close,close,float,12.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + ,diff,diff,float,6.2; + ,date,date,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t3521 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t3521_2.res b/ls_sample/sample_python/Res/t3521_2.res new file mode 100644 index 0000000..e540836 --- /dev/null +++ b/ls_sample/sample_python/Res/t3521_2.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ؿȸ(API)(t3521),t3521,attr,block,headtype=A; + BEGIN_DATA_MAP + t3521InBlock,⺻Է,input; + begin + ,kind,kind,char,1; + SYMBOL,symbol,symbol,char,16; + end + t3521OutBlock,,output; + begin + ɹ,symbol,symbol,char,16; + ,hname,hname,char,20; + ,close,close,float,12.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + ,diff,diff,float,6.2; + ,date,date,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t3521 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t4201.res b/ls_sample/sample_python/Res/t4201.res new file mode 100644 index 0000000..ac8aec4 --- /dev/null +++ b/ls_sample/sample_python/Res/t4201.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ()(t4201),t4201,attr,block,headtype=A; + BEGIN_DATA_MAP + t4201InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֱⱸ(0:ƽ1:2:3:4:),gubun,gubun,char,1; + ƽ,ncnt,ncnt,long,4; + Ǽ(500),qrycnt,qrycnt,long,4; + ϱ(0:ü1:ϸ),tdgb,tdgb,char,1; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ(0:ü1:Ӵϸ2:ϸ),cts_daygb,cts_daygb,char,1; + end + t4201OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,1; + end + t4201OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + ݿŷ,ratevalue,ratevalue,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t4201_2.res b/ls_sample/sample_python/Res/t4201_2.res new file mode 100644 index 0000000..ac8aec4 --- /dev/null +++ b/ls_sample/sample_python/Res/t4201_2.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ()(t4201),t4201,attr,block,headtype=A; + BEGIN_DATA_MAP + t4201InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֱⱸ(0:ƽ1:2:3:4:),gubun,gubun,char,1; + ƽ,ncnt,ncnt,long,4; + Ǽ(500),qrycnt,qrycnt,long,4; + ϱ(0:ü1:ϸ),tdgb,tdgb,char,1; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ(0:ü1:Ӵϸ2:ϸ),cts_daygb,cts_daygb,char,1; + end + t4201OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,1; + end + t4201OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + ݿŷ,ratevalue,ratevalue,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t4203.res b/ls_sample/sample_python/Res/t4203.res new file mode 100644 index 0000000..ef0746d --- /dev/null +++ b/ls_sample/sample_python/Res/t4203.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,íƮ()(t4203),t4203,attr,block,headtype=A; + BEGIN_DATA_MAP + t4203InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + ֱⱸ(0:ƽ1:2:3:4:),gubun,gubun,char,1; + ƽ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ϱ(0:ü1:ϸ),tdgb,tdgb,char,1; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ(0:ü1:Ӵϸ2:ϸ),cts_daygb,cts_daygb,char,1; + end + t4203OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ϰŷ,disvalue,disvalue,long,12; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,1; + end + t4203OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t4203_2.res b/ls_sample/sample_python/Res/t4203_2.res new file mode 100644 index 0000000..ef0746d --- /dev/null +++ b/ls_sample/sample_python/Res/t4203_2.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,íƮ()(t4203),t4203,attr,block,headtype=A; + BEGIN_DATA_MAP + t4203InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + ֱⱸ(0:ƽ1:2:3:4:),gubun,gubun,char,1; + ƽ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ϱ(0:ü1:ϸ),tdgb,tdgb,char,1; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ(0:ü1:Ӵϸ2:ϸ),cts_daygb,cts_daygb,char,1; + end + t4203OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ϰŷ,disvalue,disvalue,long,12; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,1; + end + t4203OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8401.res b/ls_sample/sample_python/Res/t8401.res new file mode 100644 index 0000000..054bead --- /dev/null +++ b/ls_sample/sample_python/Res/t8401.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļȸ(API)(t8401),t8401,block,headtype=A; + BEGIN_DATA_MAP + t8401InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8401OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + ڻڵ,basecode,basecode,char,9; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8401_2.res b/ls_sample/sample_python/Res/t8401_2.res new file mode 100644 index 0000000..054bead --- /dev/null +++ b/ls_sample/sample_python/Res/t8401_2.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļȸ(API)(t8401),t8401,block,headtype=A; + BEGIN_DATA_MAP + t8401InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8401OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + ڻڵ,basecode,basecode,char,9; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8402.res b/ls_sample/sample_python/Res/t8402.res new file mode 100644 index 0000000..7fca1a1 --- /dev/null +++ b/ls_sample/sample_python/Res/t8402.res @@ -0,0 +1,81 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļ簡ȸ(API)(t8402),t8402,attr,block,headtype=A; + BEGIN_DATA_MAP + t8402InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + end + t8402OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,jnilclose,jnilclose,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷϵð,stimeqrt,stimeqrt,double,6.2; + ŷ,value,value,long,12; + ̰,mgjv,mgjv,long,8; + ̰,mgjvdiff,mgjvdiff,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + 52ְ,high52w,high52w,long,8; + 52,low52w,low52w,long,8; + ̽ý,basis,basis,float,6.2; + ذ,recprice,recprice,long,8; + ̷а,theoryprice,theoryprice,long,8; + ,glyl,glyl,float,6.3; + ,lastmonth,lastmonth,char,8; + ܿ,jandatecnt,jandatecnt,long,8; + ,pricejisu,pricejisu,float,6.2; + ϴ񱸺,jisusign,jisusign,char,1; + ϴ,jisuchange,jisuchange,float,6.2; + ,jisudiff,jisudiff,float,6.2; + KOSPI200,kospijisu,kospijisu,float,6.2; + KOSPI200ϴ񱸺,kospisign,kospisign,char,1; + KOSPI200ϴ,kospichange,kospichange,float,6.2; + KOSPI200,kospidiff,kospidiff,float,6.2; + ְ,listhprice,listhprice,long,8; + ,listlprice,listlprice,long,8; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ,vega,vega,float,6.4; + ο,rhox,rhox,float,6.4; + ٿ簡,gmprice,gmprice,long,8; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,long,8; + ٿ,gmdiff,gmdiff,float,6.2; + ̷а,theorypriceg,theorypriceg,long,8; + ,histimpv,histimpv,float,6.2; + 纯,impv,impv,float,6.2; + BASIS,sbasis,sbasis,long,8; + ̷BASIS,ibasis,ibasis,long,8; + ٿڵ,gmfutcode,gmfutcode,char,8; + 簡,actprice,actprice,long,8; + ڻڵ,shcode,shcode,char,6; + ڻѱ۸,basehname,basehname,char,20; + ڻ簡,baseprice,baseprice,long,8; + ڻ簡񱸺,basesign,basesign,char,1; + ڻ簡ϴ,basechange,basechange,long,8; + ڻ,basediff,basediff,float,6.2; + ڻŷ,basevol,basevol,long,12; + ڻϰŷ,baseprevol,baseprevol,long,12; + ڻżȣ,basebidprc,basebidprc,long,9; + ڻŵȣ,baseaskprc,baseaskprc,long,9; + ڻܱȸż,basefornetbid,basefornetbid,long,12; + ǰ,prodgrp,prodgrp,char,20; + ¼,mulcnt,mulcnt,float,12.8; + ϰȣ,danhochk,danhochk,char,1; + üᰡ,yeprice,yeprice,long,8; + üᰡ񱸺,jnilysign,jnilysign,char,1; + üᰡ,jnilychange,jnilychange,long,8; + üᰡ,jnilydrate,jnilydrate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8402_2.res b/ls_sample/sample_python/Res/t8402_2.res new file mode 100644 index 0000000..7fca1a1 --- /dev/null +++ b/ls_sample/sample_python/Res/t8402_2.res @@ -0,0 +1,81 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļ簡ȸ(API)(t8402),t8402,attr,block,headtype=A; + BEGIN_DATA_MAP + t8402InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + end + t8402OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,jnilclose,jnilclose,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷϵð,stimeqrt,stimeqrt,double,6.2; + ŷ,value,value,long,12; + ̰,mgjv,mgjv,long,8; + ̰,mgjvdiff,mgjvdiff,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + 52ְ,high52w,high52w,long,8; + 52,low52w,low52w,long,8; + ̽ý,basis,basis,float,6.2; + ذ,recprice,recprice,long,8; + ̷а,theoryprice,theoryprice,long,8; + ,glyl,glyl,float,6.3; + ,lastmonth,lastmonth,char,8; + ܿ,jandatecnt,jandatecnt,long,8; + ,pricejisu,pricejisu,float,6.2; + ϴ񱸺,jisusign,jisusign,char,1; + ϴ,jisuchange,jisuchange,float,6.2; + ,jisudiff,jisudiff,float,6.2; + KOSPI200,kospijisu,kospijisu,float,6.2; + KOSPI200ϴ񱸺,kospisign,kospisign,char,1; + KOSPI200ϴ,kospichange,kospichange,float,6.2; + KOSPI200,kospidiff,kospidiff,float,6.2; + ְ,listhprice,listhprice,long,8; + ,listlprice,listlprice,long,8; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ,vega,vega,float,6.4; + ο,rhox,rhox,float,6.4; + ٿ簡,gmprice,gmprice,long,8; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,long,8; + ٿ,gmdiff,gmdiff,float,6.2; + ̷а,theorypriceg,theorypriceg,long,8; + ,histimpv,histimpv,float,6.2; + 纯,impv,impv,float,6.2; + BASIS,sbasis,sbasis,long,8; + ̷BASIS,ibasis,ibasis,long,8; + ٿڵ,gmfutcode,gmfutcode,char,8; + 簡,actprice,actprice,long,8; + ڻڵ,shcode,shcode,char,6; + ڻѱ۸,basehname,basehname,char,20; + ڻ簡,baseprice,baseprice,long,8; + ڻ簡񱸺,basesign,basesign,char,1; + ڻ簡ϴ,basechange,basechange,long,8; + ڻ,basediff,basediff,float,6.2; + ڻŷ,basevol,basevol,long,12; + ڻϰŷ,baseprevol,baseprevol,long,12; + ڻżȣ,basebidprc,basebidprc,long,9; + ڻŵȣ,baseaskprc,baseaskprc,long,9; + ڻܱȸż,basefornetbid,basefornetbid,long,12; + ǰ,prodgrp,prodgrp,char,20; + ¼,mulcnt,mulcnt,float,12.8; + ϰȣ,danhochk,danhochk,char,1; + üᰡ,yeprice,yeprice,long,8; + üᰡ񱸺,jnilysign,jnilysign,char,1; + üᰡ,jnilychange,jnilychange,long,8; + üᰡ,jnilydrate,jnilydrate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8403.res b/ls_sample/sample_python/Res/t8403.res new file mode 100644 index 0000000..b4c6ce1 --- /dev/null +++ b/ls_sample/sample_python/Res/t8403.res @@ -0,0 +1,88 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļȣȸ(API)(t8403),t8403,attr,block,headtype=A; + BEGIN_DATA_MAP + t8403InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + end + t8403OutBlock,,output; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷϵð,stimeqrt,stimeqrt,float,6.2; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,8; + żȣ1,bidrem1,bidrem1,long,8; + ŵȣǼ1,dcnt1,dcnt1,long,8; + żȣǼ1,scnt1,scnt1,long,8; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,8; + żȣ2,bidrem2,bidrem2,long,8; + ŵȣǼ2,dcnt2,dcnt2,long,8; + żȣǼ2,scnt2,scnt2,long,8; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,8; + żȣ3,bidrem3,bidrem3,long,8; + ŵȣǼ3,dcnt3,dcnt3,long,8; + żȣǼ3,scnt3,scnt3,long,8; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,8; + żȣ4,bidrem4,bidrem4,long,8; + ŵȣǼ4,dcnt4,dcnt4,long,8; + żȣǼ4,scnt4,scnt4,long,8; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,8; + żȣ5,bidrem5,bidrem5,long,8; + ŵȣǼ5,dcnt5,dcnt5,long,8; + żȣǼ5,scnt5,scnt5,long,8; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,8; + żȣ6,bidrem6,bidrem6,long,8; + ŵȣǼ6,dcnt6,dcnt6,long,8; + żȣǼ6,scnt6,scnt6,long,8; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,8; + żȣ7,bidrem7,bidrem7,long,8; + ŵȣǼ7,dcnt7,dcnt7,long,8; + żȣǼ7,scnt7,scnt7,long,8; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,8; + żȣ8,bidrem8,bidrem8,long,8; + ŵȣǼ8,dcnt8,dcnt8,long,8; + żȣǼ8,scnt8,scnt8,long,8; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,8; + żȣ9,bidrem9,bidrem9,long,8; + ŵȣǼ9,dcnt9,dcnt9,long,8; + żȣǼ9,scnt9,scnt9,long,8; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,8; + żȣ10,bidrem10,bidrem10,long,8; + ŵȣǼ10,dcnt10,dcnt10,long,8; + żȣǼ10,scnt10,scnt10,long,8; + ŵȣѼ,dvol,dvol,long,8; + żȣѼ,svol,svol,long,8; + ѸŵȣǼ,toffernum,toffernum,long,8; + ѸżȣǼ,tbidnum,tbidnum,long,8; + Žð,time,time,char,6; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8403 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t8403_2.res b/ls_sample/sample_python/Res/t8403_2.res new file mode 100644 index 0000000..b4c6ce1 --- /dev/null +++ b/ls_sample/sample_python/Res/t8403_2.res @@ -0,0 +1,88 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļȣȸ(API)(t8403),t8403,attr,block,headtype=A; + BEGIN_DATA_MAP + t8403InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + end + t8403OutBlock,,output; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷϵð,stimeqrt,stimeqrt,float,6.2; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,8; + żȣ1,bidrem1,bidrem1,long,8; + ŵȣǼ1,dcnt1,dcnt1,long,8; + żȣǼ1,scnt1,scnt1,long,8; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,8; + żȣ2,bidrem2,bidrem2,long,8; + ŵȣǼ2,dcnt2,dcnt2,long,8; + żȣǼ2,scnt2,scnt2,long,8; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,8; + żȣ3,bidrem3,bidrem3,long,8; + ŵȣǼ3,dcnt3,dcnt3,long,8; + żȣǼ3,scnt3,scnt3,long,8; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,8; + żȣ4,bidrem4,bidrem4,long,8; + ŵȣǼ4,dcnt4,dcnt4,long,8; + żȣǼ4,scnt4,scnt4,long,8; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,8; + żȣ5,bidrem5,bidrem5,long,8; + ŵȣǼ5,dcnt5,dcnt5,long,8; + żȣǼ5,scnt5,scnt5,long,8; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,8; + żȣ6,bidrem6,bidrem6,long,8; + ŵȣǼ6,dcnt6,dcnt6,long,8; + żȣǼ6,scnt6,scnt6,long,8; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,8; + żȣ7,bidrem7,bidrem7,long,8; + ŵȣǼ7,dcnt7,dcnt7,long,8; + żȣǼ7,scnt7,scnt7,long,8; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,8; + żȣ8,bidrem8,bidrem8,long,8; + ŵȣǼ8,dcnt8,dcnt8,long,8; + żȣǼ8,scnt8,scnt8,long,8; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,8; + żȣ9,bidrem9,bidrem9,long,8; + ŵȣǼ9,dcnt9,dcnt9,long,8; + żȣǼ9,scnt9,scnt9,long,8; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,8; + żȣ10,bidrem10,bidrem10,long,8; + ŵȣǼ10,dcnt10,dcnt10,long,8; + żȣǼ10,scnt10,scnt10,long,8; + ŵȣѼ,dvol,dvol,long,8; + żȣѼ,svol,svol,long,8; + ѸŵȣǼ,toffernum,toffernum,long,8; + ѸżȣǼ,tbidnum,tbidnum,long,8; + Žð,time,time,char,6; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8403 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t8404.res b/ls_sample/sample_python/Res/t8404.res new file mode 100644 index 0000000..3322c1c --- /dev/null +++ b/ls_sample/sample_python/Res/t8404.res @@ -0,0 +1,44 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļð뺰üȸ(API)(t8404),t8404,attr,block,headtype=A; + BEGIN_DATA_MAP + t8404InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t8404OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t8404OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,8; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,8.2; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + ŷ,volume,volume,double,12.0; + ̰,openyak,openyak,long,8; + ̰,jnilopenupdn,jnilopenupdn,long,8; + ̷BASIS,ibasis,ibasis,long,8; + BASIS,sbasis,sbasis,long,8; + ,kasis,kasis,float,6.2; + ŷ,value,value,double,12.0; + ̰,j_openupdn,j_openupdn,long,8; + żüᷮ,n_msvolume,n_msvolume,double,12.0; + ŵüᷮ,n_mdvolume,n_mdvolume,double,12.0; + żüᷮ,s_msvolume,s_msvolume,double,12.0; + żüǼ,n_mschecnt,n_mschecnt,long,8; + ŵüǼ,n_mdchecnt,n_mdchecnt,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8404 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t8404_2.res b/ls_sample/sample_python/Res/t8404_2.res new file mode 100644 index 0000000..3322c1c --- /dev/null +++ b/ls_sample/sample_python/Res/t8404_2.res @@ -0,0 +1,44 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļð뺰üȸ(API)(t8404),t8404,attr,block,headtype=A; + BEGIN_DATA_MAP + t8404InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t8404OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t8404OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,8; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,8.2; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + ŷ,volume,volume,double,12.0; + ̰,openyak,openyak,long,8; + ̰,jnilopenupdn,jnilopenupdn,long,8; + ̷BASIS,ibasis,ibasis,long,8; + BASIS,sbasis,sbasis,long,8; + ,kasis,kasis,float,6.2; + ŷ,value,value,double,12.0; + ̰,j_openupdn,j_openupdn,long,8; + żüᷮ,n_msvolume,n_msvolume,double,12.0; + ŵüᷮ,n_mdvolume,n_mdvolume,double,12.0; + żüᷮ,s_msvolume,s_msvolume,double,12.0; + żüǼ,n_mschecnt,n_mschecnt,long,8; + ŵüǼ,n_mdchecnt,n_mdchecnt,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8404 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t8405.res b/ls_sample/sample_python/Res/t8405.res new file mode 100644 index 0000000..af7ff81 --- /dev/null +++ b/ls_sample/sample_python/Res/t8405.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļⰣְ(API)(t8405),t8405,attr,block,headtype=A; + BEGIN_DATA_MAP + t8405InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱٿ,futcheck,futcheck,char,1; + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ȸûǼ,cnt,cnt,int,3; + end + t8405OutBlock,,output; + begin + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ֱٿ,nowfutyn,nowfutyn,char,1; + end + t8405OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ̰,openyak,openyak,long,8; + ̰,openyakupdn,openyakupdn,long,8; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8405 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t8405_2.res b/ls_sample/sample_python/Res/t8405_2.res new file mode 100644 index 0000000..af7ff81 --- /dev/null +++ b/ls_sample/sample_python/Res/t8405_2.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļⰣְ(API)(t8405),t8405,attr,block,headtype=A; + BEGIN_DATA_MAP + t8405InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱٿ,futcheck,futcheck,char,1; + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ȸûǼ,cnt,cnt,int,3; + end + t8405OutBlock,,output; + begin + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ֱٿ,nowfutyn,nowfutyn,char,1; + end + t8405OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ̰,openyak,openyak,long,8; + ̰,openyakupdn,openyakupdn,long,8; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8405 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t8406.res b/ls_sample/sample_python/Res/t8406.res new file mode 100644 index 0000000..79a012d --- /dev/null +++ b/ls_sample/sample_python/Res/t8406.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļƽкüȸ(API)(t8406),t8406,attr,block,headtype=A; + BEGIN_DATA_MAP + t8406InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + íƮ,cgubun,cgubun,char,1; + б,bgubun,bgubun,int,3; + ȸǼ,cnt,cnt,int,3; + end + t8406OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ,volume,volume,double,12.0; + ŷ,value,value,double,12.0; + ̰,openyak,openyak,long,8; + ̰,openupdn,openupdn,long,8; + ü,cvolume,cvolume,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + ŵüǼ,s_mdchecnt,s_mdchecnt,long,8; + żüǼ,ss_mschecnt,ss_mschecnt,long,8; + żüᷮ,s_mschevol,s_mschevol,double,12.0; + ŵüᷮ,s_mdchevol,s_mdchevol,double,12.0; + żüᷮ,ss_mschevol,ss_mschevol,double,12.0; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8406 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t8406_2.res b/ls_sample/sample_python/Res/t8406_2.res new file mode 100644 index 0000000..79a012d --- /dev/null +++ b/ls_sample/sample_python/Res/t8406_2.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļƽкüȸ(API)(t8406),t8406,attr,block,headtype=A; + BEGIN_DATA_MAP + t8406InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + íƮ,cgubun,cgubun,char,1; + б,bgubun,bgubun,int,3; + ȸǼ,cnt,cnt,int,3; + end + t8406OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ,volume,volume,double,12.0; + ŷ,value,value,double,12.0; + ̰,openyak,openyak,long,8; + ̰,openupdn,openupdn,long,8; + ü,cvolume,cvolume,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + ŵüǼ,s_mdchecnt,s_mdchecnt,long,8; + żüǼ,ss_mschecnt,ss_mschecnt,long,8; + żüᷮ,s_mschevol,s_mschevol,double,12.0; + ŵüᷮ,s_mdchevol,s_mdchevol,double,12.0; + żüᷮ,ss_mschevol,ss_mschevol,double,12.0; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8406 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t8407.res b/ls_sample/sample_python/Res/t8407.res new file mode 100644 index 0000000..f3cbf71 --- /dev/null +++ b/ls_sample/sample_python/Res/t8407.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,APIֽĸƼ簡ȸ(t8407),t8407,attr,block,headtype=A; + BEGIN_DATA_MAP + t8407InBlock,⺻Է,input; + begin + Ǽ,nrec,nrec,long,3; + ڵ,shcode,shcode,char,300; + end + t8407OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,9.2; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ(鸸),value,value,long,12; + 켱ŵܷ,offerrem,offerrem,long,12; + 켱żܷ,bidrem,bidrem,long,12; + Ѹŵܷ,totofferrem,totofferrem,long,12; + Ѹżܷ,totbidrem,totbidrem,long,12; + ,jnilclose,jnilclose,long,8; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8407 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t8407_2.res b/ls_sample/sample_python/Res/t8407_2.res new file mode 100644 index 0000000..f3cbf71 --- /dev/null +++ b/ls_sample/sample_python/Res/t8407_2.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,APIֽĸƼ簡ȸ(t8407),t8407,attr,block,headtype=A; + BEGIN_DATA_MAP + t8407InBlock,⺻Է,input; + begin + Ǽ,nrec,nrec,long,3; + ڵ,shcode,shcode,char,300; + end + t8407OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,9.2; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ(鸸),value,value,long,12; + 켱ŵܷ,offerrem,offerrem,long,12; + 켱żܷ,bidrem,bidrem,long,12; + Ѹŵܷ,totofferrem,totofferrem,long,12; + Ѹżܷ,totbidrem,totbidrem,long,12; + ,jnilclose,jnilclose,long,8; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8407 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t8410.res b/ls_sample/sample_python/Res/t8410.res new file mode 100644 index 0000000..f8f58a5 --- /dev/null +++ b/ls_sample/sample_python/Res/t8410.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,APIֽíƮ(ֿ)(t8410),t8410,attr,block,headtype=A; + BEGIN_DATA_MAP + t8410InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֱⱸ(2:3:4:5:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + ְ(Y:N:),sujung,sujung,char,1; + end + t8410OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + VIѰ,svi_uplmtprice,svi_uplmtprice,long,8; + VIѰ,svi_dnlmtprice,svi_dnlmtprice,long,8; + end + t8410OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,12; + ,high,high,long,12; + ,low,low,long,12; + ,close,close,long,12; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + ݿŷ,ratevalue,ratevalue,long,12; + (1:2:3:4:5:϶ֽϸ),sign,sign,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8410_2.res b/ls_sample/sample_python/Res/t8410_2.res new file mode 100644 index 0000000..f8f58a5 --- /dev/null +++ b/ls_sample/sample_python/Res/t8410_2.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,APIֽíƮ(ֿ)(t8410),t8410,attr,block,headtype=A; + BEGIN_DATA_MAP + t8410InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֱⱸ(2:3:4:5:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + ְ(Y:N:),sujung,sujung,char,1; + end + t8410OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + VIѰ,svi_uplmtprice,svi_uplmtprice,long,8; + VIѰ,svi_dnlmtprice,svi_dnlmtprice,long,8; + end + t8410OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,12; + ,high,high,long,12; + ,low,low,long,12; + ,close,close,long,12; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + ݿŷ,ratevalue,ratevalue,long,12; + (1:2:3:4:5:϶ֽϸ),sign,sign,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8411.res b/ls_sample/sample_python/Res/t8411.res new file mode 100644 index 0000000..9fdfb14 --- /dev/null +++ b/ls_sample/sample_python/Res/t8411.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ(ƽ/nƽ)(t8411),t8411,attr,block,headtype=A; + BEGIN_DATA_MAP + t8411InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (nƽ),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8411OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8411OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8411_2.res b/ls_sample/sample_python/Res/t8411_2.res new file mode 100644 index 0000000..9fdfb14 --- /dev/null +++ b/ls_sample/sample_python/Res/t8411_2.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ(ƽ/nƽ)(t8411),t8411,attr,block,headtype=A; + BEGIN_DATA_MAP + t8411InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (nƽ),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8411OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8411OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8412.res b/ls_sample/sample_python/Res/t8412.res new file mode 100644 index 0000000..5808134 --- /dev/null +++ b/ls_sample/sample_python/Res/t8412.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ(N)(t8412),t8412,attr,block,headtype=A; + BEGIN_DATA_MAP + t8412InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (n),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8412OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8412OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + (1:2:3:4:5:϶),sign,sign,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8412_2.res b/ls_sample/sample_python/Res/t8412_2.res new file mode 100644 index 0000000..5808134 --- /dev/null +++ b/ls_sample/sample_python/Res/t8412_2.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ(N)(t8412),t8412,attr,block,headtype=A; + BEGIN_DATA_MAP + t8412InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (n),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8412OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8412OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + (1:2:3:4:5:϶),sign,sign,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8413.res b/ls_sample/sample_python/Res/t8413.res new file mode 100644 index 0000000..2b6bc10 --- /dev/null +++ b/ls_sample/sample_python/Res/t8413.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ(ֿ)(t8413),t8413,attr,block,headtype=A; + BEGIN_DATA_MAP + t8413InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֱⱸ(2:3:4:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8413OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8413OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + ݿŷ,ratevalue,ratevalue,long,12; + (1:2:3:4:5:϶ֽϸ),sign,sign,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8413_2.res b/ls_sample/sample_python/Res/t8413_2.res new file mode 100644 index 0000000..2b6bc10 --- /dev/null +++ b/ls_sample/sample_python/Res/t8413_2.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ(ֿ)(t8413),t8413,attr,block,headtype=A; + BEGIN_DATA_MAP + t8413InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֱⱸ(2:3:4:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8413OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8413OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + ݿŷ,ratevalue,ratevalue,long,12; + (1:2:3:4:5:϶ֽϸ),sign,sign,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8414.res b/ls_sample/sample_python/Res/t8414.res new file mode 100644 index 0000000..5d81f37 --- /dev/null +++ b/ls_sample/sample_python/Res/t8414.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,ɼƮ(ƽ/nƽ)(t8414),t8414,attr,block,headtype=A; + BEGIN_DATA_MAP + t8414InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + (nƽ),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8414OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + Ͻð,jisiga,jisiga,float,6.2; + ϰ,jihigh,jihigh,float,6.2; + ,jilow,jilow,float,6.2; + ,jiclose,jiclose,float,6.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,6.2; + ϰ,dihigh,dihigh,float,6.2; + ,dilow,dilow,float,6.2; + ,diclose,diclose,float,6.2; + Ѱ,highend,highend,float,6.2; + Ѱ,lowend,lowend,float,6.2; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8414OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ̰,openyak,openyak,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8414_2.res b/ls_sample/sample_python/Res/t8414_2.res new file mode 100644 index 0000000..5d81f37 --- /dev/null +++ b/ls_sample/sample_python/Res/t8414_2.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,ɼƮ(ƽ/nƽ)(t8414),t8414,attr,block,headtype=A; + BEGIN_DATA_MAP + t8414InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + (nƽ),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8414OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + Ͻð,jisiga,jisiga,float,6.2; + ϰ,jihigh,jihigh,float,6.2; + ,jilow,jilow,float,6.2; + ,jiclose,jiclose,float,6.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,6.2; + ϰ,dihigh,dihigh,float,6.2; + ,dilow,dilow,float,6.2; + ,diclose,diclose,float,6.2; + Ѱ,highend,highend,float,6.2; + Ѱ,lowend,lowend,float,6.2; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8414OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ̰,openyak,openyak,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8415.res b/ls_sample/sample_python/Res/t8415.res new file mode 100644 index 0000000..526600d --- /dev/null +++ b/ls_sample/sample_python/Res/t8415.res @@ -0,0 +1,53 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼíƮ(N)(t8415),t8415,attr,block,headtype=A; + BEGIN_DATA_MAP + t8415InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + (n),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8415OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + Ͻð,jisiga,jisiga,float,6.2; + ϰ,jihigh,jihigh,float,6.2; + ,jilow,jilow,float,6.2; + ,jiclose,jiclose,float,6.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,6.2; + ϰ,dihigh,dihigh,float,6.2; + ,dilow,dilow,float,6.2; + ,diclose,diclose,float,6.2; + Ѱ,highend,highend,float,6.2; + Ѱ,lowend,lowend,float,6.2; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8415OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ̰,openyak,openyak,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8415_2.res b/ls_sample/sample_python/Res/t8415_2.res new file mode 100644 index 0000000..526600d --- /dev/null +++ b/ls_sample/sample_python/Res/t8415_2.res @@ -0,0 +1,53 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼíƮ(N)(t8415),t8415,attr,block,headtype=A; + BEGIN_DATA_MAP + t8415InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + (n),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8415OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + Ͻð,jisiga,jisiga,float,6.2; + ϰ,jihigh,jihigh,float,6.2; + ,jilow,jilow,float,6.2; + ,jiclose,jiclose,float,6.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,6.2; + ϰ,dihigh,dihigh,float,6.2; + ,dilow,dilow,float,6.2; + ,diclose,diclose,float,6.2; + Ѱ,highend,highend,float,6.2; + Ѱ,lowend,lowend,float,6.2; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8415OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ̰,openyak,openyak,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8416.res b/ls_sample/sample_python/Res/t8416.res new file mode 100644 index 0000000..a252e1f --- /dev/null +++ b/ls_sample/sample_python/Res/t8416.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼíƮ(ֿ)(t8416),t8416,attr,block,headtype=A; + BEGIN_DATA_MAP + t8416InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱⱸ(2:3:4:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8416OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + Ͻð,jisiga,jisiga,float,6.2; + ϰ,jihigh,jihigh,float,6.2; + ,jilow,jilow,float,6.2; + ,jiclose,jiclose,float,6.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,6.2; + ϰ,dihigh,dihigh,float,6.2; + ,dilow,dilow,float,6.2; + ,diclose,diclose,float,6.2; + Ѱ,highend,highend,float,6.2; + Ѱ,lowend,lowend,float,6.2; + ,cts_date,cts_date,char,8; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8416OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ̰,openyak,openyak,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8416_2.res b/ls_sample/sample_python/Res/t8416_2.res new file mode 100644 index 0000000..a252e1f --- /dev/null +++ b/ls_sample/sample_python/Res/t8416_2.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼíƮ(ֿ)(t8416),t8416,attr,block,headtype=A; + BEGIN_DATA_MAP + t8416InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱⱸ(2:3:4:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8416OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + Ͻð,jisiga,jisiga,float,6.2; + ϰ,jihigh,jihigh,float,6.2; + ,jilow,jilow,float,6.2; + ,jiclose,jiclose,float,6.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,6.2; + ϰ,dihigh,dihigh,float,6.2; + ,dilow,dilow,float,6.2; + ,diclose,diclose,float,6.2; + Ѱ,highend,highend,float,6.2; + Ѱ,lowend,lowend,float,6.2; + ,cts_date,cts_date,char,8; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8416OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ̰,openyak,openyak,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8417.res b/ls_sample/sample_python/Res/t8417.res new file mode 100644 index 0000000..c0787f9 --- /dev/null +++ b/ls_sample/sample_python/Res/t8417.res @@ -0,0 +1,49 @@ +BEGIN_FUNCTION_MAP + .Func,Ʈ(ƽ/nƽ)(t8417),t8417,attr,block,headtype=A; + BEGIN_DATA_MAP + t8417InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + (nƽ),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8417OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8417OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8417_2.res b/ls_sample/sample_python/Res/t8417_2.res new file mode 100644 index 0000000..c0787f9 --- /dev/null +++ b/ls_sample/sample_python/Res/t8417_2.res @@ -0,0 +1,49 @@ +BEGIN_FUNCTION_MAP + .Func,Ʈ(ƽ/nƽ)(t8417),t8417,attr,block,headtype=A; + BEGIN_DATA_MAP + t8417InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + (nƽ),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8417OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8417OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8418.res b/ls_sample/sample_python/Res/t8418.res new file mode 100644 index 0000000..33cae20 --- /dev/null +++ b/ls_sample/sample_python/Res/t8418.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func,íƮ(N)(t8418),t8418,attr,block,headtype=A; + BEGIN_DATA_MAP + t8418InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + (n),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8418OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ϰŷ,disvalue,disvalue,long,12; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8418OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8418_2.res b/ls_sample/sample_python/Res/t8418_2.res new file mode 100644 index 0000000..33cae20 --- /dev/null +++ b/ls_sample/sample_python/Res/t8418_2.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func,íƮ(N)(t8418),t8418,attr,block,headtype=A; + BEGIN_DATA_MAP + t8418InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + (n),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8418OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ϰŷ,disvalue,disvalue,long,12; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8418OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8419.res b/ls_sample/sample_python/Res/t8419.res new file mode 100644 index 0000000..70249db --- /dev/null +++ b/ls_sample/sample_python/Res/t8419.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,íƮ(ֿ)(t8419),t8419,attr,block,headtype=A; + BEGIN_DATA_MAP + t8419InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + ֱⱸ(2:3:4:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8419OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ϰŷ,disvalue,disvalue,long,12; + ,cts_date,cts_date,char,8; + ۽ð,s_time,s_time,char,6; + ð,e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8419OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8419_2.res b/ls_sample/sample_python/Res/t8419_2.res new file mode 100644 index 0000000..70249db --- /dev/null +++ b/ls_sample/sample_python/Res/t8419_2.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,íƮ(ֿ)(t8419),t8419,attr,block,headtype=A; + BEGIN_DATA_MAP + t8419InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + ֱⱸ(2:3:4:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8419OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ϰŷ,disvalue,disvalue,long,12; + ,cts_date,cts_date,char,8; + ۽ð,s_time,s_time,char,6; + ð,e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8419OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8424.res b/ls_sample/sample_python/Res/t8424.res new file mode 100644 index 0000000..4b19814 --- /dev/null +++ b/ls_sample/sample_python/Res/t8424.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ü(t8424),t8424,attr,block,headtype=A; + BEGIN_DATA_MAP + t8424InBlock,⺻Է,input; + begin + 1,gubun1,gubun1,char,1; + end + t8424OutBlock,,output,occurs; + begin + ,hname,hname,char,20; + ڵ,upcode,upcode,char,3; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8424_2.res b/ls_sample/sample_python/Res/t8424_2.res new file mode 100644 index 0000000..4b19814 --- /dev/null +++ b/ls_sample/sample_python/Res/t8424_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ü(t8424),t8424,attr,block,headtype=A; + BEGIN_DATA_MAP + t8424InBlock,⺻Է,input; + begin + 1,gubun1,gubun1,char,1; + end + t8424OutBlock,,output,occurs; + begin + ,hname,hname,char,20; + ڵ,upcode,upcode,char,3; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8425.res b/ls_sample/sample_python/Res/t8425.res new file mode 100644 index 0000000..44b6515 --- /dev/null +++ b/ls_sample/sample_python/Res/t8425.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ü׸(t8425),t8425,attr,block,headtype=A; + BEGIN_DATA_MAP + t8425InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8425OutBlock,,output,occurs; + begin + ׸,tmname,tmname,char,36; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8425_2.res b/ls_sample/sample_python/Res/t8425_2.res new file mode 100644 index 0000000..44b6515 --- /dev/null +++ b/ls_sample/sample_python/Res/t8425_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ü׸(t8425),t8425,attr,block,headtype=A; + BEGIN_DATA_MAP + t8425InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8425OutBlock,,output,occurs; + begin + ׸,tmname,tmname,char,36; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8426.res b/ls_sample/sample_python/Res/t8426.res new file mode 100644 index 0000000..8f5451f --- /dev/null +++ b/ls_sample/sample_python/Res/t8426.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,ǰȸ(API)(t8426),t8426,block,headtype=A; + BEGIN_DATA_MAP + t8426InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8426OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8426_2.res b/ls_sample/sample_python/Res/t8426_2.res new file mode 100644 index 0000000..8f5451f --- /dev/null +++ b/ls_sample/sample_python/Res/t8426_2.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,ǰȸ(API)(t8426),t8426,block,headtype=A; + BEGIN_DATA_MAP + t8426InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8426OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8427.res b/ls_sample/sample_python/Res/t8427.res new file mode 100644 index 0000000..3858f64 --- /dev/null +++ b/ls_sample/sample_python/Res/t8427.res @@ -0,0 +1,42 @@ +BEGIN_FUNCTION_MAP + .Func,ŵͽð뺰ȸ(t8427),t8427,attr,block,headtype=A; + BEGIN_DATA_MAP + t8427InBlock,⺻Է,input; + begin + ɼDZ,fo_gbn,fo_gbn,char,1; + ȸ⵵,yyyy,yyyy,char,4; + ȸ,mm,mm,char,2; + ɼDz,cp_gbn,cp_gbn,char,1; + ɼ簡,actprice,actprice,float,6.2; + ɼڵ,focode,focode,char,8; + Ϻб,dt_gbn,dt_gbn,char,1; + а,min_term,min_term,char,2; + ¥,date,date,char,8; + ð,time,time,char,6; + end + t8427OutBlock,,output; + begin + ɼڵ,focode,focode,char,8; + ¥,date,date,char,8; + ð,time,time,char,6; + end + t8427OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ̰,openyak,openyak,long,8; + ̰,openyakupdn,openyakupdn,long,8; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8427_2.res b/ls_sample/sample_python/Res/t8427_2.res new file mode 100644 index 0000000..3858f64 --- /dev/null +++ b/ls_sample/sample_python/Res/t8427_2.res @@ -0,0 +1,42 @@ +BEGIN_FUNCTION_MAP + .Func,ŵͽð뺰ȸ(t8427),t8427,attr,block,headtype=A; + BEGIN_DATA_MAP + t8427InBlock,⺻Է,input; + begin + ɼDZ,fo_gbn,fo_gbn,char,1; + ȸ⵵,yyyy,yyyy,char,4; + ȸ,mm,mm,char,2; + ɼDz,cp_gbn,cp_gbn,char,1; + ɼ簡,actprice,actprice,float,6.2; + ɼڵ,focode,focode,char,8; + Ϻб,dt_gbn,dt_gbn,char,1; + а,min_term,min_term,char,2; + ¥,date,date,char,8; + ð,time,time,char,6; + end + t8427OutBlock,,output; + begin + ɼڵ,focode,focode,char,8; + ¥,date,date,char,8; + ð,time,time,char,6; + end + t8427OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ̰,openyak,openyak,long,8; + ̰,openyakupdn,openyakupdn,long,8; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8428.res b/ls_sample/sample_python/Res/t8428.res new file mode 100644 index 0000000..4748af8 --- /dev/null +++ b/ls_sample/sample_python/Res/t8428.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ֺڱ(t8428),t8428,attr,block,headtype=A; + BEGIN_DATA_MAP + t8428InBlock,⺻Է,input; + begin + from,fdate,fdate,char,8; + to,tdate,tdate,char,8; + ,gubun,gubun,char,1; + ¥,key_date,key_date,char,8; + ڵ,upcode,upcode,char,3; + ȸǼ,cnt,cnt,int,3; + end + t8428OutBlock,,output; + begin + ¥CTS,date,date,char,8; + IDX,idx,idx,long,4; + end + t8428OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ,jisu,jisu,float,7.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + Ź_,custmoney,custmoney,long,12; + Ź_,yecha,yecha,long,12; + ȸ,vol,vol,float,6.2; + ̼_,outmoney,outmoney,long,12; + ſܰ_,trjango,trjango,long,12; + _,futymoney,futymoney,long,12; + ֽ_,stkmoney,stkmoney,long,8; + ȥ_(ֽ),mstkmoney,mstkmoney,long,8; + ȥ_(ä),mbndmoney,mbndmoney,long,8; + ä_,bndmoney,bndmoney,long,8; + ʷ(.ܱä),bndsmoney,bndsmoney,long,8; + MMF_(ֽ),mmfmoney,mmfmoney,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8428_2.res b/ls_sample/sample_python/Res/t8428_2.res new file mode 100644 index 0000000..4748af8 --- /dev/null +++ b/ls_sample/sample_python/Res/t8428_2.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ֺڱ(t8428),t8428,attr,block,headtype=A; + BEGIN_DATA_MAP + t8428InBlock,⺻Է,input; + begin + from,fdate,fdate,char,8; + to,tdate,tdate,char,8; + ,gubun,gubun,char,1; + ¥,key_date,key_date,char,8; + ڵ,upcode,upcode,char,3; + ȸǼ,cnt,cnt,int,3; + end + t8428OutBlock,,output; + begin + ¥CTS,date,date,char,8; + IDX,idx,idx,long,4; + end + t8428OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ,jisu,jisu,float,7.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + Ź_,custmoney,custmoney,long,12; + Ź_,yecha,yecha,long,12; + ȸ,vol,vol,float,6.2; + ̼_,outmoney,outmoney,long,12; + ſܰ_,trjango,trjango,long,12; + _,futymoney,futymoney,long,12; + ֽ_,stkmoney,stkmoney,long,8; + ȥ_(ֽ),mstkmoney,mstkmoney,long,8; + ȥ_(ä),mbndmoney,mbndmoney,long,8; + ä_,bndmoney,bndmoney,long,8; + ʷ(.ܱä),bndsmoney,bndsmoney,long,8; + MMF_(ֽ),mmfmoney,mmfmoney,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8429.res b/ls_sample/sample_python/Res/t8429.res new file mode 100644 index 0000000..09584d5 --- /dev/null +++ b/ls_sample/sample_python/Res/t8429.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX߰ɼǼƽкüȸíƮ(t8429),t8429,attr,block,headtype=A; + BEGIN_DATA_MAP + t8429InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + íƮ,cgubun,cgubun,char,1; + б,bgubun,bgubun,int,3; + ȸǼ,cnt,cnt,int,3; + end + t8429OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ŷ,volume,volume,double,12.0; + ü,cvolume,cvolume,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + ŵüǼ,s_mdchecnt,s_mdchecnt,long,8; + żüǼ,ss_mschecnt,ss_mschecnt,long,8; + żüᷮ,s_mschevol,s_mschevol,double,12.0; + ŵüᷮ,s_mdchevol,s_mdchevol,double,12.0; + żüᷮ,ss_mschevol,ss_mschevol,double,12.0; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8429_2.res b/ls_sample/sample_python/Res/t8429_2.res new file mode 100644 index 0000000..09584d5 --- /dev/null +++ b/ls_sample/sample_python/Res/t8429_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX߰ɼǼƽкüȸíƮ(t8429),t8429,attr,block,headtype=A; + BEGIN_DATA_MAP + t8429InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + íƮ,cgubun,cgubun,char,1; + б,bgubun,bgubun,int,3; + ȸǼ,cnt,cnt,int,3; + end + t8429OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ŷ,volume,volume,double,12.0; + ü,cvolume,cvolume,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + ŵüǼ,s_mdchecnt,s_mdchecnt,long,8; + żüǼ,ss_mschecnt,ss_mschecnt,long,8; + żüᷮ,s_mschevol,s_mschevol,double,12.0; + ŵüᷮ,s_mdchevol,s_mdchevol,double,12.0; + żüᷮ,ss_mschevol,ss_mschevol,double,12.0; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8430.res b/ls_sample/sample_python/Res/t8430.res new file mode 100644 index 0000000..cd043d3 --- /dev/null +++ b/ls_sample/sample_python/Res/t8430.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP + .Func,ֽȸ(t8430),t8430,block,headtype=A; + BEGIN_DATA_MAP + t8430InBlock,⺻Է,input; + begin + (0:ü1:ڽ2:ڽ),gubun,gubun,char,1; + end + t8430OutBlock,1,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + ETF(1:ETF),etfgubun,etfgubun,char,1; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ϰ,jnilclose,jnilclose,long,8; + ֹ,memedan,memedan,char,5; + ذ,recprice,recprice,long,8; + (1:ڽ2:ڽ),gubun,gubun,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8430_2.res b/ls_sample/sample_python/Res/t8430_2.res new file mode 100644 index 0000000..cd043d3 --- /dev/null +++ b/ls_sample/sample_python/Res/t8430_2.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP + .Func,ֽȸ(t8430),t8430,block,headtype=A; + BEGIN_DATA_MAP + t8430InBlock,⺻Է,input; + begin + (0:ü1:ڽ2:ڽ),gubun,gubun,char,1; + end + t8430OutBlock,1,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + ETF(1:ETF),etfgubun,etfgubun,char,1; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ϰ,jnilclose,jnilclose,long,8; + ֹ,memedan,memedan,char,5; + ذ,recprice,recprice,long,8; + (1:ڽ2:ڽ),gubun,gubun,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8431.res b/ls_sample/sample_python/Res/t8431.res new file mode 100644 index 0000000..e12ffd0 --- /dev/null +++ b/ls_sample/sample_python/Res/t8431.res @@ -0,0 +1,20 @@ +BEGIN_FUNCTION_MAP + .Func,ELWȸ(t8431),t8431,block,headtype=A; + BEGIN_DATA_MAP + t8431InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8431OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ,jnilclose,jnilclose,long,8; + ذ,recprice,recprice,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8431_2.res b/ls_sample/sample_python/Res/t8431_2.res new file mode 100644 index 0000000..e12ffd0 --- /dev/null +++ b/ls_sample/sample_python/Res/t8431_2.res @@ -0,0 +1,20 @@ +BEGIN_FUNCTION_MAP + .Func,ELWȸ(t8431),t8431,block,headtype=A; + BEGIN_DATA_MAP + t8431InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8431OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ,jnilclose,jnilclose,long,8; + ذ,recprice,recprice,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8432.res b/ls_sample/sample_python/Res/t8432.res new file mode 100644 index 0000000..17ac96e --- /dev/null +++ b/ls_sample/sample_python/Res/t8432.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ȸAPI(t8432),t8432,block,headtype=A; + BEGIN_DATA_MAP + t8432InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + end + t8432OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ϰ,jnilhigh,jnilhigh,float,6.2; + ,jnillow,jnillow,float,6.2; + ذ,recprice,recprice,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8432_2.res b/ls_sample/sample_python/Res/t8432_2.res new file mode 100644 index 0000000..17ac96e --- /dev/null +++ b/ls_sample/sample_python/Res/t8432_2.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ȸAPI(t8432),t8432,block,headtype=A; + BEGIN_DATA_MAP + t8432InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + end + t8432OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ϰ,jnilhigh,jnilhigh,float,6.2; + ,jnillow,jnillow,float,6.2; + ذ,recprice,recprice,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8433.res b/ls_sample/sample_python/Res/t8433.res new file mode 100644 index 0000000..2273856 --- /dev/null +++ b/ls_sample/sample_python/Res/t8433.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǸȸAPI(t8433),t8433,block,headtype=A; + BEGIN_DATA_MAP + t8433InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8433OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + Ѱ,hprice,hprice,float,6.2; + Ѱ,lprice,lprice,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ϰ,jnilhigh,jnilhigh,float,6.2; + ,jnillow,jnillow,float,6.2; + ذ,recprice,recprice,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8433_2.res b/ls_sample/sample_python/Res/t8433_2.res new file mode 100644 index 0000000..2273856 --- /dev/null +++ b/ls_sample/sample_python/Res/t8433_2.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǸȸAPI(t8433),t8433,block,headtype=A; + BEGIN_DATA_MAP + t8433InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8433OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + Ѱ,hprice,hprice,float,6.2; + Ѱ,lprice,lprice,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ϰ,jnilhigh,jnilhigh,float,6.2; + ,jnillow,jnillow,float,6.2; + ذ,recprice,recprice,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8434.res b/ls_sample/sample_python/Res/t8434.res new file mode 100644 index 0000000..5cac5bb --- /dev/null +++ b/ls_sample/sample_python/Res/t8434.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼǸƼ簡ȸ(t8434),t8434,attr,block,headtype=A; + BEGIN_DATA_MAP + t8434InBlock,⺻Է,input; + begin + Ǽ,qrycnt,qrycnt,long,3; + ڵ,focode,focode,char,400; + end + t8434OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + üǼ,checnt,checnt,long,8; + ڵ,focode,focode,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8434_2.res b/ls_sample/sample_python/Res/t8434_2.res new file mode 100644 index 0000000..5cac5bb --- /dev/null +++ b/ls_sample/sample_python/Res/t8434_2.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼǸƼ簡ȸ(t8434),t8434,attr,block,headtype=A; + BEGIN_DATA_MAP + t8434InBlock,⺻Է,input; + begin + Ǽ,qrycnt,qrycnt,long,3; + ڵ,focode,focode,char,400; + end + t8434OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + üǼ,checnt,checnt,long,8; + ڵ,focode,focode,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8435.res b/ls_sample/sample_python/Res/t8435.res new file mode 100644 index 0000000..3812116 --- /dev/null +++ b/ls_sample/sample_python/Res/t8435.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,Ļ񸶽ȸAPI(t8435),t8435,block,headtype=A; + BEGIN_DATA_MAP + t8435InBlock,⺻Է,input; + begin + (MF/MO),gubun,gubun,char,2; + end + t8435OutBlock,Ļ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ϰ,jnilhigh,jnilhigh,float,6.2; + ,jnillow,jnillow,float,6.2; + ذ,recprice,recprice,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8435_2.res b/ls_sample/sample_python/Res/t8435_2.res new file mode 100644 index 0000000..3812116 --- /dev/null +++ b/ls_sample/sample_python/Res/t8435_2.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,Ļ񸶽ȸAPI(t8435),t8435,block,headtype=A; + BEGIN_DATA_MAP + t8435InBlock,⺻Է,input; + begin + (MF/MO),gubun,gubun,char,2; + end + t8435OutBlock,Ļ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ϰ,jnilhigh,jnilhigh,float,6.2; + ,jnillow,jnillow,float,6.2; + ذ,recprice,recprice,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8436.res b/ls_sample/sample_python/Res/t8436.res new file mode 100644 index 0000000..dcc59e9 --- /dev/null +++ b/ls_sample/sample_python/Res/t8436.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP + .Func,ֽȸ API(t8436),t8436,block,headtype=A; + BEGIN_DATA_MAP + t8436InBlock,⺻Է,input; + begin + (0:ü1:ڽ2:ڽ),gubun,gubun,char,1; + end + t8436OutBlock,1,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + ETF(1:ETF2:ETN),etfgubun,etfgubun,char,1; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ϰ,jnilclose,jnilclose,long,8; + ֹ,memedan,memedan,char,5; + ذ,recprice,recprice,long,8; + (1:ڽ2:ڽ),gubun,gubun,char,1; + DZ׷,bu12gubun,bu12gubun,char,2; + μȸ翩(Y/N),spac_gubun,spac_gubun,char,1; + filler(̻),filler,filler,char,32; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8436_2.res b/ls_sample/sample_python/Res/t8436_2.res new file mode 100644 index 0000000..dcc59e9 --- /dev/null +++ b/ls_sample/sample_python/Res/t8436_2.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP + .Func,ֽȸ API(t8436),t8436,block,headtype=A; + BEGIN_DATA_MAP + t8436InBlock,⺻Է,input; + begin + (0:ü1:ڽ2:ڽ),gubun,gubun,char,1; + end + t8436OutBlock,1,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + ETF(1:ETF2:ETN),etfgubun,etfgubun,char,1; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ϰ,jnilclose,jnilclose,long,8; + ֹ,memedan,memedan,char,5; + ذ,recprice,recprice,long,8; + (1:ڽ2:ڽ),gubun,gubun,char,1; + DZ׷,bu12gubun,bu12gubun,char,2; + μȸ翩(Y/N),spac_gubun,spac_gubun,char,1; + filler(̻),filler,filler,char,32; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8437.res b/ls_sample/sample_python/Res/t8437.res new file mode 100644 index 0000000..c25a3f1 --- /dev/null +++ b/ls_sample/sample_python/Res/t8437.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP + .Func,CME/EUREXȸ(API)(t8437),t8437,block,headtype=A; + BEGIN_DATA_MAP + t8437InBlock,⺻Է,input; + begin + (NF/NC/NM/NO),gubun,gubun,char,2; + end + t8437OutBlock,߰帶,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + ǥڵ,expcode,expcode,char,12; + ŷ¼,tradeunit,tradeunit,float,21.8; + ATM(1:ATM2:ITM3:OTM),atmgb,atmgb,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t8437_2.res b/ls_sample/sample_python/Res/t8437_2.res new file mode 100644 index 0000000..c25a3f1 --- /dev/null +++ b/ls_sample/sample_python/Res/t8437_2.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP + .Func,CME/EUREXȸ(API)(t8437),t8437,block,headtype=A; + BEGIN_DATA_MAP + t8437InBlock,⺻Է,input; + begin + (NF/NC/NM/NO),gubun,gubun,char,2; + end + t8437OutBlock,߰帶,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + ǥڵ,expcode,expcode,char,12; + ŷ¼,tradeunit,tradeunit,float,21.8; + ATM(1:ATM2:ITM3:OTM),atmgb,atmgb,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t9905.res b/ls_sample/sample_python/Res/t9905.res new file mode 100644 index 0000000..808f928 --- /dev/null +++ b/ls_sample/sample_python/Res/t9905.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,ڻ긮Ʈȸ(t9905),t9905,block,headtype=A; + BEGIN_DATA_MAP + t9905InBlock,⺻Է,input; + begin + DUMMY,dummy,dummy,char,1; + end + t9905OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ǥڵ,expcode,expcode,char,12; + ,hname,hname,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t9905_2.res b/ls_sample/sample_python/Res/t9905_2.res new file mode 100644 index 0000000..808f928 --- /dev/null +++ b/ls_sample/sample_python/Res/t9905_2.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,ڻ긮Ʈȸ(t9905),t9905,block,headtype=A; + BEGIN_DATA_MAP + t9905InBlock,⺻Է,input; + begin + DUMMY,dummy,dummy,char,1; + end + t9905OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ǥڵ,expcode,expcode,char,12; + ,hname,hname,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t9907.res b/ls_sample/sample_python/Res/t9907.res new file mode 100644 index 0000000..a65e295 --- /dev/null +++ b/ls_sample/sample_python/Res/t9907.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ(t9907),t9907,block,headtype=A; + BEGIN_DATA_MAP + t9907InBlock,⺻Է,input; + begin + DUMMY,dummy,dummy,char,1; + end + t9907OutBlock1,1,output,occurs; + begin + ,lastym,lastym,char,6; + ,lastnm,lastnm,char,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t9907_2.res b/ls_sample/sample_python/Res/t9907_2.res new file mode 100644 index 0000000..a65e295 --- /dev/null +++ b/ls_sample/sample_python/Res/t9907_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ(t9907),t9907,block,headtype=A; + BEGIN_DATA_MAP + t9907InBlock,⺻Է,input; + begin + DUMMY,dummy,dummy,char,1; + end + t9907OutBlock1,1,output,occurs; + begin + ,lastym,lastym,char,6; + ,lastnm,lastnm,char,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t9942.res b/ls_sample/sample_python/Res/t9942.res new file mode 100644 index 0000000..30c4e09 --- /dev/null +++ b/ls_sample/sample_python/Res/t9942.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ELWȸAPI(t9942),t9942,block,headtype=A; + BEGIN_DATA_MAP + t9942InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t9942OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/t9942_2.res b/ls_sample/sample_python/Res/t9942_2.res new file mode 100644 index 0000000..30c4e09 --- /dev/null +++ b/ls_sample/sample_python/Res/t9942_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ELWȸAPI(t9942),t9942,block,headtype=A; + BEGIN_DATA_MAP + t9942InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t9942OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/t9943.res b/ls_sample/sample_python/Res/t9943.res new file mode 100644 index 0000000..c9cdd0b --- /dev/null +++ b/ls_sample/sample_python/Res/t9943.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,ȸAPI(t9943),t9943,block,headtype=A; + BEGIN_DATA_MAP + t9943InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + end + t9943OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t9943_2.res b/ls_sample/sample_python/Res/t9943_2.res new file mode 100644 index 0000000..c9cdd0b --- /dev/null +++ b/ls_sample/sample_python/Res/t9943_2.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,ȸAPI(t9943),t9943,block,headtype=A; + BEGIN_DATA_MAP + t9943InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + end + t9943OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/ls_sample/sample_python/Res/t9944.res b/ls_sample/sample_python/Res/t9944.res new file mode 100644 index 0000000..30e2762 --- /dev/null +++ b/ls_sample/sample_python/Res/t9944.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǸȸAPI(t9944),t9944,block,headtype=A; + BEGIN_DATA_MAP + t9944InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t9944OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/t9944_2.res b/ls_sample/sample_python/Res/t9944_2.res new file mode 100644 index 0000000..30e2762 --- /dev/null +++ b/ls_sample/sample_python/Res/t9944_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǸȸAPI(t9944),t9944,block,headtype=A; + BEGIN_DATA_MAP + t9944InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t9944OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/ls_sample/sample_python/Res/t9945.res b/ls_sample/sample_python/Res/t9945.res new file mode 100644 index 0000000..1cda5f6 --- /dev/null +++ b/ls_sample/sample_python/Res/t9945.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĸȸAPI-40bytes(t9945),t9945,block,headtype=A; + BEGIN_DATA_MAP + t9945InBlock,⺻Է,input; + begin + (KSP:1KSD:2),gubun,gubun,char,1; + end + t9945OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + ETF,etfchk,etfchk,char,1; + filler,filler,filler,char,5; + end + END_DATA_MAP +END_FUNCTION_MAP + +t9945 \ No newline at end of file diff --git a/ls_sample/sample_python/Res/t9945_2.res b/ls_sample/sample_python/Res/t9945_2.res new file mode 100644 index 0000000..1cda5f6 --- /dev/null +++ b/ls_sample/sample_python/Res/t9945_2.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĸȸAPI-40bytes(t9945),t9945,block,headtype=A; + BEGIN_DATA_MAP + t9945InBlock,⺻Է,input; + begin + (KSP:1KSD:2),gubun,gubun,char,1; + end + t9945OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + ETF,etfchk,etfchk,char,1; + filler,filler,filler,char,5; + end + END_DATA_MAP +END_FUNCTION_MAP + +t9945 \ No newline at end of file diff --git a/ls_sample/sample_python/balance_window.py b/ls_sample/sample_python/balance_window.py new file mode 100644 index 0000000..5373350 --- /dev/null +++ b/ls_sample/sample_python/balance_window.py @@ -0,0 +1,135 @@ +from PySide2 import QtCore, QtWidgets +from PySide2.QtUiTools import QUiLoader +from PySide2.QtWidgets import QTableWidgetItem +import sys +# from .ui.ui_test import Ui_Test +# from ui.ui_test import Ui_Test +# from ui.ui_second_window import Ui_Second_Window +from tr.tr_0424 import Tr_0424 +# from tr.tr_pending import Tr_pending +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 + +# app=QApplication(sys.argv) + +loader=QUiLoader() + +class Balance_window(QtCore.QObject): + + # class Worker(QtCore.QThread): + # # def __init__(self,tr_0424): + # # self.tr_0424=tr_0424 + + # def call(self,tr_0424): + # self.tr_0424=tr_0424 + + # def run(self): + # while True: + # #print("안녕하세요") + # self.sleep(2) + # self.tr_0424.get_account(Balance_window) + + + + def __init__(self,tr_pending): + super().__init__() + self.ui=loader.load('./ui/balance-window.ui',None) + + if self.ui is None: + return + + self.ui.setWindowTitle("잔고 조회") + self.tr_0424=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_0424)#계좌티알 + self.tr_pending=tr_pending#미체결 + + + # self.ui.balance_table.setItem(0,1,QTableWidgetItem(str(1))) + # self.ui.balance_table.setItem(0,0,QTableWidgetItem(str(2))) + # self.login_label.clicked.connect(self.do_action) + self.ui.balance_stocks_table.setColumnWidth(7,130) + self.ui.waiting_stocks_table.setColumnWidth(7,130) + self.ui.balance_table.hide() + self.tr_0424.get_account() + # self.tr_0424.init_draw_balance_table(self) + # self.tr_0424.callback_from_balance_window(self.insert_row_on_stocks_table,self.set_value_on_stocks_table) + + self.ui.pending_reselect.clicked.connect(self.pending_reselect) + self.ui.pending_reselect.hide() + # self.ui.testBtn2.clicked.connect(self.testBtn2) + + def pending_reselect(self): + # self.ui.waiting_stocks_table.removeRow(1) + # self.remove_row_on_pending_table(2) + self.tr_pending.get_pending(self) + + + # def testBtn2(self): + # print('testBtn testBtntestBtn testBtn') + # # self.ui.waiting_stocks_table.removeRow(1) + # self.remove_row_on_pending_table(0) + # # self.tr_0424.get_account() + + def clear_table(self): + self.ui.balance_table.clear() + + def remove_row_on_stocks_table(self,index): + self.ui.balance_stocks_table.removeRow(index) + + + def remove_row_on_pending_table(self,index): + # print('왜 안 처지우세요? ', index) + self.ui.waiting_stocks_table.removeRow(index) + + + def show(self): + self.ui.show() + # app.exec_() + + + + def do_action(self): + #print('doing: ',self.name_line_edit.text()) + #print('doing2: ',self.job_line_edit.text()) + self.login_label.setText('되냐?') + + def set_value_on_table(self,column_num,value): + # #print('set_value_on_table: ',column_num) + # #print('set_value_on_table2: ',value) + self.ui.balance_table.setItem(0,column_num,QTableWidgetItem(str(value))) + + + def insert_row_on_stocks_table(self): + #print('call_back_test@@@@@@@@@@#######') + + rowPosition=self.ui.balance_stocks_table.rowCount() + self.ui.balance_stocks_table.insertRow(rowPosition) + + def insert_row_on_pending_table(self): + rowPosition=self.ui.waiting_stocks_table.rowCount() + self.ui.waiting_stocks_table.insertRow(rowPosition) + + + def set_value_on_pending_table(self,column_num,row_num,value): + # #print('set_value_on_table: ',column_num) + # #print('set_value_on_table2: ',value) + + item =QTableWidgetItem(str(value)) + item.setTextAlignment(int(QtCore.Qt.AlignCenter)) + + self.ui.waiting_stocks_table.setItem(row_num,column_num,item) + + + def call_back_test(self): + #print('call_back_test@@@@@@@@@@#######') + pass + + + def set_value_on_stocks_table(self,column_num,row_num,value): + # #print('set_value_on_table: ',column_num) + # #print('set_value_on_table2: ',value) + + item =QTableWidgetItem(str(value)) + item.setTextAlignment(int(QtCore.Qt.AlignCenter)) + + self.ui.balance_stocks_table.setItem(row_num,column_num,item) + diff --git a/ls_sample/sample_python/button_holder.py b/ls_sample/sample_python/button_holder.py new file mode 100644 index 0000000..1dfb1b7 --- /dev/null +++ b/ls_sample/sample_python/button_holder.py @@ -0,0 +1,15 @@ +# from PySide2.QtWidgets import QPushButton,QMainWindow + +# class ButtonHolder(QMainWindow): +# def __init__(self): +# super().__init__() +# self.setWindowTitle('Xing Api Client By dev') +# btn=QPushButton() +# btn.setText('hit me') +# btn.clicked.connect(self.on_click) +# btn.setCheckable(True) +# self.setCentralWidget(btn) + +# def on_click(self,data): +# #print('btn is clicked: ',data) +# pass \ No newline at end of file diff --git a/ls_sample/sample_python/main.py b/ls_sample/sample_python/main.py new file mode 100644 index 0000000..908fc26 --- /dev/null +++ b/ls_sample/sample_python/main.py @@ -0,0 +1,303 @@ +from PySide2.QtWidgets import QApplication,QMainWindow +from PySide2.QtUiTools import QUiLoader +from PySide2.QtCore import QObject, QEvent, QTimer, QCoreApplication + +import sys +# from button_holder import ButtonHolder +# from slider import SliderHolder +# from rockwidget import RockWidget +from main_window import Main_window +from balance_window import Balance_window +# from test import Test +# from ui.ui_test import Ui_Test +# from second_window import Second_Window +import time +from threading import Thread + +from tr.tr_master import Tr_master +# from tr.tr_sc0 import Tr_sc0 +# from tr.tr_sc1 import Tr_sc1 +from tr.tr_0424 import Tr_0424 +from tr.tr_pending import Tr_pending + +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 + +from apscheduler.schedulers.asyncio import AsyncIOScheduler + +from apscheduler.schedulers.qt import QtScheduler + +from dotenv import load_dotenv +import os + +# load .env +load_dotenv() + +loader=QUiLoader() + +app=QApplication(sys.argv) + +the_path=os.path.dirname(__file__) +os.environ['ROOT_FILE_PATH'] = the_path + + + +#meta class conflict 나서 서브클래스로 하면 안 됨 미리 선언하고 생성자로 넘겨야됨 +# class XReal_S3_: +# def __init__(self): +# super().__init__() +# self.count = 0 + +# def OnReceiveRealData(self, tr_code): # event handler +# """ +# 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler +# """ +# self.count += 1 +# shcode = self.GetFieldData("OutBlock", "shcode") +# # price = self.GetFieldData("OutBlock", "price") +# # chetime = self.GetFieldData("OutBlock", "chetime") + +# if shcode is + + +# #print('shcode: ',shcode) +# #print('price: ',price) +# #print('chetime: ',chetime) +# # window.set_the_stock_code(price) + +# def start(self,stock_code): +# """ +# 이베스트 서버에 실시간 data 요청함. +# """ +# self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\S3_.res" # RES 파일 등록 +# self.SetFieldData("InBlock", "shcode", stock_code) +# self.AdviseRealData() # 실시간데이터 요청 + +# def add_item(self, stockcode): +# # 실시간데이터 요청 종목 추가 +# self.SetFieldData("InBlock", "shcode", stockcode) +# self.AdviseRealData() + +# def remove_item(self, stockcode): +# # stockcode 종목만 실시간데이터 요청 취소 +# self.UnadviseRealDataWithKey(stockcode) + +# def end(self): +# self.UnadviseRealData() # 실시간데이터 요청 모두 취소 + + +#meta class conflict 나서 서브클래스로 하면 안 됨 미리 선언하고 생성자로 넘겨야됨 끝 + +SHUT_DOWN_FLAG=False + +# def set_shut_down_flag(): +# SHUT_DOWN_FLAG=True +# #print('SHUT_DOWN_FLAG: ',SHUT_DOWN_FLAG) + + + +tr_pending=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_pending)#미체결티알 +tr_0424=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_0424)#계좌티알 + + +balance_window=Balance_window(tr_pending) +#이베스트 로그인 +STAND_BY = 0 +RECEIVED = 1 + +class XASessionEvents: + login_state = STAND_BY + + login_cnt=0 + + def OnLogin(self, code, msg): + XASessionEvents.login_state = RECEIVED + # time.sleep(5) + # print('로그인 결과: ',msg) + # print('로그인 결과 code: ',code) + if code=='0000': + query.single_request(tr_0424,balance_window,tr_pending) + res=self.account_info() + if res is not None: + window.show_buttons() + window.set_status_label('로그인 성공') + + # tr_0424.init_get_account() + else: + self.login_cnt+=1 + if self.login_cnt <5: + window.set_status_label(f'로그인 실패. 남은 회수 {self.login_cnt} / 5') + else: + window.set_status_label(f'로그인 실패. 재시도 회수를 초과했습니다') + + if self.login_cnt >5: + pass + + + + + # window.set_the_text(msg) + def OnDisconnect(self, code, msg): + pass + + def account_info(self): + """ + 계좌 정보 조회 + """ + + account_no = self.GetAccountListCount() + + if account_no is not None: + + # print("계좌 갯수 = {0}".format(account_no)) + + # for i in range(account_no): + # account = self.GetAccountList(i) + # #print("계좌번호 = {0}".format(account)) + + + self.account = self.GetAccountList(0) + os.environ['ACCOUNT'] = self.GetAccountList(0) + return 1 + + else: + return None + +class XAQueryEvents: + query_state = STAND_BY + def OnReceiveData(self, code): + XAQueryEvents.query_state = RECEIVED + def OnReceiveMessage(self, error, nMessageCode, szMessage): + #print(szMessage) + pass + +session=win32com.client.DispatchWithEvents("XA_Session.XASession",XASessionEvents) + +url=os.environ.get('URL') +port=os.environ.get('PORT') +server_type=os.environ.get('SERVER_TYPE') + +id=os.environ.get('ID') +pw=os.environ.get('PW') +cert=os.environ.get('CERT') +account = os.environ.get('ACCOUNT') + + +window=Main_window(session,balance_window) +window.show() + + + +result=session.ConnectServer(url,port) + +#이베스트 로그인 끝 + + +#마스터 테스트 + +query=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_master) + + + +# while Tr_master.query_state == False: +# pythoncom.PumpWaitingMessages() + + + +#마스터 테스트 끝 + + +#데몬쓰레드 테스트 + + + +#데몬쓰레드 테스트 끝 + + + + +#리얼 테스트 + +# class XReal_S3_: +# def __init__(self): +# super().__init__() +# self.count = 0 + +# def OnReceiveRealData(self, tr_code): # event handler +# """ +# 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler +# """ +# self.count += 1 +# shcode = self.GetFieldData("OutBlock", "shcode") +# price = self.GetFieldData("OutBlock", "price") +# chetime = self.GetFieldData("OutBlock", "chetime") +# #print('shcode: ',shcode) +# #print('price: ',price) +# #print('chetime: ',chetime) +# window.set_the_stock_code(price) + +# def start(self,stock_code): +# """ +# 이베스트 서버에 실시간 data 요청함. +# """ +# self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\S3_.res" # RES 파일 등록 +# self.SetFieldData("InBlock", "shcode", stock_code) +# self.AdviseRealData() # 실시간데이터 요청 + +# def add_item(self, stockcode): +# # 실시간데이터 요청 종목 추가 +# self.SetFieldData("InBlock", "shcode", stockcode) +# self.AdviseRealData() + +# def remove_item(self, stockcode): +# # stockcode 종목만 실시간데이터 요청 취소 +# self.UnadviseRealDataWithKey(stockcode) + +# def end(self): +# self.UnadviseRealData() # 실시간데이터 요청 모두 취소 + +# xreal = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", XReal_S3_) + +# xreal.start('005930') + +# # for i in range(100): +# # #print('try: {}'.format(i)) +# # pythoncom.PumpWaitingMessages() +# # await asyncio.sleep(0) + +# while True: +# pythoncom.PumpWaitingMessages() +# # if xreal.count == 5: +# # xreal.add_item("003490") # 대한항공 추가 + +# # if xreal.count == 20: +# # xreal.remove_item("005930") +# #000660 + +# # if xreal.count == 30: +# # xreal.end() +# # time.sleep(10) +# # #print("---- end -----") +# # break + +# # await asyncio.sleep(0) + + +# @app.on_event('startup') +# def init_data(): + +# async_scheduler = AsyncIOScheduler() +# async_scheduler.add_job(spider_batch.ping_to_db, 'cron', second='*/15',args=[app]) +# async_scheduler.start() + + +# def yeah(): +# #print('YEAH!!!!') + +# scheduler = QtScheduler() +# scheduler.add_job(yeah, 'interval', seconds=5) +# scheduler.start() + + +app.exec_() + diff --git a/ls_sample/sample_python/main.spec b/ls_sample/sample_python/main.spec new file mode 100644 index 0000000..594e298 --- /dev/null +++ b/ls_sample/sample_python/main.spec @@ -0,0 +1,44 @@ +# -*- mode: python ; coding: utf-8 -*- + + +block_cipher = None + + +a = Analysis( + ['main.py'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher, + noarchive=False, +) +pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.zipfiles, + a.datas, + [], + name='main', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=False, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) diff --git a/ls_sample/sample_python/main_window.py b/ls_sample/sample_python/main_window.py new file mode 100644 index 0000000..8ef7c4f --- /dev/null +++ b/ls_sample/sample_python/main_window.py @@ -0,0 +1,272 @@ +from PySide2 import QtCore, QtWidgets +import PySide2.QtGui +from PySide2.QtUiTools import QUiLoader +from PySide2.QtWidgets import QWidget, QDialog, QMainWindow +from PySide2.QtCore import Qt, QEvent,QObject,SIGNAL,QFile +# from ui.ui_test import Ui_Test +# from ui.ui_second_window import Ui_Second_Window +# from ui.ui_third_window import Ui_Third_Window +from tr.tr_0424 import Tr_0424 + +# from balance_window import Balance_window +from order_window import Order_window +from search_window import Search_window + +from tr.tr_master import Tr_master +# from tr.s3_real import XReal_S3_ + +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 + +from dotenv import load_dotenv +import os + +# load .env +load_dotenv() + + +loader=QUiLoader() + + + +#class Test(QWidget,Ui_Test) +# QtCore.QObject +class Main_window(QMainWindow): + + # def __new__(self): + # if not hasattr(self,'instance'): + # #print('싱글톤 만듬 MAIN WINDOW') + # self.instance=super(Main_window,self).__new__(self) + # else: + # #print('이미 싱글톤 있음 MAIN WINDOW') + # return self.instance + + def __init__(self,session,balance_window): + super().__init__() + # self.setupUi(self) + self.session=session + self.balance_window=balance_window + + self.ui=loader.load('./ui/main-window.ui',None) + + if self.ui is None: + return + + + + self.ui.setWindowTitle("Xing Api Client") + + + + # self.go_to_2.clicked.connect(lambda:self.set_the_stock_code('second')) + self.ui.to_balance_page.clicked.connect(lambda:self.open_new_window('balance')) + self.ui.to_order_page.clicked.connect(lambda:self.open_new_window('order')) + self.ui.to_search_page.clicked.connect(lambda:self.open_new_window('search')) + + self.ui.to_balance_page.hide() + self.ui.to_order_page.hide() + self.ui.to_search_page.hide() + + + self.ui.login_button.clicked.connect(lambda:self.shoot_login()) + self.ui.login_button.show() + + self.ui.closeEvent=self.closeEvent + + self.ui.status_label.setStyleSheet("color: red;") + + self.account=''#계좌번호 + + + # self.go_to_2.clicked.connect(self.calling_master) + # self.ui.go_to_3.clicked.connect(self.start_s3_real) + # self.ui.summer.clicked.connect(self.call_summer) + # self.login_label.clicked.connect(self.do_action) + # self.ui.stock_code_label.clicked.connect(self.do_action) + + # self.XReal_S3_=XReal_S3_ + # self.tr_0424=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_0424)#계좌티알 + # self.tr_0424.get_account(self) + + + # self.worker = Worker() + # self.worker.start() + + def handle_close(self): + #print('CLOSE!@!@') + pass + + def set_status_label(self, string): + + self.ui.status_label.setText(string) + + def set_session(self,session): + self.session=session + + + # class XASessionEvents: + + # def __init__(self,parent): + # session=win32com.client.DispatchWithEvents("XA_Session.XASession",self) + + # url=os.environ.get('URL') + # port=os.environ.get('PORT') + # cert=os.environ.get('CERT') + + # result=session.ConnectServer(url,port) + # parent.set_session(session) + # self.parent=parent + # #print("result: ",result) + + # def OnLogin(self, code, msg): + # # time.sleep(5) + # #print('로그인 결과@@: ',msg) + # self.parent.possible() + # # query.single_request() + # def OnDisconnect(self, code, msg): + # pass + + + + + + + + def show(self): + self.ui.show() + + def show_buttons(self): + #print('ssap possible') + self.ui.to_balance_page.show() + self.ui.to_order_page.show() + self.ui.to_search_page.show() + + + def shoot_login(self): + #print('@@shoot_login@@') + server_type=os.environ.get('SERVER_TYPE') + + cert=os.environ.get('CERT') + + id=self.ui.login_id_input.text() + pw=self.ui.login_pw_input.text() + + # print('login_cnt: ',self.session.login_cnt) + + if self.session.login_cnt >5: + return + + self.session.Login(id,pw,cert,server_type,0) + os.environ['PW'] = pw + os.environ['ID'] = id + + + # def closeEvent(self, event): + # #print('asdasdas') + # self.set_shut_down_flag() + # return super().closeEvent(event) + + + + def open_new_window(self,type): + + #print('ACCOUNT NO: ',self.session.account) + os.environ['ACCOUNT'] = self.session.account + #print('ACCOUNT NO2: ',os.environ.get('ACCOUNT')) + + if type=="balance": + # self.window=QtWidgets.QMainWindow() + # self.ui=Ui_Second_Window() + # self.ui.setupUi(self.window) + # self.balance_window=self.balance_window + self.balance_window.show() + elif type=='order': + self.order_window=Order_window() + self.order_window.show() + elif type=='search': + self.search_window=Search_window() + self.search_window.showMe() + + + + def get_master(self): + query=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_master) + + master_res=query.single_request() + print('master_res: ',master_res) + + if master_res is not None: + + while Tr_master.query_state == False: + pythoncom.PumpWaitingMessages() + + + # def start_s3_real(self): + # xreal = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", self.XReal_S3_) + + # xreal.start('005930') + # while True: + # pythoncom.PumpWaitingMessages() + + + def do_action(self): + #print('doing: ',self.name_line_edit.text()) + #print('doing2: ',self.job_line_edit.text()) + pass + + def set_the_text(self,the_thing): + self.ui.login_label.setText(the_thing) + + def set_the_stock_code(self,the_thing): + self.ui.stock_code_label.setText(the_thing) + + + +# STAND_BY = 0 +# RECEIVED = 1 + +# class XASessionEvents: +# login_state = STAND_BY + +# # def __init__(self): + + +# # # self.main_window=Main_window() +# # # self.main_window.show() +# # session=win32com.client.DispatchWithEvents("XA_Session.XASession",self) +# # session.init_main_window() + +# # url=os.environ.get('URL') +# # port=os.environ.get('PORT') +# # cert=os.environ.get('CERT') + +# # result=session.ConnectServer(url,port) +# # #print("result: ",result) + + + +# def init_main_window(self): +# self.main_window=Main_window() +# self.main_window.show() + + + +# def OnLogin(self, code, msg): +# XASessionEvents.login_state = RECEIVED +# # time.sleep(5) +# #print('로그인 결과@@: ',msg) +# self.main_window.possible() +# # query.single_request() +# def OnDisconnect(self, code, msg): +# pass + + +# session=win32com.client.DispatchWithEvents("XA_Session.XASession",XASessionEvents) +# session.init_main_window() + +# url=os.environ.get('URL') +# port=os.environ.get('PORT') +# cert=os.environ.get('CERT') + +# result=session.ConnectServer(url,port) +# #print("result: ",result) \ No newline at end of file diff --git a/ls_sample/sample_python/order_window.py b/ls_sample/sample_python/order_window.py new file mode 100644 index 0000000..a672d72 --- /dev/null +++ b/ls_sample/sample_python/order_window.py @@ -0,0 +1,351 @@ +from PySide2 import QtCore, QtWidgets +from PySide2.QtUiTools import QUiLoader +from PySide2.QtWidgets import QApplication +import sys +# from .ui.ui_test import Ui_Test +# from ui.ui_test import Ui_Test +# from ui.ui_second_window import Ui_Second_Window +from tr.tr_master import Tr_master +from tr.tr_order import Tr_order +from tr.tr_redo_order import Tr_redo_order +from tr.tr_cancel_order import Tr_cancel_order +from tr.tr_0424 import Tr_0424 +from tr.tr_sc0 import Tr_sc0 +# from tr.tr_sc1 import Tr_sc1 +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 +tr_master=Tr_master() +tr_0424=Tr_0424() + +# app=QApplication(sys.argv) + +loader=QUiLoader() + +class Order_window(QtCore.QObject): + def __init__(self): + super().__init__() + self.ui=loader.load('./ui/order-window.ui',None) + + + if self.ui is None: + return + + self.ui.setWindowTitle("주문") + self.orderType='normal' + self.orderStockCode='' + self.orderStyle='ask' + self.is_all_qty=True + + self.query_order=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_order) + self.query_order.init_set_text(self.set_status_label) + self.query_order_redo=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_redo_order) + self.query_order_cancel=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_cancel_order) + + + self.ui.order_tab_widget.currentChanged.connect(self.orderTabChanged) + + self.ui.stock_input.textChanged.connect(lambda:self.onChangeStockInput(1)) + self.ui.stock_input_3.textChanged.connect(lambda:self.onChangeStockInput(2)) + + self.ui.stock_input_4.textChanged.connect(lambda:self.onChangeStockInput(3)) + self.ui.stock_input_5.textChanged.connect(lambda:self.onChangeStockInput(4)) + self.ui.normal_radio.setChecked(True) + self.ui.normal_radio_2.setChecked(True) + self.ui.all_qty_radio.setChecked(True) + self.ui.all_qty_radio.hide() + self.ui.some_qty_radio.hide() + self.ui.all_qty_radio_2.hide() + self.ui.some_qty_radio_2.hide() + self.ui.normal_radio.clicked.connect(self.radioSelected) + self.ui.normal_radio_2.clicked.connect(self.radioSelected_2) + self.ui.market_radio.clicked.connect(self.radioSelected) + self.ui.market_radio_2.clicked.connect(self.radioSelected_2) + self.ui.order_btn.clicked.connect(self.shootOrder) + self.ui.order_btn_2.clicked.connect(self.shootOrder) + self.ui.order_btn_3.clicked.connect(self.shootOrder) + self.ui.order_btn_4.clicked.connect(self.shootOrder) + + + self.ui.all_qty_radio.clicked.connect(self.qty_radioSelected) + self.ui.some_qty_radio.clicked.connect(self.qty_radioSelected) + + + self.ui.status_label.setText('') + self.ui.status_label.setStyleSheet("color: red;") + + + + # #print('the_balance: ',tr_0424.the_balance) + # self.submit_btn.clicked.connect(self.do_action) + # self.login_label.clicked.connect(self.do_action) + + + def set_status_label(self, string): + + self.ui.status_label.setText(string) + + def orderTabChanged(self,tabIndex): + #print('tabIndex: ',tabIndex) + if tabIndex==0: + self.orderStyle='ask' + elif tabIndex==1: + self.orderStyle='bid' + elif tabIndex==2: + self.orderStyle='redo' + elif tabIndex==3: + self.orderStyle='cancel' + + + self.ui.normal_radio.setChecked(True) + self.ui.normal_radio_2.setChecked(True) + self.orderType='normal' + res_1=self.onChangeStockInput(1) + res_2=self.onChangeStockInput(2) + res_3=self.onChangeStockInput(3) + res_4=self.onChangeStockInput(4) + + + if (res_1 is not None and + res_2 is not None and + res_3 is not None and + res_4 is not None): + + self.ui.stock_input.setText('') + self.ui.stock_input_3.setText('') + self.ui.stock_input_4.setText('') + self.ui.stock_input_5.setText('') + + + + def onChangeStockInput(self,num): + + theInput=self.ui.stock_input.text() + + if num==1: + theInput=self.ui.stock_input.text() + elif num==2: + theInput=self.ui.stock_input_3.text() + elif num==3: + theInput=self.ui.stock_input_4.text() + elif num==4: + theInput=self.ui.stock_input_5.text() + + + theDict=tr_master.master_dict.get(theInput,None) + #print('theDict: ',theDict) + + if theDict != None: + stockName=theDict['hname'] + self.ui.stock_name_label.setText(stockName) + self.ui.stock_name_label_2.setText(stockName) + self.ui.stock_name_label_3.setText(stockName) + self.ui.stock_name_label_4.setText(stockName) + self.orderStockCode=theDict['shcode'] + else: + self.ui.stock_name_label.setText('') + self.ui.stock_name_label_2.setText('') + self.ui.stock_name_label_3.setText('') + self.ui.stock_name_label_4.setText('') + + return 1 + + + + def onChangeStockInput_3(self): + theInput=self.ui.stock_input_3.text() + + theDict=tr_master.master_dict.get(theInput,None) + #print('theDict: ',theDict) + + if theDict != None: + stockName=theDict['hname'] + self.ui.stock_name_label.setText(stockName) + self.orderStockCode=theDict['shcode'] + else: + self.ui.stock_name_label.setText('') + + + + + def onChangeStockInput_4(self): + theInput=self.ui.stock_input_4.text() + + theDict=tr_master.master_dict.get(theInput,None) + #print('theDict: ',theDict) + + if theDict != None: + stockName=theDict['hname'] + self.ui.stock_name_label.setText(stockName) + self.orderStockCode=theDict['shcode'] + else: + self.ui.stock_name_label.setText('') + + + + + def onChangeStockInput_5(self): + theInput=self.ui.stock_input_5.text() + + theDict=tr_master.master_dict.get(theInput,None) + #print('theDict: ',theDict) + + if theDict != None: + stockName=theDict['hname'] + self.ui.stock_name_label.setText(stockName) + self.orderStockCode=theDict['shcode'] + else: + self.ui.stock_name_label.setText('') + + + def onChangeOrderQtInput(self): + theInput=self.ui.order_qt_input.text() + + + + def onChangeOrderWonInput(self): + theInput=self.ui.order_won_input.text() + + + def qty_radioSelected(self): + + if self.ui.all_qty_radio.isChecked()==True: + self.is_all_qty=True + elif self.ui.some_qty_radio.isChecked()==True: + self.is_all_qty=False + + #print('is_all_qty: ',self.is_all_qty) + + + def radioSelected(self): + #print('radioSelected: ',self.ui.normal_radio.isChecked()) + #print('radioSelected2: ',self.ui.market_radio.isChecked()) + + if self.ui.normal_radio.isChecked()==True: + self.orderType='normal' + elif self.ui.market_radio.isChecked()==True: + self.orderType='market' + + #print('orderType: ',self.orderType) + + + def radioSelected_2(self): + #print('radioSelected: ',self.ui.normal_radio.isChecked()) + #print('radioSelected2: ',self.ui.market_radio.isChecked()) + + if self.ui.normal_radio_2.isChecked()==True: + self.orderType='normal' + elif self.ui.market_radio_2.isChecked()==True: + self.orderType='market' + + #print('orderType: ',self.orderType) + + + def show(self): + self.ui.show() + # app.exec_() + + def shootOrder(self): + #print('orderStyle: ',self.orderStyle) + + if self.orderStyle=='ask': + + #print('stockInput: ',self.ui.stock_input.text()) + #print('orderType: ',self.orderType) + #print('orderQtInput: ',self.ui.order_qt_input.text()) + #print('orderWonInput: ',self.ui.order_won_input.text()) + #print('orderStockCode: ',self.orderStockCode) + #print('orderStyle: ',self.orderStyle) + + self.query_order.shoot_order( + self.orderStockCode, + self.ui.order_qt_input.text(), + 1, + 2, + self.ui.order_won_input.text(), + self.orderStyle, + self.orderType + ) + + self.ui.status_label.setText('매도 주문 완료') + self.ui.status_label.setStyleSheet("color: blue;") + + + elif self.orderStyle=='bid': + #print('stockInput: ',self.ui.stock_input_3.text()) + #print('orderType: ',self.orderType) + #print('orderQtInput_2: ',self.ui.order_qt_input_2.text()) + #print('orderWonInput_2: ',self.ui.order_won_input_2.text()) + #print('orderStockCode: ',self.orderStockCode) + #print('orderStyle: ',self.orderStyle) + + + self.query_order.shoot_order( + self.orderStockCode, + self.ui.order_qt_input_2.text(), + 1, + 2, + self.ui.order_won_input_2.text(), + self.orderStyle, + self.orderType + ) + self.ui.status_label.setText('매수 주문 완료') + self.ui.status_label.setStyleSheet("color: red;") + + elif self.orderStyle=='redo': + #print('orgNoInput: ',self.ui.org_no_input.text()) + #print('stockInput: ',self.ui.stock_input_4.text()) + #print('orderType: ',self.orderType) + + #print('order_qt_input_3: ',self.ui.order_qt_input_3.text()) + #print('orderWonInput_3: ',self.ui.order_won_input_3.text()) + #print('orderStyle: ',self.orderStyle) + #print('is_all_qty: ',self.is_all_qty) + + self.query_order_redo.shoot_order( + self.orderStockCode, + self.ui.order_qt_input_3.text(), + 1, + 2, + self.ui.order_won_input_3.text(), + self.orderStyle, + self.orderType, + self.ui.org_no_input.text(), + ) + + + self.ui.status_label.setText('정정 주문 완료') + self.ui.status_label.setStyleSheet("color: black;") + + elif self.orderStyle=='cancel': + #print('orgNoInput: ',self.ui.org_no_input_2.text()) + #print('orderType: ',self.orderStyle) + + #print('order_qt_input_4: ',self.ui.order_qt_input_4.text()) + #print('orderStyle: ',self.orderStyle) + + self.query_order_cancel.shoot_order( + self.orderStockCode, + self.ui.order_qt_input_4.text(), + 1, + 2, + 3, + self.orderStyle, + self.orderType, + self.ui.org_no_input_2.text(), + ) + + + self.ui.status_label.setText('취소 주문 완료') + self.ui.status_label.setStyleSheet("color: black;") + + def do_action(self): + #print('doing: ',self.name_line_edit.text()) + #print('doing2: ',self.job_line_edit.text()) + self.login_label.setText('되냐?') + + def set_the_text(self,the_thing): + #print('세팅한다: ',the_thing) + self.login_label.setText(the_thing) + def set_the_stock_code(self,the_thing): + #print('세팅한다2: ',the_thing) + self.stock_code_label.setText(the_thing) diff --git a/ls_sample/sample_python/requirements.txt b/ls_sample/sample_python/requirements.txt new file mode 100644 index 0000000..c17e3ef --- /dev/null +++ b/ls_sample/sample_python/requirements.txt @@ -0,0 +1,49 @@ +altgraph==0.17.3 +anyio==3.6.2 +APScheduler==3.10.1 +boto3==1.26.98 +botocore==1.29.98 +certifi==2022.12.7 +cffi==1.15.1 +charset-normalizer==3.1.0 +click==8.1.3 +colorama==0.4.6 +cryptography==40.0.0 +dnspython==2.3.0 +email-validator==1.3.1 +fastapi==0.95.0 +h11==0.14.0 +idna==3.4 +jmespath==1.0.1 +jwt==1.3.1 +llvmlite==0.39.1 +numba==0.56.4 +numpy==1.23.5 +pefile==2023.2.7 +phonenumbers==8.13.7 +pycparser==2.21 +pydantic==1.10.7 +pyinstaller==5.10.1 +pyinstaller-hooks-contrib==2023.2 +PyMySQL==1.0.2 +pypiwin32==223 +pyshorteners==1.0.1 +PySide2==5.15.2.1 +python-dateutil==2.8.2 +python-dotenv==1.0.0 +python-multipart==0.0.6 +pytz==2023.3 +pytz-deprecation-shim==0.1.0.post0 +pywin32==305 +pywin32-ctypes==0.2.0 +requests==2.28.2 +s3transfer==0.6.0 +shiboken2==5.15.2.1 +six==1.16.0 +sniffio==1.3.0 +starlette==0.26.1 +typing_extensions==4.5.0 +tzdata==2023.3 +tzlocal==4.3 +urllib3==1.26.15 +uvicorn==0.21.1 diff --git a/ls_sample/sample_python/rockwidget.py b/ls_sample/sample_python/rockwidget.py new file mode 100644 index 0000000..f74994f --- /dev/null +++ b/ls_sample/sample_python/rockwidget.py @@ -0,0 +1,22 @@ +# from PySide2.QtWidgets import QWidget,QPushButton,QHBoxLayout,QVBoxLayout + +# class RockWidget(QWidget): +# def __init__(self): +# super().__init__() +# btn=QPushButton() +# btn.setText('hit me') + + +# btn2=QPushButton('hit me too') +# btn3=QPushButton('hit me too3') + + +# btn_layout=QVBoxLayout() +# btn_layout2=QHBoxLayout() +# btn_layout.addWidget(btn) +# btn_layout.addWidget(btn2) + + +# # btn_layout2.addLayout(btn_layout) + +# self.setLayout( btn_layout) diff --git a/ls_sample/sample_python/search_window.py b/ls_sample/sample_python/search_window.py new file mode 100644 index 0000000..7375d6a --- /dev/null +++ b/ls_sample/sample_python/search_window.py @@ -0,0 +1,130 @@ +from PySide2 import QtCore, QtWidgets +from PySide2.QtUiTools import QUiLoader +# from PySide2.QtWidgets import QTableWidgetItem, QFileDialog +from PySide2.QtWidgets import * +from PySide2.QtWidgets import QDialog +from PySide2.QtCore import QEvent, QObject, SIGNAL,QFile +from PySide2.QtWidgets import (QApplication, QWidget, QMessageBox) + +import sys +# from .ui.ui_test import Ui_Test +# from ui.ui_test import Ui_Test +# from ui.ui_second_window import Ui_Second_Window +from tr.tr_0424 import Tr_0424 +from tr.tr_1857 import Tr_1857 +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 +import os +from ui.ui_search_window import Ui_Form + +# app=QApplication(sys.argv) + +class MyEventFilter(QObject): + def eventFilter(self, watched, event): + if event.type() == QEvent.Close: + #print("Event filter: Window is being closed.") + # Add your custom logic here if needed + pass + return super().eventFilter(watched, event) + +loader=QUiLoader() +#QWidget +class Search_window(QWidget,Ui_Form): + def __init__(self): + super().__init__() + # self=loader.load('./ui/search-window.ui',None) + self.setupUi(self) + + + + + # loader = QUiLoader() + # ui_file = QFile('./ui/search-window.ui') + # ui_file.open(QFile.ReadOnly) + # self = loader.load(ui_file) + # ui_file.close() + + # event_filter = MyEventFilter() + # self.installEventFilter(event_filter) + + + + #print('자기소개 SEARCH_WINDOW: ',dir(self)) + # uic.loadUi('./ui/search-window.ui', self) + self.setWindowTitle("종목 검색") + self.tr_1857=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_1857) + self.tr_1857.init_callbacks(self.set_value_on_table,self.insert_row_on_stocks_table) + + + # self.balance_table.setItem(0,1,QTableWidgetItem(str(1))) + # self.balance_stocks_table.setColumnWidth(7,130) + # self.balance_table.setItem(0,0,QTableWidgetItem(str(2))) + self.file_select_button.clicked.connect(self.selectFile) + # self.end_btn.clicked.connect(self.handle_close_event) + # self.destroyed.connect(self.handle_close_event) + + self.closeEvent=self.handle_close_event + # self.installEventFilter(self) + #print('init search window') + + # def __init__(self, parent=None): + # super().__init__(parent) + + # # Load the UI file + # loader = QUiLoader() + # ui_file = QFile('./ui/search-window.ui') # Replace with your UI file path + # ui_file.open(QFile.ReadOnly) + # self = loader.load(ui_file) + # ui_file.close() + + # # Set up the UI and connections + # self.setCentralWidget(self) + # self.setWindowTitle("Search Window") + + # # Connect the close event to a custom handler + # self.closeEvent = self.handle_close_event + + def closeEvent(self, event) -> None: + #print('a') + self.tr_1857.manually_stop() + return super().closeEvent(event) + + def handle_close_event(self, event): + # Perform desired action when the window is closed + self.tr_1857.manually_stop() + #print("Search window closed!") + self.close() + # super().closeEvent(event) + + def showMe(self): + self.show() + # app.exec_() + + # def closeEvent(self, event): + # #print('IM CLOSING!!!@!') + # super().closeEvent(event) + + def selectFile(self): + the_path=os.environ.get('ROOT_FILE_PATH')+"\\ACF" + fname = QFileDialog.getOpenFileName( + parent=self, + caption='ACF 파일 선택', + dir=the_path) + + #print('the_acf: ',fname[0]) + self.tr_1857.go_search(fname[0]) + + + def set_value_on_table(self,column_num,row_num,value): + # #print('set_value_on_table: ',column_num) + # #print('set_value_on_table2: ',value) + self.search_stocks_table.setItem(row_num,column_num,QTableWidgetItem(str(value))) + + + def insert_row_on_stocks_table(self): + rowPosition=self.search_stocks_table.rowCount() + # #print('테이블 개수: ',rowPosition) + self.search_stocks_table.insertRow(rowPosition) + return rowPosition + + diff --git a/ls_sample/sample_python/second_window.py b/ls_sample/sample_python/second_window.py new file mode 100644 index 0000000..fc9f8f7 --- /dev/null +++ b/ls_sample/sample_python/second_window.py @@ -0,0 +1,31 @@ +# from PySide2 import QtCore, QtWidgets +# from PySide2.QtUiTools import QUiLoader +# from PySide2.QtWidgets import QWidget +# # from .ui.ui_test import Ui_Test +# # from ui.ui_test import Ui_Test +# from ui.ui_second_window import Ui_Second_Window + + + +# loader=QUiLoader() + +# class Second_Window(QWidget,Ui_Second_Window): +# def __init__(self): +# super().__init__() +# self.setupUi(self) +# self.setWindowTitle("Xing Api Client By Woojae") + +# # self.submit_btn.clicked.connect(self.do_action) +# # self.login_label.clicked.connect(self.do_action) + +# def do_action(self): +# #print('doing: ',self.name_line_edit.text()) +# #print('doing2: ',self.job_line_edit.text()) +# self.login_label.setText('되냐?') + +# def set_the_text(self,the_thing): +# #print('세팅한다: ',the_thing) +# self.login_label.setText(the_thing) +# def set_the_stock_code(self,the_thing): +# #print('세팅한다2: ',the_thing) +# self.stock_code_label.setText(the_thing) diff --git a/ls_sample/sample_python/slider.py b/ls_sample/sample_python/slider.py new file mode 100644 index 0000000..3d0dd2a --- /dev/null +++ b/ls_sample/sample_python/slider.py @@ -0,0 +1,17 @@ +# from PySide2.QtWidgets import QSlider,QMainWindow +# from PySide2.QtCore import Qt + +# class SliderHolder(QMainWindow): +# def __init__(self): +# super().__init__() +# # self.setWindowTitle('Xing Api Client By dev') +# slider=QSlider(Qt.Horizontal) +# slider.setMinimum(1) +# slider.setMaximum(100) +# slider.setValue(23) +# self.setCentralWidget(slider) +# slider.valueChanged.connect(self.on_moved) + +# def on_moved(self,data): +# #print('slider moving: ',data) +# pass \ No newline at end of file diff --git a/ls_sample/sample_python/test.py b/ls_sample/sample_python/test.py new file mode 100644 index 0000000..a22221a --- /dev/null +++ b/ls_sample/sample_python/test.py @@ -0,0 +1,100 @@ +# from PySide2 import QtCore, QtWidgets +# import PySide2.QtGui +# from PySide2.QtUiTools import QUiLoader +# from PySide2.QtWidgets import QWidget +# from ui.ui_test import Ui_Test +# # from ui.ui_second_window import Ui_Second_Window +# from ui.ui_third_window import Ui_Third_Window +# from tr.tr_0424 import Tr_0424 + +# # from balance_window import Second_Window + +# from tr.tr_master import Tr_master +# # from tr.s3_real import XReal_S3_ + +# import win32com.client #이베스트 관련 +# import pythoncom #이베스트 관련 + + + +# loader=QUiLoader() + +# #class Test(QWidget,Ui_Test) +# class Test(QtCore.QObject): +# #print('싱글톤 생성: TEST') + +# def __init__(self,XReal_S3_,set_shut_down_flag): +# super().__init__() +# # self.setupUi(self) +# self.ui=loader.load('./ui/test.ui',None) +# self.ui.setWindowTitle("Xing Api Client By dev") + +# # self.go_to_2.clicked.connect(lambda:self.set_the_stock_code('second')) +# self.ui.to_balance_page.clicked.connect(lambda:self.open_new_window('second')) +# # self.go_to_2.clicked.connect(self.calling_master) +# # self.ui.go_to_3.clicked.connect(self.start_s3_real) +# # self.ui.summer.clicked.connect(self.call_summer) +# # self.login_label.clicked.connect(self.do_action) +# # self.ui.stock_code_label.clicked.connect(self.do_action) + +# self.XReal_S3_=XReal_S3_ +# self.set_shut_down_flag=set_shut_down_flag +# # self.tr_0424=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_0424)#계좌티알 +# # self.tr_0424.get_account(self) + +# def show(self): +# self.ui.show() + + +# def closeEvent(self, event): +# self.set_shut_down_flag() +# # return super().closeEvent(event) + + + +# def open_new_window(self,type): + +# if type=="second": +# # self.window=QtWidgets.QMainWindow() +# # self.ui=Ui_Second_Window() +# # self.ui.setupUi(self.window) +# # self.second_window=Second_Window() +# # self.window.setWindowTitle('열려라!!!!!!!!!!!!!!!!!!!') +# self.second_window.show() +# else: +# self.window=QtWidgets.QMainWindow() +# self.ui=Ui_Third_Window() +# self.ui.setupUi(self.window) +# self.window.setWindowTitle('열려라!!!!!!!!!!!!!!!!!!!') +# self.window.show() + + +# def get_master(self): +# query=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_master) + +# query.single_request() +# while Tr_master.query_state == False: +# pythoncom.PumpWaitingMessages() + + + +# def start_s3_real(self): +# xreal = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", self.XReal_S3_) + +# xreal.start('005930') +# while True: +# pythoncom.PumpWaitingMessages() + + +# def do_action(self): +# #print('doing: ',self.name_line_edit.text()) +# #print('doing2: ',self.job_line_edit.text()) +# self.ui.login_label.setText('되냐?') + +# def set_the_text(self,the_thing): +# #print('세팅한다: ',the_thing) +# self.ui.login_label.setText(the_thing) + +# def set_the_stock_code(self,the_thing): +# #print('세팅한다2: ',the_thing) +# self.ui.stock_code_label.setText(the_thing) diff --git a/ls_sample/sample_python/third_window.py b/ls_sample/sample_python/third_window.py new file mode 100644 index 0000000..33dc8e9 --- /dev/null +++ b/ls_sample/sample_python/third_window.py @@ -0,0 +1,31 @@ +# from PySide2 import QtCore, QtWidgets +# from PySide2.QtUiTools import QUiLoader +# from PySide2.QtWidgets import QWidget +# # from .ui.ui_test import Ui_Test +# # from ui.ui_test import Ui_Test +# from ui.ui_third_window import Ui_Third_Window + + + +# loader=QUiLoader() + +# class Third_Window(QWidget,Ui_Third_Window): +# def __init__(self): +# super().__init__() +# self.setupUi(self) +# self.setWindowTitle("Xing Api Client By dev") + +# # self.submit_btn.clicked.connect(self.do_action) +# # self.login_label.clicked.connect(self.do_action) + +# def do_action(self): +# #print('doing: ',self.name_line_edit.text()) +# #print('doing2: ',self.job_line_edit.text()) +# self.login_label.setText('되냐?') + +# def set_the_text(self,the_thing): +# #print('세팅한다: ',the_thing) +# self.login_label.setText(the_thing) +# def set_the_stock_code(self,the_thing): +# #print('세팅한다2: ',the_thing) +# self.stock_code_label.setText(the_thing) diff --git a/ls_sample/sample_python/tr/k3_real.py b/ls_sample/sample_python/tr/k3_real.py new file mode 100644 index 0000000..3b6b8da --- /dev/null +++ b/ls_sample/sample_python/tr/k3_real.py @@ -0,0 +1,63 @@ + +# from tr.tr_0424 import Tr_0424 +# tr_0424=Tr_0424() +import os + +#코스닥임 +class XReal_K3_: + def __init__(self): + super().__init__() + + def OnReceiveRealData(self, tr_code): # event handler + """ + 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler + """ + # self.count += 1 + stock_code = self.GetFieldData("OutBlock", "shcode") + # chetime = self.GetFieldData("OutBlock", "chetime") + price = int(self.GetFieldData("OutBlock", "price")) + + if stock_code is not None and price is not None: + self.process_balance_change(stock_code,price) + + # open = int(self.GetFieldData("OutBlock", "open")) + # drate = float(self.GetFieldData("OutBlock", "drate")) + #print('코스닥 코드: ',stock_code) + # # #print('drate: ',drate) + # # #print('chetime: ',chetime) + # # chetime = self.GetFieldData("OutBlock", "chetime") + # volume = int(self.GetFieldData("OutBlock", "cvolume"))#cvolume이 체결거래량이고 그냥 볼륨은 누적거래량임 + # accu_volume = int(self.GetFieldData("OutBlock", "volume"))#누적거래대금 + # value = int(self.GetFieldData("OutBlock", "value"))#누적거래대금 + # side = self.GetFieldData("OutBlock", "cgubun") + + + def initialize_process_balance_change(self,process_balance_change): + #print('k3 initialize_process_balance_change @#@#@#@#@#@#@#') + self.process_balance_change=process_balance_change + + def start(self,stock_code): + #print('코스닥 리얼 스타트: ',stock_code) + """ + 이베스트 서버에 실시간 data 요청함. + """ + + the_path=os.environ.get('ROOT_FILE_PATH')+"\\Res\\K3_.res" + self.ResFileName = the_path # RES 파일 등록 + + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\K3_.res" # RES 파일 등록 + self.SetFieldData("InBlock", "shcode", stock_code) + self.AdviseRealData() # 실시간데이터 요청 + + + def add_item(self, stockcode): + # 실시간데이터 요청 종목 추가 + self.SetFieldData("InBlock", "shcode", stockcode) + self.AdviseRealData() + + def remove_item(self, stockcode): + # stockcode 종목만 실시간데이터 요청 취소 + self.UnadviseRealDataWithKey(stockcode) + + def end(self): + self.UnadviseRealData() # 실시간데이터 요청 모두 취소 diff --git a/ls_sample/sample_python/tr/s3_real.py b/ls_sample/sample_python/tr/s3_real.py new file mode 100644 index 0000000..97ecbf7 --- /dev/null +++ b/ls_sample/sample_python/tr/s3_real.py @@ -0,0 +1,63 @@ + +# from tr.tr_0424 import Tr_0424 +# tr_0424=Tr_0424() +import os +#XReal_S3_ +class XReal_S3_: + def __init__(self): + super().__init__() + self.count = 0 + # self.tr_0424=tr_0424 + + def OnReceiveRealData(self, tr_code): # event handler + """ + 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler + """ + shcode = self.GetFieldData("OutBlock", "shcode") + price = self.GetFieldData("OutBlock", "price") + + if shcode is not None and price is not None: + self.process_balance_change(shcode,price) + + # chetime = self.GetFieldData("OutBlock", "chetime") + # print('코스피 코드: ',shcode) + # print('price: ',price) + # #print('chetime: ',chetime) + # self.continue_draw_balance_table() + + + + def initialize_continue_draw_balance_table(self,continue_draw_balance_table): + #print('s3 initialize_continue_draw_balance_table @#@#@#@#@#@#@#') + self.continue_draw_balance_table=continue_draw_balance_table + + def initialize_process_balance_change(self,process_balance_change): + #print('s3 initialize_process_balance_change @#@#@#@#@#@#@#') + self.process_balance_change=process_balance_change + + def start(self,stock_code): + #print('코스피 리얼 스타트: ',stock_code) + # #print('왜 자꾸 콜하는겨') + """ + 이베스트 서버에 실시간 data 요청함. + """ + + the_path=os.environ.get('ROOT_FILE_PATH')+"\\Res\\S3_.res" + self.ResFileName = the_path # RES 파일 등록 + + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\S3_.res" # RES 파일 등록 + + self.SetFieldData("InBlock", "shcode", stock_code) + self.AdviseRealData() # 실시간데이터 요청 + + def add_item(self, stockcode): + # 실시간데이터 요청 종목 추가 + self.SetFieldData("InBlock", "shcode", stockcode) + self.AdviseRealData() + + def remove_item(self, stockcode): + # stockcode 종목만 실시간데이터 요청 취소 + self.UnadviseRealDataWithKey(stockcode) + + def end(self): + self.UnadviseRealData() # 실시간데이터 요청 모두 취소 diff --git a/ls_sample/sample_python/tr/tr_0424.py b/ls_sample/sample_python/tr/tr_0424.py new file mode 100644 index 0000000..f74c8f8 --- /dev/null +++ b/ls_sample/sample_python/tr/tr_0424.py @@ -0,0 +1,813 @@ +#XAQueryEvents + + +from tr.k3_real import XReal_K3_ +from tr.s3_real import XReal_S3_ +from tr.tr_kh import XReal_KH_ +import math + +# from test import Test + +# test=Test() +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 +# from apscheduler.schedulers.asyncio import AsyncIOScheduler +from apscheduler.schedulers.qt import QtScheduler +from tr.tr_sc1 import Tr_sc1 +from tr.tr_sc2 import Tr_sc2 + +from tr.tr_sc0 import Tr_sc0 +from tr.tr_sc3 import Tr_sc3 + +# from tr.tr_pending import Tr_pending +# tr_pending=Tr_pending() + +from tr.tr_master import Tr_master +tr_master=Tr_master() + +import json + +from dotenv import load_dotenv +import os +load_dotenv() +class Tr_0424: + + # account=os.environ.get('ACCOUNT') + # pw=os.environ.get('PW') + master_arr=[] + master_dict={} + query_state = False + + the_balance={} + + def __init__(self): + super().__init__() + self.xreal = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", XReal_S3_) + self.xreal_daq = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", XReal_K3_) + +#프로그램 테스트 + # self.pro_kh = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", XReal_KH_) + +#프로그램 테스트 끝 + + + + self.xreal.initialize_process_balance_change(self.process_balance_change) + self.xreal.initialize_continue_draw_balance_table(self.continue_draw_balance_table) + self.xreal_daq.initialize_process_balance_change(self.process_balance_change) + + self.account=os.environ.get('ACCOUNT') + self.pw=os.environ.get('PW') + + # scheduler = QtScheduler() + # scheduler.add_job(self.yeah, 'interval', seconds=5) + # scheduler.start() + + # async_scheduler = AsyncIOScheduler() + # async_scheduler.add_job(self.yeah(), 'cron', second='*/3',args=[]) + # async_scheduler.start() + + + + + + def init_sc1(self): + + self.sc0_real = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", Tr_sc0) + self.sc0_real.start(self.process_pending_change_echo) + + self.sc1_real = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", Tr_sc1) + self.sc1_real.start(self.process_balance_change_echo) + + self.sc2_real = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", Tr_sc2) + self.sc2_real.start() + + self.sc3_real = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", Tr_sc3) + self.sc3_real.start(self.process_pending_cancel_echo) + + + + + # def process_pending_fix_echo(self,orgordno,ord_qty,ord_price): + + + + def process_pending_cancel_echo(self,orgordno,volume): + + + the_pending_list_j=os.environ.get('the_pending_list') + the_pending_list=json.loads(the_pending_list_j) + + + for i,obj in enumerate( the_pending_list): + + + if obj['ord_no']==orgordno: + # print('ord_qty: ',obj['ord_qty']) + # print('volume: ',volume) + if int(obj['ord_qty']) == int(volume): + + # print('왜 안지우냐: ',i) + + self.balance_window.remove_row_on_pending_table(i) + old_length=int(os.environ.get('the_pending_list_length')) + #미체결 길이 다시 설정 + os.environ['the_pending_list_length']=str(old_length-1) + + del the_pending_list[i] + os.environ['the_pending_list']=json.dumps(the_pending_list) + + else: + new_qty=int(obj['ord_qty'])-int(volume) + obj['ord_qty']=new_qty + os.environ['the_pending_list']=json.dumps(the_pending_list) + + self.balance_window.set_value_on_pending_table(4,i,new_qty) + + + def process_pending_change_echo(self,ord_no, ord_qty, ord_price, stock_code, stock_name,side,orgordno,OrdTrxPtnNm): + + + the_pending_list_j=os.environ.get('the_pending_list') + new_pending_list=json.loads(the_pending_list_j) + + obj={ + "ord_no":ord_no, + "ord_qty":ord_qty, + "ord_price":int(float(ord_price)), + "stock_code":stock_code, + "stock_name":stock_name + } + + # obj={ + # "ord_no":ord_no, + # "ord_qty":ord_qty, + # "ord_price":int(float(ord_price)), + # "stock_code":stock_code_from_master, + # "stock_name":stock_name, + # 'side':side, + # 'OrgOrdNo':OrgOrdNo, + # 'OrdTrxPtnNm':OrdTrxPtnNm + # } + + + new_pending_list.append(obj) + + + os.environ['the_pending_list']=json.dumps(new_pending_list) + new_index=int(os.environ.get('the_pending_list_length')) + + + + self.balance_window.insert_row_on_pending_table() + self.balance_window.set_value_on_pending_table(0,new_index,ord_no ) + self.balance_window.set_value_on_pending_table(1,new_index,stock_name ) + self.balance_window.set_value_on_pending_table(2,new_index,side) + self.balance_window.set_value_on_pending_table(3,new_index,stock_code) + self.balance_window.set_value_on_pending_table(4,new_index,ord_qty) + self.balance_window.set_value_on_pending_table(5,new_index,ord_price) + self.balance_window.set_value_on_pending_table(6,new_index,orgordno) + self.balance_window.set_value_on_pending_table(7,new_index,OrdTrxPtnNm) + + + if OrdTrxPtnNm=='정정확인': + the_pending_list_j=os.environ.get('the_pending_list') + the_pending_list=json.loads(the_pending_list_j) + + for i,obj in enumerate( the_pending_list): + + + if obj['ord_no']==orgordno: + if int(obj['ord_qty']) <= int(ord_qty): + + self.balance_window.remove_row_on_pending_table(i) + old_length=int(os.environ.get('the_pending_list_length')) + #미체결 길이 다시 설정 + os.environ['the_pending_list_length']=str(old_length-1) + del the_pending_list[i] + + else: + new_qty=int(obj['ord_qty'])-int(ord_qty) + + obj['ord_qty']=new_qty + + self.balance_window.set_value_on_pending_table(4,i,new_qty) + + + break + + + + + #미체결 길이 다시 설정 + os.environ['the_pending_list_length']=str(new_index+1) + + + def process_balance_change_echo(self,stock_code,volume,side,contract_price,stock_name,ord_no_input): + + the_dict=self.the_balance.get(stock_code,None) + + if the_dict is not None: + the_index=self.the_balance[stock_code]['the_index'] + + pamt=int(self.the_balance[stock_code]['pamt'])#평단가임 + mamt=int(self.the_balance[stock_code]['mamt'])#매입금액 + janqty=int(self.the_balance[stock_code]['janqty'])#수량임 + appamt=int(self.the_balance[stock_code]['appamt'])#평가금액 + # sunikrt=int(self.the_balance[stock_code]['sunikrt'])#수익률 + dtsunik=int(self.the_balance[stock_code]['dtsunik']) + + + + + sunikrt=format((int(contract_price)/pamt)*100-100," .2f") #수익률 계산 + + if side ==1: + janqty=janqty-volume + new_pamt=pamt + mamt=mamt-(volume*pamt) #새 매입금액 + elif side==2: + # new_pamt=((janqty*pamt) + (volume*contract_price)) / janqty+volume #새 평단가 + cal1=janqty*pamt + cal2=volume*contract_price + cal3=cal1+cal2 + cal4=janqty+volume + new_pamt=math.floor( cal3/cal4) + + + mamt=mamt+(volume*contract_price) #새 매입금액 + sunikrt=format((int(contract_price)/new_pamt)*100-100," .2f") #새 수익률 계산 + + + janqty=janqty+volume + + + eval_profit=(int(contract_price)-new_pamt)*janqty#현재가랑 평단가 뺀거에 수량 곱하면 평가손익 됨 + + + eval_profit_diff=eval_profit-dtsunik#이전 평가손익이랑 얼만큼 차이나는지 + + new_eval_price=appamt+eval_profit_diff#새 평가금액 + + + if janqty>0: + + self.the_balance[stock_code]['janqty']=janqty + + + try: + # self.the_balance[stock_code]={ + # 'stock_name':stock_name, + # 'stock_code':stock_code, + # 'the_index':new_index, + # 'pamt':contract_price, + # 'mamt':volume*contract_price, + # 'janqty':volume, + # 'appamt':volume*contract_price, + # 'sunikrt':0 + # } + + self.the_balance[stock_code]['pamt']=new_pamt + self.the_balance[stock_code]['mamt']=mamt + self.the_balance[stock_code]['janqty']=janqty + self.the_balance[stock_code]['appamt']=new_eval_price + self.the_balance[stock_code]['sunikrt']=sunikrt + self.the_balance[stock_code]['dtsunik']=0 + + + self.balance_window.set_value_on_stocks_table(2,the_index,janqty) + self.balance_window.set_value_on_stocks_table(3,the_index,new_pamt) + self.balance_window.set_value_on_stocks_table(4,the_index,contract_price) + self.balance_window.set_value_on_stocks_table(5,the_index,mamt) + self.balance_window.set_value_on_stocks_table(6,the_index,new_eval_price) + self.balance_window.set_value_on_stocks_table(7,the_index,sunikrt) + + except Exception as e: + #print('process_balance_change_echo err: ',e) + pass + + else: + remove_res=self.remove_from_the_balance(stock_code) + + if remove_res is None: + return + + + else: + + try: + if side==2: + #잔고에 없고 신규 매수일 때 + + # self.balance_window.insert_row_on_stocks_table() + + new_index=len(self.the_balance)+1 + # self.balance_window.set_value_on_stocks_table(0,new_index-1,stock_name) + + the_dict_from_master=tr_master.master_dict.get(stock_code,{}) + + if the_dict_from_master['gubun']=='1': + self.xreal.start(stock_code) + elif the_dict_from_master['gubun']=='2': + self.xreal_daq.start(stock_code) + + self.the_balance[stock_code]={ + 'stock_name':stock_name, + 'stock_code':stock_code, + 'the_index':new_index-1, + 'pamt':contract_price, + 'mamt':volume*contract_price, + 'janqty':volume, + 'appamt':volume*contract_price, + 'sunikrt':0, + 'dtsunik':0 + } + + self.insert_to_the_balance(stock_code,stock_name,new_index) + + # self.get_account() + + + except Exception as e: + #print('process_balance_change_echo2 err: ',e) + pass + + + #미체결 그리드 지우기 + the_pending_list_j=os.environ.get('the_pending_list') + the_pending_list=json.loads(the_pending_list_j) + + for i,obj in enumerate( the_pending_list): + + # print('들어온거@@ obj: ',obj) + + if obj['ord_no']==ord_no_input: + if int(obj['ord_qty']) <= int(volume): + + self.balance_window.remove_row_on_pending_table(i) + old_length=int(os.environ.get('the_pending_list_length')) + #미체결 길이 다시 설정 + os.environ['the_pending_list_length']=str(old_length-1) + del the_pending_list[i] + + else: + new_qty=int(obj['ord_qty'])-int(volume) + + obj['ord_qty']=new_qty + + self.balance_window.set_value_on_pending_table(4,i,new_qty) + + + break + + + #미체결 리스트 다시 설정 + os.environ['the_pending_list']=json.dumps(the_pending_list) + + + + + # tdtsunik=int(self.the_balance['total']['tdtsunik']) + # new_tdtsunik=tdtsunik+eval_profit_diff + # self.the_balance['total']['tdtsunik']=new_tdtsunik + + def process_balance_change(self,stock_code,price): + + # #print('process balance change: ',self.balance_window) + + the_index=self.the_balance[stock_code]['the_index'] + # #print('the_index: ',the_index) + + # if stock_code=='000660': + # #print('self.the_balance: ',self.the_balance) + # #print('the_index: ',the_index) + + pamt=int(self.the_balance[stock_code]['pamt'])#평단가임 + mamt=int(self.the_balance[stock_code]['mamt'])#매입금액 + janqty=int(self.the_balance[stock_code]['janqty'])#수량임 + appamt=int(self.the_balance[stock_code]['appamt'])#평가금액 + # sunikrt=int(self.the_balance[stock_code]['sunikrt'])#수익률 + dtsunik=int(self.the_balance[stock_code]['dtsunik']) + + eval_profit=(int(price)-pamt)*janqty#현재가랑 평단가 뺀거에 수량 곱하면 평가손익 됨 + + eval_profit_diff=eval_profit-dtsunik#이전 평가손익이랑 얼만큼 차이나는지 + + new_eval_price=appamt+eval_profit_diff#새 평가금액 + + + sunikrt=format((int(price)/pamt)*100-100," .2f") #수익률 계산 + + # #print('@@평단가: ',pamt) + # #print('@@매입금액: ',mamt) + # #print('@@평가금액: ',appamt) + # #print('@@평가손익: ',eval_profit) + # #print('@@new_eval_price: ',new_eval_price) + # #print('@@sunikrt: ',sunikrt) + + try: + self.balance_window.set_value_on_stocks_table(2,the_index,janqty) + self.balance_window.set_value_on_stocks_table(3,the_index,pamt) + self.balance_window.set_value_on_stocks_table(4,the_index,price) + self.balance_window.set_value_on_stocks_table(5,the_index,mamt) + self.balance_window.set_value_on_stocks_table(6,the_index,new_eval_price) + self.balance_window.set_value_on_stocks_table(7,the_index,sunikrt) + + except: + pass + + + + # tdtsunik=int(self.the_balance['total']['tdtsunik']) + # new_tdtsunik=tdtsunik+eval_profit_diff + # self.the_balance['total']['tdtsunik']=new_tdtsunik + + def continue_draw_balance_table(self): + #print('self.the_balance: ',self.the_balance) + + for i,key in enumerate( self.the_balance): + try: + stock_name=self.the_balance[key]['stock_name'] + stock_code=self.the_balance[key]['stock_code'] + janqty=self.the_balance[key]['janqty'] + pamt=self.the_balance[key]['pamt'] + price=self.the_balance[key]['price'] + mamt=self.the_balance[key]['mamt'] + appamt=self.the_balance[key]['appamt'] + sunikrt=self.the_balance[key]['sunikrt'] + + self.balance_window.insert_row_on_stocks_table() + + self.balance_window.set_value_on_stocks_table(0,i,stock_name) + self.balance_window.set_value_on_stocks_table(1,i,stock_code) + self.balance_window.set_value_on_stocks_table(2,i,janqty) + self.balance_window.set_value_on_stocks_table(3,i,pamt) + self.balance_window.set_value_on_stocks_table(4,i,price) + self.balance_window.set_value_on_stocks_table(5,i,mamt) + self.balance_window.set_value_on_stocks_table(6,i,appamt) + self.balance_window.set_value_on_stocks_table(7,i,sunikrt) + + # #print('업뎃한거임?') + + except: + pass + + + def init_draw_balance_table(self,balance_window): + self.balance_window=balance_window + #print('init_draw_balance_table: ',self.the_balance) + + for i,key in enumerate( self.the_balance): + try: + stock_name=self.the_balance[key]['stock_name'] + stock_code=self.the_balance[key]['stock_code'] + janqty=self.the_balance[key]['janqty'] + pamt=self.the_balance[key]['pamt'] + price=self.the_balance[key]['price'] + mamt=self.the_balance[key]['mamt'] + appamt=self.the_balance[key]['appamt'] + sunikrt=self.the_balance[key]['sunikrt'] + + self.balance_window.insert_row_on_stocks_table() + + self.balance_window.set_value_on_stocks_table(0,i,stock_name) + self.balance_window.set_value_on_stocks_table(1,i,stock_code) + self.balance_window.set_value_on_stocks_table(2,i,janqty) + self.balance_window.set_value_on_stocks_table(3,i,pamt) + self.balance_window.set_value_on_stocks_table(4,i,price) + self.balance_window.set_value_on_stocks_table(5,i,mamt) + self.balance_window.set_value_on_stocks_table(6,i,appamt) + self.balance_window.set_value_on_stocks_table(7,i,sunikrt) + + + the_dict=tr_master.master_dict.get(stock_code,{}) + #print('the_dict: ',the_dict) + + if the_dict['gubun']=='1': + self.xreal.start(stock_code) + + + elif the_dict['gubun']=='2': + self.xreal_daq.start(stock_code) + + + except: + pass + + + + def OnReceiveData(self, tr_code): + # Tr_0424.query_state = True + block_count=self.GetBlockCount("t0424OutBlock1") + # #print('ACCOUNT @@ block_count: ',block_count) + + # sunamt = self.GetFieldData("t0424OutBlock", "sunamt", 0).strip() + # dtsunik = self.GetFieldData("t0424OutBlock", "dtsunik", 0).strip() + # mamt = self.GetFieldData("t0424OutBlock", "mamt", 0).strip() + # sunamt1 = self.GetFieldData("t0424OutBlock", "sunamt1", 0).strip() + # cts_expcode = self.GetFieldData("t0424OutBlock", "cts_expcode", 0).strip() + # tappamt = self.GetFieldData("t0424OutBlock", "tappamt", 0).strip() + # tdtsunik = self.GetFieldData("t0424OutBlock", "tdtsunik", 0).strip() + + # #print('sunamt: ',sunamt) + # self.balance_window.set_value_on_table(0,sunamt) + # self.balance_window.set_value_on_table(1,dtsunik) + # self.balance_window.set_value_on_table(2,mamt) + # self.balance_window.set_value_on_table(3,tappamt) + # self.balance_window.set_value_on_table(4,tdtsunik) + # self.balance_window.set_value_on_table(5,99) + + # self.the_balance['total']={ + # 'sunamt':sunamt, + # 'dtsunik':dtsunik, + # 'mamt':mamt, + # 'tappamt':tappamt, + # 'tdtsunik':tdtsunik, + # 'profit':99 + + + # } + + # self.test_ui_class.set_the_stock_code(sunamt) + # self.xreal.start('005930') + + + if block_count is None: + return + + + for i in range(block_count): + stock_code = self.GetFieldData("t0424OutBlock1", "expcode", i).strip() + + jangb = self.GetFieldData("t0424OutBlock1", "jangb", i).strip()#잔고구분 + + janqty = self.GetFieldData("t0424OutBlock1", "janqty", i).strip()#잔고수량 + pamt = self.GetFieldData("t0424OutBlock1", "pamt", i).strip()#평단가 + mamt = self.GetFieldData("t0424OutBlock1", "mamt", i).strip()#매입금액 + stock_name = self.GetFieldData("t0424OutBlock1", "hname", i).strip()#종목명 + price = self.GetFieldData("t0424OutBlock1", "price", i).strip()#현재가 + appamt = self.GetFieldData("t0424OutBlock1", "appamt", i).strip()#평가금액 + dtsunik = self.GetFieldData("t0424OutBlock1", "dtsunik", i).strip()#평가손익 + sunikrt = self.GetFieldData("t0424OutBlock1", "sunikrt", i).strip()#수익율 + + + if (stock_code is not None and + janqty is not None and + pamt is not None and + mamt is not None and + stock_name is not None and + price is not None and + appamt is not None and + dtsunik is not None and + sunikrt is not None): + + + self.the_balance[stock_code]={ + 'stock_name':stock_name, + 'stock_code':stock_code, + 'janqty':janqty, + 'pamt':pamt, + 'price':price, + 'mamt':mamt, + 'appamt':appamt, + 'sunikrt':sunikrt, + 'the_index':i, + 'dtsunik':dtsunik + } + + #print('@@@@self.the_balance: ',self.the_balance) + # #print('@@@@self.balance_window: ',self.balance_window) + + + + + + for i in range(block_count): + stock_code = self.GetFieldData("t0424OutBlock1", "expcode", i).strip() + janqty = self.GetFieldData("t0424OutBlock1", "janqty", i).strip()#잔고수량 + pamt = self.GetFieldData("t0424OutBlock1", "pamt", i).strip()#평단가 + mamt = self.GetFieldData("t0424OutBlock1", "mamt", i).strip()#매입금액 + stock_name = self.GetFieldData("t0424OutBlock1", "hname", i).strip()#종목명 + price = self.GetFieldData("t0424OutBlock1", "price", i).strip()#현재가 + appamt = self.GetFieldData("t0424OutBlock1", "appamt", i).strip()#평가금액 + dtsunik = self.GetFieldData("t0424OutBlock1", "dtsunik", i).strip()#평가손익 + sunikrt = self.GetFieldData("t0424OutBlock1", "sunikrt", i).strip()#수익율 + + + + if (stock_code is not None and + janqty is not None and + pamt is not None and + mamt is not None and + stock_name is not None and + price is not None and + appamt is not None and + dtsunik is not None and + sunikrt is not None): + + # #print('STOCK_NAME: ',stock_name) + the_dict=tr_master.master_dict.get(stock_code,{}) + #print('the loop stock_name: ',stock_name) + + if the_dict['gubun']=='1': + self.xreal.start(stock_code) + # #프로그램 테스트 + # self.pro_kh.start('095340') + elif the_dict['gubun']=='2': + self.xreal_daq.start(stock_code) + + + # #print('stock_name: ',stock_name) + # #print('stock_code: ',stock_code) + # #print('janqty: ',janqty) + # #print('pamt: ',pamt) + # #print('price: ',price) + # #print('mamt: ',mamt) + # #print('appamt: ',appamt) + # #print('sunikrt: ',sunikrt) + + try: + balance_check=self.the_balance.get('stock_code',None) + + if balance_check is None: + + self.balance_window.insert_row_on_stocks_table() + + self.balance_window.set_value_on_stocks_table(0,i,stock_name) + self.balance_window.set_value_on_stocks_table(1,i,stock_code) + self.balance_window.set_value_on_stocks_table(2,i,janqty) + self.balance_window.set_value_on_stocks_table(3,i,pamt) + self.balance_window.set_value_on_stocks_table(4,i,price) + self.balance_window.set_value_on_stocks_table(5,i,mamt) + self.balance_window.set_value_on_stocks_table(6,i,appamt) + self.balance_window.set_value_on_stocks_table(7,i,sunikrt) + + #print('업뎃한거임?') + + except Exception as e: + #print('잔고 업댓 에러: ',e) + pass + + + + self.the_balance[stock_code]={ + 'stock_name':stock_name, + 'stock_code':stock_code, + 'janqty':janqty, + 'pamt':pamt, + 'price':price, + 'mamt':mamt, + 'appamt':appamt, + 'sunikrt':sunikrt, + 'the_index':i, + 'dtsunik':dtsunik + } + # #print('@@@@22222self.the_balance: ',self.the_balance) + + + #print('작업 다 한 것: self.the_balance: ',self.the_balance) + + + + # #print('삼전: ',self.master_dict['005930']) + + # hname = self.GetFieldData("t8430OutBlock", "hname", 0) + # shcode = self.GetFieldData("t8430OutBlock", "shcode", 0) + # #print('tr_code: ',tr_code) + # #print('hname: ',hname) + # #print('shcode: ',shcode) + + # param['hname']=hname + # param['shcode']=shcode + def OnReceiveMessage(self, error, nMessageCode, szMessage): + # #print('OnReceiveMessage: ',szMessage) + pass + + def insert_to_the_balance(self,stock_code,stock_name,new_index): + + try: + + self.balance_window.insert_row_on_stocks_table() + + # new_index=len(self.the_balance)+1 + #print('머고@#@#@#@#@: ',stock_name) + #print('머고@#@#@#@#@2: ',new_index) + self.balance_window.set_value_on_stocks_table(0,new_index-1,stock_name) + self.balance_window.set_value_on_stocks_table(1,new_index-1,stock_code) + self.balance_window.set_value_on_stocks_table(2,new_index-1,self.the_balance[stock_code]['janqty']) + self.balance_window.set_value_on_stocks_table(3,new_index-1,self.the_balance[stock_code]['pamt']) + self.balance_window.set_value_on_stocks_table(4,new_index-1,self.the_balance[stock_code]['pamt']) + self.balance_window.set_value_on_stocks_table(5,new_index-1,self.the_balance[stock_code]['mamt']) + self.balance_window.set_value_on_stocks_table(6,new_index-1,self.the_balance[stock_code]['appamt']) + self.balance_window.set_value_on_stocks_table(7,new_index-1,0) + + # self.the_balance[stock_code]={ + # 'stock_name':stock_name, + # 'stock_code':stock_code, + # 'the_index':new_index, + # 'pamt':contract_price, + # 'mamt':volume*contract_price, + # 'janqty':volume, + # 'appamt':volume*contract_price, + # 'dtsunik':0 + # } + + #print('inserted to the balance: ',self.the_balance) + + except Exception as e: + #print('remove_from_the_balance err: ',e) + pass + + def remove_from_the_balance(self,stock_code): + + try: + + the_index=self.the_balance[stock_code]['the_index'] + + self.balance_window.remove_row_on_stocks_table(the_index) + + + the_dict_from_master=tr_master.master_dict.get(stock_code,{}) + + if the_dict_from_master['gubun']=='1': + self.xreal.remove_item(stock_code) + elif the_dict_from_master['gubun']=='2': + self.xreal_daq.remove_item(stock_code) + + + del self.the_balance[stock_code] + + + for i,key in enumerate( self.the_balance): + self.the_balance[key]['the_index']=i + + #print('removed the balance: ',self.the_balance) + + return 1 + + except Exception as e: + #print('remove_from_the_balance err: ',e) + + return None + + def init_get_account(self,balance_window): + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\t0424.res" + self.balance_window=balance_window + + self.account=os.environ.get('ACCOUNT') + self.pw=os.environ.get('PW') + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\t0424.res" + + self.SetFieldData("t0424InBlock", "accno", 0, self.account) + self.SetFieldData("t0424InBlock", "passwd", 0, self.pw) + self.SetFieldData("t0424InBlock", "prcgb", 0, '1') + self.SetFieldData("t0424InBlock", "chegb", 0, '2') + self.SetFieldData("t0424InBlock", "dangb", 0, '0') + self.SetFieldData("t0424InBlock", "charge", 0, '0') + self.SetFieldData("t0424InBlock", "cts_expcode", 0, ' ') + + #print('계좌 불러옴: ',self.account) + + + + + err_code = self.Request(False) + if err_code < 0: + + pass + #print("error... {0}".format(err_code)) + + # def callback_from_balance_window(self,insert_row_on_stocks_table,set_value_on_stocks_table): + # insert_row_on_stocks_table() + # self.insert_row_on_stocks_table=insert_row_on_stocks_table + # self.set_value_on_stocks_table=set_value_on_stocks_table + + + def get_account(self): + + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\t0424.res" + + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\t0424.res" + + self.SetFieldData("t0424InBlock", "accno", 0, self.account) + self.SetFieldData("t0424InBlock", "passwd", 0, self.pw) + self.SetFieldData("t0424InBlock", "prcgb", 0, '1') + self.SetFieldData("t0424InBlock", "chegb", 0, '2') #0 결제기준, 2 체결기준 + self.SetFieldData("t0424InBlock", "dangb", 0, '0') + self.SetFieldData("t0424InBlock", "charge", 0, '0') + self.SetFieldData("t0424InBlock", "cts_expcode", 0, ' ') + + #print('계좌 불러옴') + + + + + err_code = self.Request(False) + if err_code < 0: + #print("error... {0}".format(err_code)) + + pass \ No newline at end of file diff --git a/ls_sample/sample_python/tr/tr_1857.py b/ls_sample/sample_python/tr/tr_1857.py new file mode 100644 index 0000000..32b8b2d --- /dev/null +++ b/ls_sample/sample_python/tr/tr_1857.py @@ -0,0 +1,245 @@ +#종목검색 +class Tr_1857: + stock_index_dict={} + + def __init__(self): + super().__init__() + self.AlertNum='' + + def OnReceiveData(self, code): + #print('종목검색 조회#####: ',code) + result_count=self.GetBlockCount("t1857OutBlock") + + if result_count is None: + return + + AlertNum=self.GetFieldData("t1857OutBlock",'AlertNum',0) + if AlertNum is not None: + self.AlertNum=AlertNum + #print('실시간 키: ',AlertNum) + #print('자기소개 Tr_1857: ',dir(self)) + + #조회 루프돔 + for i in range(0,1000): + stock_code=self.GetFieldData("t1857OutBlock1", "shcode",i) + stock_name=self.GetFieldData("t1857OutBlock1", "hname",i) + #현재가 + price=self.GetFieldData("t1857OutBlock1", "price",i) + #전일대비구분 + sign=self.GetFieldData("t1857OutBlock1", "sign",i) + #전일대비 + change=self.GetFieldData("t1857OutBlock1", "change",i) + #등락율 + diff=self.GetFieldData("t1857OutBlock1", "diff",i) + #거래량 + volume=self.GetFieldData("t1857OutBlock1", "volume",i) + + #N이 진입, R이 재진입, O가 이탈 + JobFlag=self.GetFieldData("t1857OutBlock1", "JobFlag",i) + + # #print('stock_code: ',JobFlag) + + if stock_code!="": + + self.insert_row_on_stocks_table() + self.stock_index_dict[stock_code]=i + + self.set_value_on_table(0,i,stock_name) + self.set_value_on_table(1,i,stock_code) + self.set_value_on_table(2,i,price) + self.set_value_on_table(3,i,change) + self.set_value_on_table(4,i,diff) + self.set_value_on_table(5,i,volume) + + if JobFlag=='N': + # #print('N은 진입이다') + self.set_value_on_table(6,i,'진입') + elif JobFlag=='R': + # #print('R은 재진입이다') + self.set_value_on_table(6,i,'재진입') + elif JobFlag=='O': + # #print('O는 아웃이다') + self.set_value_on_table(6,i,'아웃') + + + + # stock_name=self.the_master[stock_code]['hname'] + # gubun=self.the_master[stock_code]['gubun'] + # #print('stock_name: ',stock_name) + # #print('gubun: ',gubun) + # if gubun=='1': + # xreal.start(stock_code) + # elif gubun=='2': + # xreal_daq.start(stock_code) + # #print('index: ',i) + if stock_code=="": + break + + + #print('result_count: ',result_count) + # self.go_search('1') + + + + def OnReceiveMessage(self, error, nMessageCode, szMessage): + #print('nMessageCode: ',nMessageCode) + #print('szMessage: ',szMessage) + + pass + + + def init_callbacks(self,set_value_on_table,insert_row_on_stocks_table): + self.set_value_on_table=set_value_on_table + self.insert_row_on_stocks_table=insert_row_on_stocks_table + + + def OnReceiveSearchRealData(self, szTrCode): + # print('종목검색 리얼@@@@: ',szTrCode) + stock_code=self.GetFieldSearchRealData("t1857OutBlock1", "shcode") + + stock_name=self.GetFieldSearchRealData("t1857OutBlock1", "hname") + #현재가 + price=self.GetFieldSearchRealData("t1857OutBlock1", "price") + #전일대비구분 + sign=self.GetFieldSearchRealData("t1857OutBlock1", "sign") + #전일대비 + change=self.GetFieldSearchRealData("t1857OutBlock1", "change") + #등락율 + diff=self.GetFieldSearchRealData("t1857OutBlock1", "diff") + #거래량 + volume=self.GetFieldSearchRealData("t1857OutBlock1", "volume") + + #N이 진입, R이 재진입, O가 이탈 + JobFlag=self.GetFieldSearchRealData("t1857OutBlock1", "JobFlag") + + + + # if JobFlag=='N': + # # #print('N은 진입이다') + # table_cnt=self.insert_row_on_stocks_table() + # self.stock_index_dict[stock_code]=table_cnt + + # self.set_value_on_table(0,table_cnt,stock_name) + # self.set_value_on_table(1,table_cnt,stock_code) + # self.set_value_on_table(2,table_cnt,price) + # self.set_value_on_table(3,table_cnt,change) + # self.set_value_on_table(4,table_cnt,diff) + # self.set_value_on_table(5,table_cnt,volume) + # self.set_value_on_table(6,table_cnt,'진입') + + + # elif JobFlag=='R': + # # #print('R은 재진입이다') + # # table_cnt=self.insert_row_on_stocks_table() + # # self.stock_index_dict[stock_code]=table_cnt + # the_index=self.stock_index_dict.get(stock_code,-1) + + # self.set_value_on_table(0,the_index,''+stock_name) + # self.set_value_on_table(1,the_index,stock_code) + # self.set_value_on_table(2,the_index,price) + # self.set_value_on_table(3,the_index,change) + # self.set_value_on_table(4,the_index,diff) + # self.set_value_on_table(5,the_index,volume) + # self.set_value_on_table(6,the_index,'재진입') + + + # elif JobFlag=='O': + # # #print('O는 아웃이다') + # the_index=self.stock_index_dict.get(stock_code,-1) + # self.set_value_on_table(6,the_index,'이탈') + + + #널 체크 + if (stock_code is not None and + stock_name is not None and + price is not None and + sign is not None and + change is not None and + diff is not None and + volume is not None and + JobFlag is not None): + + if JobFlag=='N': + # #print('N은 진입이다') + table_cnt=self.insert_row_on_stocks_table() + self.stock_index_dict[stock_code]=table_cnt + + self.set_value_on_table(0,table_cnt,stock_name) + self.set_value_on_table(1,table_cnt,stock_code) + self.set_value_on_table(2,table_cnt,price) + self.set_value_on_table(3,table_cnt,change) + self.set_value_on_table(4,table_cnt,diff) + self.set_value_on_table(5,table_cnt,volume) + self.set_value_on_table(6,table_cnt,'진입') + + + elif JobFlag=='R': + # #print('R은 재진입이다') + # table_cnt=self.insert_row_on_stocks_table() + # self.stock_index_dict[stock_code]=table_cnt + the_index=self.stock_index_dict.get(stock_code,-1) + + self.set_value_on_table(0,the_index,''+stock_name) + self.set_value_on_table(1,the_index,stock_code) + self.set_value_on_table(2,the_index,price) + self.set_value_on_table(3,the_index,change) + self.set_value_on_table(4,the_index,diff) + self.set_value_on_table(5,the_index,volume) + self.set_value_on_table(6,the_index,'재진입') + + + elif JobFlag=='O': + # #print('O는 아웃이다') + the_index=self.stock_index_dict.get(stock_code,-1) + self.set_value_on_table(6,the_index,'이탈') + + # the_thing=master_dict.get(stock_code,None) + # gubun=the_thing.get('gubun',None) + + # #print('@@@@@master_dict: ',the_thing) + + + + # def OnReceiveRealSearchData(self, szTrCode,result): + # #print('szTrCode: ',szTrCode) + # #print('szTrCode result: ',result) + + def manually_stop(self): + #print('manually_stop') + if self.AlertNum !='': + res=self.RemoveService('t1857',self.AlertNum) + + if res is not None: + pass + + def go_search(self,the_path): + + self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\t1857.res" + #print('the_path: ',the_path) + + # the_path='C:\\eBEST\\xingAPI\\ConditionToApi.ACF' + # C:/eBEST/xingAPI/ConditionToApi.ACF + + sRealFlag=self.SetFieldData("t1857InBlock", "sRealFlag", 0, 1)#맽 끝에 있는애가 0이면 조회 1이면 실시간 + sSearchFlag=self.SetFieldData("t1857InBlock", "sSearchFlag", 0, 'F') + query_index=self.SetFieldData("t1857InBlock", "query_index", 0, the_path) + # err_code = self.Request(False) + + if self.AlertNum !='': + res=self.RemoveService('t1857',self.AlertNum) + if res is not None: + pass + + + # print('sRealFlag: ',sRealFlag) + # print('sSearchFlag: ',sSearchFlag) + # print('query_index: ',query_index) + + #api 상으로 저 변수 세 개는 None이 나오는게 맞으므로 널 체크가 의미 없음 + + + err_code = self.RequestService('t1857',the_path) + #print('GOGO: ',err_code) + if err_code < 0: + pass + #print("error2... {0}".format(err_code)) diff --git a/ls_sample/sample_python/tr/tr_cancel_order.py b/ls_sample/sample_python/tr/tr_cancel_order.py new file mode 100644 index 0000000..ee564bf --- /dev/null +++ b/ls_sample/sample_python/tr/tr_cancel_order.py @@ -0,0 +1,118 @@ + +from dotenv import load_dotenv +import os +load_dotenv() + +class Tr_cancel_order: + def __init__(self): + super().__init__() + self.account=os.environ.get('ACCOUNT') + + def OnReceiveData(self, tr_code): + #print('주문 에코: ',tr_code) + # if tr_code=='CSPAT00600': + + + # XAQueryEvents.query_state = True + # block_count=self.GetBlockCount("t8430OutBlock") + # #print('block_count: ',block_count) + + + # for i in range(block_count): + # hname = self.GetFieldData("t8430OutBlock", "hname", i).strip() + # shcode = self.GetFieldData("t8430OutBlock", "shcode", i).strip() + # gubun = self.GetFieldData("t8430OutBlock", "gubun", i).strip() #1은 코스피, 2는 코스닥 + + # master_dict[shcode]={ + # 'hname':hname, + # 'gubun':gubun + # } + + # #print('master_dict: ',master_dict['005930']) + # query_1857.set_master(master_dict) + + + # hname = self.GetFieldData("t8430OutBlock", "hname", 0) + # shcode = self.GetFieldData("t8430OutBlock", "shcode", 0) + # #print('tr_code: ',tr_code) + # #print('hname: ',hname) + # #print('shcode: ',shcode) + + # param['hname']=hname + # param['shcode']=shcode + pass + def OnReceiveMessage(self, error, nMessageCode, szMessage): + # #print('OnReceiveMessage: ',szMessage) + pass + + + def shoot_order(self,stock_code,how_many,price,open,order_price,order_style,order_type,org_no): + #order_style이 매수인지 매도인지 그거 말하는거임 + #order_type은 지정가인지 시장가인지 그거임 + + # 00@지정가 + # 03@시장가 + is_market='00' + + if order_type=='market': + is_market=='03' + + is_ask='1' + + + if order_style=='bid': + is_ask='2' + + + order_dict={ + 'account':self.account, + 'stock_code':stock_code, + 'how_many':how_many, + 'order_price':order_price, + 'is_ask':is_ask, + 'is_market':is_market, + 'org_no':org_no + } + + stock_code="A"+stock_code#모투라 이렇게 해놈 + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\CSPAT00800.res" + + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\CSPAT00800.res" + self.SetFieldData("CSPAT00800InBlock1", "OrgOrdNo", 0, org_no) + self.SetFieldData("CSPAT00800InBlock1", "AcntNo", 0, self.account) + self.SetFieldData("CSPAT00800InBlock1", "InptPwd", 0, "0000") #모투는 0000임 + self.SetFieldData("CSPAT00800InBlock1", "IsuNo", 0, stock_code) #모투는 앞에 A 더하래 + self.SetFieldData("CSPAT00800InBlock1", "OrdQty", 0, how_many) #얘네 왜 스트링임? + # self.SetFieldData("CSPAT00800InBlock1", "OrdPrc", 0, str(order_price))#얘네 왜 스트링임? + # self.SetFieldData("CSPAT00700InBlock1", "BnsTpCode", 0, is_ask)#1이 매도 2가 매수 + # 00@지정가 + # 03@시장가 + # 05@조건부지정가 + # 06@최유리지정가 + # 07@최우선지정가 + # 61@장개시전시간외종가 + # 81@시간외종가 + # 82@시간외단일가 + # self.SetFieldData("CSPAT00800InBlock1", "OrdprcPtnCode", 0, is_market) + # 000:보통 + # 003:유통/자기융자신규 + # 005:유통대주신규 + # 007:자기대주신규 + # 101:유통융자상환 + # 103:자기융자상환 + # 105:유통대주상환 + # 107:자기대주상환 + # 180:예탁담보대출상환(신용) + # self.SetFieldData("CSPAT00600InBlock1", "MgntrnCode", 0, '000') + # self.SetFieldData("CSPAT00600InBlock1", "LoanDt", 0, '')#대출일이라는데 일단 비워둠 + # self.SetFieldData("CSPAT00800InBlock1", "OrdCndiTpCode", 0, '0') #0:없음,1:IOC,2:FOK 주문조건구분 + + #print('ORDER!!!!!') + + err_code = self.Request(False) + if err_code < 0: + + pass + #print("error... {0}".format(err_code)) diff --git a/ls_sample/sample_python/tr/tr_kh.py b/ls_sample/sample_python/tr/tr_kh.py new file mode 100644 index 0000000..17d9e60 --- /dev/null +++ b/ls_sample/sample_python/tr/tr_kh.py @@ -0,0 +1,72 @@ + +# from tr.tr_0424 import Tr_0424 +# tr_0424=Tr_0424() +import os +#XReal_S3_ +class XReal_KH_: + def __init__(self): + super().__init__() + self.count = 0 + # self.tr_0424=tr_0424 + + def OnReceiveRealData(self, tr_code): # event handler + """ + 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler + """ + shcode = self.GetFieldData("OutBlock", "shcode") + price = self.GetFieldData("OutBlock", "price") + tvol = self.GetFieldData("OutBlock", "tvol") + tval = self.GetFieldData("OutBlock", "tval") + + + # print('@@프로그램: ',shcode) + # print('@@프로그램 price: ',price) + # print('@@프로그램 순매수 수량: ',tvol) + # print('@@프로그램 순매수 금액: ',tval) + + if shcode is not None and price is not None: + self.process_balance_change(shcode,price) + + # chetime = self.GetFieldData("OutBlock", "chetime") + + # #print('chetime: ',chetime) + # self.continue_draw_balance_table() + + + + def initialize_continue_draw_balance_table(self,continue_draw_balance_table): + #print('s3 initialize_continue_draw_balance_table @#@#@#@#@#@#@#') + self.continue_draw_balance_table=continue_draw_balance_table + + def initialize_process_balance_change(self,process_balance_change): + #print('s3 initialize_process_balance_change @#@#@#@#@#@#@#') + self.process_balance_change=process_balance_change + + def start(self,stock_code): + print('프로그램 리얼 스타트: ',stock_code) + # #print('왜 자꾸 콜하는겨') + """ + 이베스트 서버에 실시간 data 요청함. + """ + + the_path=os.environ.get('ROOT_FILE_PATH')+"\\Res\\KH_.res" + # print('the_path: ',the_path) + # the_path=os.environ.get('ROOT_FILE_PATH')+"\\Res\\S3_.res" + self.ResFileName = the_path # RES 파일 등록 + + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\S3_.res" # RES 파일 등록 + + self.SetFieldData("InBlock", "shcode", stock_code) + self.AdviseRealData() # 실시간데이터 요청 + + def add_item(self, stockcode): + # 실시간데이터 요청 종목 추가 + self.SetFieldData("InBlock", "shcode", stockcode) + self.AdviseRealData() + + def remove_item(self, stockcode): + # stockcode 종목만 실시간데이터 요청 취소 + self.UnadviseRealDataWithKey(stockcode) + + def end(self): + self.UnadviseRealData() # 실시간데이터 요청 모두 취소 diff --git a/ls_sample/sample_python/tr/tr_master.py b/ls_sample/sample_python/tr/tr_master.py new file mode 100644 index 0000000..2b68100 --- /dev/null +++ b/ls_sample/sample_python/tr/tr_master.py @@ -0,0 +1,67 @@ + +import os +the_path=os.path.dirname(__file__) +#XAQueryEvents +class Tr_master: + master_arr=[] + master_dict={} + query_state = False + def OnReceiveData(self, tr_code): + Tr_master.query_state = True + block_count=self.GetBlockCount("t8430OutBlock") + #print('block_count: ',block_count) + + if block_count is not None: + + + for i in range(block_count): + hname = self.GetFieldData("t8430OutBlock", "hname", i).strip() + shcode = self.GetFieldData("t8430OutBlock", "shcode", i).strip() + gubun = self.GetFieldData("t8430OutBlock", "gubun", i).strip() #1은 코스피, 2는 코스닥 + self.master_dict[shcode]={ + 'hname':hname, + 'shcode':shcode, + 'gubun':gubun + } + self.master_dict[hname]={ + 'hname':hname, + 'shcode':shcode, + 'gubun':gubun + } + + # print('삼전: ',self.master_dict['005930']) + #print('삼전2: ',self.master_dict['삼성전자']) + + self.tr_0424.init_get_account(self.balance_window)#잔고 + self.tr_pending.get_pending(self.balance_window)#미체결 + + self.tr_0424.init_sc1() + + # hname = self.GetFieldData("t8430OutBlock", "hname", 0) + # shcode = self.GetFieldData("t8430OutBlock", "shcode", 0) + # #print('tr_code: ',tr_code) + # #print('hname: ',hname) + # #print('shcode: ',shcode) + + # param['hname']=hname + # param['shcode']=shcode + def OnReceiveMessage(self, error, nMessageCode, szMessage): + # #print('OnReceiveMessage: ',szMessage) + pass + + def single_request(self,tr_0424,balance_window,tr_pending): + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\t8430.res" + self.tr_0424=tr_0424 + self.tr_pending=tr_pending + self.balance_window=balance_window + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\t8430.res" + #print('the_path2: ',the_path+"\\Res\\t8430.res") + self.SetFieldData("t8430InBlock", "gubun", 0, 0) + err_code = self.Request(False) + + if err_code is not None: + + if err_code < 0: + #print("error... {0}".format(err_code)) + pass \ No newline at end of file diff --git a/ls_sample/sample_python/tr/tr_order.py b/ls_sample/sample_python/tr/tr_order.py new file mode 100644 index 0000000..479b81b --- /dev/null +++ b/ls_sample/sample_python/tr/tr_order.py @@ -0,0 +1,197 @@ + +from dotenv import load_dotenv +import os +from tr.tr_0424 import Tr_0424 +from PySide2 import QtTest +from PySide2 import QtCore + +# from order_window import Order_window + +from balance_window import Balance_window +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 +load_dotenv() + + + +class Tr_order: + # class Worker(QtCore.QThread): + # # def __init__(self,tr_0424): + # # self.tr_0424=tr_0424 + + # def call(self,tr_0424): + # self.tr_0424=tr_0424 + + # def run(self): + # while True: + # self.sleep(2) + # self.tr_0424.get_account(Balance_window) + def __init__(self): + super().__init__() + self.account=os.environ.get('ACCOUNT') + # self.tr_0424=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_0424)#계좌티알 + # self.tr_0424.get_account(Balance_window) + + # self.worker = self.Worker() + # self.worker.call(self.tr_0424) + # self.worker.start() + + # self.order_window=Order_window() + + self.the_pending={}#미체결 + self.the_pending_list=[] + self.the_pending_temp={}#오더 에코 떨어지기 전에 메모리에 올려놓는 미체결 + + def init_set_text(self,func): + self.set_status_label=func + + + + def OnReceiveData(self, tr_code): + # print('주문 에코: ',tr_code) + + # self.tr_0424.get_account(Balance_window) + + OrdQty = self.GetFieldData("CSPAT00600OutBlock1", "OrdQty",0).strip() + + # print('AcntNo: ',OrdQty) + + + + # if tr_code=='CSPAT00600': + # df,df1=result + + + # XAQueryEvents.query_state = True + # block_count=self.GetBlockCount("t8430OutBlock") + # #print('block_count: ',block_count) + + + # for i in range(block_count): + # hname = self.GetFieldData("t8430OutBlock", "hname", i).strip() + # shcode = self.GetFieldData("t8430OutBlock", "shcode", i).strip() + # gubun = self.GetFieldData("t8430OutBlock", "gubun", i).strip() #1은 코스피, 2는 코스닥 + + # master_dict[shcode]={ + # 'hname':hname, + # 'gubun':gubun + # } + + # #print('master_dict: ',master_dict['005930']) + # query_1857.set_master(master_dict) + + + # hname = self.GetFieldData("t8430OutBlock", "hname", 0) + # shcode = self.GetFieldData("t8430OutBlock", "shcode", 0) + # #print('tr_code: ',tr_code) + # #print('hname: ',hname) + # #print('shcode: ',shcode) + + # param['hname']=hname + # param['shcode']=shcode + pass + def OnReceiveMessage(self, error, nMessageCode, szMessage): + # print('OnReceiveMessage nMessageCode: ',nMessageCode) + # print('OnReceiveMessage szMessage: ',szMessage) + + if nMessageCode=='00040': + #미체결 obj 메모리에 올리는 부분 + # print('the_pending: ',self.the_pending) + self.the_pending=self.the_pending_temp + # print('the_pending2: ',self.the_pending) + self.set_status_label(szMessage) + pass + + + def shoot_order(self,stock_code,how_many,price,open,order_price,order_style,order_type): + #order_style이 매수인지 매도인지 그거 말하는거임 + #order_type은 지정가인지 시장가인지 그거임 + + # 00@지정가 + # 03@시장가 + is_market='00' + + if order_type=='market': + is_market='03' + order_price=0 + + is_ask='1' + + + if order_style=='bid': + is_ask='2' + + + order_dict={ + 'account':self.account, + 'stock_code':stock_code, + 'how_many':how_many, + 'order_price':order_price, + 'is_ask':is_ask, + 'is_market':is_market, + 'order_type':order_type + } + +#미체결에 넣는다 같은 스톡코드라도 리스트로 뿌려야되는거 아님? +#걍 미체결 리얼에서 떨어지는거 찍어볼까 + # pending_stock=self.the_pending_temp.get(stock_code,None) + + # self.the_pending_list.append({ + + # }) + + + # if pending_stock is None: + + # self.the_pending_temp[stock_code]={ + # 'stock_code':stock_code, + # 'how_many':how_many, + # 'order_price':order_price, + # } + # else: + # self.the_pending_temp[stock_code]['how_many']=how_many + +#미체결에 넣는다 끝 + + + stock_code="A"+stock_code#모투라 이렇게 해놈 + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\CSPAT00600.res" + + self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\CSPAT00600.res" + self.SetFieldData("CSPAT00600InBlock1", "AcntNo", 0, self.account) + self.SetFieldData("CSPAT00600InBlock1", "InptPwd", 0, "0000") #모투는 0000임 + self.SetFieldData("CSPAT00600InBlock1", "IsuNo", 0, stock_code) #모투는 앞에 A 더하래 + self.SetFieldData("CSPAT00600InBlock1", "OrdQty", 0, how_many) #얘네 왜 스트링임? + self.SetFieldData("CSPAT00600InBlock1", "OrdPrc", 0, str(order_price))#얘네 왜 스트링임? + self.SetFieldData("CSPAT00600InBlock1", "BnsTpCode", 0, is_ask)#1이 매도 2가 매수 + # 00@지정가 + # 03@시장가 + # 05@조건부지정가 + # 06@최유리지정가 + # 07@최우선지정가 + # 61@장개시전시간외종가 + # 81@시간외종가 + # 82@시간외단일가 + self.SetFieldData("CSPAT00600InBlock1", "OrdprcPtnCode", 0, is_market) + # 000:보통 + # 003:유통/자기융자신규 + # 005:유통대주신규 + # 007:자기대주신규 + # 101:유통융자상환 + # 103:자기융자상환 + # 105:유통대주상환 + # 107:자기대주상환 + # 180:예탁담보대출상환(신용) + self.SetFieldData("CSPAT00600InBlock1", "MgntrnCode", 0, '000') + self.SetFieldData("CSPAT00600InBlock1", "LoanDt", 0, '')#대출일이라는데 일단 비워둠 + self.SetFieldData("CSPAT00600InBlock1", "OrdCndiTpCode", 0, '0') #0:없음,1:IOC,2:FOK 주문조건구분 + + #print('ORDER!!!!!') + + + err_code = self.Request(False) + if err_code < 0: + pass + #print("error... {0}".format(err_code)) diff --git a/ls_sample/sample_python/tr/tr_pending.py b/ls_sample/sample_python/tr/tr_pending.py new file mode 100644 index 0000000..5a59d96 --- /dev/null +++ b/ls_sample/sample_python/tr/tr_pending.py @@ -0,0 +1,326 @@ + +from dotenv import load_dotenv +import os +from tr.tr_0424 import Tr_0424 +from PySide2 import QtTest +from PySide2 import QtCore +import json + +# from order_window import Order_window + +from balance_window import Balance_window +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 +load_dotenv() + +from tr.tr_master import Tr_master +tr_master=Tr_master() + + +from tr.tr_sc0 import Tr_sc0 + + +class Tr_pending: + # class Worker(QtCore.QThread): + # # def __init__(self,tr_0424): + # # self.tr_0424=tr_0424 + + # def call(self,tr_0424): + # self.tr_0424=tr_0424 + + # def run(self): + # while True: + # self.sleep(2) + # self.tr_0424.get_account(Balance_window) + def __init__(self): + super().__init__() + self.account=os.environ.get('ACCOUNT') + self.pw=os.environ.get('PW') + # self.tr_0424=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_0424)#계좌티알 + # self.tr_0424.get_account(Balance_window) + + # self.worker = self.Worker() + # self.worker.call(self.tr_0424) + # self.worker.start() + + # self.order_window=Order_window() + + # self.the_pending={}#미체결 + self.the_pending_list=[] + # self.the_pending_temp={}#오더 에코 떨어지기 전에 메모리에 올려놓는 미체결 + + + # self.sc0_real = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", Tr_sc0) + # self.sc0_real.start(self.process_pending_change_echo) + + def init_set_text(self,func): + self.set_status_label=func + + + # def process_pending_change_echo(self,ord_no, ord_qty, ord_price, stock_code, stock_name): + # print('process_pending_change_echo: ',self.the_pending_list) + + + def get_pending(self,balance_window): + # print('펜딩부름') + + self.balance_window=balance_window + + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\t0424.res" + + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\CSPAQ13700.res" + + self.SetFieldData("CSPAQ13700InBlock1", "RecCnt", 0, "00001") + self.SetFieldData("CSPAQ13700InBlock1", "AcntNo", 0, os.environ.get('ACCOUNT')) + self.SetFieldData("CSPAQ13700InBlock1", "InptPwd", 0, os.environ.get('PW')) + self.SetFieldData("CSPAQ13700InBlock1", "OrdMktCode", 0, '00') + self.SetFieldData("CSPAQ13700InBlock1", "BnsTpCode", 0, '0') #0 결제기준, 2 체결기준 + self.SetFieldData("CSPAQ13700InBlock1", "IsuNo", 0, '') + self.SetFieldData("CSPAQ13700InBlock1", "ExecYn", 0, '3') + + self.SetFieldData("CSPAQ13700InBlock1", "OrdDt", 0, '') + + self.SetFieldData("CSPAQ13700InBlock1", "SrtOrdNo2", 0, '999999999') + self.SetFieldData("CSPAQ13700InBlock1", "BkseqTpCode", 0, '0') + self.SetFieldData("CSPAQ13700InBlock1", "OrdPtnCode", 0, '00') + + #print('계좌 불러옴') + + + + + err_code = self.Request(False) + if err_code < 0: + #print("error... {0}".format(err_code)) + + pass + + def init_draw_pending_table(self): + # self.balance_window.insert_row_on_pending_table() + # self.balance_window.set_value_on_pending_table(0,0,'stock_name') + # self.balance_window.set_value_on_pending_table(1,0,'stock_code') + + + for i,obj in enumerate( self.the_pending_list): + try: + + self.balance_window.insert_row_on_pending_table() + + self.balance_window.set_value_on_pending_table(0,i,obj['ord_no'] ) + self.balance_window.set_value_on_pending_table(1,i,obj['stock_name'] ) + self.balance_window.set_value_on_pending_table(2,i,obj['side']) + self.balance_window.set_value_on_pending_table(3,i,obj['stock_code']) + self.balance_window.set_value_on_pending_table(4,i,obj['ord_qty']) + self.balance_window.set_value_on_pending_table(5,i,obj['ord_price']) + self.balance_window.set_value_on_pending_table(6,i,obj['OrgOrdNo']) + self.balance_window.set_value_on_pending_table(7,i,obj['OrdTrxPtnNm']) + + + + + except: + pass + + def OnReceiveData(self, tr_code): + + # self.tr_0424.get_account(Balance_window) + block_count=self.GetBlockCount("CSPAQ13700OutBlock3") + self.the_pending_list=[] + os.environ['the_pending_list_length']=str(len(self.the_pending_list)) + os.environ['the_pending_list']=json.dumps(self.the_pending_list) + # if len(self.the_pending_list)>0: + # self.the_pending_list=[] + + + if block_count is not None: + # print('미체결 block_count: ',block_count) + + + for i in range(block_count): + + OrgOrdNo = self.GetFieldData("CSPAQ13700OutBlock3", "OrgOrdNo",i).strip() + ord_no = self.GetFieldData("CSPAQ13700OutBlock3", "OrdNo",i).strip() + ord_qty = self.GetFieldData("CSPAQ13700OutBlock3", "OrdQty",i).strip() + ExecQty = self.GetFieldData("CSPAQ13700OutBlock3", "ExecQty",i).strip()#체결수량 + ord_price = self.GetFieldData("CSPAQ13700OutBlock3", "OrdPrc",i).strip() + stock_code = self.GetFieldData("CSPAQ13700OutBlock3", "shcode",i).strip() + stock_name = self.GetFieldData("CSPAQ13700OutBlock3", "IsuNm",i).strip() + BnsTpCode = self.GetFieldData("CSPAQ13700OutBlock3", "BnsTpCode",i).strip()#매매구분 1 매도 2 매수 + + BnsTpNm = self.GetFieldData("CSPAQ13700OutBlock3", "BnsTpNm",i).strip() + OrdTrxPtnCode = self.GetFieldData("CSPAQ13700OutBlock3", "OrdTrxPtnCode",i).strip() + OrdTrxPtnNm = self.GetFieldData("CSPAQ13700OutBlock3", "OrdTrxPtnNm",i).strip() + # MrcTpCode = self.GetFieldData("CSPAQ13700OutBlock3", "MrcTpCode",i).strip() + # MrcTpNm = self.GetFieldData("CSPAQ13700OutBlock3", "MrcTpNm",i).strip() + + side='' + + if BnsTpCode=='1': + side='매도' + else: + side='매수' + + actual_qty=int(ord_qty)-int(ExecQty)#미체결량 구하기 + + # print('미체결 MrcTpCode: ',MrcTpCode) + # print('미체결 MrcTpNm: ',MrcTpNm) + + the_dict_from_master=tr_master.master_dict.get(stock_name,{}) + + + stock_code_from_master=the_dict_from_master.get('shcode',"") + + obj={ + "ord_no":ord_no, + "ord_qty":actual_qty, + "ord_price":int(float(ord_price)), + "stock_code":stock_code_from_master, + "stock_name":stock_name, + 'side':side, + 'OrgOrdNo':OrgOrdNo, + 'OrdTrxPtnNm':OrdTrxPtnNm + } + self.the_pending_list.append(obj) + + os.environ['the_pending_list_length']=str(len(self.the_pending_list)) + os.environ['the_pending_list']=json.dumps(self.the_pending_list) + + # print('tr_pending의 the_pending_list: ',json.loads(os.environ['the_pending_list']) ) + # print('tr_pending의 the_pending_list 길이: ',os.environ['the_pending_list_length']) + self.init_draw_pending_table() + + # if tr_code=='CSPAT00600': + # df,df1=result + + + # XAQueryEvents.query_state = True + # block_count=self.GetBlockCount("t8430OutBlock") + # #print('block_count: ',block_count) + + + # for i in range(block_count): + # hname = self.GetFieldData("t8430OutBlock", "hname", i).strip() + # shcode = self.GetFieldData("t8430OutBlock", "shcode", i).strip() + # gubun = self.GetFieldData("t8430OutBlock", "gubun", i).strip() #1은 코스피, 2는 코스닥 + + # master_dict[shcode]={ + # 'hname':hname, + # 'gubun':gubun + # } + + # #print('master_dict: ',master_dict['005930']) + # query_1857.set_master(master_dict) + + + # hname = self.GetFieldData("t8430OutBlock", "hname", 0) + # shcode = self.GetFieldData("t8430OutBlock", "shcode", 0) + # #print('tr_code: ',tr_code) + # #print('hname: ',hname) + # #print('shcode: ',shcode) + + # param['hname']=hname + # param['shcode']=shcode + pass + def OnReceiveMessage(self, error, nMessageCode, szMessage): + + if nMessageCode=='00040': + #미체결 obj 메모리에 올리는 부분 + self.the_pending=self.the_pending_temp + # self.set_status_label(szMessage) + + + +# def shoot_order(self,stock_code,how_many,price,open,order_price,order_style,order_type): +# #order_style이 매수인지 매도인지 그거 말하는거임 +# #order_type은 지정가인지 시장가인지 그거임 + +# # 00@지정가 +# # 03@시장가 +# is_market='00' + +# if order_type=='market': +# is_market='03' +# order_price=0 + +# is_ask='1' + + +# if order_style=='bid': +# is_ask='2' + + +# order_dict={ +# 'account':self.account, +# 'stock_code':stock_code, +# 'how_many':how_many, +# 'order_price':order_price, +# 'is_ask':is_ask, +# 'is_market':is_market, +# 'order_type':order_type +# } + +# #미체결에 넣는다 같은 스톡코드라도 리스트로 뿌려야되는거 아님? +# #걍 미체결 리얼에서 떨어지는거 찍어볼까 +# # pending_stock=self.the_pending_temp.get(stock_code,None) + +# # self.the_pending_list.append({ + +# # }) + + +# # if pending_stock is None: + +# # self.the_pending_temp[stock_code]={ +# # 'stock_code':stock_code, +# # 'how_many':how_many, +# # 'order_price':order_price, +# # } +# # else: +# # self.the_pending_temp[stock_code]['how_many']=how_many + +# #미체결에 넣는다 끝 + + +# stock_code="A"+stock_code#모투라 이렇게 해놈 + +# the_path=os.environ.get('ROOT_FILE_PATH') +# self.ResFileName = the_path+"\\Res\\CSPAT00600.res" + +# self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\CSPAT00600.res" +# self.SetFieldData("CSPAT00600InBlock1", "AcntNo", 0, self.account) +# self.SetFieldData("CSPAT00600InBlock1", "InptPwd", 0, "0000") #모투는 0000임 +# self.SetFieldData("CSPAT00600InBlock1", "IsuNo", 0, stock_code) #모투는 앞에 A 더하래 +# self.SetFieldData("CSPAT00600InBlock1", "OrdQty", 0, how_many) #얘네 왜 스트링임? +# self.SetFieldData("CSPAT00600InBlock1", "OrdPrc", 0, str(order_price))#얘네 왜 스트링임? +# self.SetFieldData("CSPAT00600InBlock1", "BnsTpCode", 0, is_ask)#1이 매도 2가 매수 +# # 00@지정가 +# # 03@시장가 +# # 05@조건부지정가 +# # 06@최유리지정가 +# # 07@최우선지정가 +# # 61@장개시전시간외종가 +# # 81@시간외종가 +# # 82@시간외단일가 +# self.SetFieldData("CSPAT00600InBlock1", "OrdprcPtnCode", 0, is_market) +# # 000:보통 +# # 003:유통/자기융자신규 +# # 005:유통대주신규 +# # 007:자기대주신규 +# # 101:유통융자상환 +# # 103:자기융자상환 +# # 105:유통대주상환 +# # 107:자기대주상환 +# # 180:예탁담보대출상환(신용) +# self.SetFieldData("CSPAT00600InBlock1", "MgntrnCode", 0, '000') +# self.SetFieldData("CSPAT00600InBlock1", "LoanDt", 0, '')#대출일이라는데 일단 비워둠 +# self.SetFieldData("CSPAT00600InBlock1", "OrdCndiTpCode", 0, '0') #0:없음,1:IOC,2:FOK 주문조건구분 + +# #print('ORDER!!!!!') + + +# err_code = self.Request(False) +# if err_code < 0: +# pass +# #print("error... {0}".format(err_code)) diff --git a/ls_sample/sample_python/tr/tr_redo_order.py b/ls_sample/sample_python/tr/tr_redo_order.py new file mode 100644 index 0000000..15c3a99 --- /dev/null +++ b/ls_sample/sample_python/tr/tr_redo_order.py @@ -0,0 +1,115 @@ + +from dotenv import load_dotenv +import os +load_dotenv() + +class Tr_redo_order: + def __init__(self): + super().__init__() + self.account=os.environ.get('ACCOUNT') + + def OnReceiveData(self, tr_code): + #print('주문 에코: ',tr_code) + + + # XAQueryEvents.query_state = True + # block_count=self.GetBlockCount("t8430OutBlock") + # #print('block_count: ',block_count) + + + # for i in range(block_count): + # hname = self.GetFieldData("t8430OutBlock", "hname", i).strip() + # shcode = self.GetFieldData("t8430OutBlock", "shcode", i).strip() + # gubun = self.GetFieldData("t8430OutBlock", "gubun", i).strip() #1은 코스피, 2는 코스닥 + + # master_dict[shcode]={ + # 'hname':hname, + # 'gubun':gubun + # } + + # #print('master_dict: ',master_dict['005930']) + # query_1857.set_master(master_dict) + + + # hname = self.GetFieldData("t8430OutBlock", "hname", 0) + # shcode = self.GetFieldData("t8430OutBlock", "shcode", 0) + # #print('tr_code: ',tr_code) + # #print('hname: ',hname) + # #print('shcode: ',shcode) + + # param['hname']=hname + # param['shcode']=shcode + pass + def OnReceiveMessage(self, error, nMessageCode, szMessage): + # #print('OnReceiveMessage: ',szMessage) + pass + + + def shoot_order(self,stock_code,how_many,price,open,order_price,order_style,order_type,org_no): + #order_style이 매수인지 매도인지 그거 말하는거임 + #order_type은 지정가인지 시장가인지 그거임 + + # 00@지정가 + # 03@시장가 + is_market='00' + + if order_type=='market': + is_market=='03' + + is_ask='1' + + + if order_style=='bid': + is_ask='2' + + + order_dict={ + 'account':self.account, + 'stock_code':stock_code, + 'how_many':how_many, + 'order_price':order_price, + 'is_ask':is_ask, + 'is_market':is_market, + 'org_no':org_no + } + stock_code="A"+stock_code#모투라 이렇게 해놈 + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\CSPAT00700.res" + + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\CSPAT00700.res" + self.SetFieldData("CSPAT00700InBlock1", "OrgOrdNo", 0, org_no) + self.SetFieldData("CSPAT00700InBlock1", "AcntNo", 0, self.account) + self.SetFieldData("CSPAT00700InBlock1", "InptPwd", 0, "0000") #모투는 0000임 + self.SetFieldData("CSPAT00700InBlock1", "IsuNo", 0, stock_code) #모투는 앞에 A 더하래 + self.SetFieldData("CSPAT00700InBlock1", "OrdQty", 0, how_many) #얘네 왜 스트링임? + self.SetFieldData("CSPAT00700InBlock1", "OrdPrc", 0, str(order_price))#얘네 왜 스트링임? + # self.SetFieldData("CSPAT00700InBlock1", "BnsTpCode", 0, is_ask)#1이 매도 2가 매수 + # 00@지정가 + # 03@시장가 + # 05@조건부지정가 + # 06@최유리지정가 + # 07@최우선지정가 + # 61@장개시전시간외종가 + # 81@시간외종가 + # 82@시간외단일가 + self.SetFieldData("CSPAT00700InBlock1", "OrdprcPtnCode", 0, is_market) + # 000:보통 + # 003:유통/자기융자신규 + # 005:유통대주신규 + # 007:자기대주신규 + # 101:유통융자상환 + # 103:자기융자상환 + # 105:유통대주상환 + # 107:자기대주상환 + # 180:예탁담보대출상환(신용) + # self.SetFieldData("CSPAT00600InBlock1", "MgntrnCode", 0, '000') + # self.SetFieldData("CSPAT00600InBlock1", "LoanDt", 0, '')#대출일이라는데 일단 비워둠 + self.SetFieldData("CSPAT00700InBlock1", "OrdCndiTpCode", 0, '0') #0:없음,1:IOC,2:FOK 주문조건구분 + + #print('ORDER!!!!!') + + err_code = self.Request(False) + if err_code < 0: + pass + #print("error... {0}".format(err_code)) diff --git a/ls_sample/sample_python/tr/tr_sc0.py b/ls_sample/sample_python/tr/tr_sc0.py new file mode 100644 index 0000000..abbab8c --- /dev/null +++ b/ls_sample/sample_python/tr/tr_sc0.py @@ -0,0 +1,108 @@ + +# from tr.tr_0424 import Tr_0424 +# tr_0424=Tr_0424() +import os + +class Tr_sc0: + def __init__(self): + super().__init__() + + def OnReceiveRealData(self,code): # event handler + """ + 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler + """ + # self.count += 1 + #print('yeah') + #print('자기소개2: ',dir(self)) + stock_code = self.GetFieldData("OutBlock", "expcode") + stock_name = self.GetFieldData("OutBlock", "hname") + ord_qty = self.GetFieldData("OutBlock", "ordqty")#주문수량 + ord_price = self.GetFieldData("OutBlock", "ordprice")#주문가격 + ord_no = self.GetFieldData("OutBlock", "ordno")#주문번호 + orgordno = self.GetFieldData("OutBlock", "orgordno")#원주문번호 + orgordundrqty = self.GetFieldData("OutBlock", "orgordundrqty")#원주문미체결수량 + bnstp = self.GetFieldData("OutBlock", "bnstp")#매매구분 1 매도 2 매수 + ordchegb = self.GetFieldData("OutBlock", "ordchegb") #01 주문 02 정정 03 취소 11체결 + + # OrdPtnCode = self.GetFieldData("OutBlock", "OrdPtnCode") + # OrdPtnNm = self.GetFieldData("OutBlock", "OrdPtnNm") + # OrdTrxPtnCode = self.GetFieldData("OutBlock", "OrdTrxPtnCode") + OrdTrxPtnNm = '' + + side='' + + if bnstp=='1': + side='매도' + else: + side='매수' + + + if ordchegb=='02': + OrdTrxPtnNm='정정확인' + + + + if len(stock_code) > 10: + stock_code=stock_code[3:-3] + + if OrdTrxPtnNm=='': + OrdTrxPtnNm='정상' + + # price = int(self.GetFieldData("OutBlock", "price")) + # if stock_code is not None and price is not None: + # self.process_balance_change(stock_code,price) + # open = int(self.GetFieldData("OutBlock", "open")) + # drate = float(self.GetFieldData("OutBlock", "drate")) + # #print('코스닥 코드: ',stock_code) + # # #print('drate: ',drate) + # # #print('chetime: ',chetime) + # # chetime = self.GetFieldData("OutBlock", "chetime") + # volume = int(self.GetFieldData("OutBlock", "cvolume"))#cvolume이 체결거래량이고 그냥 볼륨은 누적거래량임 + # accu_volume = int(self.GetFieldData("OutBlock", "volume"))#누적거래대금 + # value = int(self.GetFieldData("OutBlock", "value"))#누적거래대금 + # side = self.GetFieldData("OutBlock", "cgubun") + + # self.process_pending_change_echo(ord_no, ord_qty, ord_price, stock_code, stock_name,side,orgordno,OrdTrxPtnNm) + # print('##ordchegb222: ',ordchegb) + if ordchegb != '03': + # print('##ordchegb222: ',ordchegb) + + self.process_pending_change_echo(ord_no, ord_qty, ord_price, stock_code, stock_name,side,orgordno,OrdTrxPtnNm) + + + + + def initialize_process_balance_change(self,process_balance_change): + #print('k3 initialize_process_balance_change @#@#@#@#@#@#@#') + self.process_balance_change=process_balance_change + + def start(self,process_pending_change_echo): + self.process_pending_change_echo=process_pending_change_echo + # print('접수 리얼 스타트: ') + #print('자기소개: ',dir(self)) + """ + 이베스트 서버에 실시간 data 요청함. + """ + + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\SC0.res" + + self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\SC0.res" # RES 파일 등록 + # self.SetFieldData("InBlock", "shcode", stock_code) + self.AdviseRealData() # 실시간데이터 요청 + # self.AdviseLinkFromHTS() # 실시간데이터 요청 + #print('접수 리얼 스타트 끝: ') + + def add_item(self, stockcode): + # 실시간데이터 요청 종목 추가 + self.SetFieldData("InBlock", "shcode", stockcode) + + self.AdviseRealData() + + def remove_item(self, stockcode): + # stockcode 종목만 실시간데이터 요청 취소 + self.UnadviseRealDataWithKey(stockcode) + + def end(self): + self.UnadviseRealData() # 실시간데이터 요청 모두 취소 diff --git a/ls_sample/sample_python/tr/tr_sc1.py b/ls_sample/sample_python/tr/tr_sc1.py new file mode 100644 index 0000000..81b7fd9 --- /dev/null +++ b/ls_sample/sample_python/tr/tr_sc1.py @@ -0,0 +1,97 @@ + +# from tr.tr_0424 import Tr_0424 +# tr_0424=Tr_0424() +import os + +class Tr_sc1: + def __init__(self): + super().__init__() + + def OnReceiveRealData(self,code): # event handler + """ + 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler + """ + # self.count += 1 + # #print('yeah') + # #print('자기소개2: ',dir(self)) + stock_code = self.GetFieldData("OutBlock", "Isuno")[3:-3] + stock_name = self.GetFieldData("OutBlock", "Isunm") + # chetime = self.GetFieldData("OutBlock", "chetime") + ordno = self.GetFieldData("OutBlock", "ordno")#주문번호 + volume = int(self.GetFieldData("OutBlock", "execqty")) + #1 매도 2 매수 + side = int(self.GetFieldData("OutBlock", "bnstp")) + contract_price = int(self.GetFieldData("OutBlock", "execprc")) + + + + + if len(stock_code) > 10: + stock_code=stock_code[3:-3] + + + if (stock_code is not None and + stock_name is not None and + volume is not None and + side is not None and + contract_price is not None): + + + self.process_balance_change_echo(stock_code,volume,side,contract_price,stock_name,ordno) + + + # open = int(self.GetFieldData("OutBlock", "open")) + # drate = float(self.GetFieldData("OutBlock", "drate")) + # #print('코스닥 코드: ',stock_code) + # # #print('drate: ',drate) + # # #print('chetime: ',chetime) + # # chetime = self.GetFieldData("OutBlock", "chetime") + # volume = int(self.GetFieldData("OutBlock", "cvolume"))#cvolume이 체결거래량이고 그냥 볼륨은 누적거래량임 + # accu_volume = int(self.GetFieldData("OutBlock", "volume"))#누적거래대금 + # value = int(self.GetFieldData("OutBlock", "value"))#누적거래대금 + # side = self.GetFieldData("OutBlock", "cgubun") + + #print('스톡코드: ',stock_code) + #print('stock_name: ',stock_name) + #print('volume: ',volume) + #print('side: ',side) + #print('contract_price: ',contract_price) + + + + def initialize_process_balance_change(self,process_balance_change): + #print('k3 initialize_process_balance_change @#@#@#@#@#@#@#') + self.process_balance_change=process_balance_change + + def start(self,process_balance_change_echo): + self.process_balance_change_echo=process_balance_change_echo + #print('체결 리얼 스타트: ') + #print('자기소개 체결: ',dir(self)) + + """ + 이베스트 서버에 실시간 data 요청함. + """ + + + the_path=os.environ.get('ROOT_FILE_PATH') + # self.ResFileName = the_path+"\\Res\\SC1.res" + # self.LoadFromResFile = the_path+"\\Res\\SC1.res" + + self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\SC1.res" # RES 파일 등록 + # self.SetFieldData("InBlock", "shcode", stock_code) + self.AdviseRealData() # 실시간데이터 요청 + # self.AdviseLinkFromHTS() # 실시간데이터 요청 + #print('체결 리얼 스타트 끝: ') + + def add_item(self, stockcode): + # 실시간데이터 요청 종목 추가 + self.SetFieldData("InBlock", "shcode", stockcode) + + self.AdviseRealData() + + def remove_item(self, stockcode): + # stockcode 종목만 실시간데이터 요청 취소 + self.UnadviseRealDataWithKey(stockcode) + + def end(self): + self.UnadviseRealData() # 실시간데이터 요청 모두 취소 diff --git a/ls_sample/sample_python/tr/tr_sc2.py b/ls_sample/sample_python/tr/tr_sc2.py new file mode 100644 index 0000000..017087e --- /dev/null +++ b/ls_sample/sample_python/tr/tr_sc2.py @@ -0,0 +1,82 @@ + +# from tr.tr_0424 import Tr_0424 +# tr_0424=Tr_0424() +import os + +class Tr_sc2: + def __init__(self): + super().__init__() + + def OnReceiveRealData(self,code): # event handler + """ + 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler + """ + # self.count += 1 + #print('yeah') + #print('자기소개2: ',dir(self)) + + + # stock_code = self.GetFieldData("OutBlock", "Isuno")[3:-3] + # stock_name = self.GetFieldData("OutBlock", "Isunm") + ord_qty = self.GetFieldData("OutBlock", "ordqty")#주문수량 + ord_price = self.GetFieldData("OutBlock", "ordprc")#주문가격 + ord_no = self.GetFieldData("OutBlock", "ordno")#주문번호 + orgordno = self.GetFieldData("OutBlock", "orgordno")#원주문번호 + # bnstp = self.GetFieldData("OutBlock", "bnstp")#매매구분 1 매도 2 매수 + # side='' + + # if bnstp=='1': + # side='매도' + # else: + # side='매수' + + + + + # print('##bnstp: ',bnstp) + # print('##stock_code: ',stock_code) + # print('##stock_name: ',stock_name) + # print('##ord_qty: ',ord_qty) + # print('##ord_price: ',ord_price) + # print('##ord_no: ',ord_no) + # print('##orgordno: ',orgordno) + + # self.process_pending_fix_echo(orgordno,ord_qty,ord_price) + + + + + def initialize_process_balance_change(self,process_balance_change): + #print('k3 initialize_process_balance_change @#@#@#@#@#@#@#') + self.process_balance_change=process_balance_change + + def start(self): + # self.process_pending_fix_echo=process_pending_fix_echo + # print('정정 리얼 스타트: ') + #print('자기소개: ',dir(self)) + """ + 이베스트 서버에 실시간 data 요청함. + """ + + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\SC2.res" + + self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\SC2.res" # RES 파일 등록 + # self.SetFieldData("InBlock", "shcode", stock_code) + self.AdviseRealData() # 실시간데이터 요청 + # self.AdviseLinkFromHTS() # 실시간데이터 요청 + #print('접수 리얼 스타트 끝: ') + + def add_item(self, stockcode): + # 실시간데이터 요청 종목 추가 + self.SetFieldData("InBlock", "shcode", stockcode) + + self.AdviseRealData() + + def remove_item(self, stockcode): + # stockcode 종목만 실시간데이터 요청 취소 + self.UnadviseRealDataWithKey(stockcode) + + def end(self): + self.UnadviseRealData() # 실시간데이터 요청 모두 취소 diff --git a/ls_sample/sample_python/tr/tr_sc3.py b/ls_sample/sample_python/tr/tr_sc3.py new file mode 100644 index 0000000..2a3598b --- /dev/null +++ b/ls_sample/sample_python/tr/tr_sc3.py @@ -0,0 +1,88 @@ + +# from tr.tr_0424 import Tr_0424 +# tr_0424=Tr_0424() +import os + +class Tr_sc3: + def __init__(self): + super().__init__() + + def OnReceiveRealData(self,code): # event handler + """ + 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler + """ + # self.count += 1 + #print('yeah') + #print('자기소개2: ',dir(self)) + + + + + # stock_code = self.GetFieldData("OutBlock", "expcode") + # stock_name = self.GetFieldData("OutBlock", "hname") + ord_qty = self.GetFieldData("OutBlock", "ordqty")#주문수량 + # ord_price = self.GetFieldData("OutBlock", "ordprc")#주문가격 + ord_no = self.GetFieldData("OutBlock", "ordno")#주문번호 + orgordno = self.GetFieldData("OutBlock", "orgordno")#원주문번호 + # bnstp = self.GetFieldData("OutBlock", "bnstp")#매매구분 1 매도 2 매수 + # side='' + + # if bnstp=='1': + # side='매도' + # else: + # side='매수' + + + # price = int(self.GetFieldData("OutBlock", "price")) + # if stock_code is not None and price is not None: + # self.process_balance_change(stock_code,price) + # open = int(self.GetFieldData("OutBlock", "open")) + # drate = float(self.GetFieldData("OutBlock", "drate")) + # #print('코스닥 코드: ',stock_code) + # # #print('drate: ',drate) + # # #print('chetime: ',chetime) + # # chetime = self.GetFieldData("OutBlock", "chetime") + # volume = int(self.GetFieldData("OutBlock", "cvolume"))#cvolume이 체결거래량이고 그냥 볼륨은 누적거래량임 + # accu_volume = int(self.GetFieldData("OutBlock", "volume"))#누적거래대금 + # value = int(self.GetFieldData("OutBlock", "value"))#누적거래대금 + # side = self.GetFieldData("OutBlock", "cgubun") + + self.process_pending_cancel_echo(orgordno,ord_qty) + + + + + def initialize_process_balance_change(self,process_balance_change): + #print('k3 initialize_process_balance_change @#@#@#@#@#@#@#') + self.process_balance_change=process_balance_change + + def start(self,process_pending_cancel_echo): + self.process_pending_cancel_echo=process_pending_cancel_echo + # print('취소 리얼 스타트: ') + #print('자기소개: ',dir(self)) + """ + 이베스트 서버에 실시간 data 요청함. + """ + + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\SC3.res" + + self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\SC3.res" # RES 파일 등록 + # self.SetFieldData("InBlock", "shcode", stock_code) + self.AdviseRealData() # 실시간데이터 요청 + # self.AdviseLinkFromHTS() # 실시간데이터 요청 + #print('접수 리얼 스타트 끝: ') + + def add_item(self, stockcode): + # 실시간데이터 요청 종목 추가 + self.SetFieldData("InBlock", "shcode", stockcode) + + self.AdviseRealData() + + def remove_item(self, stockcode): + # stockcode 종목만 실시간데이터 요청 취소 + self.UnadviseRealDataWithKey(stockcode) + + def end(self): + self.UnadviseRealData() # 실시간데이터 요청 모두 취소 diff --git a/ls_sample/sample_python/ui/balance-window.ui b/ls_sample/sample_python/ui/balance-window.ui new file mode 100644 index 0000000..de24aec --- /dev/null +++ b/ls_sample/sample_python/ui/balance-window.ui @@ -0,0 +1,193 @@ + + + Balance_window + + + + 0 + 0 + 886 + 665 + + + + Form + + + + + + + + 35 + 100 + 621 + 51 + + + + + 1 + + + + + 추정자산 + + + + + 실현손익 + + + + + 매입금액 + + + + + 평가금액 + + + + + 평가손익 + + + + + 수익률 + + + + + + + 10 + 10 + 851 + 361 + + + + + 종목명 + + + + + 종목코드 + + + + + 보유수량 + + + + + 평균단가 + + + + + 현재가 + + + + + 매입금액 + + + + + 평가금액 + + + + + 수익률 + + + + + + + 10 + 420 + 861 + 221 + + + + + 주문번호 + + + + + 종목명 + + + + + 매매구분 + + + + + 종목코드 + + + + + 미체결 수량 + + + + + 주문가격 + + + + + 원주문번호 + + + + + 상태 + + + + + + + 20 + 400 + 111 + 16 + + + + 미체결 내역 + + + + + + 770 + 390 + 75 + 23 + + + + 재조회 + + + + + + diff --git a/ls_sample/sample_python/ui/main-window.ui b/ls_sample/sample_python/ui/main-window.ui new file mode 100644 index 0000000..ec07a56 --- /dev/null +++ b/ls_sample/sample_python/ui/main-window.ui @@ -0,0 +1,130 @@ + + + Test + + + + 0 + 0 + 354 + 310 + + + + Form + + + + + 20 + 40 + 91 + 31 + + + + 잔고조회 + + + + + + 120 + 40 + 91 + 31 + + + + 주문 페이지 + + + + + + 120 + 120 + 113 + 20 + + + + + + + 120 + 160 + 113 + 20 + + + + + + + 70 + 120 + 56 + 12 + + + + I D + + + + + + 50 + 160 + 56 + 12 + + + + 비밀번호 + + + + + + 120 + 210 + 121 + 31 + + + + 로그인 + + + + + + 220 + 40 + 91 + 31 + + + + 검색 페이지 + + + + + + 50 + 260 + 251 + 31 + + + + 로그인 해주세요 + + + + + + diff --git a/ls_sample/sample_python/ui/order-window.ui b/ls_sample/sample_python/ui/order-window.ui new file mode 100644 index 0000000..049ba97 --- /dev/null +++ b/ls_sample/sample_python/ui/order-window.ui @@ -0,0 +1,599 @@ + + + Order_window + + + + 0 + 0 + 358 + 264 + + + + Form + + + + + + + + 10 + 10 + 521 + 201 + + + + 0 + + + + 매도 + + + + + 30 + 60 + 90 + 16 + + + + 보통 + + + + + + 100 + 60 + 90 + 16 + + + + 시장 + + + + + + 20 + 100 + 56 + 12 + + + + 주문수량 + + + + + + 70 + 99 + 113 + 21 + + + + + + + 70 + 20 + 113 + 20 + + + + + + + 70 + 129 + 113 + 21 + + + + + + + 20 + 130 + 56 + 12 + + + + 주문단가 + + + + + + 230 + 120 + 91 + 31 + + + + 주 문 + + + + + + 20 + 20 + 32 + 16 + + + + 종 목 + + + + + + 190 + 20 + 91 + 21 + + + + + 100 + 0 + + + + + + + + + + 매수 + + + + + 30 + 60 + 90 + 16 + + + + 보통 + + + + + + 70 + 20 + 113 + 20 + + + + + + + 70 + 99 + 113 + 21 + + + + + + + 70 + 129 + 113 + 21 + + + + + + + 20 + 20 + 32 + 16 + + + + 종 목 + + + + + + 20 + 100 + 56 + 12 + + + + 주문수량 + + + + + + 230 + 120 + 91 + 31 + + + + 주 문 + + + + + + 20 + 130 + 56 + 12 + + + + 주문단가 + + + + + + 100 + 60 + 90 + 16 + + + + 시장 + + + + + + 190 + 20 + 91 + 21 + + + + + 100 + 0 + + + + + + + + + + 정정 + + + + + 210 + 70 + 90 + 16 + + + + 잔량 + + + + + + 70 + 30 + 113 + 20 + + + + + + + 70 + 109 + 113 + 21 + + + + + + + 70 + 139 + 113 + 21 + + + + + + + 20 + 30 + 32 + 16 + + + + 종 목 + + + + + + 20 + 110 + 56 + 12 + + + + 정정수량 + + + + + + 230 + 130 + 91 + 31 + + + + 주 문 + + + + + + 20 + 140 + 56 + 12 + + + + 정정단가 + + + + + + 280 + 70 + 90 + 16 + + + + 일부 + + + + + + 70 + 70 + 113 + 20 + + + + + + + 10 + 70 + 51 + 16 + + + + 원주문No + + + + + + 200 + 30 + 91 + 21 + + + + + 100 + 0 + + + + + + + + + + 취소 + + + + + 280 + 60 + 90 + 16 + + + + 일부 + + + + + + 230 + 120 + 91 + 31 + + + + 주 문 + + + + + + 70 + 99 + 113 + 21 + + + + + + + 70 + 20 + 113 + 20 + + + + + + + 20 + 100 + 56 + 12 + + + + 취소수량 + + + + + + 20 + 20 + 32 + 16 + + + + 종 목 + + + + + + 210 + 60 + 90 + 16 + + + + 잔량 + + + + + + 70 + 60 + 113 + 20 + + + + + + + 10 + 60 + 51 + 16 + + + + 원주문No + + + + + + 200 + 20 + 91 + 21 + + + + + 100 + 0 + + + + + + + + + + + + 20 + 220 + 311 + 20 + + + + + + + + + + diff --git a/ls_sample/sample_python/ui/search-window.ui b/ls_sample/sample_python/ui/search-window.ui new file mode 100644 index 0000000..024b0a4 --- /dev/null +++ b/ls_sample/sample_python/ui/search-window.ui @@ -0,0 +1,90 @@ + + + Form + + + + 0 + 0 + 769 + 817 + + + + Form + + + + + 0 + 0 + 75 + 23 + + + + ACF 선택 + + + + + + 0 + 30 + 771 + 791 + + + + + 종목명 + + + + + 종목코드 + + + + + 현재가 + + + + + 전일대비 + + + + + 등락률 + + + + + 거래량 + + + + + 상태 + + + + + + + 90 + 0 + 75 + 23 + + + + 종료 + + + + + + diff --git a/ls_sample/sample_python/ui/second-window.ui b/ls_sample/sample_python/ui/second-window.ui new file mode 100644 index 0000000..5902a61 --- /dev/null +++ b/ls_sample/sample_python/ui/second-window.ui @@ -0,0 +1,35 @@ + + + Second_Window + + + + 0 + 0 + 1096 + 734 + + + + Form + + + background-color: rgb(66, 69, 73); + + + + + 100 + 110 + 56 + 12 + + + + 2 + + + + + + diff --git a/ls_sample/sample_python/ui/test.ui b/ls_sample/sample_python/ui/test.ui new file mode 100644 index 0000000..07bb088 --- /dev/null +++ b/ls_sample/sample_python/ui/test.ui @@ -0,0 +1,32 @@ + + + Test + + + + 0 + 0 + 776 + 452 + + + + Form + + + + + 20 + 20 + 91 + 31 + + + + 잔고조회 + + + + + + diff --git a/ls_sample/sample_python/ui/third-window.ui b/ls_sample/sample_python/ui/third-window.ui new file mode 100644 index 0000000..864a5be --- /dev/null +++ b/ls_sample/sample_python/ui/third-window.ui @@ -0,0 +1,32 @@ + + + Third_Window + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 110 + 80 + 56 + 12 + + + + 3 + + + + + + diff --git a/ls_sample/sample_python/ui/ui_search_window.py b/ls_sample/sample_python/ui/ui_search_window.py new file mode 100644 index 0000000..53ec203 --- /dev/null +++ b/ls_sample/sample_python/ui/ui_search_window.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'search-window.ui' +## +## Created by: Qt User Interface Compiler version 5.15.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide2.QtCore import * +from PySide2.QtGui import * +from PySide2.QtWidgets import * + + +class Ui_Form(object): + def setupUi(self, Form): + if not Form.objectName(): + Form.setObjectName(u"Form") + Form.resize(769, 817) + self.file_select_button = QPushButton(Form) + self.file_select_button.setObjectName(u"file_select_button") + self.file_select_button.setGeometry(QRect(0, 0, 75, 23)) + self.search_stocks_table = QTableWidget(Form) + if (self.search_stocks_table.columnCount() < 7): + self.search_stocks_table.setColumnCount(7) + __qtablewidgetitem = QTableWidgetItem() + self.search_stocks_table.setHorizontalHeaderItem(0, __qtablewidgetitem) + __qtablewidgetitem1 = QTableWidgetItem() + self.search_stocks_table.setHorizontalHeaderItem(1, __qtablewidgetitem1) + __qtablewidgetitem2 = QTableWidgetItem() + self.search_stocks_table.setHorizontalHeaderItem(2, __qtablewidgetitem2) + __qtablewidgetitem3 = QTableWidgetItem() + self.search_stocks_table.setHorizontalHeaderItem(3, __qtablewidgetitem3) + __qtablewidgetitem4 = QTableWidgetItem() + self.search_stocks_table.setHorizontalHeaderItem(4, __qtablewidgetitem4) + __qtablewidgetitem5 = QTableWidgetItem() + self.search_stocks_table.setHorizontalHeaderItem(5, __qtablewidgetitem5) + __qtablewidgetitem6 = QTableWidgetItem() + self.search_stocks_table.setHorizontalHeaderItem(6, __qtablewidgetitem6) + self.search_stocks_table.setObjectName(u"search_stocks_table") + self.search_stocks_table.setGeometry(QRect(0, 30, 771, 791)) + + self.retranslateUi(Form) + + QMetaObject.connectSlotsByName(Form) + # setupUi + + def retranslateUi(self, Form): + Form.setWindowTitle(QCoreApplication.translate("Form", u"Form", None)) + self.file_select_button.setText(QCoreApplication.translate("Form", u" ACF \uc120\ud0dd ", None)) + ___qtablewidgetitem = self.search_stocks_table.horizontalHeaderItem(0) + ___qtablewidgetitem.setText(QCoreApplication.translate("Form", u"\uc885\ubaa9\uba85", None)); + ___qtablewidgetitem1 = self.search_stocks_table.horizontalHeaderItem(1) + ___qtablewidgetitem1.setText(QCoreApplication.translate("Form", u"\uc885\ubaa9\ucf54\ub4dc", None)); + ___qtablewidgetitem2 = self.search_stocks_table.horizontalHeaderItem(2) + ___qtablewidgetitem2.setText(QCoreApplication.translate("Form", u"\ud604\uc7ac\uac00", None)); + ___qtablewidgetitem3 = self.search_stocks_table.horizontalHeaderItem(3) + ___qtablewidgetitem3.setText(QCoreApplication.translate("Form", u"\uc804\uc77c\ub300\ube44", None)); + ___qtablewidgetitem4 = self.search_stocks_table.horizontalHeaderItem(4) + ___qtablewidgetitem4.setText(QCoreApplication.translate("Form", u"\ub4f1\ub77d\ub960", None)); + ___qtablewidgetitem5 = self.search_stocks_table.horizontalHeaderItem(5) + ___qtablewidgetitem5.setText(QCoreApplication.translate("Form", u"\uac70\ub798\ub7c9", None)); + ___qtablewidgetitem6 = self.search_stocks_table.horizontalHeaderItem(6) + ___qtablewidgetitem6.setText(QCoreApplication.translate("Form", u"\uc0c1\ud0dc", None)); + # retranslateUi + diff --git a/ls_sample/sample_python/ui/ui_second_window.py b/ls_sample/sample_python/ui/ui_second_window.py new file mode 100644 index 0000000..64c6fa2 --- /dev/null +++ b/ls_sample/sample_python/ui/ui_second_window.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'second-window.ui' +## +## Created by: Qt User Interface Compiler version 5.15.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide2.QtCore import * +from PySide2.QtGui import * +from PySide2.QtWidgets import * + + +class Ui_Second_Window(object): + def setupUi(self, Second_Window): + if not Second_Window.objectName(): + Second_Window.setObjectName(u"Second_Window") + Second_Window.resize(1096, 734) + Second_Window.setStyleSheet(u"background-color: rgb(66, 69, 73);") + self.label = QLabel(Second_Window) + self.label.setObjectName(u"label") + self.label.setGeometry(QRect(100, 110, 56, 12)) + + self.retranslateUi(Second_Window) + + QMetaObject.connectSlotsByName(Second_Window) + # setupUi + + def retranslateUi(self, Second_Window): + Second_Window.setWindowTitle(QCoreApplication.translate("Second_Window", u"Form", None)) + self.label.setText(QCoreApplication.translate("Second_Window", u"2", None)) + # retranslateUi + diff --git a/ls_sample/sample_python/ui/ui_test.py b/ls_sample/sample_python/ui/ui_test.py new file mode 100644 index 0000000..6a82063 --- /dev/null +++ b/ls_sample/sample_python/ui/ui_test.py @@ -0,0 +1,65 @@ +# # -*- coding: utf-8 -*- + +# ################################################################################ +# ## Form generated from reading UI file 'test.ui' +# ## +# ## Created by: Qt User Interface Compiler version 5.15.2 +# ## +# ## WARNING! All changes made in this file will be lost when recompiling UI file! +# ################################################################################ + +# from PySide2.QtCore import * +# from PySide2.QtGui import * +# from PySide2.QtWidgets import * + + +# class Ui_Test(object): +# def setupUi(self, Test): +# if not Test.objectName(): +# Test.setObjectName(u"Test") +# Test.resize(441, 218) +# self.name_label = QLabel(Test) +# self.name_label.setObjectName(u"name_label") +# self.name_label.setGeometry(QRect(11, 11, 32, 16)) +# self.name_line_edit = QLineEdit(Test) +# self.name_line_edit.setObjectName(u"name_line_edit") +# self.name_line_edit.setGeometry(QRect(49, 11, 301, 21)) +# self.login_label = QLabel(Test) +# self.login_label.setObjectName(u"login_label") +# self.login_label.setGeometry(QRect(10, 180, 94, 16)) +# self.label = QLabel(Test) +# self.label.setObjectName(u"label") +# self.label.setGeometry(QRect(110, 180, 16, 16)) +# self.stock_code_label = QLabel(Test) +# self.stock_code_label.setObjectName(u"stock_code_label") +# self.stock_code_label.setGeometry(QRect(120, 180, 48, 16)) +# self.go_to_2 = QPushButton(Test) +# self.go_to_2.setObjectName(u"go_to_2") +# self.go_to_2.setGeometry(QRect(10, 100, 351, 41)) +# self.job_line_edit = QLineEdit(Test) +# self.job_line_edit.setObjectName(u"job_line_edit") +# self.job_line_edit.setGeometry(QRect(49, 60, 301, 20)) +# self.job_line_edit.setBaseSize(QSize(0, 0)) +# self.go_to_3 = QPushButton(Test) +# self.go_to_3.setObjectName(u"go_to_3") +# self.go_to_3.setGeometry(QRect(100, 150, 101, 21)) +# self.job_label = QLabel(Test) +# self.job_label.setObjectName(u"job_label") +# self.job_label.setGeometry(QRect(10, 60, 17, 16)) + +# self.retranslateUi(Test) + +# QMetaObject.connectSlotsByName(Test) +# # setupUi + +# def retranslateUi(self, Test): +# Test.setWindowTitle(QCoreApplication.translate("Test", u"Form", None)) +# self.name_label.setText(QCoreApplication.translate("Test", u"name", None)) +# self.login_label.setText(QCoreApplication.translate("Test", u"\uc0bc\uc804 \ud2f1\ub370\uc774\ud130", None)) +# self.label.setText(QCoreApplication.translate("Test", u":", None)) +# self.stock_code_label.setText(QCoreApplication.translate("Test", u"\ud2f1\ud2f1", None)) +# self.go_to_2.setText(QCoreApplication.translate("Test", u"go to 2", None)) +# self.go_to_3.setText(QCoreApplication.translate("Test", u"\ud2f1\ub370\uc774\ud130 \u3131\u3131", None)) +# self.job_label.setText(QCoreApplication.translate("Test", u"job", None)) +# # retranslateUi + diff --git a/ls_sample/sample_python/ui/ui_third_window.py b/ls_sample/sample_python/ui/ui_third_window.py new file mode 100644 index 0000000..859e74c --- /dev/null +++ b/ls_sample/sample_python/ui/ui_third_window.py @@ -0,0 +1,34 @@ +# # -*- coding: utf-8 -*- + +# ################################################################################ +# ## Form generated from reading UI file 'third-window.ui' +# ## +# ## Created by: Qt User Interface Compiler version 5.15.2 +# ## +# ## WARNING! All changes made in this file will be lost when recompiling UI file! +# ################################################################################ + +# from PySide2.QtCore import * +# from PySide2.QtGui import * +# from PySide2.QtWidgets import * + + +# class Ui_Third_Window(object): +# def setupUi(self, Third_Window): +# if not Third_Window.objectName(): +# Third_Window.setObjectName(u"Third_Window") +# Third_Window.resize(400, 300) +# self.label = QLabel(Third_Window) +# self.label.setObjectName(u"label") +# self.label.setGeometry(QRect(110, 80, 56, 12)) + +# self.retranslateUi(Third_Window) + +# QMetaObject.connectSlotsByName(Third_Window) +# # setupUi + +# def retranslateUi(self, Third_Window): +# Third_Window.setWindowTitle(QCoreApplication.translate("Third_Window", u"Form", None)) +# self.label.setText(QCoreApplication.translate("Third_Window", u"3", None)) +# # retranslateUi + diff --git a/ls_sample/sample_python/uic.exe b/ls_sample/sample_python/uic.exe new file mode 100644 index 0000000..e4b4534 Binary files /dev/null and b/ls_sample/sample_python/uic.exe differ diff --git a/mcp/kiwoom-docs-mcp/.gitignore b/mcp/kiwoom-docs-mcp/.gitignore new file mode 100644 index 0000000..696c042 --- /dev/null +++ b/mcp/kiwoom-docs-mcp/.gitignore @@ -0,0 +1,4 @@ +.venv/ +__pycache__/ +*.pyc +.python-version diff --git a/mcp/kiwoom-docs-mcp/README.md b/mcp/kiwoom-docs-mcp/README.md new file mode 100644 index 0000000..6cbcc4c --- /dev/null +++ b/mcp/kiwoom-docs-mcp/README.md @@ -0,0 +1,29 @@ +# 키움 REST API Docs MCP + +키움증권 REST TR 스펙(`kiwoom-rest-api-spec.json`)을 **조회만** 하는 MCP입니다. +한투 `kis-code-assistant` MCP와 같은 역할(문서 검색)이며, **실제 API 호출·주문·토큰 발급은 하지 않습니다.** + +## Tools + +| Tool | 용도 | +|------|------| +| `kiwoom_api_stats` | API 수·카테고리 분포 | +| `search_kiwoom_api` | 이름/설명/필드 키워드 검색 | +| `get_kiwoom_api` | apiId 상세(requestIo/responseIo/예제) | +| `list_kiwoom_apis` | prefix·category·url 필터 목록 | +| `lookup_kiwoom_error` | 에러코드 조회 | + +## Cursor 등록 + +프로젝트 `.cursor/mcp.json`에 `kiwoom-docs`로 등록되어 있습니다. + +```bash +# 수동 실행(스모크) +cd /home/hoon/kis_bot/mcp/kiwoom-docs-mcp +uv sync +uv run python server.py --stdio +``` + +## 데이터 + +- `data/kiwoom-rest-api-spec.json` — 키움 TR 카탈로그 (OpenAPI 아님) diff --git a/mcp/kiwoom-docs-mcp/pyproject.toml b/mcp/kiwoom-docs-mcp/pyproject.toml new file mode 100644 index 0000000..aa0e890 --- /dev/null +++ b/mcp/kiwoom-docs-mcp/pyproject.toml @@ -0,0 +1,9 @@ +[project] +name = "kiwoom-docs-mcp" +version = "0.1.0" +description = "키움증권 REST API 스펙 조회 전용 MCP (호출 없음, 문서 검색만)" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [ + "fastmcp>=2.11.3", +] diff --git a/mcp/kiwoom-docs-mcp/server.py b/mcp/kiwoom-docs-mcp/server.py new file mode 100644 index 0000000..23d9567 --- /dev/null +++ b/mcp/kiwoom-docs-mcp/server.py @@ -0,0 +1,448 @@ +"""키움증권 REST API 스펙 조회 전용 MCP. + +KIS Code Assistant MCP 와 같이 문서를 정확히 찾아주는 용도. +실제 REST 호출·주문·토큰 발급은 절대 하지 않는다. +""" + +from __future__ import annotations + +import json +import os +import re +import sys +from functools import lru_cache +from typing import Any, Optional + +from fastmcp import FastMCP + +VERSION = "0.1.0" +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +DEFAULT_SPEC = os.path.join(SCRIPT_DIR, "data", "kiwoom-rest-api-spec.json") + +# URL path → 사람이 읽기 쉬운 카테고리 +URL_CATEGORY = { + "/oauth2/token": "인증", + "/oauth2/revoke": "인증", + "/api/dostk/acnt": "국내_계좌", + "/api/dostk/ordr": "국내_주문", + "/api/dostk/crdordr": "국내_신용주문", + "/api/dostk/chart": "국내_차트", + "/api/dostk/stkinfo": "국내_종목정보", + "/api/dostk/mrkcond": "국내_시장조건", + "/api/dostk/rkinfo": "국내_순위", + "/api/dostk/sect": "국내_업종", + "/api/dostk/thme": "국내_테마", + "/api/dostk/elw": "국내_ELW", + "/api/dostk/etf": "국내_ETF", + "/api/dostk/frgnistt": "국내_외국인", + "/api/dostk/slb": "국내_대차", + "/api/dostk/watchlist": "국내_관심종목", + "/api/dostk/websocket": "국내_웹소켓", + "/api/us/acnt": "해외_계좌", + "/api/us/ordr": "해외_주문", + "/api/us/chart": "해외_차트", + "/api/us/stkinfo": "해외_종목정보", + "/api/us/mrkcond": "해외_시장조건", + "/api/us/rkinfo": "해외_순위", + "/api/us/sect": "해외_업종", + "/api/us/watchlist": "해외_관심종목", + "/api/us/exchange": "해외_환율", + "/api/us/websocket": "해외_웹소켓", +} + +PREFIX_CATEGORY = { + "au": "인증", + "ka": "국내주식", + "kt": "국내계좌/주문", + "us": "해외주식", + "0": "국내_실시간(웹소켓 FID)", +} + + +def _strip_html(text: str) -> str: + if not text: + return "" + t = re.sub(r"", "\n", str(text), flags=re.I) + t = re.sub(r"<[^>]+>", "", t) + return t.strip() + + +def _normalize_fields(items: Any) -> list[dict[str, Any]]: + if not isinstance(items, list): + return [] + out: list[dict[str, Any]] = [] + for it in items: + if not isinstance(it, dict): + continue + out.append( + { + "itemId": it.get("itemId") or "", + "itemNm": it.get("itemNm") or "", + "type": it.get("type") or "", + "length": it.get("length") or "", + "desc": _strip_html(it.get("desc") or ""), + } + ) + return out + + +def _parse_example(ex: Any) -> Any: + if ex is None: + return None + if isinstance(ex, (dict, list)): + return ex + if isinstance(ex, str): + s = ex.strip() + if not s: + return None + try: + return json.loads(s) + except Exception: + return s + return ex + + +def _category_for(api: dict[str, Any]) -> str: + url = (api.get("url") or "").strip() + if url in URL_CATEGORY: + return URL_CATEGORY[url] + api_id = str(api.get("apiId") or "") + for pref, name in PREFIX_CATEGORY.items(): + if api_id.startswith(pref): + return name + return "기타" + + +class KiwoomSpecIndex: + """키움 TR 카탈로그 인덱스 (읽기 전용).""" + + MAX_SEARCH = 20 + + def __init__(self, path: str) -> None: + self.path = path + # 원본 apiId 키 유지 (0g / 0G 등 대소문자 구분) + self.apis: dict[str, dict[str, Any]] = {} + # 소문자 → 원본 apiId 목록 (조회 편의) + self._by_lower: dict[str, list[str]] = {} + self.error_codes: list[dict[str, Any]] = [] + self._load(path) + + def _load(self, path: str) -> None: + with open(path, "r", encoding="utf-8") as f: + raw = json.load(f) + if not isinstance(raw, dict): + raise ValueError("spec root must be object") + for key, val in raw.items(): + if key == "errorCodeList" and isinstance(val, list): + self.error_codes = [x for x in val if isinstance(x, dict)] + continue + if not isinstance(val, dict): + continue + api_id = str(val.get("apiId") or key).strip() + if not api_id: + continue + # 동일 키 충돌 시 스펙 키로 구분 보존 + store_id = api_id + if store_id in self.apis and self.apis[store_id] is not val: + store_id = str(key).strip() or api_id + self.apis[store_id] = val + self._by_lower.setdefault(api_id.lower(), []) + if store_id not in self._by_lower[api_id.lower()]: + self._by_lower[api_id.lower()].append(store_id) + + def stats(self) -> dict[str, Any]: + by_cat: dict[str, int] = {} + by_prefix: dict[str, int] = {} + for api in self.apis.values(): + cat = _category_for(api) + by_cat[cat] = by_cat.get(cat, 0) + 1 + aid = str(api.get("apiId") or "") + pref = aid[:2] if len(aid) >= 2 else aid + by_prefix[pref] = by_prefix.get(pref, 0) + 1 + return { + "api_count": len(self.apis), + "error_code_count": len(self.error_codes), + "by_category": dict(sorted(by_cat.items(), key=lambda x: (-x[1], x[0]))), + "by_prefix": dict(sorted(by_prefix.items(), key=lambda x: (-x[1], x[0]))), + "spec_path": self.path, + } + + def _summary(self, api: dict[str, Any]) -> dict[str, Any]: + return { + "apiId": api.get("apiId"), + "apiNm": api.get("apiNm"), + "method": api.get("method"), + "url": api.get("url"), + "domain": api.get("domain"), + "mockDomain": api.get("mockDomain"), + "category": _category_for(api), + "description": _strip_html(api.get("description") or ""), + } + + def _detail( + self, + api: dict[str, Any], + *, + include_examples: bool = True, + body_fields_only: bool = False, + ) -> dict[str, Any]: + req = _normalize_fields(api.get("requestIo")) + res = _normalize_fields(api.get("responseIo")) + if body_fields_only: + # 헤더성 공통 필드(api-id, authorization, cont-yn, next-key) 제외 + headerish = {"api-id", "authorization", "cont-yn", "next-key"} + req = [x for x in req if (x.get("itemId") or "").lower() not in headerish] + res = [x for x in res if (x.get("itemId") or "").lower() not in headerish] + out = self._summary(api) + out.update( + { + "format": api.get("format"), + "contentType": api.get("contentType"), + "requestIo": req, + "responseIo": res, + } + ) + if include_examples: + out["requestExample"] = _parse_example(api.get("requestExample")) + out["responseExample"] = _parse_example(api.get("responseExample")) + return out + + def get(self, api_id: str, **kwargs: Any) -> dict[str, Any]: + raw = (api_id or "").strip() + if not raw: + return {"status": "error", "message": "api_id required"} + # 1) 정확 일치 2) 대소문자 무시 + api = self.apis.get(raw) + matches = self._by_lower.get(raw.lower(), []) + if api is None and len(matches) == 1: + api = self.apis.get(matches[0]) + elif api is None and len(matches) > 1: + return { + "status": "ambiguous", + "message": f"multiple apiId match (case): {raw}", + "candidates": matches, + "apis": [self._summary(self.apis[m]) for m in matches if m in self.apis], + } + if not api: + hints = [k for k in self.apis if raw.lower() in k.lower()][:8] + return { + "status": "not_found", + "message": f"api_id not found: {api_id}", + "candidates": hints, + } + return { + "status": "success", + "api": self._detail(api, **kwargs), + } + + def list_apis( + self, + *, + prefix: Optional[str] = None, + category: Optional[str] = None, + url_contains: Optional[str] = None, + limit: int = 100, + ) -> dict[str, Any]: + limit = max(1, min(int(limit or 100), 300)) + rows: list[dict[str, Any]] = [] + pref = (prefix or "").strip().lower() + cat = (category or "").strip() + url_q = (url_contains or "").strip().lower() + for api in self.apis.values(): + aid = str(api.get("apiId") or "") + if pref and not aid.lower().startswith(pref): + continue + if cat and _category_for(api) != cat and cat not in _category_for(api): + continue + if url_q and url_q not in str(api.get("url") or "").lower(): + continue + rows.append(self._summary(api)) + rows.sort(key=lambda x: str(x.get("apiId") or "")) + total = len(rows) + return { + "status": "success", + "total_count": total, + "showing": min(total, limit), + "results": rows[:limit], + } + + def search(self, query: str, limit: Optional[int] = None) -> dict[str, Any]: + q = (query or "").strip() + if not q: + return {"status": "error", "message": "query required", "total_count": 0, "results": []} + lim = max(1, min(int(limit or self.MAX_SEARCH), 50)) + q_lower = q.lower() + tokens = [t for t in re.split(r"\s+", q_lower) if t] + + scored: list[tuple[int, dict[str, Any]]] = [] + for api in self.apis.values(): + aid = str(api.get("apiId") or "") + anm = str(api.get("apiNm") or "") + desc = _strip_html(api.get("description") or "") + url = str(api.get("url") or "") + cat = _category_for(api) + field_blob = " ".join( + f"{x.get('itemId','')} {x.get('itemNm','')} {x.get('desc','')}" + for x in (api.get("requestIo") or []) + (api.get("responseIo") or []) + if isinstance(x, dict) + ) + hay = f"{aid} {anm} {desc} {url} {cat} {field_blob}".lower() + + score = 0 + if q_lower == aid.lower(): + score += 100 + elif aid.lower().startswith(q_lower): + score += 60 + elif q_lower in aid.lower(): + score += 40 + if q_lower in anm.lower(): + score += 35 + if q_lower in desc.lower(): + score += 15 + if q_lower in url.lower(): + score += 20 + if q_lower in cat.lower(): + score += 10 + # 토큰 AND 매칭 가산 + if tokens and all(t in hay for t in tokens): + score += 25 + 5 * len(tokens) + elif tokens: + hit = sum(1 for t in tokens if t in hay) + if hit: + score += hit * 8 + else: + continue + elif score == 0: + continue + scored.append((score, self._summary(api))) + + scored.sort(key=lambda x: (-x[0], str(x[1].get("apiId") or ""))) + results = [row for _, row in scored[:lim]] + if not results: + return { + "status": "no_results", + "message": f"No APIs matched: {query}", + "total_count": 0, + "results": [], + } + return { + "status": "success", + "message": f"Found {len(scored)} (showing {len(results)})", + "total_count": len(scored), + "results": results, + } + + def lookup_error(self, code: str) -> dict[str, Any]: + c = (code or "").strip() + if not c: + return {"status": "error", "message": "code required"} + hits = [] + for row in self.error_codes: + ec = str(row.get("errCode") or row.get("code") or "") + em = str(row.get("errMsg") or row.get("message") or "") + if c == ec or c.lower() in ec.lower() or c.lower() in em.lower(): + hits.append({"errCode": ec, "errMsg": _strip_html(em)}) + if not hits: + return {"status": "no_results", "message": f"No error matched: {code}", "results": []} + return {"status": "success", "total_count": len(hits), "results": hits[:30]} + + +@lru_cache(maxsize=1) +def get_index() -> KiwoomSpecIndex: + path = os.environ.get("KIWOOM_SPEC_PATH") or DEFAULT_SPEC + return KiwoomSpecIndex(path) + + +mcp = FastMCP( + name="kiwoom-docs-mcp", + version=VERSION, + instructions=( + "키움증권 REST API 문서(TR 스펙) 조회 전용 MCP다. " + "사용자가 키움 API ID(ka/kt/us/au…), URL, 요청/응답 필드를 물을 때 " + "반드시 이 도구로 스펙을 확인한 뒤 답하라. " + "이 MCP는 실제 API를 호출하지 않는다. 주문/체결/토큰 발급을 수행하지 않는다." + ), +) + + +@mcp.tool( + name="kiwoom_api_stats", + description="키움 REST 스펙 요약(총 API 수, 카테고리/접두사 분포). 탐색 시작 시 사용.", +) +def kiwoom_api_stats() -> dict[str, Any]: + return {"status": "success", **get_index().stats()} + + +@mcp.tool( + name="search_kiwoom_api", + description=( + "키움 REST API를 자연어/키워드로 검색한다. " + "예: '일봉', 'ka10081', '잔고', 'chart', '해외 주문'. " + "결과는 요약만 반환하므로, 상세 필드가 필요하면 get_kiwoom_api(api_id)를 이어서 호출하라." + ), +) +def search_kiwoom_api(query: str, limit: int = 20) -> dict[str, Any]: + return get_index().search(query, limit=limit) + + +@mcp.tool( + name="get_kiwoom_api", + description=( + "apiId(예: ka10081, kt00018, au10001)로 키움 TR 전체 스펙을 반환한다. " + "method/url/domain/requestIo/responseIo/예제 포함. " + "body_fields_only=true 이면 공통 헤더 필드(api-id, authorization, cont-yn, next-key)를 제외한다." + ), +) +def get_kiwoom_api( + api_id: str, + include_examples: bool = True, + body_fields_only: bool = False, +) -> dict[str, Any]: + return get_index().get( + api_id, + include_examples=include_examples, + body_fields_only=body_fields_only, + ) + + +@mcp.tool( + name="list_kiwoom_apis", + description=( + "키움 API 목록. prefix(ka|kt|us|au|0), category(국내_차트 등), url_contains(/api/dostk/chart)로 필터. " + "카테고리 목록은 kiwoom_api_stats 참고." + ), +) +def list_kiwoom_apis( + prefix: str = "", + category: str = "", + url_contains: str = "", + limit: int = 100, +) -> dict[str, Any]: + return get_index().list_apis( + prefix=prefix or None, + category=category or None, + url_contains=url_contains or None, + limit=limit, + ) + + +@mcp.tool( + name="lookup_kiwoom_error", + description="키움 REST 에러코드/메시지 조회 (스펙의 errorCodeList).", +) +def lookup_kiwoom_error(code: str) -> dict[str, Any]: + return get_index().lookup_error(code) + + +def main() -> None: + # Cursor 등록은 stdio. --stdio 없어도 Cursor가 args로 줄 수 있어 기본 stdio. + if "--http" in sys.argv: + # 로컬 디버그용 (실매/운영 불필요) + port = int(os.environ.get("PORT", "8082")) + mcp.run(transport="http", host="127.0.0.1", port=port) + return + mcp.run(transport="stdio") + + +if __name__ == "__main__": + main() diff --git a/mcp/kiwoom-docs-mcp/uv.lock b/mcp/kiwoom-docs-mcp/uv.lock new file mode 100644 index 0000000..9b23f72 --- /dev/null +++ b/mcp/kiwoom-docs-mcp/uv.lock @@ -0,0 +1,1341 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform != 'win32'", + "python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version < '3.14' and sys_platform != 'win32'", +] + +[[package]] +name = "aiofile" +version = "3.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "caio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/41/2fea7e193e061ce54eacc3b7bc0e6a99e4fcff43c78cf0a76dd781ed8334/aiofile-3.11.1.tar.gz", hash = "sha256:1f91912c6643d2a4e49ca4ae3514f0bf3867ce948a36d99a6411b8f4755f4cf9", size = 19342, upload-time = "2026-05-16T08:18:33.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/cd/0d76dfc5de72bde52f55f53e925c7d152d9c7906634ec1e0cbc7e8d4ad93/aiofile-3.11.1-py3-none-any.whl", hash = "sha256:ce77d14ac07f77bc2b757834a5c129321f3f705c474593deed5ab209079a52c9", size = 20446, upload-time = "2026-05-16T08:18:32.051Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "anyio" +version = "4.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/cc/a381afa6efea9f496eff839d4a6a1aed3bfafc7b3ab4b0d1b243a12573dd/anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f", size = 260176, upload-time = "2026-07-12T20:29:07.082Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "authlib" +version = "1.7.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "joserfc" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/36/98/7d93f30d029643c0275dbc0bd6d5a6f670661ee6c9a94d93af7ab4887600/authlib-1.7.2.tar.gz", hash = "sha256:2cea25fefcd4e7173bdf1372c0afc265c8034b23a8cd5dcb6a9164b826c64231", size = 176511, upload-time = "2026-05-06T08:10:23.116Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/95/adcb68e20c34162e9135f370d6e31737719c2b6f94bc953fe7ed1f10fe21/authlib-1.7.2-py2.py3-none-any.whl", hash = "sha256:3e1faedc9d87e7d56a164eca3ccb6ace0d61b94abe83e92242f8dc8bba9b4a9f", size = 259548, upload-time = "2026-05-06T08:10:21.436Z" }, +] + +[[package]] +name = "beartype" +version = "0.22.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/94/1009e248bbfbab11397abca7193bea6626806be9a327d399810d523a07cb/beartype-0.22.9.tar.gz", hash = "sha256:8f82b54aa723a2848a56008d18875f91c1db02c32ef6a62319a002e3e25a975f", size = 1608866, upload-time = "2025-12-13T06:50:30.72Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl", hash = "sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2", size = 1333658, upload-time = "2025-12-13T06:50:28.266Z" }, +] + +[[package]] +name = "cachetools" +version = "7.1.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/87/23/635f22bbd6478b02672432656a5f46775768e24b2715c2e8658b3d210602/cachetools-7.1.5.tar.gz", hash = "sha256:0def7134eba79e59448edaf5d2e3cc8e49978ab2fd56189c1efd19856b134ab5", size = 40500, upload-time = "2026-07-22T23:51:31.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/9b/8bd3cf22c5559a39e905b4884f773768f849091d91e374212d5a9ab66cd7/cachetools-7.1.5-py3-none-any.whl", hash = "sha256:900cda61ff34fafca2b7f78cfd2a91e2d4f9655c19309ef542ce0a04f91e6cd9", size = 16963, upload-time = "2026-07-22T23:51:30.279Z" }, +] + +[[package]] +name = "caio" +version = "0.9.25" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/92/88/b8527e1b00c1811db339a1df8bd1ae49d146fcea9d6a5c40e3a80aaeb38d/caio-0.9.25.tar.gz", hash = "sha256:16498e7f81d1d0f5a4c0ad3f2540e65fe25691376e0a5bd367f558067113ed10", size = 26781, upload-time = "2025-12-26T15:21:36.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/25/79c98ebe12df31548ba4eaf44db11b7cad6b3e7b4203718335620939083c/caio-0.9.25-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:fb7ff95af4c31ad3f03179149aab61097a71fd85e05f89b4786de0359dffd044", size = 36983, upload-time = "2025-12-26T15:21:36.075Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2b/21288691f16d479945968a0a4f2856818c1c5be56881d51d4dac9b255d26/caio-0.9.25-cp312-cp312-manylinux2010_x86_64.manylinux2014_x86_64.manylinux_2_12_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:97084e4e30dfa598449d874c4d8e0c8d5ea17d2f752ef5e48e150ff9d240cd64", size = 82012, upload-time = "2025-12-26T15:22:20.983Z" }, + { url = "https://files.pythonhosted.org/packages/03/c4/8a1b580875303500a9c12b9e0af58cb82e47f5bcf888c2457742a138273c/caio-0.9.25-cp312-cp312-manylinux_2_34_aarch64.whl", hash = "sha256:4fa69eba47e0f041b9d4f336e2ad40740681c43e686b18b191b6c5f4c5544bfb", size = 81502, upload-time = "2026-03-04T22:08:22.381Z" }, + { url = "https://files.pythonhosted.org/packages/d1/1c/0fe770b8ffc8362c48134d1592d653a81a3d8748d764bec33864db36319d/caio-0.9.25-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:6bebf6f079f1341d19f7386db9b8b1f07e8cc15ae13bfdaff573371ba0575d69", size = 80200, upload-time = "2026-03-04T22:08:23.382Z" }, + { url = "https://files.pythonhosted.org/packages/31/57/5e6ff127e6f62c9f15d989560435c642144aa4210882f9494204bc892305/caio-0.9.25-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d6c2a3411af97762a2b03840c3cec2f7f728921ff8adda53d7ea2315a8563451", size = 36979, upload-time = "2025-12-26T15:21:35.484Z" }, + { url = "https://files.pythonhosted.org/packages/a3/9f/f21af50e72117eb528c422d4276cbac11fb941b1b812b182e0a9c70d19c5/caio-0.9.25-cp313-cp313-manylinux2010_x86_64.manylinux2014_x86_64.manylinux_2_12_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0998210a4d5cd5cb565b32ccfe4e53d67303f868a76f212e002a8554692870e6", size = 81900, upload-time = "2025-12-26T15:22:21.919Z" }, + { url = "https://files.pythonhosted.org/packages/9c/12/c39ae2a4037cb10ad5eb3578eb4d5f8c1a2575c62bba675f3406b7ef0824/caio-0.9.25-cp313-cp313-manylinux_2_34_aarch64.whl", hash = "sha256:1a177d4777141b96f175fe2c37a3d96dec7911ed9ad5f02bac38aaa1c936611f", size = 81523, upload-time = "2026-03-04T22:08:25.187Z" }, + { url = "https://files.pythonhosted.org/packages/22/59/f8f2e950eb4f1a5a3883e198dca514b9d475415cb6cd7b78b9213a0dd45a/caio-0.9.25-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:9ed3cfb28c0e99fec5e208c934e5c157d0866aa9c32aa4dc5e9b6034af6286b7", size = 80243, upload-time = "2026-03-04T22:08:26.449Z" }, + { url = "https://files.pythonhosted.org/packages/69/ca/a08fdc7efdcc24e6a6131a93c85be1f204d41c58f474c42b0670af8c016b/caio-0.9.25-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fab6078b9348e883c80a5e14b382e6ad6aabbc4429ca034e76e730cf464269db", size = 36978, upload-time = "2025-12-26T15:21:41.055Z" }, + { url = "https://files.pythonhosted.org/packages/5e/6c/d4d24f65e690213c097174d26eda6831f45f4734d9d036d81790a27e7b78/caio-0.9.25-cp314-cp314-manylinux2010_x86_64.manylinux2014_x86_64.manylinux_2_12_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:44a6b58e52d488c75cfaa5ecaa404b2b41cc965e6c417e03251e868ecd5b6d77", size = 81832, upload-time = "2025-12-26T15:22:22.757Z" }, + { url = "https://files.pythonhosted.org/packages/87/a4/e534cf7d2d0e8d880e25dd61e8d921ffcfe15bd696734589826f5a2df727/caio-0.9.25-cp314-cp314-manylinux_2_34_aarch64.whl", hash = "sha256:628a630eb7fb22381dd8e3c8ab7f59e854b9c806639811fc3f4310c6bd711d79", size = 81565, upload-time = "2026-03-04T22:08:27.483Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ed/bf81aeac1d290017e5e5ac3e880fd56ee15e50a6d0353986799d1bc5cfd5/caio-0.9.25-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:0ba16aa605ccb174665357fc729cf500679c2d94d5f1458a6f0d5ca48f2060a7", size = 80071, upload-time = "2026-03-04T22:08:28.751Z" }, + { url = "https://files.pythonhosted.org/packages/86/93/1f76c8d1bafe3b0614e06b2195784a3765bbf7b0a067661af9e2dd47fc33/caio-0.9.25-py3-none-any.whl", hash = "sha256:06c0bb02d6b929119b1cfbe1ca403c768b2013a369e2db46bfa2a5761cf82e40", size = 19087, upload-time = "2025-12-26T15:22:00.221Z" }, +] + +[[package]] +name = "certifi" +version = "2026.7.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, +] + +[[package]] +name = "cffi" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/5f/ff100cae70ebe9d8df1c01a00e510e45d9adb5c1fdda84791b199141de97/cffi-2.1.0.tar.gz", hash = "sha256:efc1cdd798b1aaf39b4610bba7aad28c9bea9b910f25c784ccf9ec1fa719d1f9", size = 531036, upload-time = "2026-07-06T21:34:30.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/85/990925db5df586ec90beb97529c853497e7f85ba0234830447faf41c3057/cffi-2.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:df2b82571a1b30f58a87bf4e5a9e78d2b1eff6c6ce8fd3aa3757221f93f0863f", size = 184829, upload-time = "2026-07-06T21:32:44.324Z" }, + { url = "https://files.pythonhosted.org/packages/4b/92/e7bb136ad6b5352603732cf907ef862ca103f20f2031c1735a46300c20c9/cffi-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78474632761faa0fb96f30b1c928c84ebcf68713cbb80d15bab09dfe61640fde", size = 184728, upload-time = "2026-07-06T21:32:45.683Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c0/d1ec30ffb370f748f2fb54425972bfef9871e0132e82fb589c46b6676049/cffi-2.1.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5972433ad71a9e46516584ef60a0fda12d9dc459938d1539c3ddecf9bdc1368d", size = 214815, upload-time = "2026-07-06T21:32:48.557Z" }, + { url = "https://files.pythonhosted.org/packages/1b/dc/5620cf930688be01f2d673804291de757a934c90b946dbdc3d84130c2ea4/cffi-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6422532152adf4e59b110cb2808cee7a033800952f5c036b4af047ee43199e7", size = 222429, upload-time = "2026-07-06T21:32:49.848Z" }, + { url = "https://files.pythonhosted.org/packages/4b/a4/77b53abbf7a1e0beb9637edbef2a94d15f9c822f591e85d439ffd91519a6/cffi-2.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:46b1c8db8f6122420f32d02fffb924c2fe9bc772d228c7c711748fff56aabb2b", size = 210315, upload-time = "2026-07-06T21:32:51.221Z" }, + { url = "https://files.pythonhosted.org/packages/58/0c/f528df19cc94b675087324d4760d9e6d5bfae97d6217aa4fac43de4f5fcc/cffi-2.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9fafc5aa2e2a39aaf7f8cc0c1f044a9b07fca12e558dca53a3cc5c654ad67a7", size = 208859, upload-time = "2026-07-06T21:32:52.512Z" }, + { url = "https://files.pythonhosted.org/packages/62/f2/c9522a81c32132799a1972c39f5c5f8b4c8b9f00488a23feaa6c06f07741/cffi-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e9f50d192a3e525b15a75ab5114e442d83d657b7ec29182a991bc9a88fd3a66", size = 221844, upload-time = "2026-07-06T21:32:53.704Z" }, + { url = "https://files.pythonhosted.org/packages/6e/28/bd53988b9833e8f8ad539d26f4c07a6b3f6bcb1e9e02e7ca038250b3428d/cffi-2.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98fff996e983a36d3aa2eca83af40c5821202e7e6f32d13ae94e3d2286f10cfe", size = 225287, upload-time = "2026-07-06T21:32:54.907Z" }, + { url = "https://files.pythonhosted.org/packages/79/99/0d0fd37f055224085f42bbb2c022d002e17dde4a97972822327b07d84101/cffi-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:379de10ce1ba048b1448599d1b37b24caee16309d1ac98d3982fc997f768700b", size = 223681, upload-time = "2026-07-06T21:32:56.329Z" }, + { url = "https://files.pythonhosted.org/packages/b0/80/c138990aa2a70b1a269f6e06348729836d733d6f970867943f61d367f8cc/cffi-2.1.0-cp312-cp312-win32.whl", hash = "sha256:9b8f0f26ca4e7513c534d351eca551947d053fac438f2a04ac96d882909b0d3a", size = 175269, upload-time = "2026-07-06T21:32:57.777Z" }, + { url = "https://files.pythonhosted.org/packages/a8/eb/f636456ff21a83fc13c032b58cc5dde061691546ac79efa284b2989b7982/cffi-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:c97f080ea627e2863524c5af3836e2270b5f5dfff1f104392b959f8df0c5d384", size = 185881, upload-time = "2026-07-06T21:32:59.253Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/400ea43e721727dca8a65c4521390e9196757caba4a45643acb2b63271b8/cffi-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:6d194185eabd279f1c05ebe3504265ddfc5ad2b58d0714f7db9f01da592e9eb6", size = 180088, upload-time = "2026-07-06T21:33:02.278Z" }, + { url = "https://files.pythonhosted.org/packages/96/88/a996879e2eeccb815f6e3a5967b12a308257412acec882039d386bd2aa7b/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:10537b1df4967ca26d21e5072d7d54188354483b91dc75058968d3f0cf13fbda", size = 194331, upload-time = "2026-07-06T21:33:03.697Z" }, + { url = "https://files.pythonhosted.org/packages/58/85/7ae00d5c8dd6266f4e944c3db630f3c5c9a98b61d469c714d848b1d8138a/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a95b05f9baf29b91171b3a8bd2020b028835243e7b0ff6bb23e2a3c228518b1b", size = 196966, upload-time = "2026-07-06T21:33:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e9/45c3a76ad8d43ad9261f4c95436da61128d3ca545d72b9612c0ab5be0b1c/cffi-2.1.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:15faec4adfff450819f3aee0e2e02c812de6edb88203aa58807955db2003472a", size = 184795, upload-time = "2026-07-06T21:33:06.699Z" }, + { url = "https://files.pythonhosted.org/packages/84/4c/82f132cb4418ee6d953d982b19191e87e2a6372c8a4ce36e50b69d6ade4a/cffi-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:716ff8ec22f20b4d988b12884086bcef0fc99737043e503f7a3935a6be99b1ea", size = 184746, upload-time = "2026-07-06T21:33:08.071Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1c/4ed5a0e5bdca6cbc275556de3328dd1b76fd0c11cc13c88fe66d1d8715f2/cffi-2.1.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:63960549e4f8dc41e31accb97b975abaecfc44c03e396c093a6436763c2ea7db", size = 214747, upload-time = "2026-07-06T21:33:09.671Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a6/e879bb68cc23a2bc9ba8f4b7d8019f0c2694bad2ab6c4a3701d429439f58/cffi-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff067a8d8d880e7809e4ac88eb009bb848870115317b306666502ccad30b147f", size = 222392, upload-time = "2026-07-06T21:33:10.896Z" }, + { url = "https://files.pythonhosted.org/packages/88/f6/01890cfd63c08f8eb96a8319b0443690197d240a8bd6346048cf7bde9190/cffi-2.1.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3b926723c13eba9f81d2ef3820d63aeceec3b2d4639906047bf675cb8a7a500d", size = 210285, upload-time = "2026-07-06T21:33:12.251Z" }, + { url = "https://files.pythonhosted.org/packages/a6/cf/2b684132056f438567b61e19d690dd31cd0921ace051e0a458be6074369e/cffi-2.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:47ff3a8bfd8cb9da1af7524b965127095055654c177fcfc7578debcb015eecd0", size = 208801, upload-time = "2026-07-06T21:33:13.617Z" }, + { url = "https://files.pythonhosted.org/packages/6f/08/f2e7d62c460faae0926f2d6e423694aa409ced3bc1fe2927a0a6e5f05416/cffi-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:799416bae98336e400981ff6e532d67d5c709cfb30afb79865a1315f94b0e224", size = 221808, upload-time = "2026-07-06T21:33:15.466Z" }, + { url = "https://files.pythonhosted.org/packages/38/37/04f54b8e63a02f3d908332c9effbf8c366167c6f733ed8a3d4f79b7e2a1e/cffi-2.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:961be50688f7fba2fa65f63712d3b9b341a22311f5253460ce933f52f0de1c8c", size = 225241, upload-time = "2026-07-06T21:33:16.869Z" }, + { url = "https://files.pythonhosted.org/packages/a9/d6/c72eecca433cd3e681c65ed313ab4835d9d4a379704d0f628a6a05f51c2e/cffi-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf5c6cf48238b0eb4c086978c492ad1cbc22373fc5b2d7353b3a598ce6db887a", size = 223588, upload-time = "2026-07-06T21:33:18.239Z" }, + { url = "https://files.pythonhosted.org/packages/c6/4b/e706f67279140f92939da3475ad610df18bfd52d50f14953a8e5fede71d5/cffi-2.1.0-cp313-cp313-win32.whl", hash = "sha256:db3eb7d46527159a878ec3460e9d40615bc25ba337d477db681aea6e4f05c5d2", size = 175248, upload-time = "2026-07-06T21:33:19.799Z" }, + { url = "https://files.pythonhosted.org/packages/5a/47/59eb7975cb0e4ef0afa764ea945b29a5bb4537a9f771cb7d6c8a5dd74c95/cffi-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:8e74a6135550c4748af665b1b1118b6aab33b1fc6a16f9aff630af107c3b4512", size = 185717, upload-time = "2026-07-06T21:33:21.47Z" }, + { url = "https://files.pythonhosted.org/packages/5a/af/34fee85c48f8d94efc8597bc09470c9dd274c145f1c12e0fbc6ab6d38d74/cffi-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:2282cd5e38aa8accd03e99d1256af8411c84cdbee6a89d841b563fdbd1f3e50f", size = 180114, upload-time = "2026-07-06T21:33:22.515Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f0/81478e482afa03f6d18dc8f2afb5edc45b3080853b634b5ed91961be0998/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d2117334c3af3bdcb9a88522b844a2bdb5efdc4f71c6c822df55486ae1c3347a", size = 194142, upload-time = "2026-07-06T21:33:23.657Z" }, + { url = "https://files.pythonhosted.org/packages/7d/95/8de304305cd9204974b0ca051b86d307cafca13aa575a0ef1b44d92c0d8c/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:702c436735fbe99d59ada02a1f65cfc0d31c0ee8b7290912f8fbc5cd1e4b16c3", size = 196819, upload-time = "2026-07-06T21:33:25.007Z" }, + { url = "https://files.pythonhosted.org/packages/20/71/7c8372d30e42415602ed9f268f7cfd66f1b855fed881ecd168bcb45dbc0b/cffi-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1ff3456eab0d889592d1936d6125bbfbc7ae4d3354a700f8bd80450a66445d4d", size = 184965, upload-time = "2026-07-06T21:33:26.605Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5c/584e626835f0375c928176c04137c96927165cb8733cdb3150ec04e5ee5e/cffi-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c4165821e131d6d4ca444347c2b694e2311bcfa3fe5a861cc72968f28867beac", size = 184952, upload-time = "2026-07-06T21:33:27.823Z" }, + { url = "https://files.pythonhosted.org/packages/2e/d2/065fcae1c73979fac8e054462478d0ff8a29c40cdc2ed7ea5676a061df53/cffi-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:276f20fffd7b396e12516ba8edf9509210ac248cbbc5acbc39cd512f9f59ebe6", size = 222353, upload-time = "2026-07-06T21:33:29.178Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a5/e8bbb1ce5b3ac2f53ad6a10bde44318a5a8d99d4f4a000d44a6e39aeb3e4/cffi-2.1.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7d5980a3433d4b71a5e120f9dd551403d7824e31e2e67124fe2769c404c06913", size = 210051, upload-time = "2026-07-06T21:33:30.534Z" }, + { url = "https://files.pythonhosted.org/packages/28/ed/c127d3ac36e899c965e3361357c3befacd6578c03f40125183e41c3b219e/cffi-2.1.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6ca4919c6e4f89aa99c42510b42cf54596892c00b3f9077f6bdd1505e24b9c8d", size = 208630, upload-time = "2026-07-06T21:33:31.753Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d7/97d3136f81db489ec8d1d67748c110d6c994268fd7528014aa9f2b085e4e/cffi-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d53d10f7da99ae46f7373b9150393e9c5eab9b224909982b43832668de4779f5", size = 221593, upload-time = "2026-07-06T21:33:33.044Z" }, + { url = "https://files.pythonhosted.org/packages/d3/27/93195977168ee63aed233a1a0993a2178798654d1f4bddcdd321d6fd3b21/cffi-2.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c351efb95e832a853a29361675f33a7ce53de1a109cd73fd47af0712213aa4ce", size = 225146, upload-time = "2026-07-06T21:33:34.224Z" }, + { url = "https://files.pythonhosted.org/packages/b3/c1/6dbd291ee2ae5a50a034aa057207081f545923bbf15dad4511e985aafff5/cffi-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf7c7a88e2bac086f06d14577332760bdeecc42bdec8ac4077f6260557d9326", size = 223240, upload-time = "2026-07-06T21:33:35.57Z" }, + { url = "https://files.pythonhosted.org/packages/0f/6f/ade5ce9863a57992a6ea3d0d10d7e29b8749fc127204b3d493d667b2815f/cffi-2.1.0-cp314-cp314-win32.whl", hash = "sha256:1854b724d00f6654c742097d5387569021be12d3a0f770eae1df8f8acfcc6acd", size = 177723, upload-time = "2026-07-06T21:33:51.626Z" }, + { url = "https://files.pythonhosted.org/packages/41/de/92b9eeed4ae4a21d6fd9b2a2c8505cbed573299902ea73981cc13f7ff62c/cffi-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:1b96bfe2c4bd825681b7d311ad6d9b7280a091f43e8f63da5729638083cd3bfb", size = 187937, upload-time = "2026-07-06T21:33:53.403Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1a/cc6ae6c2913a03aab8898eee57963cf1035b8df5872ed8b9115fcc7e2be8/cffi-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:7d28dff1db6764108bc30788d85d61c876beff416d9a49cb9dd7c5a9f34f5804", size = 183001, upload-time = "2026-07-06T21:33:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/14/f0/134c00ce0779ec86dea2aa1aac69339c2741a8045072676763512363a2ea/cffi-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7ea6b3e2c4250ff1de21c630fe72d0f63eb95c2c32ffbf64a358cf4a8836d714", size = 188538, upload-time = "2026-07-06T21:33:36.792Z" }, + { url = "https://files.pythonhosted.org/packages/50/d8/3b86aba791cb610d24e8a3e1b2cd529e71fa15096b04e4d4e360049d4a4c/cffi-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6af371f3767faeffc6ac1ef57cdfd25844403e9d3f476c5537caee499de96376", size = 188230, upload-time = "2026-07-06T21:33:38.011Z" }, + { url = "https://files.pythonhosted.org/packages/14/d0/117dcd9209255ad8571fbc8c92ef32593a1d294dcec91ddc4e4db50606f2/cffi-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb4e8997a49aa2c08a3e43c9045d224448b8941d88e7ac163c7d383e560cbf98", size = 223899, upload-time = "2026-07-06T21:33:39.514Z" }, + { url = "https://files.pythonhosted.org/packages/b6/3d/f20f8b886b254e3ad10e15cd4186d3aed49f3e6a35ab37aab9f8f25f7c03/cffi-2.1.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf01d8c84cbea96b944c73b22182e6c7c432b3475632b8111dbfdc95ddad6e13", size = 211652, upload-time = "2026-07-06T21:33:40.851Z" }, + { url = "https://files.pythonhosted.org/packages/28/3b/fad54de07260b93ddeef4b96d0131d57ea900675df1d410ae1deee52d7a6/cffi-2.1.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:33eb1ad83ebe8f313e0df035c406227d55a79456704a863fad9842136af5ad7d", size = 210755, upload-time = "2026-07-06T21:33:42.183Z" }, + { url = "https://files.pythonhosted.org/packages/cc/82/3d5c705acb7abbba9bbd7d79b8e62e0f25b6120eb7ae6ac49f1b721722fe/cffi-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ac0f1a2d0cfa7eea3f2aaf006ab6e70e8feeb16b75d65b7e5939982ca2f11056", size = 223933, upload-time = "2026-07-06T21:33:43.603Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d0/47e338384ab6b1004241002fa616301020cea4fc95f283506565d252f276/cffi-2.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c16914df9fb7f500e440e6875fa23ff5e0b31db01fa9c06af98d59a91f0dc2e4", size = 226749, upload-time = "2026-07-06T21:33:45.046Z" }, + { url = "https://files.pythonhosted.org/packages/70/25/65bd5b58ea4bfdfc15cde02cb5365f89ef8ab8b2adfb8fe5c4bd4233382f/cffi-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5ecbd0499275d57506d397eebe1981cee87b47fcd9ef5c22cab7ed7644a39a94", size = 225703, upload-time = "2026-07-06T21:33:46.374Z" }, + { url = "https://files.pythonhosted.org/packages/dc/78/aa01ac599a8a4322533d45a1f9bc93b338276d2d59dabbe7c6d92a775c81/cffi-2.1.0-cp314-cp314t-win32.whl", hash = "sha256:7d034dcffa09e9a46c93fa3a3be402096cb5354ac6e41ab8e5cc9cd8b642ad76", size = 182857, upload-time = "2026-07-06T21:33:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/b9/26/d00496b22de4d4228f32dde94ad996f350c8aad676d63bcca0743c8dea4d/cffi-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0582a58f3051372229ca8e7f5f589f9e5632678208d8636fea3676711fdf7fe5", size = 194065, upload-time = "2026-07-06T21:33:48.953Z" }, + { url = "https://files.pythonhosted.org/packages/d5/dd/0c7dbf815a579ff005008a2d815a55d6bb047c349eef536d9dc53d3f0a8d/cffi-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:510aeeeac94811b138077451da1fb18b308a5feab47dd2b603af55804155e1c8", size = 186404, upload-time = "2026-07-06T21:33:50.309Z" }, + { url = "https://files.pythonhosted.org/packages/55/c7/8c8c50cb11c6750051daf12164098a9a6f027ac4356967fd4d800a07f242/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:2e9dabb9abcb7ad15938c7196ad5c1718a4e6d33cc79b4c0209bdb64c4a54a5c", size = 194121, upload-time = "2026-07-06T21:33:56.109Z" }, + { url = "https://files.pythonhosted.org/packages/99/e2/67680bf19a6b60d2bb7ff83baefa2a4c3d2d7dc0f3277034b802e1fc504c/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:37f525a7e7e50c017fdebe58b787be310ad59357ae43a053943a6e1a6c526001", size = 196820, upload-time = "2026-07-06T21:33:57.288Z" }, + { url = "https://files.pythonhosted.org/packages/ed/da/4bbe583a3b3a5c8c60892124fe17f3fa3656523faf0d3484eae90f091853/cffi-2.1.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:95f2954c2c9473d892eca6e0409f3568b37ab62a8eedb122461f73cc273476e3", size = 184936, upload-time = "2026-07-06T21:33:58.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4b/1f4c36ab273980d7aa75bb126ea4f8971f24a96108acad3a0a084028c57b/cffi-2.1.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:cdf2448aab5f661c9315308ec8b93f4e8a1a67a3c733f8631067a2b67d5913dc", size = 185045, upload-time = "2026-07-06T21:34:00.085Z" }, + { url = "https://files.pythonhosted.org/packages/ef/c3/ad299dc38f3583f8d916b299f028af418a9ec98bc695fcbebeae7420691c/cffi-2.1.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:90bec57cf82089383bd06a605b3eb8daebf7e5a668520beaf6e327a83a947699", size = 222342, upload-time = "2026-07-06T21:34:01.814Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d8/df4543cc087245044ed02ef3ad8e0a26619d0075ac7a77a12dc81177851b/cffi-2.1.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6274dcb2d15cef48daa73ed1be5a40d501d74dccd0cd6db364776d12cb6ba022", size = 210073, upload-time = "2026-07-06T21:34:03.255Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0e/fac738d73728c6cea2a88a2883dca54892496cbba88a1dc1f2909cb8a6f5/cffi-2.1.0-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b71d409cccee78310ab5dec549aed052aaea483346e282c7b02362596e01bb0", size = 208551, upload-time = "2026-07-06T21:34:04.433Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3f/0b04a700dd64f465c93020253a793a82c9b4dff9961f48facd0df945d9b8/cffi-2.1.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7d3538f9c0e50670f4deb93dbb696576e60590369cae2faf7de681e597a8a1f1", size = 221649, upload-time = "2026-07-06T21:34:06.157Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7c/b7379a5704c79eda57ce075869ba70a0368d1c850f803b3c0d078d39dcaf/cffi-2.1.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:8f9ec95b8a043d3dfbc74d9abc6f7baf524dd27a8dc160b0a32ff9cdab650c28", size = 225203, upload-time = "2026-07-06T21:34:07.489Z" }, + { url = "https://files.pythonhosted.org/packages/5a/02/d5e6c43ea85c41bda2a184a3418f195fe7cf602967a8d2b94e085b83deef/cffi-2.1.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:af5e2915d41fe6c961694d7bfdc8562942638200f3ce2765dfb8b745cf997629", size = 223263, upload-time = "2026-07-06T21:34:08.712Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d8/772b8259bf75749adffb1c546828978381fb516f60cf701f6c83daf60c85/cffi-2.1.0-cp315-cp315-win32.whl", hash = "sha256:0a42c688d19fca6e095a53c6a6e2295a5b050a8b289f109adab02a9e61a25de6", size = 177696, upload-time = "2026-07-06T21:34:26.355Z" }, + { url = "https://files.pythonhosted.org/packages/2f/dd/afa2191fc6d57fedd26e5844a2fe2fcc0bbfa00961bbaa5a41e4921e7cca/cffi-2.1.0-cp315-cp315-win_amd64.whl", hash = "sha256:bccbbb5ee76a61f9d99b5bf3846a51d7fca4b6a732fe46f89295610edaf41853", size = 187914, upload-time = "2026-07-06T21:34:27.58Z" }, + { url = "https://files.pythonhosted.org/packages/05/ef/6cd4f8c671517162379dc79cfae5aea9106bc38abb89628d5c16adf6a838/cffi-2.1.0-cp315-cp315-win_arm64.whl", hash = "sha256:8d35c139744adb3e727cd51b1a18324bbe44b8bd41bf8322bca4d41289f48eda", size = 183004, upload-time = "2026-07-06T21:34:28.905Z" }, + { url = "https://files.pythonhosted.org/packages/11/b6/12fc55092817a5faa26fb8c40c7f9d662e11a46ee248c137aafc42517d92/cffi-2.1.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f9912624a0c0b834b7520d7769b3644453aabc0a7e1c839da7359f050750e9bc", size = 188378, upload-time = "2026-07-06T21:34:09.926Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2e/cdac88979f295fde5daa69622c7d2111e56e7ceb94f211357fbe452339e4/cffi-2.1.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:df92f2aba50eb4d96718b68ef76f2e57a57b54f2fa62333496d16c6d585a85ca", size = 188319, upload-time = "2026-07-06T21:34:11.101Z" }, + { url = "https://files.pythonhosted.org/packages/e0/27/1d0b408497e41a74795af122d7b603c418c5fed0171450f899afd04e594f/cffi-2.1.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0520e1f4c35f44e209cbbb421b67eec42e6a157f59444dfb6058874ff3610e5d", size = 223904, upload-time = "2026-07-06T21:34:12.606Z" }, + { url = "https://files.pythonhosted.org/packages/8b/31/e115c985105dd7ffb32444505f18ceb874bb42d992af05d5dced7ecf1980/cffi-2.1.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3681e031db29958a7502f5c0c9d6bbc4c36cb20f7b104086fa642d1799631ff8", size = 211554, upload-time = "2026-07-06T21:34:13.987Z" }, + { url = "https://files.pythonhosted.org/packages/5a/67/9e6e09409336d9e515c58367e7cfcf4f89df06ad25252675595a58eb59d5/cffi-2.1.0-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:762f99479dcb369f60ab9017ad4ab97a36a1dd7c1ee5a3b15db0f4b8659120cd", size = 210795, upload-time = "2026-07-06T21:34:15.972Z" }, + { url = "https://files.pythonhosted.org/packages/19/e5/d3cc82a4a0be7902af279c04181ad038449c096734464a5ae1de3e1401bd/cffi-2.1.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0611e7ebf90573a535ebdc33ae9da222d037853983e13359f580fab781ca017f", size = 223843, upload-time = "2026-07-06T21:34:17.509Z" }, + { url = "https://files.pythonhosted.org/packages/b9/65/b434abc97ce7cecc2c640fde160507c0ecc7e21544b483ba3325d2e2ea17/cffi-2.1.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:86cf8755a791f72c85dc287128cc62d4f24d392e3f1e15837245623f4a33cccc", size = 226773, upload-time = "2026-07-06T21:34:19.05Z" }, + { url = "https://files.pythonhosted.org/packages/b5/9f/d4dc66ca651eb1145a133314cda721abf13cfac3d28c4a0402263ae6ad75/cffi-2.1.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:ba00f661f8ba35d075c937174e27c2c421cec3942fd2e0ea3e66996757c0fdd9", size = 225719, upload-time = "2026-07-06T21:34:20.576Z" }, + { url = "https://files.pythonhosted.org/packages/68/5a/e536c528bc8057496c360c0978559a2dc45653f89dd6151078aa7d8fca1a/cffi-2.1.0-cp315-cp315t-win32.whl", hash = "sha256:cb96698e3c7413d906ce83f8ffd245ec1bd94707541f299d0ce4d6b0193e982b", size = 182760, upload-time = "2026-07-06T21:34:22.059Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0b/0ffe8b82d3875bced5fa1e7986a7a46b748262a40ab7f60b475eb9fb1bb3/cffi-2.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:f146d154428a2523f9cc7936c02353c2459b8f6cf07d3cd1ee1c0a611109c5d5", size = 193769, upload-time = "2026-07-06T21:34:23.589Z" }, + { url = "https://files.pythonhosted.org/packages/a0/17/1073b53b68c9b5ca6914adf5f8bf55aacc2d3be102418c90700160ea8605/cffi-2.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:cbb7640ce37159548d2147b5b8c241f962143d4c71231431820783f4dc78f210", size = 186405, upload-time = "2026-07-06T21:34:24.857Z" }, +] + +[[package]] +name = "click" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/d4/81420972a676e8ffea40450d8c8c92943e7218a78fe9b64359836cc9876b/click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6", size = 338000, upload-time = "2026-06-24T17:45:15.148Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76", size = 119243, upload-time = "2026-06-24T17:45:13.73Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "cryptography" +version = "49.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/22/adf66990e63584a68dfb50c24f48a125c07b1699899381c8151e63ed458c/cryptography-49.0.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:966fe0e9c67490071f14c0d2b1cb2dfb3023c5ce39457343931415f08382f2db", size = 4032100, upload-time = "2026-06-12T20:02:32.143Z" }, + { url = "https://files.pythonhosted.org/packages/09/41/3797cfaf69cae04a13ee78ebd83f0678d9c02b4779d21ce24445326f1a69/cryptography-49.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:36d1709f992593689b45bda411498d62c6e365f2ca00b84657d4dadd24de16db", size = 4692978, upload-time = "2026-06-12T20:01:21.305Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8b/43011f7ebe515a8aa20d61f290a326cd890c2e738e16e59eaff8d9c3a412/cryptography-49.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0e959b578856a3924bc0cbb710fc12c387b9412a951389f3ca61704a9e25f325", size = 4716422, upload-time = "2026-06-12T20:01:48.566Z" }, + { url = "https://files.pythonhosted.org/packages/4a/91/01ce7303a4579e6d3a6abef01bd322848e9ea7a219adcabc5048b9033571/cryptography-49.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:53ecee2e23f7169b6117e99fc8a944e5e50f79e69758a83b52a00cb98ab2b2d2", size = 4700503, upload-time = "2026-06-12T20:02:47.091Z" }, + { url = "https://files.pythonhosted.org/packages/62/99/a2c95cf8293f07491e9e27c20cc4dcd18176d944e674679adeb1d0173fd6/cryptography-49.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:2eda353d8a27bcbcaa4cbed18994a74ab4d19a2ca897db188ea269ab9b71419b", size = 5309779, upload-time = "2026-06-12T20:02:08.987Z" }, + { url = "https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2afe9051da7ae7bd5905da5a949280c7d2bb75682e188f650a9d0f2756b834c6", size = 4749683, upload-time = "2026-06-12T20:02:03.335Z" }, + { url = "https://files.pythonhosted.org/packages/a3/5b/c5246635d5fd3b64e0d45ae10e99fd32fe9676a79915ccfe5a61ba9af1a5/cryptography-49.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:0b82e28ee398a386f0807bba7884d30f25218855690f45115831bcce5d90822c", size = 4337874, upload-time = "2026-06-12T20:02:54.323Z" }, + { url = "https://files.pythonhosted.org/packages/6d/88/05563c7fe2e914e87d1a536d06fe83e66b4e1d95cb593e05aea375531da8/cryptography-49.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ccac2bfebc306b862133e3bb71f3f6ee8bb525240089b2d952e4144b3a6d5da7", size = 4700283, upload-time = "2026-06-12T20:01:34.822Z" }, + { url = "https://files.pythonhosted.org/packages/c4/b6/d7696e4e890d6ae1469935164c9e5215c557671cb78d6e3f458ccceaa632/cryptography-49.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:d0527ce944105f257f605a827d6ebead966c752038b6e8656abb9c5edee6fc68", size = 5265844, upload-time = "2026-06-12T20:01:24.09Z" }, + { url = "https://files.pythonhosted.org/packages/a9/3c/f3ad17eecc1a57b0ba236dc01f90e783c51f4a2f35f64777cc4f47a184b2/cryptography-49.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:cbc77da8c523d5abd028635ba850a6966fcee2c82e2bf65a41d1d8afe0f98be9", size = 4749290, upload-time = "2026-06-12T20:01:30.848Z" }, + { url = "https://files.pythonhosted.org/packages/4f/01/339573cf1023163a400b0b5d16f6d507de413b9f60be6fd1b77feeaf6737/cryptography-49.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b87e65d263b3e5d3bb92a57e2a6638e2f31110fa7aa890c7b2dbba42248d0a3f", size = 4834612, upload-time = "2026-06-12T20:01:29.246Z" }, + { url = "https://files.pythonhosted.org/packages/71/fd/577302e213a1be9468f92d1afef66fcf1ef83d516819d9992ca547f592bd/cryptography-49.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:66ec79c3904820572d7e987abdf304281f141d37ad9a489b8e97066e7b9b6459", size = 4980804, upload-time = "2026-06-12T20:01:42.853Z" }, + { url = "https://files.pythonhosted.org/packages/1f/09/f42b1d190c5ba75f72062a387f8030d1d75f6ab035788f1d9c4b01de6525/cryptography-49.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:e5dfc1e64de5677cec922ffa8da89c546d0415bf6efdf081842e5d44c84e1f0e", size = 3810026, upload-time = "2026-06-12T20:02:39.262Z" }, + { url = "https://files.pythonhosted.org/packages/ec/9e/db72b3ae7fc9cfad53e630e56c6ae83b9b6ff0bf3718ffb8012d20b3aabf/cryptography-49.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:73a205dce83953d131a4aa1e0fd917a2fd1c5b1eef251e9d7152efefcbf5caf7", size = 4013892, upload-time = "2026-06-12T20:02:10.735Z" }, + { url = "https://files.pythonhosted.org/packages/86/12/c48a424f38db03027be9f7ed5c7dc5de9933dbee992865f98b13727a009d/cryptography-49.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:196ecd6a36e4e9aa10270393bb98d8df88fccee0bf1e5128b91ae4eb4375896d", size = 4678835, upload-time = "2026-06-12T20:02:48.743Z" }, + { url = "https://files.pythonhosted.org/packages/68/28/8a3ad4653662c93fc44dc4e5d8fd374c25c42e07b34bbfbadf49cf57a5a8/cryptography-49.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7abcee80084cda3f7691f3eb1ce480d8df49cec637b429aa35986c1de71738aa", size = 4697239, upload-time = "2026-06-12T20:02:56.03Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b2/2193fc74f81aee4f9b62733133b73b5176718932ed8f2e4b03fa040480a6/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:4ae387c9cb68ea569ca17e490d66d8142b81c3cc814bf179974b7d146e490bbb", size = 4685593, upload-time = "2026-06-12T20:02:50.666Z" }, + { url = "https://files.pythonhosted.org/packages/47/f1/1d3eaa243bfc5de4a187b22aa8c048b3e4980bfbe830ac46e6bac2e66947/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:f37d847238971164fdbc68ade6f6574aecc9c0af714190e2083429ff68f4ce9d", size = 5289961, upload-time = "2026-06-12T20:01:46.468Z" }, + { url = "https://files.pythonhosted.org/packages/58/39/2d51306721330c486495853eda1c567880ff036de15a14c4b74f399934af/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:c2bc30226390d60ea19d9f82b19db005fe0452154a23c1c410c12ea801e43561", size = 4731145, upload-time = "2026-06-12T20:02:16.832Z" }, + { url = "https://files.pythonhosted.org/packages/17/50/983e838c7fd0d87fd8c969bcdd328edaf5f756e38df5281637424c155873/cryptography-49.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:07cab27cc7b7e0fd28e5e26bb9eeedde5c135c868b46de4a27845abe94af6122", size = 4321719, upload-time = "2026-06-12T20:02:52.611Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f5/8f571d7e27c55bce9f76f026143bcb1e040a4233149ecca0bea5fa5dd5f7/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:b20133d204d2bb56ba047642199603876c872026ca53e79c35b83772ab2cc505", size = 4685209, upload-time = "2026-06-12T20:02:07.282Z" }, + { url = "https://files.pythonhosted.org/packages/e7/84/0e27016a6fc5a0886f797018b26aa42f40c09a82332bff77822a451deaaa/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b970c6da94d5bb18629db453d14f2a1300f6bf59b61e9b82377931ef95504866", size = 5246285, upload-time = "2026-06-12T20:01:32.439Z" }, + { url = "https://files.pythonhosted.org/packages/11/2d/5e1fb307cb5931881516b464c98774b3f2c36b5d4bb9a2830253cf553cad/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:d8ecde755e2e91bf773fc94e8c9d730cd7f2007004cb492263a794ec3899a1c8", size = 4730441, upload-time = "2026-06-12T20:02:01.469Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c0/bff5a02ee731d207d6a1ed51732549d8c53d2bc8da1d10ec6f2844201d68/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e3fb64c420688e5319ae25113a354015abbd8dffbfbc41781a1ea66fc7622ac3", size = 4815869, upload-time = "2026-06-12T20:01:36.574Z" }, + { url = "https://files.pythonhosted.org/packages/b9/26/814681d14248d95d73d5c3eea0c39a94eb8302df966f670a2c60de90974b/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:32703d93296f5c1f4b53349ad3a250c2cae0fdecd3a3dd5d47e616d8d616af27", size = 4960948, upload-time = "2026-06-12T20:02:18.688Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fe/93ecac273d3738939d023612ad12cca9a3740a5345d69fda04134c43fd96/cryptography-49.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:33cd0565932807baddb67b96dbee92f2c374b5c89dee09fd74079aeb8c8dba61", size = 3799153, upload-time = "2026-06-12T20:01:39.059Z" }, + { url = "https://files.pythonhosted.org/packages/19/2a/5bb823f5bedcf80718cea7fbc95ec5515cca3769633c4b01a32be7f30e7c/cryptography-49.0.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ec5e529fb80935c94fe7b729f9972b50e351a0e6b50aa294fd5cabb109fcc29a", size = 4025947, upload-time = "2026-06-12T20:01:25.745Z" }, + { url = "https://files.pythonhosted.org/packages/3d/df/40577043ca124e17012f408ddddaeb213b856336ac82ddb3bc915f39e29f/cryptography-49.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f78ff2c9ed8dc2d036b0f4d640e22522213d047c1b14e61205a7e55c80a494d4", size = 4692429, upload-time = "2026-06-12T20:01:53.628Z" }, + { url = "https://files.pythonhosted.org/packages/2c/99/2d13299eb3dd27b02dcfaafcc91d6b5cb3329f7cbd6d8f51921acd566c1a/cryptography-49.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:35b151772baff2c74cba7fa290ceaff4c3b11c0c881eb93eb5dbc05a7cfbba18", size = 4700968, upload-time = "2026-06-12T20:02:45.383Z" }, + { url = "https://files.pythonhosted.org/packages/a5/4d/9c0cd02f95e2602dd5e563da149ee0830abef3537be8b34dc56281ebe27a/cryptography-49.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0f21641cf4b30fca7aee061ced0ec7ad7b073518088b7c9969a297c0ae796c69", size = 4697758, upload-time = "2026-06-12T20:01:41.13Z" }, + { url = "https://files.pythonhosted.org/packages/24/01/186c825898477d77e2324d5360fefe622ff1d8d1963ec0554e2cada8ec77/cryptography-49.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:9e82dcc8e56052715fb18b2429e3bca4823b1629136a2084fc45a9a5cecb9b64", size = 5298863, upload-time = "2026-06-12T20:02:24.579Z" }, + { url = "https://files.pythonhosted.org/packages/b8/7b/62cbbab75d0659865bf0273790031544a0b16c8072d258f9428dcd8190dc/cryptography-49.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6f2debedf9ca60cf1d5bd466475638af5130f89965605cd818484d19987d3a21", size = 4735983, upload-time = "2026-06-12T20:01:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/6c/72/3e798c064bc39e471008075d0f9bc9daf77a80879c092e4a8e170c585ed4/cryptography-49.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:8c25ceb16df5b9435f3f6a9829204985b0e0cbee3b48aacd432c7d2c850b44d9", size = 4334173, upload-time = "2026-06-12T20:01:44.743Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ee/6fca21d1ac73e06f8bef71940abfd4d2f6472b4bca284d770f32bd4086f6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:28d8b15e6275f12c8a207dc309dfa957903c927d08d0cc937ee3f63f200693cc", size = 4697298, upload-time = "2026-06-12T20:02:20.918Z" }, + { url = "https://files.pythonhosted.org/packages/67/d0/a5fcd3515f0bae49a7b6d0413cc1bdccdcc1fc0047037a0d480642cdc5d6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:6fc361c34fb6aac015ce19435876635e5c6d21db31998b0920f675f131e043b8", size = 5254338, upload-time = "2026-06-12T20:02:22.737Z" }, + { url = "https://files.pythonhosted.org/packages/a0/84/84fe36f19caf857d61cb7fc9c63035a47ffabd84ea12d1d393148efa3615/cryptography-49.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2400ef9c9e2299a25614eb1dea3db54a69b1349efd043bfac9c67630d136df36", size = 4735650, upload-time = "2026-06-12T20:02:41.389Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a0/db537264e234f7273a73ec020873d6d6b39dfd8a53db78b550ca8320440e/cryptography-49.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:67e1d20ad9ef3a563c59ef22e7a8a0b8210bd26604369ea4a30a7c66aefe504e", size = 4834820, upload-time = "2026-06-12T20:01:51.847Z" }, + { url = "https://files.pythonhosted.org/packages/93/77/8df9eb486495979bccecd1062e2eaf435250e84437040295b57d09048b0b/cryptography-49.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:42b0684e0e40cf26122427802486f6d93aea593612603a94fbf260c7eb1e9c1b", size = 4967968, upload-time = "2026-06-12T20:02:12.524Z" }, + { url = "https://files.pythonhosted.org/packages/c2/e6/f60198ea8d9dfa15fff9ed4ca02ce362f6eadd9ba757dcc50634c4257b63/cryptography-49.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:026ac7423e6fa66872d3bf889be5974507da3944f866f704fa200eadacd00001", size = 3785547, upload-time = "2026-06-12T20:02:26.847Z" }, +] + +[[package]] +name = "cyclopts" +version = "4.22.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "docstring-parser" }, + { name = "rich" }, + { name = "rich-rst" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/47/32d992e829f63aedea5b93360db23c8882c9bbbde094bcf0fff899ea8a3b/cyclopts-4.22.1.tar.gz", hash = "sha256:49cd3779da7113a96ac5c23b151aa61ac9ae1b4b1fe813594d207ca843c97892", size = 193551, upload-time = "2026-07-20T17:38:59.38Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/89/f2710638cd2f824cb976777e63ef6ed1e83fc56888cf5c9f5a053490b7be/cyclopts-4.22.1-py3-none-any.whl", hash = "sha256:9b614e231075aee9849c0bfd78f7611ab7adf417f16af5b9e42b9ed6e18c17d1", size = 232953, upload-time = "2026-07-20T17:38:58.078Z" }, +] + +[[package]] +name = "dnspython" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/57666417c0f90f08bcafa776861060426765fdb422eb10212086fb811d26/dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f", size = 368251, upload-time = "2025-09-07T18:58:00.022Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, +] + +[[package]] +name = "docstring-parser" +version = "0.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/4d/f332313098c1de1b2d2ff91cf2674415cc7cddab2ca1b01ae29774bd5fdf/docstring_parser-0.18.0.tar.gz", hash = "sha256:292510982205c12b1248696f44959db3cdd1740237a968ea1e2e7a900eeb2015", size = 29341, upload-time = "2026-04-14T04:09:19.867Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/5f/ed01f9a3cdffbd5a008556fc7b2a08ddb1cc6ace7effa7340604b1d16699/docstring_parser-0.18.0-py3-none-any.whl", hash = "sha256:b3fcbed555c47d8479be0796ef7e19c2670d428d72e96da63f3a40122860374b", size = 22484, upload-time = "2026-04-14T04:09:18.638Z" }, +] + +[[package]] +name = "email-validator" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dnspython" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/22/900cb125c76b7aaa450ce02fd727f452243f2e91a61af068b40adba60ea9/email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426", size = 51238, upload-time = "2025-08-26T13:09:06.831Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, +] + +[[package]] +name = "fastmcp" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastmcp-slim", extra = ["client", "server"] }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/f7/5188565d1b93ad611cbd80bf473e7ad669d1f3b689c4bedcd304e1ec3472/fastmcp-3.4.4.tar.gz", hash = "sha256:378202e26ec15b23819d9a1c0d1b0ebda096bc712720532010a0b82a45c2b1df", size = 28796458, upload-time = "2026-07-09T00:32:41.352Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/67/3cef84ba38a23dca1e1e776bfda8a35ab3c7a6c94a8ca81d0715de6dd3c5/fastmcp-3.4.4-py3-none-any.whl", hash = "sha256:f86f208713212260068cf55c32936839eee856fefc7808e18a032f31eb0f718e", size = 8019, upload-time = "2026-07-09T00:32:39.411Z" }, +] + +[[package]] +name = "fastmcp-slim" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "pydantic", extra = ["email"] }, + { name = "pydantic-settings" }, + { name = "python-dotenv" }, + { name = "rich" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/45/79/f35661c6a1d76dfbe17a079f912d96fffcfdd40fad5a9144bb9e7dfb1fdf/fastmcp_slim-3.4.4.tar.gz", hash = "sha256:dcaa3e0be2127d7eacdce592c2ef0039204923dc0ec396454615cb4a3275b078", size = 590203, upload-time = "2026-07-09T00:32:20.531Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/91/321e0b2e9ed70d0628b17ddaec76fc7b09f3e1d5d290f70bf101a2890142/fastmcp_slim-3.4.4-py3-none-any.whl", hash = "sha256:9d3a6327b9ee835188eb7323fc3b5d4cd061631b48da8ece56794bb538972505", size = 765158, upload-time = "2026-07-09T00:32:19.11Z" }, +] + +[package.optional-dependencies] +client = [ + { name = "authlib" }, + { name = "exceptiongroup" }, + { name = "httpx" }, + { name = "mcp" }, + { name = "opentelemetry-api" }, + { name = "py-key-value-aio", extra = ["filetree", "keyring", "memory"] }, + { name = "starlette" }, +] +server = [ + { name = "authlib" }, + { name = "cyclopts" }, + { name = "exceptiongroup" }, + { name = "griffelib" }, + { name = "httpx" }, + { name = "joserfc" }, + { name = "jsonref" }, + { name = "jsonschema-path" }, + { name = "mcp" }, + { name = "openapi-pydantic" }, + { name = "opentelemetry-api" }, + { name = "packaging" }, + { name = "py-key-value-aio", extra = ["filetree", "keyring", "memory"] }, + { name = "pyperclip" }, + { name = "python-multipart" }, + { name = "pyyaml" }, + { name = "starlette" }, + { name = "uncalled-for" }, + { name = "uvicorn" }, + { name = "watchfiles" }, + { name = "websockets" }, +] + +[[package]] +name = "griffelib" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/e4/8d187ea29c2e30b3a09505c567513077d6117861bde1fbd997a167f262ec/griffelib-2.1.0.tar.gz", hash = "sha256:762a186d2c6fd6794d4ea20d428d597ffb857cb56b66421651cbba15bdd5e813", size = 216234, upload-time = "2026-06-19T12:05:42.278Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/d3/5268aeabf2ad82658c4e2ff3a060648d0f02f3926cb53247c0e4d0dab49e/griffelib-2.1.0-py3-none-any.whl", hash = "sha256:cc7b3d2d2865ad0b909fcc38086e3f554b5ea7acbaa7bbb7ecaa3f5dfb7d9f00", size = 142560, upload-time = "2026-06-19T12:05:38.742Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[[package]] +name = "httpx-sse" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/4c/751061ffa58615a32c31b2d82e8482be8dd4a89154f003147acee90f2be9/httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d", size = 15943, upload-time = "2025-10-10T21:48:22.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc", size = 8960, upload-time = "2025-10-10T21:48:21.158Z" }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, +] + +[[package]] +name = "jaraco-classes" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", size = 11780, upload-time = "2024-03-31T07:27:36.643Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", size = 6777, upload-time = "2024-03-31T07:27:34.792Z" }, +] + +[[package]] +name = "jaraco-context" +version = "6.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/50/4763cd07e722bb6285316d390a164bc7e479db9d90daa769f22578f698b4/jaraco_context-6.1.2.tar.gz", hash = "sha256:f1a6c9d391e661cc5b8d39861ff077a7dc24dc23833ccee564b234b81c82dfe3", size = 16801, upload-time = "2026-03-20T22:13:33.922Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/58/bc8954bda5fcda97bd7c19be11b85f91973d67a706ed4a3aec33e7de22db/jaraco_context-6.1.2-py3-none-any.whl", hash = "sha256:bf8150b79a2d5d91ae48629d8b427a8f7ba0e1097dd6202a9059f29a36379535", size = 7871, upload-time = "2026-03-20T22:13:32.808Z" }, +] + +[[package]] +name = "jaraco-functools" +version = "4.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/1f/c23395957d41ccf27c4e535c3d334c4051e5395b3752057ba4cbaec35c56/jaraco_functools-4.6.0.tar.gz", hash = "sha256:880c577ec9720b3a052d5bc611fb9f2269b3d87902ef42440df443b88e443280", size = 20837, upload-time = "2026-07-14T01:28:02.544Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/36/ecc85bc96c273dc8a11273ed4782272975e6338d4a3e9228621175edf0e3/jaraco_functools-4.6.0-py3-none-any.whl", hash = "sha256:99e3dc0060c5cbe8fcd1cdb36258e2a65ca40f1566b2033b12abb1bb44dd3c30", size = 11677, upload-time = "2026-07-14T01:28:01.59Z" }, +] + +[[package]] +name = "jeepney" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/6f/357efd7602486741aa73ffc0617fb310a29b588ed0fd69c2399acbb85b0c/jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732", size = 106758, upload-time = "2025-02-27T18:51:01.684Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", size = 49010, upload-time = "2025-02-27T18:51:00.104Z" }, +] + +[[package]] +name = "joserfc" +version = "1.7.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/e0/27a6a081ae25420eda6768ceae05d7022a7f2447f420588843f2a44e4298/joserfc-1.7.4.tar.gz", hash = "sha256:b3bc561672ae541b17a9237053b48a03dacddd92d68047b3ecdfb4b5714a88ed", size = 234027, upload-time = "2026-07-19T15:43:02.739Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/bf/249dcd99b3376375910b7fa922383b57792975c8758f50d44612e749226c/joserfc-1.7.4-py3-none-any.whl", hash = "sha256:32d46c2cd5e3203c13e87a6c61333cab310b1ba80cd54b4c4f386a848a122463", size = 71000, upload-time = "2026-07-19T15:43:01.299Z" }, +] + +[[package]] +name = "jsonref" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/0d/c1f3277e90ccdb50d33ed5ba1ec5b3f0a242ed8c1b1a85d3afeb68464dca/jsonref-1.1.0.tar.gz", hash = "sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552", size = 8814, upload-time = "2023-01-16T16:10:04.455Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/ec/e1db9922bceb168197a558a2b8c03a7963f1afe93517ddd3cf99f202f996/jsonref-1.1.0-py3-none-any.whl", hash = "sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9", size = 9425, upload-time = "2023-01-16T16:10:02.255Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, +] + +[[package]] +name = "jsonschema-path" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "pathable" }, + { name = "pyyaml" }, + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/79/cd02a4df6d9270efdc7d3feefe6edd730b0820c39eeaa107a2faee8322d5/jsonschema_path-0.5.0.tar.gz", hash = "sha256:493b156ba895c97602655b620a8456caa2ce08c1aa389f5a7addec065e6e855c", size = 19597, upload-time = "2026-05-19T20:45:00.971Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/2c/9e69d73c4297508be9e3b64a970ea3971b3eb8db64ffc5802d40bd25981f/jsonschema_path-0.5.0-py3-none-any.whl", hash = "sha256:2790a070bc7abb08ea3dbe4d340ece4efadf639223001f020c7503229ba068e2", size = 24077, upload-time = "2026-05-19T20:44:59.225Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "keyring" +version = "25.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jaraco-classes" }, + { name = "jaraco-context" }, + { name = "jaraco-functools" }, + { name = "jeepney", marker = "sys_platform == 'linux'" }, + { name = "pywin32-ctypes", marker = "sys_platform == 'win32'" }, + { name = "secretstorage", marker = "sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/4b/674af6ef2f97d56f0ab5153bf0bfa28ccb6c3ed4d1babf4305449668807b/keyring-25.7.0.tar.gz", hash = "sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b", size = 63516, upload-time = "2025-11-16T16:26:09.482Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl", hash = "sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f", size = 39160, upload-time = "2025-11-16T16:26:08.402Z" }, +] + +[[package]] +name = "kiwoom-docs-mcp" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "fastmcp" }, +] + +[package.metadata] +requires-dist = [{ name = "fastmcp", specifier = ">=2.11.3" }] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, +] + +[[package]] +name = "mcp" +version = "1.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "httpx" }, + { name = "httpx-sse" }, + { name = "jsonschema" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pyjwt", extra = ["crypto"] }, + { name = "python-multipart" }, + { name = "pywin32", marker = "sys_platform == 'win32'" }, + { name = "sse-starlette" }, + { name = "starlette" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, + { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6e/77/9450b8f251a13affb6281997d0523c4615f8a8b35d0b21ff30db3a5aac9d/mcp-1.28.1.tar.gz", hash = "sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683", size = 638501, upload-time = "2026-06-26T12:57:29.093Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/5e/d118fce19f87a2e7d8101c35c8ae0ec289098a4df0ff244cec23e415aca0/mcp-1.28.1-py3-none-any.whl", hash = "sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df", size = 222620, upload-time = "2026-06-26T12:57:27.218Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "more-itertools" +version = "11.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/1d/f4da6f02cdffe04d6362210b807146a26044c88d839208aec273bb0d9184/more_itertools-11.1.0.tar.gz", hash = "sha256:48e8f4d9e7e5878571ecf6f2b4e57634f93cd474cc8cfbd2376f2d11b396e30d", size = 145772, upload-time = "2026-05-22T14:14:29.909Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/3d/1087453384dbde46a8c7f9356eead2c58be8a7bf156bca40243377c85715/more_itertools-11.1.0-py3-none-any.whl", hash = "sha256:4b65538ae22f6fed0ce4874efd317463a7489796a0939fa66824dd542125a192", size = 72226, upload-time = "2026-05-22T14:14:28.824Z" }, +] + +[[package]] +name = "openapi-pydantic" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/2e/58d83848dd1a79cb92ed8e63f6ba901ca282c5f09d04af9423ec26c56fd7/openapi_pydantic-0.5.1.tar.gz", hash = "sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d", size = 60892, upload-time = "2025-01-08T19:29:27.083Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/cf/03675d8bd8ecbf4445504d8071adab19f5f993676795708e36402ab38263/openapi_pydantic-0.5.1-py3-none-any.whl", hash = "sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146", size = 96381, upload-time = "2025-01-08T19:29:25.275Z" }, +] + +[[package]] +name = "opentelemetry-api" +version = "1.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ee/8b/aa9e2d8b8dfa7c946f7dec5d1f8f6ba8eca062f43509a06bdb5ce93d26c0/opentelemetry_api-1.44.0.tar.gz", hash = "sha256:67647e5e9566edcf421166fdf022b3537f818635daa852b289e34604dc6fb33a", size = 72406, upload-time = "2026-07-16T15:25:32.678Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/6f/a04e900f465ff3221ccc395522503e2d10e79fa21f2723c8e177aae1e0d1/opentelemetry_api-1.44.0-py3-none-any.whl", hash = "sha256:94b98c893a91b88657eaac1e3ba89618cdb85be6918196705354f34728b2cdef", size = 60018, upload-time = "2026-07-16T15:25:11.657Z" }, +] + +[[package]] +name = "packaging" +version = "26.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, +] + +[[package]] +name = "pathable" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/f3/5a20387de9bcd0607871bfc2198ee0e15836da7baa4592ccd7f24c27c986/pathable-0.6.0.tar.gz", hash = "sha256:6404b8b82aef5ff0fd478934137128b99b12212ba35afdde5525ca4f8388ea58", size = 18970, upload-time = "2026-05-19T18:15:11.911Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/e8/6d75ffd9784bce2e93d1ae4415649427e39a53bb172d4672b2b59c6f0a7b/pathable-0.6.0-py3-none-any.whl", hash = "sha256:82c4ca6c98c502ad12e0d4e9779b6210afee93c38990988c8c5d1b49bdcdf566", size = 18983, upload-time = "2026-05-19T18:15:10.728Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/78/9b/560e4be8e26f6fd133a03630a8df0c663b9e8d61b4ade152b72005aec83b/platformdirs-4.11.0.tar.gz", hash = "sha256:0555d18370482847566ffabcaa53ad7c6c1c29f195989ae1ed634a05f76ea1e0", size = 31953, upload-time = "2026-07-21T13:09:36.565Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/68/d8d58938dfb1370b266a1a729e6d77a985be23689a0496498ee17b2cbf90/platformdirs-4.11.0-py3-none-any.whl", hash = "sha256:360ccded2b7fce0af0ff80cc8f5942a1c5d99b0e856033acb030bfc634709e74", size = 23247, upload-time = "2026-07-21T13:09:35.422Z" }, +] + +[[package]] +name = "py-key-value-aio" +version = "0.4.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beartype" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fb/e2/d689d922894a7ecde73b6daeaf9b13dab5aae06fe6aaaf7514722644d382/py_key_value_aio-0.4.5.tar.gz", hash = "sha256:c6563a2c6abe5da5e20f4f9e875c2a9b425a2244a54fadbf46cf140a9eea45d7", size = 107547, upload-time = "2026-05-27T16:37:08.107Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/95/b8ba862968712caa12a19666175334fa979e1f198b896a430adb3bacfe87/py_key_value_aio-0.4.5-py3-none-any.whl", hash = "sha256:ab862adbcb8c72547d1c57821f22cbbb71ab86509039c96f36e914e0336c8dd7", size = 170005, upload-time = "2026-05-27T16:37:06.629Z" }, +] + +[package.optional-dependencies] +filetree = [ + { name = "aiofile" }, + { name = "anyio" }, +] +keyring = [ + { name = "keyring" }, +] +memory = [ + { name = "cachetools" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pydantic" +version = "2.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, +] + +[package.optional-dependencies] +email = [ + { name = "email-validator" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" }, + { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" }, + { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" }, + { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" }, + { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" }, + { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" }, + { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" }, + { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" }, + { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" }, + { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" }, + { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" }, + { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" }, + { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" }, + { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" }, + { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" }, + { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" }, + { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" }, + { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" }, + { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" }, + { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" }, + { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" }, + { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" }, + { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" }, + { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" }, + { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" }, + { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" }, + { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" }, + { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" }, + { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" }, + { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" }, + { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" }, + { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" }, + { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" }, + { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" }, + { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" }, + { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" }, + { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" }, + { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" }, + { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" }, +] + +[[package]] +name = "pydantic-settings" +version = "2.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5c/b5/8f48e906c3e0205276e8bd8cb7512217a87b2685304d64be27cad5b3019f/pydantic_settings-2.14.2.tar.gz", hash = "sha256:c19dd64b19097f1de80184f0cc7b0272a13ae6e170cbf240a3e27e381ed14a5f", size = 237700, upload-time = "2026-06-19T13:44:56.324Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/c1/6e422f34e569cf8e18df68d1939c81c099d2b61e4f7d9621c8a77560799c/pydantic_settings-2.14.2-py3-none-any.whl", hash = "sha256:a20c97b37910b6550d5ea50fbcc2d4187defe58cd57070b73863d069419c9440", size = 61715, upload-time = "2026-06-19T13:44:55.02Z" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3b/81/58d0ac84e1ef3a3843791d6954d94c0b33d526c75eeb1efbce9d0a4c4077/pyjwt-2.13.0.tar.gz", hash = "sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423", size = 107515, upload-time = "2026-05-21T19:54:36.618Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/5e/ecf12fdb62546d64385c158514e9b2b671f7832108ef2ecd2020ce0af2d1/pyjwt-2.13.0-py3-none-any.whl", hash = "sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728", size = 31274, upload-time = "2026-05-21T19:54:35.362Z" }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography" }, +] + +[[package]] +name = "pyperclip" +version = "1.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/52/d87eba7cb129b81563019d1679026e7a112ef76855d6159d24754dbd2a51/pyperclip-1.11.0.tar.gz", hash = "sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6", size = 12185, upload-time = "2025-09-26T14:40:37.245Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/80/fc9d01d5ed37ba4c42ca2b55b4339ae6e200b456be3a1aaddf4a9fa99b8c/pyperclip-1.11.0-py3-none-any.whl", hash = "sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273", size = 11063, upload-time = "2025-09-26T14:40:36.069Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, +] + +[[package]] +name = "python-multipart" +version = "0.0.32" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/42/55c32bb9b12693c092ad250a0e82edb5b31ddeda6eb772de5f308b3804ad/python_multipart-0.0.32.tar.gz", hash = "sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e", size = 46881, upload-time = "2026-06-04T16:18:58.647Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23", size = 30042, upload-time = "2026-06-04T16:18:57.319Z" }, +] + +[[package]] +name = "pywin32" +version = "312" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/ff/32aa7d2ed0ab12b323aaa64f9b75e6ad4f8fd09f9ccfc28c79414d46838d/pywin32-312-cp312-cp312-win32.whl", hash = "sha256:dab4f65ac9c4e48400a2a0530c46c3c579cd5905ecd11b80692373915269208b", size = 6371877, upload-time = "2026-06-04T07:49:28.836Z" }, + { url = "https://files.pythonhosted.org/packages/03/d9/77040d3b43df3f3be32ea289433d660d2727f5ba327bc73be835127d9d60/pywin32-312-cp312-cp312-win_amd64.whl", hash = "sha256:b457f6d628a47e8a7346ce22acb7e1a46a4a78b52e1d17e1af56871bd19a93bc", size = 6914841, upload-time = "2026-06-04T07:49:31.85Z" }, + { url = "https://files.pythonhosted.org/packages/e3/cc/7b1ec671775756020a0ee7f4feeaf3c568f0ab86bd3900088cf986937a92/pywin32-312-cp312-cp312-win_arm64.whl", hash = "sha256:6017c58e12f6809fbb0555b75df144c2922a9ffd18e4b9b5afa863b6c1a9d950", size = 6727901, upload-time = "2026-06-04T07:49:34.244Z" }, + { url = "https://files.pythonhosted.org/packages/2d/41/12fbfd7f36ed2146d8bc9de96c2741296bf0d490b98508496cff322e274c/pywin32-312-cp313-cp313-win32.whl", hash = "sha256:7a27df850933d16a8eabfbaeb73d52b273e2da667f80d70b01a89d1f6828d02c", size = 6370184, upload-time = "2026-06-04T07:49:36.253Z" }, + { url = "https://files.pythonhosted.org/packages/ba/db/36a78e3403099d31d9746d13fdcde5accc43c1155f375a34d15983a479a7/pywin32-312-cp313-cp313-win_amd64.whl", hash = "sha256:c53e878d15a1c44788082bfe712a905433473aa38f86375b7cf8b45e3acbaaf9", size = 6914298, upload-time = "2026-06-04T07:49:38.876Z" }, + { url = "https://files.pythonhosted.org/packages/84/37/c1697194092b76de9ed47ca124323f02c57ffc8a45c06f88a3d5acaf01eb/pywin32-312-cp313-cp313-win_arm64.whl", hash = "sha256:59aba5d5940842075343a5ddc6b11f1cdf0d1567fe745290359dfbcc7c2eb831", size = 6727640, upload-time = "2026-06-04T07:49:41.083Z" }, + { url = "https://files.pythonhosted.org/packages/fc/2b/1f3cded5822fd49c02f40544cbb5f58c7cfd6b1694869fd476cb6170ee97/pywin32-312-cp314-cp314-win32.whl", hash = "sha256:a77a90fbb6881238d2ca9c6fd797b25817f3768fe78d214a90137ff055a75f5b", size = 6468928, upload-time = "2026-06-04T07:49:43.188Z" }, + { url = "https://files.pythonhosted.org/packages/21/82/3bf86d2e2808902013132e1ce905a7da0da53790f3836c64bf44d55e24f3/pywin32-312-cp314-cp314-win_amd64.whl", hash = "sha256:a4dd3a848290ef724347b19f301045831d8e802fa4464f491b98b1e0a081432e", size = 7024157, upload-time = "2026-06-04T07:49:45.34Z" }, + { url = "https://files.pythonhosted.org/packages/a4/0e/73f6d6800b4f27655abd9e9f6aaeaefcddb2b946e4674efa2bab184a7f7b/pywin32-312-cp314-cp314-win_arm64.whl", hash = "sha256:9fce94568364e0155e6dfb781ac5d95903be8baf28670632beab1b523f300daa", size = 6839598, upload-time = "2026-06-04T07:49:47.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/61/caa39686032d2ebdd04ff0ab5cbe163126c0066d98e00c9018646e42393b/pywin32-312-cp315-cp315-win32.whl", hash = "sha256:5c1fbe4a937a73ae9297384a3da38518cbc694c68ad8a809b2e19acd350f03ed", size = 6471159, upload-time = "2026-06-04T07:49:50.035Z" }, + { url = "https://files.pythonhosted.org/packages/0f/cd/7e1de64a4a6f69c04214169657ccab0d93a670ea50e35eb8f489d7378249/pywin32-312-cp315-cp315-win_amd64.whl", hash = "sha256:c2f03a0f73f804a13c2735b99392b0cd426bb4f2c4d0178e5ac966a0f21618d5", size = 7025293, upload-time = "2026-06-04T07:49:54.857Z" }, + { url = "https://files.pythonhosted.org/packages/23/ed/4532e9388e65fa16b46776ef47ad631a64eda1631884488af707666350ed/pywin32-312-cp315-cp315-win_arm64.whl", hash = "sha256:a8597d28f267b39074aef51fa593530082b39cbe5a074226096857b1fed2dfb9", size = 6840337, upload-time = "2026-06-04T07:49:57.531Z" }, +] + +[[package]] +name = "pywin32-ctypes" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471, upload-time = "2024-08-14T10:15:34.626Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, +] + +[[package]] +name = "rich" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, +] + +[[package]] +name = "rich-rst" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, + { name = "rich" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e2/d6/d0b9fafc73b65767200da027acab1db1bdb1048f4fea5ebf659df01c700e/rich_rst-2.1.0.tar.gz", hash = "sha256:f4d117b49697f338769759fa5cacf5197da4888b347b9fda2e50aef5cd8d93bd", size = 302732, upload-time = "2026-07-05T02:59:44.308Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/68/1fc93dd759605b5d00fc98b50200739e41ed32bd22d6ba35ca6c3932371b/rich_rst-2.1.0-py3-none-any.whl", hash = "sha256:7ecd1343ee12c879d0e7ae74c3eb6d263b023d2929c6d114212eb1fd91057255", size = 272987, upload-time = "2026-07-05T02:59:42.792Z" }, +] + +[[package]] +name = "rpds-py" +version = "2026.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/2a/9618a122aeb2a169a28b03889a2995fe297588964333d4a7d67bdf46e147/rpds_py-2026.6.3.tar.gz", hash = "sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4", size = 64051, upload-time = "2026-06-30T07:17:53.009Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/be/2e8974163072e7bab7df1a5acd54c4498e75e35d6d18b864d3a9d5dadc92/rpds_py-2026.6.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0", size = 343691, upload-time = "2026-06-30T07:15:14.96Z" }, + { url = "https://files.pythonhosted.org/packages/a4/73/319dfa745dd668efe89309141ded489126461fcecd2b8f3a3cda185129b6/rpds_py-2026.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf", size = 338542, upload-time = "2026-06-30T07:15:16.267Z" }, + { url = "https://files.pythonhosted.org/packages/21/63/4239893be1c4d09b709b1a8f6be4188f0870084ff547f46606b8a75f1b03/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24", size = 368180, upload-time = "2026-06-30T07:15:17.62Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ca/9c5de382225234ceb37b1844ebdb140db12b2a278bb9efe2fcd19f6c82ce/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e", size = 375067, upload-time = "2026-06-30T07:15:18.952Z" }, + { url = "https://files.pythonhosted.org/packages/87/dc/863f69d1bf04ade34b7fe0d59b9fdf6f0135fe2d7cbca74f1d665589559d/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975", size = 490509, upload-time = "2026-06-30T07:15:20.434Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ef/eac16a12048b45ec7c7fa94f2be3438a5f26bf9cc8580b18a1cfd609b7f6/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680", size = 382754, upload-time = "2026-06-30T07:15:21.831Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/d2f3f532616be4d06c316ef119683e832bd3d41e112bf3a88f4151c95b17/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6", size = 366189, upload-time = "2026-06-30T07:15:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/e3/29/41a7b0e98a4b44cd676ab7598419623373eb43b20be68c084935c1a8cf88/rpds_py-2026.6.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a", size = 377750, upload-time = "2026-06-30T07:15:24.659Z" }, + { url = "https://files.pythonhosted.org/packages/2e/05/ecda0bec46f9a1565090bcdc941d023f6a25aff85fda28f89f8d19878152/rpds_py-2026.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4", size = 395576, upload-time = "2026-06-30T07:15:25.987Z" }, + { url = "https://files.pythonhosted.org/packages/68/a8/6ed52f03ee6cb854ce78785cc9a9a672eb880e83fd7224d471f667d151f1/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa", size = 543807, upload-time = "2026-06-30T07:15:27.356Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d6/156c0d3eea27ba09b92562ba2364ba124c0a061b199e17eac637cd25a5e2/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc", size = 611187, upload-time = "2026-06-30T07:15:28.931Z" }, + { url = "https://files.pythonhosted.org/packages/f1/31/774212ed989c62f7f310220089f9b0a3fb8f40f5443d1727abd5d9f52bc9/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822", size = 573030, upload-time = "2026-06-30T07:15:30.553Z" }, + { url = "https://files.pythonhosted.org/packages/c9/50/22f73127a41f1ce4f87fe39aadfb9a126345801c274aa93ae88456249327/rpds_py-2026.6.3-cp312-cp312-win32.whl", hash = "sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed", size = 202185, upload-time = "2026-06-30T07:15:32.027Z" }, + { url = "https://files.pythonhosted.org/packages/04/3a/f0ee4d4dde9d3b69dedf1b5f74e7a40017046d55052d173e418c6a94f960/rpds_py-2026.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f", size = 220394, upload-time = "2026-06-30T07:15:33.359Z" }, + { url = "https://files.pythonhosted.org/packages/f3/83/3382fe37f809b59f02aac04dbc4e765b480b46ee0227ed516e3bdc4d3dfc/rpds_py-2026.6.3-cp312-cp312-win_arm64.whl", hash = "sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96", size = 215753, upload-time = "2026-06-30T07:15:34.778Z" }, + { url = "https://files.pythonhosted.org/packages/a4/9e/b818ee580026ec578138e961027a68820c40afeb1ec8f6819b54fb99e196/rpds_py-2026.6.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223", size = 343012, upload-time = "2026-06-30T07:15:36.005Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6b/686d9dc4359a8f163cfbbf89ee0b4e586431de22fe8248edb63a8cf50d49/rpds_py-2026.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f", size = 338203, upload-time = "2026-06-30T07:15:37.462Z" }, + { url = "https://files.pythonhosted.org/packages/9e/9b/069aa329940f8207615e091f5eedbbd40e1e15eac68a0790fd05ccdf796c/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f", size = 367984, upload-time = "2026-06-30T07:15:39.008Z" }, + { url = "https://files.pythonhosted.org/packages/14/db/34c203e4becff3703e4d3bc121842c00b8689197f398161203a880052f4e/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7", size = 374815, upload-time = "2026-06-30T07:15:40.253Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7d/8071067d2cc453d916ad836e828c943f575e8a44612537759002a1e07381/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6", size = 490545, upload-time = "2026-06-30T07:15:41.729Z" }, + { url = "https://files.pythonhosted.org/packages/a3/42/da06c5aa8f0484ff07f270787434204d9f4535e2f8c3b51ed402267e63c3/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af", size = 382828, upload-time = "2026-06-30T07:15:43.327Z" }, + { url = "https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf", size = 365678, upload-time = "2026-06-30T07:15:44.992Z" }, + { url = "https://files.pythonhosted.org/packages/69/9d/1d8922e1990b2a6eb532b6ff53d3e73d2b3bbffc84116c75826bee73dfc6/rpds_py-2026.6.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885", size = 377811, upload-time = "2026-06-30T07:15:46.523Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3d/198dceafb4fb034a6a47347e1b0735d34e0bd4a50be4e898d408ee66cb14/rpds_py-2026.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4", size = 395382, upload-time = "2026-06-30T07:15:47.955Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f1/13968e49655d40b6b19d8b9140296bbc6f1d86b3f0f6c346cf9f1adddf4b/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7", size = 543832, upload-time = "2026-06-30T07:15:49.33Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ab/289bcb1b90bd3e40a2900c561fa0e2087345ecbb094f0b870f2345142b7c/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d", size = 611011, upload-time = "2026-06-30T07:15:50.847Z" }, + { url = "https://files.pythonhosted.org/packages/1e/16/5043105e679436ccfbc8e5e0dd2d663ed18a8b8113515fd06a5e5d77c83e/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97", size = 572431, upload-time = "2026-06-30T07:15:52.394Z" }, + { url = "https://files.pythonhosted.org/packages/85/ed/adab103321c0a6565d5ae1c2998349bc3ee175b82ccc5ae8fc04cc413075/rpds_py-2026.6.3-cp313-cp313-win32.whl", hash = "sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0", size = 201710, upload-time = "2026-06-30T07:15:53.894Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ed/a03b09668e74e5dabbf2e211f6468e1820c0552f7b0500082da31841bf7b/rpds_py-2026.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80", size = 219454, upload-time = "2026-06-30T07:15:55.25Z" }, + { url = "https://files.pythonhosted.org/packages/27/17/b8642c12930b71bc2b25831f6708ccf0f75abcd11883932ec9ce54ba3a78/rpds_py-2026.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb", size = 215063, upload-time = "2026-06-30T07:15:56.573Z" }, + { url = "https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e", size = 344510, upload-time = "2026-06-30T07:15:57.921Z" }, + { url = "https://files.pythonhosted.org/packages/ba/54/f785cc3d3f60839ca57a5af4927a9f347b07b2799c373fc20f7949f87c7e/rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd", size = 339495, upload-time = "2026-06-30T07:15:59.238Z" }, + { url = "https://files.pythonhosted.org/packages/63/ef/d4cdaf309e6b095b43597103cf8c0b951d6cca2acce68c474f75ec12e0c7/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d", size = 369454, upload-time = "2026-06-30T07:16:01.021Z" }, + { url = "https://files.pythonhosted.org/packages/96/4a/9559a68b7ee15db09d7981212e8c2e219d2a1d6d4faa0391d813c3496a36/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda", size = 374583, upload-time = "2026-06-30T07:16:02.287Z" }, + { url = "https://files.pythonhosted.org/packages/ef/75/8964aa7d2c6e8ac43eba8eb6e6b0fdda1f46d39f2fc3e6aa9f2cb17f485d/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8", size = 492919, upload-time = "2026-06-30T07:16:03.723Z" }, + { url = "https://files.pythonhosted.org/packages/8f/97/6908094ac804115e65aedfd90f1b5fee4eebebd3f6c4cfc5419939267565/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53", size = 383725, upload-time = "2026-06-30T07:16:05.305Z" }, + { url = "https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504", size = 367255, upload-time = "2026-06-30T07:16:07.086Z" }, + { url = "https://files.pythonhosted.org/packages/c4/fe/f0209ca4a9ed074bc8acb44dfd0e81c3122e94c9689f5645b7973a866719/rpds_py-2026.6.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc", size = 379060, upload-time = "2026-06-30T07:16:08.525Z" }, + { url = "https://files.pythonhosted.org/packages/c6/8d/f1cc54c616b9d8897de8738aac148d20afca93f68187475fe194d09a71b9/rpds_py-2026.6.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77", size = 395960, upload-time = "2026-06-30T07:16:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/fb/04/aafff00f73aeca2945f734f1d483c64ab8f472d0864ab02377fd8e89c3b2/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698", size = 545356, upload-time = "2026-06-30T07:16:11.816Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cc/e229663b9e4ddac5a4acbe9085dd80a71af2a5d356b8b39d6bff233f24b0/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd", size = 612319, upload-time = "2026-06-30T07:16:13.586Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7a/8a0e6d3e6cd066af108b71b43122c3fe158dd9eb86acac626593a2582eb1/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d", size = 573508, upload-time = "2026-06-30T07:16:15.23Z" }, + { url = "https://files.pythonhosted.org/packages/87/03/2a69ab618a789cf6cf85c86bb844c62d090e700ab1a2aa676b3741b6c516/rpds_py-2026.6.3-cp314-cp314-win32.whl", hash = "sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8", size = 202504, upload-time = "2026-06-30T07:16:16.893Z" }, + { url = "https://files.pythonhosted.org/packages/85/62/a3892ba945f4e24c78f352e5de3c7620d8479f73f211406a97263d13c7d2/rpds_py-2026.6.3-cp314-cp314-win_amd64.whl", hash = "sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5", size = 220380, upload-time = "2026-06-30T07:16:18.108Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e7/c2bd44dc831931815ad11ebb5f430b5a0a4d3caa9de837107876c30c3432/rpds_py-2026.6.3-cp314-cp314-win_arm64.whl", hash = "sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703", size = 215976, upload-time = "2026-06-30T07:16:19.654Z" }, + { url = "https://files.pythonhosted.org/packages/79/9c/fff7b74bce9a091ec9a012a03f9ff5f69364eaf9451060dfc4486da2ffdd/rpds_py-2026.6.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90", size = 346840, upload-time = "2026-06-30T07:16:21.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/77bcb1168b33704908295533d27f10eb811e9e3e193e8993dc99572211d3/rpds_py-2026.6.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4", size = 340282, upload-time = "2026-06-30T07:16:22.875Z" }, + { url = "https://files.pythonhosted.org/packages/87/3c/7a9081c7c9e645b39efe19e4ffbeccd80add246327cd9b888aecffd72317/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9", size = 370403, upload-time = "2026-06-30T07:16:24.415Z" }, + { url = "https://files.pythonhosted.org/packages/f7/69/af47021eb7dad6ff3396cb001c08f0f3c4d06c20253f75be6421a59fe6b7/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f", size = 376055, upload-time = "2026-06-30T07:16:26.111Z" }, + { url = "https://files.pythonhosted.org/packages/81/fc/a3bcf517084396a6dd258c592567a3c011ba4557f2fde23dceaf26e74f2e/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41", size = 494419, upload-time = "2026-06-30T07:16:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/c9/eb/13d529d1788135425c7bf207f8463458ca5d92e43f3f701365b83e9dffc1/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945", size = 384848, upload-time = "2026-06-30T07:16:29.183Z" }, + { url = "https://files.pythonhosted.org/packages/8e/f4/b7ac49f30013aba8f7b9566b1dd07e81de95e708c1374b7bacc5b9bc5c9c/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f", size = 371369, upload-time = "2026-06-30T07:16:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/31/86/6260bafa622f788b07ddec0e52d810305c8b9b0b8c27f58a2ab04bf62b4f/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1", size = 379673, upload-time = "2026-06-30T07:16:32.486Z" }, + { url = "https://files.pythonhosted.org/packages/19/c3/03f1ee79a047b48daeca157c89a18509cde22b6b951d642b9b0af1be660a/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e", size = 397500, upload-time = "2026-06-30T07:16:34.471Z" }, + { url = "https://files.pythonhosted.org/packages/f0/95/8ed0cd8c377dca12aea498f119fe639fc474d1461545c39d2b5872eb1c0f/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538", size = 545978, upload-time = "2026-06-30T07:16:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/0eb57f0eaa83f8fc152a7e03de968ab77e1f00732bebc892b190c6eebde7/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db", size = 613350, upload-time = "2026-06-30T07:16:38.213Z" }, + { url = "https://files.pythonhosted.org/packages/5b/de/e0674bdbc3ef7634989b3f854c3f34bc1f587d36e5bfdc5c378d57034619/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2", size = 576486, upload-time = "2026-06-30T07:16:39.797Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f6/21101359743cd136ada781e8210a85769578422ba460672eea0e29739200/rpds_py-2026.6.3-cp314-cp314t-win32.whl", hash = "sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e", size = 201068, upload-time = "2026-06-30T07:16:41.316Z" }, + { url = "https://files.pythonhosted.org/packages/a6/b2/9574d4d44f7760c2aa32d92a0a4f41698e33f5b204a0bf5c9758f52c79d5/rpds_py-2026.6.3-cp314-cp314t-win_amd64.whl", hash = "sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2", size = 220600, upload-time = "2026-06-30T07:16:43.091Z" }, + { url = "https://files.pythonhosted.org/packages/08/ae/f23a2697e6ee6340a578b0f136be6483657bef0c6f9497b752bb5c0964bb/rpds_py-2026.6.3-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13", size = 344726, upload-time = "2026-06-30T07:16:44.5Z" }, + { url = "https://files.pythonhosted.org/packages/c3/63/e7b3a1a5358dd32c930a1062d8e15b67fd6e8922e81df9e91706d66ee5c8/rpds_py-2026.6.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05", size = 339587, upload-time = "2026-06-30T07:16:46.255Z" }, + { url = "https://files.pythonhosted.org/packages/ec/64/10a85681916ca55fffb91b0a211f84e34297c109243484dd6394660a8a7c/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba", size = 369585, upload-time = "2026-06-30T07:16:48.101Z" }, + { url = "https://files.pythonhosted.org/packages/76/c2/baf95c7c38823e12ba34407c5f5767a89e5cf2233895e56f608167ae9493/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617", size = 375479, upload-time = "2026-06-30T07:16:49.93Z" }, + { url = "https://files.pythonhosted.org/packages/6a/94/0aad06c72d65101e11d33528d438cda99a39ce0da99466e156158f2541d3/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9", size = 492418, upload-time = "2026-06-30T07:16:51.641Z" }, + { url = "https://files.pythonhosted.org/packages/b5/17/de3f5a479a1f056535d7489819639d8cd591ea6281d700390b43b1abd745/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb", size = 384123, upload-time = "2026-06-30T07:16:53.622Z" }, + { url = "https://files.pythonhosted.org/packages/46/7d/bf09bd1b145bb2671c03e1e6d1ab8651858d90d8c7dfeadd85a37a934fd8/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885", size = 367351, upload-time = "2026-06-30T07:16:55.241Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ea/1bb734f314b8be319149ddee80b18bd41372bdcfbdf88d28131c0cd37719/rpds_py-2026.6.3-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a", size = 378827, upload-time = "2026-06-30T07:16:56.841Z" }, + { url = "https://files.pythonhosted.org/packages/4b/93/d9611e5b25e26df9a3649813ed66193ace9347a7c7fc4ab7cf70e94851c0/rpds_py-2026.6.3-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868", size = 395966, upload-time = "2026-06-30T07:16:58.557Z" }, + { url = "https://files.pythonhosted.org/packages/c3/cb/99d77e16e5534ae1d90629bbe419ba6ee170833a6a85e3aa1cc41726fbbc/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187", size = 545680, upload-time = "2026-06-30T07:17:00.164Z" }, + { url = "https://files.pythonhosted.org/packages/59/15/11a29755f790cef7a2f755e8e14f4f0c33f39489e1893a632a2eee59672b/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107", size = 611853, upload-time = "2026-06-30T07:17:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/0c27547e21644da938fb530f7e1a8148dd24d02db07e7a5f2567a17ce710/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba", size = 573715, upload-time = "2026-06-30T07:17:03.693Z" }, + { url = "https://files.pythonhosted.org/packages/29/71/4d8fcf700931815594bce892255bbd973b94efaf0fc1932b0590df18d886/rpds_py-2026.6.3-cp315-cp315-win32.whl", hash = "sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369", size = 202864, upload-time = "2026-06-30T07:17:05.746Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/b577562de0edbb55b2be85ce5fd09c33e386b9b13eee09833af4240fd5c4/rpds_py-2026.6.3-cp315-cp315-win_amd64.whl", hash = "sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146", size = 220430, upload-time = "2026-06-30T07:17:07.471Z" }, + { url = "https://files.pythonhosted.org/packages/c8/95/d6d0b2509825141eef60669a5739eec88dbc6a48053d6c92993a5704defe/rpds_py-2026.6.3-cp315-cp315-win_arm64.whl", hash = "sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e", size = 215877, upload-time = "2026-06-30T07:17:09.008Z" }, + { url = "https://files.pythonhosted.org/packages/b7/bf/f3ea278f0afd615c1d0f19cb69043a41526e2bb600c2b536eb192218eb27/rpds_py-2026.6.3-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b", size = 346933, upload-time = "2026-06-30T07:17:10.762Z" }, + { url = "https://files.pythonhosted.org/packages/9d/29/9907bdf1c5346763cf10b7f6852aad86652168c259def904cbe0082c5864/rpds_py-2026.6.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690", size = 340274, upload-time = "2026-06-30T07:17:12.266Z" }, + { url = "https://files.pythonhosted.org/packages/6f/2c/8e03767b5778ef25cebf74a7a91a2c3806f8eced4c92cb7406bbe060756d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342", size = 370763, upload-time = "2026-06-30T07:17:14.107Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e1/df2a7e1ba2efd796af26194250b8d42c821b46592311595162af9ef0528d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6", size = 376467, upload-time = "2026-06-30T07:17:15.76Z" }, + { url = "https://files.pythonhosted.org/packages/6b/de/8a0814d1946af29cb068fb259aa8622f856df1d0bab58429448726b537f5/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140", size = 496689, upload-time = "2026-06-30T07:17:17.308Z" }, + { url = "https://files.pythonhosted.org/packages/df/f3/f19e0c852ba13694f5a79f3b719331051573cb5693feacf8a88ffffc3a71/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442", size = 385340, upload-time = "2026-06-30T07:17:18.928Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ae/7ec3a9d2d4351f99e37bcb06b6b6f954512646bfdbf9742e1de727865daf/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12", size = 372179, upload-time = "2026-06-30T07:17:20.539Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ac/9cee911dff2aaa9a5a8354f6610bf2e6a616de9197c5fff4f54f82585f1e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5", size = 379993, upload-time = "2026-06-30T07:17:22.212Z" }, + { url = "https://files.pythonhosted.org/packages/83/6b/7c2a07ba88d1e9a936612f7a5d067467ed03d971d5a06f7d309dff044a7e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf", size = 398909, upload-time = "2026-06-30T07:17:23.66Z" }, + { url = "https://files.pythonhosted.org/packages/97/0b/776ffcb66783637b0031f6d58d6fb55913c8b5abf00aeecd46bf933fb477/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00", size = 546584, upload-time = "2026-06-30T07:17:25.264Z" }, + { url = "https://files.pythonhosted.org/packages/55/33/ba3bc04d7092bd553c9b2b195624992d2cc4f3de1f380b7b93cbee67bd79/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef", size = 614357, upload-time = "2026-06-30T07:17:26.888Z" }, + { url = "https://files.pythonhosted.org/packages/8b/71/14edf065f04630b1a8472f7653cad03f6c478bcf95ea0e6aed55451e33ea/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a", size = 576533, upload-time = "2026-06-30T07:17:28.546Z" }, + { url = "https://files.pythonhosted.org/packages/ba/76/65002b08596c389105720a8c0d22298b8dc25a4baf89b2ce431343c8b1de/rpds_py-2026.6.3-cp315-cp315t-win32.whl", hash = "sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577", size = 201204, upload-time = "2026-06-30T07:17:30.193Z" }, + { url = "https://files.pythonhosted.org/packages/8c/97/d855d6b3c322d1f27e26f5241c42016b56cf01377ea8ed348285f54652f0/rpds_py-2026.6.3-cp315-cp315t-win_amd64.whl", hash = "sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324", size = 220719, upload-time = "2026-06-30T07:17:31.788Z" }, +] + +[[package]] +name = "secretstorage" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "jeepney" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl", hash = "sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137", size = 15554, upload-time = "2025-11-23T19:02:51.545Z" }, +] + +[[package]] +name = "sse-starlette" +version = "3.4.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "starlette" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/10/a34c656829ffc1c4b22ef36d70d9ebb6b99c020e2aeb17cee5485099f028/sse_starlette-3.4.6.tar.gz", hash = "sha256:725f8a1bd6d26ae1b2c9610c0ef5065dfdd496f3988d28adcf8c4b49dc25c627", size = 32542, upload-time = "2026-07-20T14:16:32.201Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/36/e10c1d1b7ca881d2625db2ec28508578499187bb1c389952c398474e1834/sse_starlette-3.4.6-py3-none-any.whl", hash = "sha256:56217ab4c9a9f9c5db7b21e08732d3e7c2b807f45231ad23de0551a24c4a41f6", size = 16516, upload-time = "2026-07-20T14:16:30.978Z" }, +] + +[[package]] +name = "starlette" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/e3/7c1dc7381d9f8ab7d854328ebfa884e62cb3f3d8549ddfd37c7814f42afa/starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0", size = 2703240, upload-time = "2026-06-12T09:23:11.602Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/bb/2799cc2ede3ed41131f8975621e7213dfc7ef4acbbaadfa440f32500c370/starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6", size = 73632, upload-time = "2026-06-12T09:23:10.017Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + +[[package]] +name = "uncalled-for" +version = "0.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/82/345cc927f7fbdae6065e7768759932fcc827fc20b29b45dfbafa2f1f7da4/uncalled_for-0.3.2.tar.gz", hash = "sha256:89f5dbcd71e2b8f47c030b1fa302e6cce2ec795d1ac565eeb6525c5fe55cb8a2", size = 50032, upload-time = "2026-05-06T13:38:25.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/25/2c87754f3a9e692315f7b811244090e68f362979fc8886b3fbd2985a1d8c/uncalled_for-0.3.2-py3-none-any.whl", hash = "sha256:0ff60b142c7d1f8070bde9d42afaa70aedc77dcc10998c227687e9c15713418e", size = 11444, upload-time = "2026-05-06T13:38:24.025Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.51.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a2/65/b7c6c443ccc58678c91e1e973bbe2a878591538655d6e1d47f24ba1c51f3/uvicorn-0.51.0.tar.gz", hash = "sha256:f6f4b69b657c312f516dd2d268ab9ae6f254b11e4bac504f37b2ab58b24dd0b0", size = 94412, upload-time = "2026-07-08T10:59:05.962Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/ec/dbb7e5a6b91f86bfb9eb7d2988a2730907b6a729875b949c7f022e8b88fa/uvicorn-0.51.0-py3-none-any.whl", hash = "sha256:5d38af6cd620f2ae3849fb44fd4879e0890aa1febe8d47eb355fb45d93fe6a5b", size = 73219, upload-time = "2026-07-08T10:59:04.44Z" }, +] + +[[package]] +name = "watchfiles" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/41/5e1a4bb12aac5f1493fa1bdc11154eca3b258ca4eba65d39c473fe19d8e9/watchfiles-1.2.0.tar.gz", hash = "sha256:c995fba777f1ea992f090f9236e9284cf7a5d1a0130dd5a3d82c598cacd76838", size = 108252, upload-time = "2026-05-18T04:32:04.251Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/2f/e42c992d2afda3108ea1c02acecc991b9f31d05c14adc2a7cee9ee211fc4/watchfiles-1.2.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:bc13eb17538be00c874699dc0abe4ee2bc8d50bb1166a6b9e175ef3fd7eb8f26", size = 400115, upload-time = "2026-05-18T04:32:02.06Z" }, + { url = "https://files.pythonhosted.org/packages/5f/8f/6af2ea19065c91d8b0ea3516fdfc8c0d349f407e8e9fbf4e5a17360de8ad/watchfiles-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d95ddc1eb6914154253d239089900813f6a767e174b8e6a50e7fdacb7e4236c", size = 393659, upload-time = "2026-05-18T04:30:50.951Z" }, + { url = "https://files.pythonhosted.org/packages/13/01/b32a967c56fb3e3e5be3db52c3d3b87fa4513aa367d8ed1ad96d42952e5f/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f70d8b291ef6e88d19b1f297a6905ddb978888d9272b0d05e6f53309856bcfc", size = 453207, upload-time = "2026-05-18T04:31:04.231Z" }, + { url = "https://files.pythonhosted.org/packages/04/98/97557a812180338cb1abd32e1cffcc4588f59b5f23e0cb006b2ba95ba64a/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:56d8641cf834c2836922899105bd3ce3d0dfc69291d52edf0b4d0436829b34c0", size = 459273, upload-time = "2026-05-18T04:31:50.377Z" }, + { url = "https://files.pythonhosted.org/packages/e8/a8/b4b08dcb7653b8087c6586f7ce649505900e866bbcfe40dc9587af02e686/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2581a94056e55d7d0a31a823ea92bf73749c489ca2285bfdc0fbe6b2bb49d50c", size = 489927, upload-time = "2026-05-18T04:31:42.485Z" }, + { url = "https://files.pythonhosted.org/packages/50/94/3dceea03545d2e5ddfd839f0ddd5e1cecbf1697b5a428d5ba11cef6af95d/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41bc1199f7523b3f82843c88cbb979180c949caef0342cf90968f178e5d49b01", size = 570476, upload-time = "2026-05-18T04:31:03.071Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f2/d39a5450c3532092b91f81d274360e613c2371bc874a89c7a1a3c5e8d138/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7571e4464cb6e434958f867f7f730b8ab0b75e3f8e5eac0499168486ab3c33a8", size = 465650, upload-time = "2026-05-18T04:30:12.701Z" }, + { url = "https://files.pythonhosted.org/packages/22/24/ed72f68cbc1333ca9b9f2200aa048bb6658ae41709bc1caad4310f4bdffd/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e53a384f76b631c3ae5334ce6a52f0baa3a911eb94a4eac7f160079868b716d5", size = 456398, upload-time = "2026-05-18T04:30:13.784Z" }, + { url = "https://files.pythonhosted.org/packages/0d/64/982ef4a4e5bab5b6e5b6becc8cd5e732f6130a78b855f0abec6439a9a135/watchfiles-1.2.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:d20029a60a71a052a24c4db7673bc4de39ab89adbaccbfb5d67987c5d73f424d", size = 465140, upload-time = "2026-05-18T04:31:52.111Z" }, + { url = "https://files.pythonhosted.org/packages/a0/0c/95282abf4ed680b6096010bcfc30c5fa7a041fc5aa5a2ad17a2cc6c75bba/watchfiles-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2cb93af48550faf1cea04c303107c8b75833de7013e57ce27d3b8d21d8d0f58c", size = 630259, upload-time = "2026-05-18T04:31:25.676Z" }, + { url = "https://files.pythonhosted.org/packages/30/45/607c1de1530c4bdcf2cf1d1ecc2505ddba5d96bd43ba9f2b0e79876f850f/watchfiles-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2995c176de7692b86a2e4c58d9ec718f753150a979cb4a754e2b4ffa38e70906", size = 659859, upload-time = "2026-05-18T04:30:24.333Z" }, + { url = "https://files.pythonhosted.org/packages/fa/08/d9e2e0f9e8e6791d33aefc694ad7eefa7f901f63caff84a81ded38692f9c/watchfiles-1.2.0-cp312-cp312-win32.whl", hash = "sha256:7a2cffd17d27d2ecbb310c2b1d8174f222a5495b1a721894afa88ec11e25b898", size = 275480, upload-time = "2026-05-18T04:30:31.307Z" }, + { url = "https://files.pythonhosted.org/packages/1c/e6/9d42569c0102645cc8cea5d8c7d8a1e9d4ada2cb7f05f75e554b8aa2202a/watchfiles-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:f155b3a1b2a5fc89cdc70d47ee5d54e3b75e88efa34982028a35daef9ba00379", size = 288718, upload-time = "2026-05-18T04:32:10.745Z" }, + { url = "https://files.pythonhosted.org/packages/0a/26/88e0dc6ee3898169d7fa22bb6a69cabf2502d2ee25cb8c876d1262d204f8/watchfiles-1.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:8fa585ede612ee9f9e91b18bebf9ba11b9ae29a4e3a0d0cf6fca3e382133f0d5", size = 281026, upload-time = "2026-05-18T04:30:22.23Z" }, + { url = "https://files.pythonhosted.org/packages/d1/4d/70a7feced9f87e2ff26dba42667290f41694fc64646c67261fbb8cab5d5c/watchfiles-1.2.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:01ea8d66f0693b9b60a6541c8d10263091ca9a9060d242f3c1f3143f9aad2c98", size = 399730, upload-time = "2026-05-18T04:31:38.162Z" }, + { url = "https://files.pythonhosted.org/packages/31/3a/0da302f2307aee316922806ebd5726c542cbd787c938271cf14a074c7daf/watchfiles-1.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ba0480b9a74af058f43b337e937a451e109295c420916d68ad24e3dc02f5e44", size = 392842, upload-time = "2026-05-18T04:30:27.051Z" }, + { url = "https://files.pythonhosted.org/packages/db/ef/d5bdb705c224dbc256aa0c1ec47bf4e61ec52558f2afb44a71a1fe4d7015/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f34e26a19f91f710c08e0183429f0d1d15df734e6bc78c31e77b9ea9c433658", size = 452989, upload-time = "2026-05-18T04:31:11.945Z" }, + { url = "https://files.pythonhosted.org/packages/71/29/5495f2c1661949ef7a35e4d71111d129cfe7606414a26887a919d0a55406/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4e77f6a55f858504069abd35d336a637555c09bca453dde1ee1e5ada8a6a1fb", size = 458978, upload-time = "2026-05-18T04:30:52.606Z" }, + { url = "https://files.pythonhosted.org/packages/d5/8c/7f9c07c433811c2fffd93e13fdfb7135de9aab5f2ae41be08960fa0047dc/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cb4d80e212f116474a545c21c912b445f16bb0cef9e6a73a498164223e14e2f", size = 490248, upload-time = "2026-05-18T04:31:36.003Z" }, + { url = "https://files.pythonhosted.org/packages/3c/11/d93632febc52fbc21be90231bb7c17fd5387f46c9076fd40a5f9c2ae6910/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b974946a10af379d425e2eef5b62f5c6ebeaccf91d45eaad6f5b27ecd4f91aa0", size = 571847, upload-time = "2026-05-18T04:31:10.862Z" }, + { url = "https://files.pythonhosted.org/packages/55/b4/383173e73aabb07ad1d9c7aa859d95437ac46a6d6a1e11005facda0c9d19/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86bc13c25a8d1fcd70b51d0ce7c9b65e90de5666fcbfd3e34957cc73ee19aeb5", size = 465974, upload-time = "2026-05-18T04:30:17.006Z" }, + { url = "https://files.pythonhosted.org/packages/a7/6c/89b1a230a78f57c52dd8893adb1f92f94411721b6ec12596c56d98c74356/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca148d73dea36c9763aaa351e4d7a51780ec1584217c45276f4fe8239c768b71", size = 454782, upload-time = "2026-05-18T04:30:35.656Z" }, + { url = "https://files.pythonhosted.org/packages/24/62/1732118367cfff0a9fce3bf62ff4bfded09ef5df21d9d446b858b3f70a96/watchfiles-1.2.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:c525543d91961c6955b2636b308569e84a1d1c5f5f2932041ab9ef46422f43e3", size = 465182, upload-time = "2026-05-18T04:30:20.846Z" }, + { url = "https://files.pythonhosted.org/packages/28/96/716f7e5f51339bf22963f3345f9f27d7f3b30e2eadc597e257c881dd3c53/watchfiles-1.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a204794696ffb8f9b10fba6f7cb5216d42f3b2b71860ccac6b6e42f5f10973b0", size = 629841, upload-time = "2026-05-18T04:31:05.397Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fe/c40783950fd771ccf66ab3ec2722d188a9af1c7f96c6e811f36e40c6e03f/watchfiles-1.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:10d86db20695afe7997ac9e1717637d6714a8d0220458c33f3d2061f54cec427", size = 658028, upload-time = "2026-05-18T04:31:48.22Z" }, + { url = "https://files.pythonhosted.org/packages/71/72/4508db1856d1d87fcbb3b63f4839bab1b5682cb0e8d224d122263c09654a/watchfiles-1.2.0-cp313-cp313-win32.whl", hash = "sha256:eb283ee99e21ad6443c8cdb06ac5b34b1308c329cbdf03fa02b445363714c799", size = 275183, upload-time = "2026-05-18T04:30:59.57Z" }, + { url = "https://files.pythonhosted.org/packages/f9/36/14b76ca57652e5cc5fd1c11f32a261292c08a0d19a00351013c2549cbfb2/watchfiles-1.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a0f27f01bee51861392bb6b7c4fdb290b27d1eb194e9e28788d68102a0e898d9", size = 288059, upload-time = "2026-05-18T04:32:07.937Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8d/0a85e395398d8d20fadfe5c5d32c726eee17a519e78fb356f2cf7531bffe/watchfiles-1.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:3651aa7058595e9cfb75d35dd5ada2bf9f48a5b8a0f3562821d3e210c507e077", size = 280186, upload-time = "2026-05-18T04:31:54.484Z" }, + { url = "https://files.pythonhosted.org/packages/37/68/36db056f1fdcc5f07302f56e631774d6835bcd6fa3ace402304621d5f9e5/watchfiles-1.2.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:faea288b6f0ab1902ef08f4ca6de005dccf856c4e0c4f21b8c5fce02d90a1b08", size = 399031, upload-time = "2026-05-18T04:30:44.576Z" }, + { url = "https://files.pythonhosted.org/packages/c1/64/01a9d6f66a82a5c101ce939274106cc72759d62427e153f01edd2b9f87c2/watchfiles-1.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01859b11fd9fbca670f4d5da00fbac282cfea9bd67a2125d8b2833a3b5617ea9", size = 391205, upload-time = "2026-05-18T04:30:25.413Z" }, + { url = "https://files.pythonhosted.org/packages/84/2c/0a44fe058cb4bb7b8ede6b6670698bbb7c0400740e378d00022189b7b31d/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fff610d7bb2256a317bb1e96f0d7862c7aa8076733ee5df0fd41bbe76a24a4f4", size = 451892, upload-time = "2026-05-18T04:32:14.005Z" }, + { url = "https://files.pythonhosted.org/packages/67/a1/351e0d56cd35e6488b5c8b4fb11a809a5bc923e8fe8fed9faf8920be0c89/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b141a4891c995a039cd89e9a49e62df1dc8a559a5d1a6e4c7106d16c12777a55", size = 458867, upload-time = "2026-05-18T04:31:22.279Z" }, + { url = "https://files.pythonhosted.org/packages/d5/7d/9d09605187f1b838998624049fcf8bf47b73c1a3b76901fcac1782f62277/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f22943b7770483f6ea0721c6b11d022947a98eb0acae14694de034f4d0d38925", size = 490217, upload-time = "2026-05-18T04:31:43.657Z" }, + { url = "https://files.pythonhosted.org/packages/60/5d/a17a16eccb182f04188cd308ec24b1a71a9b5c4e7098269cf35d9fa56d02/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1bc6195825b7dcd217968bb1f801a60fd4c16e8eeab5bedc7fe917d7d5995ab4", size = 571458, upload-time = "2026-05-18T04:32:11.875Z" }, + { url = "https://files.pythonhosted.org/packages/d3/3d/4dd457062083ab1938e5dfd45032eb425cee2ac817287ca8ff4356183e5d/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4a4b147f5dca2a5d325a06a832fb43f345751adfbc63204aec30e0d9ca965a2", size = 464707, upload-time = "2026-05-18T04:30:43.492Z" }, + { url = "https://files.pythonhosted.org/packages/c6/71/ea8c57b128f5383de74d0c7d2d9c57ad7c9a65a930c451bd25d524b295b7/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4543579a9bdb0c9560039b4ffddbdb39545707659fbc430ce4c10f3f68d557f9", size = 454663, upload-time = "2026-05-18T04:30:16.061Z" }, + { url = "https://files.pythonhosted.org/packages/53/fd/2e812bf938406d7db351f0703ddd3fc6c061cf30d96153a77bc79a943a44/watchfiles-1.2.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:20aa0e708b920bde876a4aa82dc7dd6ebea228a63a67cda6632c2fc87b787efa", size = 463537, upload-time = "2026-05-18T04:31:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/86/56/d17a7f1dd1bc3035f1072694a551301272f1739c2d8e319c927cb9e29b38/watchfiles-1.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:d413349d565dab74297f2a63e84a097936be69bf8f3b3801f27f380e32040f44", size = 629194, upload-time = "2026-05-18T04:31:14.141Z" }, + { url = "https://files.pythonhosted.org/packages/be/06/f1ff66bf5cae50aa4062779a0ecd0bbaf15e466195719074078947d9a17d/watchfiles-1.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:f28b2725eb8cce327b9b3ab02415c853011dc55c95832fe90de6bc56f5315f72", size = 656194, upload-time = "2026-05-18T04:31:47.14Z" }, + { url = "https://files.pythonhosted.org/packages/e7/54/a9c7ea9a82a4ac65e7004c0a03920b5cdd2f9c3b678757d9cd425aa51d53/watchfiles-1.2.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:b8c8358484d5fa12ef34f05b7f4168eaf1932f408725ff6d023c33ec17bd79d4", size = 400205, upload-time = "2026-05-18T04:32:05.153Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5d/c9ab3534374a4a67450696905d6ef16a04405448b8dc52bd752ae50423d4/watchfiles-1.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f04b092229ad2c50126dd3c922c8822e51e605993764a33058d4a791ab42281", size = 392508, upload-time = "2026-05-18T04:30:54.849Z" }, + { url = "https://files.pythonhosted.org/packages/26/ca/1ad30103535cf0cecd7b993e8d50edc5351b1820e38f2d22e3df58962feb/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a7ce236284f002a156f70add88efe5c70879cccbb658be0822c54b1306fc09d", size = 452448, upload-time = "2026-05-18T04:30:53.727Z" }, + { url = "https://files.pythonhosted.org/packages/37/a1/ceee2cdf2afbd715fa07758d39c9859513eae411b23196f7fd039e5feedd/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b9909cc2b48468b575eefa944919e1fe8a36c5849d5c7c168f80a8c1db69398e", size = 459605, upload-time = "2026-05-18T04:30:23.312Z" }, + { url = "https://files.pythonhosted.org/packages/e8/f6/421e30fd1cb3907a84ed92ab3f1983e37ba2dca015e9a894a048418417a2/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a37faaed405c67e28e6be45a1fa4f206ef5a2860f27c237db9fa30704c38242", size = 490757, upload-time = "2026-05-18T04:30:47.358Z" }, + { url = "https://files.pythonhosted.org/packages/41/b0/55ed1b97ed08be7bba6f9a541cac15f2a858e1d74d2b07b6da70a82aab00/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9649193aa27bd9ff2e80ff29bfaa93085496c7a3a377592823cc58b77ee88add", size = 568672, upload-time = "2026-05-18T04:30:38.915Z" }, + { url = "https://files.pythonhosted.org/packages/d1/cf/d8ae8a80dd7bafab395ea7681c10237311bbf34d37704a8c744e7cf31fc7/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e4ff8e37f99cf1da89e255e07c9c4b37c214038c4283707bdec308cb1b0ea1f", size = 464197, upload-time = "2026-05-18T04:30:09.914Z" }, + { url = "https://files.pythonhosted.org/packages/7c/8a/3076c496ca8dafe0e8cd03fcebdfc47be4b1174b4e5b24ff6e396e6b3af2/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:054dc20fd2e3132b4c3883b4a00d72fd6e1f56fdaf89fccd12e8057d74cd74d7", size = 453181, upload-time = "2026-05-18T04:30:14.829Z" }, + { url = "https://files.pythonhosted.org/packages/e5/10/9745e17c98e7b8a86454df0a3c7b5686bd650383f1e9f26e4ebcbd6cc0c0/watchfiles-1.2.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e140ed30ebde76796b686e67c182cff10ea2fbab186fafd1560f74bb5a473a6e", size = 465109, upload-time = "2026-05-18T04:30:28.123Z" }, + { url = "https://files.pythonhosted.org/packages/8f/95/8ef4a95481d3e0cb52d62a06fa6e972e81424be2d9698b91a2fecca9904c/watchfiles-1.2.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:bb7e52ecf68ba46d22df23467b87cffeb2146908aa523ebfe803019618cfda06", size = 630653, upload-time = "2026-05-18T04:31:49.304Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e4/3b3bf36b0f829b50c6ebcb8d031583863c59f923d6a6af3d485e470d0fac/watchfiles-1.2.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:23282a321c8baf9b3a3c4afff673f9fe65eb7fdc2338d765ccad9d3d1916a5ba", size = 657838, upload-time = "2026-05-18T04:31:06.497Z" }, + { url = "https://files.pythonhosted.org/packages/21/b1/6cbbb50c1f3002ab568777d44aa21206dfb8807a840990c4037523b51812/watchfiles-1.2.0-cp314-cp314-win32.whl", hash = "sha256:c0db965c5f79aa49fe672d297cf1febc5ad149b658594944f49a54a2b96270a7", size = 275108, upload-time = "2026-05-18T04:30:06.891Z" }, + { url = "https://files.pythonhosted.org/packages/92/45/190ce6db8dcb4536682cf75d3889ff1a27182a58cb519d343cb6d9ea63d8/watchfiles-1.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:71283b39fd17e5408eb123bd37aeecfd9d54c81fc184421943208aadb879d103", size = 288441, upload-time = "2026-05-18T04:32:12.901Z" }, + { url = "https://files.pythonhosted.org/packages/74/0d/3eae1c2313ab08378431d907c3f8095ecca00f3eda33111cf4f0f2591799/watchfiles-1.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:c5c19526f4e54a00f2666a6c0e9e40d582c09e865055ea7378bf0009aab857b3", size = 280684, upload-time = "2026-05-18T04:31:26.902Z" }, + { url = "https://files.pythonhosted.org/packages/b1/75/fb64e6c25d6b5ca636d03df34ffb1c6e9873303e76d27967e045f8df088f/watchfiles-1.2.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:d73a585accffa5ae39c17264c36ec3166d2fad7000c780f5ef83b2722afb9dd2", size = 398857, upload-time = "2026-05-18T04:32:17.108Z" }, + { url = "https://files.pythonhosted.org/packages/73/4e/9f7adf01754cbf81843722ccfec169d8f26c69778281a302855cecd2ee08/watchfiles-1.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ae99b14c5f21e026e0e9d96f40e07d8570ebee6cafd9d8fc318354606daa7a28", size = 392413, upload-time = "2026-05-18T04:31:07.911Z" }, + { url = "https://files.pythonhosted.org/packages/47/c8/bec626bcc2d69f44b9acb24ce7d60ed7b16b73628eea747fcbd169d8edda/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4429f3b105524a10b72c3a819b091c495d2811d419c1e1e8df773a5a5974f831", size = 452409, upload-time = "2026-05-18T04:31:20.142Z" }, + { url = "https://files.pythonhosted.org/packages/00/b7/b6362068e81e7c556d155a34c35d40ac3ef42d747b06d7f6e5bf58e359c2/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43d818978d06062d9b22c4fab2ebe44cf5213d42dc8e62bda8c2760cfa2eeb33", size = 458827, upload-time = "2026-05-18T04:32:06.219Z" }, + { url = "https://files.pythonhosted.org/packages/67/f8/9a813fa42afb1e0b4625e75f0479826644d3ee8dc287e093799bc01f390c/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9f732dc58b2dbe69e464ccf8fff7a03b0dd0be439da4c0720d3558527d3d6b4", size = 490104, upload-time = "2026-05-18T04:31:56.034Z" }, + { url = "https://files.pythonhosted.org/packages/2f/bf/27dfb6094ca4c9aad21298b5525b6c53cb36121ee454331d05161e58d130/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f200104103feb097de4cab8fe4f5dd18a2026934c7dea98c55a2f5fd6d5a33b", size = 571360, upload-time = "2026-05-18T04:31:57.133Z" }, + { url = "https://files.pythonhosted.org/packages/fb/39/44a096d67270ea93df91d33877dbe91fbda3aa4f8ec2edf799d93eda8736/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63ac26eefbf4af1741247d6fb68b11c49a25b2f7413fbd318a83a12aaa9cf666", size = 464644, upload-time = "2026-05-18T04:30:57.33Z" }, + { url = "https://files.pythonhosted.org/packages/0e/80/c7472203bad6268e3ef1ad260739704847898938ad7ea8b63a5131f46b50/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c4997d4e4a55f0d02b6cde327322daf3a0400e5df6c6b15948994bf72497925", size = 454771, upload-time = "2026-05-18T04:30:48.736Z" }, + { url = "https://files.pythonhosted.org/packages/51/cf/3b10b268b4b7f0fc26e9debb5eef1998b515887840f444cd3ec80c688755/watchfiles-1.2.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:4c887eba18b7945ac73067a8b4a66f21cd46c2539b2bc68588f7be6c7eb6d26b", size = 463494, upload-time = "2026-05-18T04:31:33.826Z" }, + { url = "https://files.pythonhosted.org/packages/3d/3e/a4302545cd589262a0dc7d140e86f7688eba3f9c72776c27f7e23b8864c4/watchfiles-1.2.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:3416ff151bb6b5a8d8d11664974fbef4d9305b9b2957839ab5a270468fd8df30", size = 629383, upload-time = "2026-05-18T04:31:15.596Z" }, + { url = "https://files.pythonhosted.org/packages/db/99/d5649df0a9a410d45b7c882304d0b790903ac9b6e8f2cfd12114e0c6b9f2/watchfiles-1.2.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:0e831a271c035d89789cffc386b6aa1375f39f1cd25eb7ca0997e4970d152fc5", size = 656093, upload-time = "2026-05-18T04:31:58.707Z" }, + { url = "https://files.pythonhosted.org/packages/92/b9/362702539275019a54dd2e94511b31a9b89c5f9e6a21966de7eb692549fc/watchfiles-1.2.0-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:37a6721cdf3f65dbb13aa9503510ccb4451603ac837e44d265d7992a597e1374", size = 400109, upload-time = "2026-05-18T04:31:16.879Z" }, + { url = "https://files.pythonhosted.org/packages/8f/75/71d5ba62db781e5587bded1d944c675374bc4aa37ff33d5018d98e8b6538/watchfiles-1.2.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2b37d10b5a63bd4d87e18472d80fa525bd670586fae62e5dd580452764879b65", size = 392167, upload-time = "2026-05-18T04:31:28.058Z" }, + { url = "https://files.pythonhosted.org/packages/3c/01/c66dd95d0423fe30d31820e2d1d5bda773764131bbb6ac0cb1cf303ac328/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a105bc2283f67e8fbec74253ec2d94925de92ed72c0393f1206bf326b7b7b69", size = 452372, upload-time = "2026-05-18T04:31:00.836Z" }, + { url = "https://files.pythonhosted.org/packages/91/15/2fe99557e72f85627c6a8eed50d889e8d101623e060a22ad75b875cb932d/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5327989a465505f05cfe06f04fa9d0c2fd5432bb243e10e6f012b1bdca3c8579", size = 459596, upload-time = "2026-05-18T04:31:34.96Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/d4acfa0023367428ed48351b3b9b267893037b6cadae55620c61c24bcfd4/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ecb47f183a8025b2aa18b546725c3657e542112ae9c0613a2af79b4fa8d04ad7", size = 490869, upload-time = "2026-05-18T04:31:59.923Z" }, + { url = "https://files.pythonhosted.org/packages/a4/5f/3164cbdce06c9fb95c4f7b9e2f9760b5e2797af43a9ecc317ef42a23a278/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8520a4ab0e37f770afc34459c4f8f7019e153f9124dc101c15538365875d1ab2", size = 571641, upload-time = "2026-05-18T04:32:00.948Z" }, + { url = "https://files.pythonhosted.org/packages/41/e6/85d3731c55e65cd7690f3f803d24c139588aaf863e4bf2148fe7a7fa1a19/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71cd71740ed2c15211ebb237ced4e39a1cdf6f80566e5fe95428da1626f4fde6", size = 464444, upload-time = "2026-05-18T04:30:34.298Z" }, + { url = "https://files.pythonhosted.org/packages/f4/7d/562641012b8b09872742c3b8adf9629ec479fd78f8d68ae4a0c13da8add6/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f88af53d6ddaf72179ef613ddc905e6f4785f712b49b80b3bef9f3525e6194b4", size = 453593, upload-time = "2026-05-18T04:31:23.464Z" }, + { url = "https://files.pythonhosted.org/packages/56/fe/cb8ef3d6f929d14158fdaaad9925985b7310abc9384dcd4d82dd0016fb59/watchfiles-1.2.0-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:cee9d5efd929efdac5f7e58f72b3376f676b64050a91c5b99a7094c5b2317488", size = 465096, upload-time = "2026-05-18T04:31:30.384Z" }, + { url = "https://files.pythonhosted.org/packages/25/91/80908e835e100527a9267147b08c0eee1fa6ab0ffec15edc04d1d44885f7/watchfiles-1.2.0-cp315-cp315-musllinux_1_1_aarch64.whl", hash = "sha256:b718bf356bbc15e559bd8ef41782b573b8ae0e3f177ab244b440568d7ea02cfb", size = 630638, upload-time = "2026-05-18T04:30:49.89Z" }, + { url = "https://files.pythonhosted.org/packages/46/4b/95ab2f256bb4af3cb2eb23b9317bda984ee6e0f11733a5c004a6c95b06e3/watchfiles-1.2.0-cp315-cp315-musllinux_1_1_x86_64.whl", hash = "sha256:922c0e019fe68b3ae392965a766b02a71ba1168c932cebc3733cd52c5fe5b377", size = 657684, upload-time = "2026-05-18T04:31:32.027Z" }, +] + +[[package]] +name = "websockets" +version = "16.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/f7/bc3a25c5ec26ce62ce487690becc2f3710bbc7b33338f005ad390db0b986/websockets-16.1.1.tar.gz", hash = "sha256:db234eda965dcce15df96bb9709f587cd87d4d52aaf0e80e2f34ec04c7670c57", size = 182204, upload-time = "2026-07-17T22:51:05.858Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/9d/681cda21c9eee743203a6cb79b9d3d05adad9aa60ec660c6c9bf4dd619ca/websockets-16.1.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:cc97814dfb786a83b6e2dc2e79351e1b83e6d715647d6887fcabd83026417a00", size = 179600, upload-time = "2026-07-17T22:49:13.92Z" }, + { url = "https://files.pythonhosted.org/packages/fb/8d/6195a88b45e8d2a8f745fc2046e36f885a3c9763e6767d2c46229bf9510c/websockets-16.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e047dc87ef7ca50f4d309bf775ad4a71711c58556d75d7bd0604b2317f43e94b", size = 177272, upload-time = "2026-07-17T22:49:15.453Z" }, + { url = "https://files.pythonhosted.org/packages/73/e3/fe2d498c64dea0095c9a9f9a351af4cd6eef31b618395582bc1f38ba45ff/websockets-16.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:01fbdcbac298efe19360b94bc0039c8f746f0220ba570f327577bfee81059175", size = 177542, upload-time = "2026-07-17T22:49:16.875Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ed/f1831681fce0e3242346e5458486003c5f124ed69e5e0b847fd029db4973/websockets-16.1.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0f62863e8a00a6d33c3d6566ec0b89f23787b747ffe0c3bc71ec0e76b82c94b1", size = 187137, upload-time = "2026-07-17T22:49:18.323Z" }, + { url = "https://files.pythonhosted.org/packages/6f/79/4ff9dcc1bb46f6b4c536936dde1fd60f9b564f3304307274db97f4c9496d/websockets-16.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8087e82f842609734c9b5a1330464f8e94e346ba0e18c832c08bafa4b0d63c15", size = 188374, upload-time = "2026-07-17T22:49:19.65Z" }, + { url = "https://files.pythonhosted.org/packages/62/c3/5c49b6efb36cab733d23773f6de575e1dba65736ead17d5d2b2a1daef779/websockets-16.1.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2bb5d041a8307d2e18782e7ce777f6fdb1e8c2f5d09291484b18c294b789d9aa", size = 191155, upload-time = "2026-07-17T22:49:21.331Z" }, + { url = "https://files.pythonhosted.org/packages/6e/f6/56ccceda3a4838d18f1d40821480da4775397e8b1eecf4031e20c50e2e90/websockets-16.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1db4de4a0e95673f7545d393c49eeb0c2f18ac1ef93073218c79d5cdb2ee75ab", size = 189011, upload-time = "2026-07-17T22:49:22.889Z" }, + { url = "https://files.pythonhosted.org/packages/86/d6/ad5286241a2bce1107e2798d3bfbd62cf79aee167bdb654f8cb1e9dbf949/websockets-16.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f17dbe07eb3ea7f99e4df9b7e0efefe80fbf30d37a8cc4d561a0aed310bc8847", size = 187766, upload-time = "2026-07-17T22:49:24.339Z" }, + { url = "https://files.pythonhosted.org/packages/bc/67/d65c970b7e347fdca69479beb7811c2060529956730a7a4e3ae7c66b0e31/websockets-16.1.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4b57693728576d84ede0a77987ab16881b783d2cd9f1dc180a8fbbc3f79c4428", size = 185173, upload-time = "2026-07-17T22:49:25.743Z" }, + { url = "https://files.pythonhosted.org/packages/1d/5b/14af3cd4ee69d8ea9baca58f3dc3cfb1ba78332a347fd478cb096549d60e/websockets-16.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2a636ff1e7a5c4edf71ef0e79adae7f25dba93b4fcbe3dc958733477ffeb0eaf", size = 187809, upload-time = "2026-07-17T22:49:27.147Z" }, + { url = "https://files.pythonhosted.org/packages/7b/11/be301710d70de97e3e7b3586e6d492c9c06d6a61bf1c2202c36cf0c75607/websockets-16.1.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d6bec75c290fe484a8ba4cacdf838501e17c06ecfbbf31eede81a9e431bd7751", size = 186412, upload-time = "2026-07-17T22:49:28.611Z" }, + { url = "https://files.pythonhosted.org/packages/db/07/fe1435bf6fe738a3d3b54dbe0c18dabf12cba4d909ac8b58b539ce27c1f4/websockets-16.1.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:54509b8e92fee4453e152b7558ddef37ce9705a044922f2095a6105e3f80c96f", size = 188290, upload-time = "2026-07-17T22:49:29.965Z" }, + { url = "https://files.pythonhosted.org/packages/8a/0a/81f394aff8efcbb01208c1ced77df0a3c7fcce584a88c7273663697946c2/websockets-16.1.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:f0aa4aad3b1b69ad3fd85a0fd0952ec64331c762bd77ec51cc814170873890b2", size = 185844, upload-time = "2026-07-17T22:49:31.447Z" }, + { url = "https://files.pythonhosted.org/packages/39/5c/dd485b995473f415510251fe9bd708f2d24458f439fce958daf8d66dc7c6/websockets-16.1.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:42290eb6db4ccaca7012656738214f8514082fb6fa40cdeb61bb9a471b52e383", size = 186823, upload-time = "2026-07-17T22:49:33.104Z" }, + { url = "https://files.pythonhosted.org/packages/9d/0b/f78de76ff446f1e66af12b43c48a35f31744de93cfdec2f4ea67d5d7bbf1/websockets-16.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:53260c8930da5771cec89439bff99c20c8cb03ddb9588b980697355a83cd4bd3", size = 187102, upload-time = "2026-07-17T22:49:34.616Z" }, + { url = "https://files.pythonhosted.org/packages/37/a1/4cf892007778eaf84ad162bfc98046e0ed89b63ac55949e3236626b2a23f/websockets-16.1.1-cp312-cp312-win32.whl", hash = "sha256:1d27fa8462ad6a1cb36206a3d0640b2333340def181fae11ed7f9adeaa5c0747", size = 179943, upload-time = "2026-07-17T22:49:36.213Z" }, + { url = "https://files.pythonhosted.org/packages/d9/de/6abe251d28c3a3f217096575400b27750b18e0b1d2fff3a2a239960fea07/websockets-16.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:b436f6ec4fc3a6b4237c84d3f83170ed2b40bb584222f0ac47a0c8a5921980c7", size = 180243, upload-time = "2026-07-17T22:49:37.626Z" }, + { url = "https://files.pythonhosted.org/packages/ce/fd/6ec6c6d2850aea25b1b2aa9901a016980bb87d01e89b3eb00470b1b5d471/websockets-16.1.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ab59169ace05dcb49a1d4118f0bde139557adf45091bd85747e36bf5de984dd1", size = 179587, upload-time = "2026-07-17T22:49:38.959Z" }, + { url = "https://files.pythonhosted.org/packages/5f/d8/1d299d2dd34087db39831a34cc645ef8a6f89d78efada6983093513cd81c/websockets-16.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5e3b7d601f6f84156b08cc4a5e541c2b50ad7b36cfc302b657a12477c904a5df", size = 177272, upload-time = "2026-07-17T22:49:40.293Z" }, + { url = "https://files.pythonhosted.org/packages/3d/86/0a70d3ae2f0f2256bb41302d9804dbca65d4360281e7feb3e1f94102ac46/websockets-16.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cd2ca96a082a36964aca83e992f72abeb61b7306c1a6cba4c7d06a7b93750cac", size = 177530, upload-time = "2026-07-17T22:49:41.786Z" }, + { url = "https://files.pythonhosted.org/packages/b5/c2/c676c69444d9db448b3f0a55a98dcc534affce0bce961d9d2f0b8499b10a/websockets-16.1.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f5d497865f05bb222cab7016c6034542e84e5f29f49c6fd3f4939cda7197b5b8", size = 187197, upload-time = "2026-07-17T22:49:43.658Z" }, + { url = "https://files.pythonhosted.org/packages/0b/13/88137fbaf726ebe29d62c1117fa11fa2bbb6209dc79d4ad738efbe36a2aa/websockets-16.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bae954c382e013d5ea5b190d2830526bfa45ad121c326da0049b8c769f185db6", size = 188433, upload-time = "2026-07-17T22:49:45.147Z" }, + { url = "https://files.pythonhosted.org/packages/01/6d/46c2f2ce6751cb26f39293e1ecbf8544cb01321397cd476c2756b98c216d/websockets-16.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e09f753a169951eb4f28c2c774f71069304f66e7277e0f5a2892423599cfa854", size = 189868, upload-time = "2026-07-17T22:49:46.581Z" }, + { url = "https://files.pythonhosted.org/packages/29/2b/170a9e8097636cfde4dc3c592b6e00b18a44a2f5407606d96ca542dd5838/websockets-16.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:024193f8551a2b0eafbdd160911012c4e6c228c28430c84433253299a9e42d6a", size = 189059, upload-time = "2026-07-17T22:49:47.972Z" }, + { url = "https://files.pythonhosted.org/packages/a7/48/f0d4ebc9ab4b473b8861b9e20fdb663d515d42f7befdf62cdb60fee7a1ec/websockets-16.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:aabe464bfd13bd25f4821faf111da6fefdc389f870265a53105580e45b0a2e49", size = 187814, upload-time = "2026-07-17T22:49:49.344Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ba/39a41d3ae8e72696a9492581900611c5a91e2b07563b0bcd2523adea9854/websockets-16.1.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a28fcbc9b6baf54a2e23f8655f308e4ccc6afdd7266f8fe7954f320dcda0f785", size = 185229, upload-time = "2026-07-17T22:49:50.787Z" }, + { url = "https://files.pythonhosted.org/packages/3c/36/ac15b604f850d1907f0a85ed721cefe47cd45034b3620069b829746cccbe/websockets-16.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:79eace538c6a97e96d0d03d4f9d314f9677f5ed85a8a984992ffd90b13cb8a56", size = 187874, upload-time = "2026-07-17T22:49:52.228Z" }, + { url = "https://files.pythonhosted.org/packages/a8/f3/3fbd5d71d59299c3770faa5884d4f45070236ca5a35ab3a61830812c409a/websockets-16.1.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:496af849a472b531f758dbd4d61338f5000538cb1a7b3d20d9d32a264517f509", size = 186469, upload-time = "2026-07-17T22:49:53.776Z" }, + { url = "https://files.pythonhosted.org/packages/b4/fc/dd90349bba58af2a53ef2ddd9c32716c81eb6d59a0687939fff561860878/websockets-16.1.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5283810d2646741a0d8da2aa733d6aefa0545809afccb2a5d105a26bc45125f1", size = 188347, upload-time = "2026-07-17T22:49:55.202Z" }, + { url = "https://files.pythonhosted.org/packages/4c/f3/f73ba86427682da59b78c11d77ba56d5b801c32e84afe79b274bbd6a9bb2/websockets-16.1.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:4e3b680b1e0a27457e727a0d572fd81dffa87b6dbf8b228ab57da64f7d85aead", size = 185903, upload-time = "2026-07-17T22:49:56.75Z" }, + { url = "https://files.pythonhosted.org/packages/34/7c/f95eb20e80104173b3a0a092291f89ea4047ef6e608e0a57ca06eb14eecb/websockets-16.1.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:69159730a823dde3ea8d08783e8d47ef135a6d7e8d44eb127e32b321c9db8e3e", size = 186855, upload-time = "2026-07-17T22:49:58.467Z" }, + { url = "https://files.pythonhosted.org/packages/b0/35/dd875b3e050ff232d60fa377707f890e369f74d134f1be32e8f68879747c/websockets-16.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ed5bb271084b46530ee2ddc0410537a9961152c5ccba2fc98c5276d992ccba87", size = 187140, upload-time = "2026-07-17T22:50:00.016Z" }, + { url = "https://files.pythonhosted.org/packages/e8/dc/5cbfcb41824502f6af93b8f3943a4d06c67c23c7d2e31eb18748c4a5b2a7/websockets-16.1.1-cp313-cp313-win32.whl", hash = "sha256:cfb70b4eb56cac4da0a83588f3ad50d46beb0690391082f3d4e2d488c70b68ea", size = 179928, upload-time = "2026-07-17T22:50:01.685Z" }, + { url = "https://files.pythonhosted.org/packages/b0/c1/71e5deb5b7f8f226997ab64908c184ac3105c0155ce2d486f318e5dd08a8/websockets-16.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:d9531d9cbeac99af6f038fb1bc351403531f7d634a2c2e10e2f7c854c6ed5b68", size = 180242, upload-time = "2026-07-17T22:50:03.117Z" }, + { url = "https://files.pythonhosted.org/packages/73/a2/ba78a164eeea4620df4a4df4bd2ed6017438c4655cc0f36f2c0bc0432355/websockets-16.1.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:443aefe96b7fdb132e2a70806cca1f2af49bb3f28e47abcd7c2e9dcf4d8fa1b8", size = 179635, upload-time = "2026-07-17T22:50:05.001Z" }, + { url = "https://files.pythonhosted.org/packages/b9/08/d26d7a7628cd4ac34cbbdb63ac80914ca842ed8e42938c40a53567806df3/websockets-16.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6456ff333092d509127d75a638cb411afae8ff17f092635015d1902efec8a293", size = 177320, upload-time = "2026-07-17T22:50:06.427Z" }, + { url = "https://files.pythonhosted.org/packages/0f/45/ebec83e6269536aa5932533c67b0af5c781f3e73fdbcd68672dcf43f4f44/websockets-16.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fce6c48559c86d1ac3632ccb1bebc7d5442fbe79bd9bb0e40379ee54be2a4051", size = 177544, upload-time = "2026-07-17T22:50:07.834Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d5/abc614d2297f6c1c3e01e61260364457a47c25cc1cf6a879038902bc6aa8/websockets-16.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:92b820d345f7a3fc7b8163949ee92df910f290c3fc517b3d5301c78065adafe1", size = 187270, upload-time = "2026-07-17T22:50:09.275Z" }, + { url = "https://files.pythonhosted.org/packages/52/71/4c99af3b87dff1b2927981f6876607d4acb45338c665242168d3982f7758/websockets-16.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a606d9c24035242a3e256e9d5b77ed9cd6bccfcb7cf993e5ca3c0f6f68fb6a7", size = 188509, upload-time = "2026-07-17T22:50:10.722Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b4/5c8ca14b0df7eb84ed0524165c5359150210140817a3312aee57bf62a1cf/websockets-16.1.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:414e596c75f74e0994084694189d7dc9229fb278e33064d6784b73ffbba3ca31", size = 189882, upload-time = "2026-07-17T22:50:12.293Z" }, + { url = "https://files.pythonhosted.org/packages/25/c1/bedfba9e70557129cb8083748d167bdcc01483dedf0f0df143676df05cbe/websockets-16.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:536676848fc5961aca9d20389951f59169508f765637a172403dc5434d722fa0", size = 189114, upload-time = "2026-07-17T22:50:13.789Z" }, + { url = "https://files.pythonhosted.org/packages/df/09/aa835b2787835aebd839114be5de51b797cb480b63ba42b26d34dfe147cb/websockets-16.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:97fd3a0e8b53efa41970ac1dff3d8cf0d2884cadeb4caaf95db7ad1526926ee3", size = 187861, upload-time = "2026-07-17T22:50:15.179Z" }, + { url = "https://files.pythonhosted.org/packages/20/26/f6408330694dbc9830857d9d23bc14ac4f6875127a480cfdda8d5ca21198/websockets-16.1.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7b1b19636af86a3c7995d4d028dbe376f39b4bf31541146f9c123582a6c94562", size = 185286, upload-time = "2026-07-17T22:50:16.741Z" }, + { url = "https://files.pythonhosted.org/packages/17/9a/e0675e70dd8a80762cf35bb18799d3f290a4890ffe6439bc51d222796083/websockets-16.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:41c8e77f17294c0ac18008a7309b99b34ee72247ef10b6dff4c3f8b5ac29896b", size = 187935, upload-time = "2026-07-17T22:50:18.213Z" }, + { url = "https://files.pythonhosted.org/packages/33/c1/3234cfb86afde01b81e9bddcc6e534c440975d60a13991259e833069ab3e/websockets-16.1.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:9f63bcef7f4b02b06b35fc01c93b96c43b5e88e1e8868676caacf493d5a31f3a", size = 186444, upload-time = "2026-07-17T22:50:19.67Z" }, + { url = "https://files.pythonhosted.org/packages/89/87/9c15206e1d778923d8daa9657de07aa62ea815e13448319c98458c37b281/websockets-16.1.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dab9eb87869da2d6ed3af3f3adf28414baae6ec9d4df355ffc18889132f3436c", size = 188409, upload-time = "2026-07-17T22:50:21.28Z" }, + { url = "https://files.pythonhosted.org/packages/f2/00/cf5de5c67676de2d3eef8b2a518f168f6796595447a5b7161ba0d012915c/websockets-16.1.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:43e3a9fdd7cbf7ba6040c31fae0faf84ca1474fef777c4e37912f1540f854499", size = 185958, upload-time = "2026-07-17T22:50:22.719Z" }, + { url = "https://files.pythonhosted.org/packages/62/c0/731b6ddede2e4136912ec4cff2cffbda35af73546be4762c3d7bd3bd79af/websockets-16.1.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:056ae37939ed7e9974f364f5864e76e49182622d8f9751ac1903c0d09b013985", size = 186911, upload-time = "2026-07-17T22:50:24.108Z" }, + { url = "https://files.pythonhosted.org/packages/8c/7f/39c634472c4469a24a7c09cecddffb08fac6d0e74f73881a94ee8a40a196/websockets-16.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a0eadbbf2c30f01efa58e1f110eb6fa293261f6b0b1aa38f7f48707107690af9", size = 187204, upload-time = "2026-07-17T22:50:25.548Z" }, + { url = "https://files.pythonhosted.org/packages/26/89/9667c256c256dafcc62d21328ce7a40067da857969b68ee9af375b0aaf72/websockets-16.1.1-cp314-cp314-win32.whl", hash = "sha256:195c978b065fa40910582464f99d6b15c8b314c68e0546549a55ed83f4735328", size = 179603, upload-time = "2026-07-17T22:50:27.086Z" }, + { url = "https://files.pythonhosted.org/packages/bd/dd/1c099d6c0fc5deb6b46ccdbb6981fdb4b12c917869cb3952408409dc18db/websockets-16.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:4e8d01cc3bcae7bbf8167f944aeafefed590fae5693552bba9794a9df68371cc", size = 179948, upload-time = "2026-07-17T22:50:28.521Z" }, + { url = "https://files.pythonhosted.org/packages/35/25/9956b2d5e0529d5d23924f21bba1440d4c5c88a562e4f08550871ffa97a7/websockets-16.1.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0ffd3031ea8bda8d61762e84220186105ba3b748b3c8da2ae4f7816fac03e573", size = 179963, upload-time = "2026-07-17T22:50:29.982Z" }, + { url = "https://files.pythonhosted.org/packages/17/06/55ffc976c488b6aee9ea05761ff7c4e88e7c1fd82818c8ca7b556ad2f90c/websockets-16.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:84a2cef8deffbd9ab8ee0ea546a2a6a7030c28f44e6cdd4547dbfeb489eb8999", size = 177497, upload-time = "2026-07-17T22:50:31.396Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e8/f7dac2e980bacc92bdc26cebae4ae4d50cae5380732c50980598fc0bbae4/websockets-16.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3df13f73af9b3b38ab1195eb299ecb67a4330c911c97ae04043ff74085728abe", size = 177698, upload-time = "2026-07-17T22:50:32.829Z" }, + { url = "https://files.pythonhosted.org/packages/b2/39/26762f734113e22da2b942c3aca85798e0c0405d64c256549540ff31e5a1/websockets-16.1.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23253dd5bcae3f9aaee0a1d30967a8dbd52e5d3cff93a2e5b84df57b77d4750d", size = 187561, upload-time = "2026-07-17T22:50:34.24Z" }, + { url = "https://files.pythonhosted.org/packages/11/94/c3f330851806b9b02138b774d593478323e73c99238681b4b93efe64e02d/websockets-16.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1c5705e314449e3308872fe084b8571ce078ee4fc55a98a769bdefe5917392", size = 188732, upload-time = "2026-07-17T22:50:36.088Z" }, + { url = "https://files.pythonhosted.org/packages/d1/f2/eb2c450f052de334ae33cf200ece6e87b0e14d186807074e4eb1cd2cdea2/websockets-16.1.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:69e52d175a0a7d1e13b4b67ad41c560b7d98e8c6f6126eb0bda496c784faf8c7", size = 190872, upload-time = "2026-07-17T22:50:38.008Z" }, + { url = "https://files.pythonhosted.org/packages/70/31/2ac8cecf3a74f7fed9132129fc3d90b3998a1554570c11a69b2a8c20332d/websockets-16.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1f79c89b5eb034d1722938a891916582f8f7f503f58ca22518a63c3f2cd18499", size = 189305, upload-time = "2026-07-17T22:50:39.53Z" }, + { url = "https://files.pythonhosted.org/packages/6a/cf/8ab19650d3c0d4562c92e70ab47c257c4aa5c6a713ed87fe63766b31fefc/websockets-16.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:39f2a024af5c345ffe8fcf1ee18c049c024c94df393bb09b044a6917c77bde43", size = 188033, upload-time = "2026-07-17T22:50:40.912Z" }, + { url = "https://files.pythonhosted.org/packages/66/d7/a49a38a6127a4acb134fb1912b215d900cc657605cff32445bf519f3acc4/websockets-16.1.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:952303a7318d4cbe1011400839bb2051c9f84fa0a35923267f5daba34b15d458", size = 185748, upload-time = "2026-07-17T22:50:42.559Z" }, + { url = "https://files.pythonhosted.org/packages/95/3e/ad1fa40388c7f2e0bb2c7930d0090b6c5498594bd1cdaec18864df3d9e97/websockets-16.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:249116b4a76063d930a46391ad56e135c286e4562a18309029fc2c73f4ed4c62", size = 188285, upload-time = "2026-07-17T22:50:43.974Z" }, + { url = "https://files.pythonhosted.org/packages/35/b8/d5db28ca264b9104f82196f92dc8843e35fd391f763d42e4ad358f5bc97e/websockets-16.1.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:61922544a0587a13fd3f53e4c0e5e606510c7b0d9d22c8444e5fae22a06b38cb", size = 186777, upload-time = "2026-07-17T22:50:45.474Z" }, + { url = "https://files.pythonhosted.org/packages/42/9c/726cb39d0cc43ae848dce4aa2acb04eecc6738b1264ec6d700bf6bcfb9f8/websockets-16.1.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:46dcaa042cd1de6c59e7d9269fa63ff7572b6df40510600b678f0826b3c7af51", size = 188682, upload-time = "2026-07-17T22:50:46.973Z" }, + { url = "https://files.pythonhosted.org/packages/be/c7/1168704de8c2dd483edabe4a22cbe4465dd8be8dd95561d214f9fe092871/websockets-16.1.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:38565aca3e01ea8734e578fb2118dade0ecb0250533f29e22b8d1a7a196cf4d0", size = 186377, upload-time = "2026-07-17T22:50:48.413Z" }, + { url = "https://files.pythonhosted.org/packages/ca/40/f9ff2d630ffce4e7dfea0b2288e1caf9ebbf9ff8a9ec9396136ce8b94935/websockets-16.1.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:42f599f4d48c7e1a3338fdaac3acd075be3b3cf02d4b274f3bf2767aedd3d217", size = 187148, upload-time = "2026-07-17T22:50:49.845Z" }, + { url = "https://files.pythonhosted.org/packages/b5/71/e177c8299f78d7cbe2d14df228643c10c70c0e86e108e092056bbcc16e46/websockets-16.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dcc04fedf83effaeb9cce98abc9469bb1b42ef85f03e01c8c1f4438ef7555737", size = 187578, upload-time = "2026-07-17T22:50:51.619Z" }, + { url = "https://files.pythonhosted.org/packages/49/b2/b6987faf330f5af5c787a2610124c2e8403d51724f9001ec4fff6311fe7a/websockets-16.1.1-cp314-cp314t-win32.whl", hash = "sha256:8483c2096363120eea8b07c06ae7304d520f686665fffd4811fad423930a65d7", size = 179729, upload-time = "2026-07-17T22:50:53.269Z" }, + { url = "https://files.pythonhosted.org/packages/a2/6e/fbac6ed878dd362fbad7d415fa4f84d38e3e33fed8cde45c64e783acf826/websockets-16.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:bcce07e23e5769375158f5efdcdafa8d5cd014b93c6683865b840ed65b96f231", size = 180072, upload-time = "2026-07-17T22:50:54.969Z" }, + { url = "https://files.pythonhosted.org/packages/be/4d/2d0d67834092e354d2b0498f014a41249a89556bc406cf86f3e1557bb463/websockets-16.1.1-py3-none-any.whl", hash = "sha256:6abbd3e82c731c8e531714466acd5d87b5e88ac3243465337ba71d68e23ae7e3", size = 173814, upload-time = "2026-07-17T22:51:04.184Z" }, +] diff --git a/mcp/ls-docs-mcp/.gitignore b/mcp/ls-docs-mcp/.gitignore new file mode 100644 index 0000000..696c042 --- /dev/null +++ b/mcp/ls-docs-mcp/.gitignore @@ -0,0 +1,4 @@ +.venv/ +__pycache__/ +*.pyc +.python-version diff --git a/mcp/ls-docs-mcp/README.md b/mcp/ls-docs-mcp/README.md new file mode 100644 index 0000000..6f0d67b --- /dev/null +++ b/mcp/ls-docs-mcp/README.md @@ -0,0 +1,42 @@ +# LS증권 OpenAPI Docs MCP + +LS증권 OpenAPI TR 스펙(`ls-openapi-spec.json`)을 **조회만** 하는 MCP입니다. +키움 `kiwoom-docs` / 한투 `kis-code-assistant`와 같은 역할(문서 검색)이며, +**실제 API 호출·주문·토큰 발급은 하지 않습니다.** + +## Tools + +| Tool | 용도 | +|------|------| +| `ls_api_stats` | TR 수·카테고리/프로토콜 분포 | +| `search_ls_api` | 이름/설명/필드 키워드 검색 (예: `분봉`, `t8412`, `조건검색`) | +| `get_ls_api` | trCode 상세(requestIo/responseIo/예제/docsUrl) | +| `list_ls_apis` | category·protocol·url 필터 목록 | + +## Cursor 등록 + +프로젝트 `.cursor/mcp.json`에 `ls-docs`로 등록합니다. +Cursor MCP 재로드 후 도구가 보입니다. + +```bash +cd /home/hoon/kis_bot/mcp/ls-docs-mcp +uv sync +uv run python server.py --stdio +``` + +## 데이터 갱신 + +공식 포털 공개 API에서 스펙을 받아 `data/ls-openapi-spec.json`을 만듭니다 +(REST 시세/주문 호출 아님 — 문서 메타만). + +```bash +cd /home/hoon/kis_bot/mcp/ls-docs-mcp +uv run python fetch_spec.py +# 로그: 표준출력. 약 1~3분 (TR~360 + 필드 조회, sleep 포함) +``` + +## 출처 + +- 그룹 목록: `GET https://openapi.ls-sec.co.kr/api/apis/public?size=500` +- TR 목록: `GET https://openapi.ls-sec.co.kr/api/apis/guide/tr/{apiId}` +- 필드: `GET https://openapi.ls-sec.co.kr/api/apis/guide/tr/property/{trId}` diff --git a/mcp/ls-docs-mcp/fetch_spec.py b/mcp/ls-docs-mcp/fetch_spec.py new file mode 100644 index 0000000..40081b3 --- /dev/null +++ b/mcp/ls-docs-mcp/fetch_spec.py @@ -0,0 +1,269 @@ +#!/usr/bin/env python3 +"""LS증권 OpenAPI 포털에서 TR 스펙을 수집해 data/ls-openapi-spec.json 을 만든다. + +실제 시세/주문 REST 호출이 아니다. 문서 메타(가이드)만 가져온다. +요청 간격은 포털 부하를 피하기 위해 sleep 한다. +""" + +from __future__ import annotations + +import argparse +import json +import os +import re +import sys +import time +import urllib.error +import urllib.request +from datetime import datetime, timezone +from typing import Any + +BASE = "https://openapi.ls-sec.co.kr" +# 포털 API 가이드 URL에 쓰이는 고정 group_id (apiservice 쿼리) +DEFAULT_DOCS_GROUP_ID = "73142d9f-1983-48d2-8543-89b75535d34c" +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +DEFAULT_OUT = os.path.join(SCRIPT_DIR, "data", "ls-openapi-spec.json") + +# propertyType 코드 → 짧은 타입 라벨 (문서 가독용) +TYPE_LABEL = { + "A0001": "string", + "A0003": "object", + "A0004": "number", + "A0005": "array", +} + + +def _http_get_json(url: str, timeout: float = 45.0) -> Any: + req = urllib.request.Request( + url, + headers={ + "Accept": "application/json", + "User-Agent": "kis_bot-ls-docs-mcp/0.1 (docs-fetch-only)", + }, + ) + with urllib.request.urlopen(req, timeout=timeout) as resp: + return json.loads(resp.read().decode("utf-8")) + + +def _strip_html(text: str) -> str: + if not text: + return "" + t = re.sub(r"", "\n", str(text), flags=re.I) + t = re.sub(r"<[^>]+>", "", t) + t = t.replace(" ", " ").replace("&", "&") + return t.strip() + + +def _clean_field_code(raw: str) -> str: + s = (raw or "").replace(" ", " ").strip() + s = re.sub(r"^\s*-\s*", "", s) + return s.strip() + + +def _category_from_group_name(name: str) -> str: + n = (name or "").strip() + if n.startswith("[") and "]" in n: + major = n[1 : n.index("]")] + minor = n[n.index("]") + 1 :].strip() + if minor: + return f"{major}_{minor}".replace(" ", "") + return major + return n or "기타" + + +def _parse_example(ex: Any) -> Any: + if ex is None: + return None + if isinstance(ex, (dict, list)): + return ex + if isinstance(ex, str): + s = ex.strip() + if not s: + return None + try: + return json.loads(s) + except Exception: + return s + return ex + + +def _normalize_props(props: list[dict[str, Any]], body_types: set[str]) -> list[dict[str, Any]]: + out: list[dict[str, Any]] = [] + for p in props: + if not isinstance(p, dict): + continue + bt = str(p.get("bodyType") or "") + if bt not in body_types: + continue + code = _clean_field_code(str(p.get("propertyCd") or "")) + if not code: + continue + ptype = str(p.get("propertyType") or "") + out.append( + { + "itemId": code, + "itemNm": _strip_html(str(p.get("propertyNm") or "")), + "type": TYPE_LABEL.get(ptype, ptype), + "length": p.get("propertyLength") or "", + "required": str(p.get("requireYn") or ""), + "order": str(p.get("propertyOrder") or ""), + "bodyType": bt, + "desc": _strip_html(str(p.get("description") or "")), + } + ) + out.sort(key=lambda x: (x.get("order") or "", x.get("itemId") or "")) + return out + + +def fetch_all(*, sleep_s: float, out_path: str, docs_group_id: str) -> dict[str, Any]: + list_url = f"{BASE}/api/apis/public?page=0&size=500" + print(f"[fetch] groups: {list_url}", flush=True) + groups = _http_get_json(list_url) + if not isinstance(groups, list): + raise RuntimeError("public API list is not a list") + print(f"[fetch] groups={len(groups)}", flush=True) + time.sleep(sleep_s) + + apis: dict[str, Any] = {} + dupes: list[str] = [] + errors: list[dict[str, str]] = [] + + for gi, g in enumerate(groups, 1): + if not isinstance(g, dict): + continue + group_id = str(g.get("id") or "").strip() + group_name = str(g.get("name") or "").strip() + access_url = str(g.get("accessUrl") or "").strip() + method = str(g.get("httpMethod") or "POST").strip() or "POST" + domain = str(g.get("domain") or f"{BASE}:8080").strip() + mock_domain = str(g.get("simulatedDomain") or "").strip() + protocol = str(g.get("protocolType") or "REST").strip() or "REST" + content_type = str(g.get("contentType") or "").strip() + description = _strip_html(str(g.get("description") or "")) + category = _category_from_group_name(group_name) + docs_url = ( + f"{BASE}/apiservice?group_id={docs_group_id}&api_id={group_id}" + if group_id + else "" + ) + + print(f"[fetch] ({gi}/{len(groups)}) {group_name} {group_id}", flush=True) + try: + trs = _http_get_json(f"{BASE}/api/apis/guide/tr/{group_id}") + except Exception as e: + errors.append({"group": group_name, "stage": "tr_list", "error": str(e)}) + print(f" ! tr_list fail: {e}", flush=True) + time.sleep(sleep_s) + continue + if not isinstance(trs, list): + errors.append({"group": group_name, "stage": "tr_list", "error": "not a list"}) + time.sleep(sleep_s) + continue + time.sleep(sleep_s) + + for tr in trs: + if not isinstance(tr, dict): + continue + tr_id = str(tr.get("id") or "").strip() + tr_code = str(tr.get("trCode") or "").strip() + tr_name = str(tr.get("trName") or "").strip() + if not tr_code: + continue + tps = str(tr.get("transactionPerSec") or "").strip() + + props: list[dict[str, Any]] = [] + if tr_id: + try: + raw_props = _http_get_json(f"{BASE}/api/apis/guide/tr/property/{tr_id}") + if isinstance(raw_props, list): + props = [x for x in raw_props if isinstance(x, dict)] + except Exception as e: + errors.append( + { + "group": group_name, + "tr": tr_code, + "stage": "property", + "error": str(e), + } + ) + print(f" ! property fail {tr_code}: {e}", flush=True) + time.sleep(sleep_s) + + entry = { + "apiId": tr_code, + "apiNm": tr_name or tr_code, + "trCode": tr_code, + "trName": tr_name, + "trId": tr_id, + "method": method, + "url": access_url, + "domain": domain, + "mockDomain": mock_domain, + "protocolType": protocol, + "format": "JSON", + "contentType": content_type, + "category": category, + "groupName": group_name, + "groupId": group_id, + "transactionPerSec": tps, + "docsUrl": docs_url, + "description": description, + "requestIo": _normalize_props(props, {"req_h", "req_b"}), + "responseIo": _normalize_props(props, {"res_h", "res_b"}), + "requestExample": _parse_example(tr.get("reqExample")), + "responseExample": _parse_example(tr.get("resExample")), + } + + store_id = tr_code + if store_id in apis: + # 동일 TR이 여러 그룹에 있으면 groupId로 구분 + alt = f"{tr_code}@{group_id[:8]}" + dupes.append(f"{tr_code} -> {alt} ({group_name})") + store_id = alt + entry["apiId"] = store_id + apis[store_id] = entry + print(f" + {tr_code} ({tr_name}) fields={len(props)}", flush=True) + + meta = { + "fetchedAt": datetime.now(timezone.utc).isoformat(), + "source": BASE, + "groupCount": len(groups), + "trCount": len(apis), + "docsGroupId": docs_group_id, + "duplicateKeys": dupes, + "errors": errors, + } + out = {"_meta": meta, **apis} + os.makedirs(os.path.dirname(out_path) or ".", exist_ok=True) + with open(out_path, "w", encoding="utf-8") as f: + json.dump(out, f, ensure_ascii=False, indent=2) + f.write("\n") + print(f"[done] wrote {out_path} trs={len(apis)} errors={len(errors)}", flush=True) + return meta + + +def main() -> int: + p = argparse.ArgumentParser(description="Fetch LS OpenAPI docs catalog") + p.add_argument("--out", default=DEFAULT_OUT, help="output JSON path") + p.add_argument( + "--sleep", + type=float, + default=float(os.environ.get("LS_DOCS_FETCH_SLEEP", "0.12")), + help="seconds between HTTP calls (default 0.12)", + ) + p.add_argument( + "--docs-group-id", + default=DEFAULT_DOCS_GROUP_ID, + help="apiservice group_id for docsUrl", + ) + args = p.parse_args() + try: + fetch_all(sleep_s=max(0.05, args.sleep), out_path=args.out, docs_group_id=args.docs_group_id) + except urllib.error.URLError as e: + print(f"FATAL: {e}", file=sys.stderr) + return 1 + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/mcp/ls-docs-mcp/pyproject.toml b/mcp/ls-docs-mcp/pyproject.toml new file mode 100644 index 0000000..512f3c1 --- /dev/null +++ b/mcp/ls-docs-mcp/pyproject.toml @@ -0,0 +1,9 @@ +[project] +name = "ls-docs-mcp" +version = "0.1.0" +description = "LS증권 OpenAPI TR 스펙 조회 전용 MCP (호출 없음, 문서 검색만)" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [ + "fastmcp>=2.11.3", +] diff --git a/mcp/ls-docs-mcp/server.py b/mcp/ls-docs-mcp/server.py new file mode 100644 index 0000000..e4545f5 --- /dev/null +++ b/mcp/ls-docs-mcp/server.py @@ -0,0 +1,417 @@ +"""LS증권 OpenAPI TR 스펙 조회 전용 MCP. + +키움 kiwoom-docs-mcp / 한투 kis-code-assistant 와 같이 문서를 정확히 찾아주는 용도. +실제 REST/WS 호출·주문·토큰 발급은 절대 하지 않는다. +""" + +from __future__ import annotations + +import json +import os +import re +import sys +from functools import lru_cache +from typing import Any, Optional + +from fastmcp import FastMCP + +VERSION = "0.1.0" +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +DEFAULT_SPEC = os.path.join(SCRIPT_DIR, "data", "ls-openapi-spec.json") + +HEADERISH = { + "content-type", + "authorization", + "tr_cd", + "tr_cont", + "tr_cont_key", + "mac_address", +} + + +def _strip_html(text: str) -> str: + if not text: + return "" + t = re.sub(r"", "\n", str(text), flags=re.I) + t = re.sub(r"<[^>]+>", "", t) + t = t.replace(" ", " ").replace("&", "&") + return t.strip() + + +def _parse_example(ex: Any) -> Any: + if ex is None: + return None + if isinstance(ex, (dict, list)): + return ex + if isinstance(ex, str): + s = ex.strip() + if not s: + return None + try: + return json.loads(s) + except Exception: + return s + return ex + + +def _category_for(api: dict[str, Any]) -> str: + return str(api.get("category") or "기타") + + +class LSSpecIndex: + """LS OpenAPI TR 카탈로그 인덱스 (읽기 전용).""" + + MAX_SEARCH = 20 + + def __init__(self, path: str) -> None: + self.path = path + self.apis: dict[str, dict[str, Any]] = {} + self._by_lower: dict[str, list[str]] = {} + self.meta: dict[str, Any] = {} + self._load(path) + + def _load(self, path: str) -> None: + with open(path, "r", encoding="utf-8") as f: + raw = json.load(f) + if not isinstance(raw, dict): + raise ValueError("spec root must be object") + for key, val in raw.items(): + if key == "_meta" and isinstance(val, dict): + self.meta = val + continue + if not isinstance(val, dict): + continue + api_id = str(val.get("apiId") or val.get("trCode") or key).strip() + if not api_id: + continue + store_id = api_id + if store_id in self.apis and self.apis[store_id] is not val: + store_id = str(key).strip() or api_id + self.apis[store_id] = val + for alias in { + api_id, + str(val.get("trCode") or ""), + str(key), + }: + a = alias.strip() + if not a: + continue + self._by_lower.setdefault(a.lower(), []) + if store_id not in self._by_lower[a.lower()]: + self._by_lower[a.lower()].append(store_id) + + def stats(self) -> dict[str, Any]: + by_cat: dict[str, int] = {} + by_proto: dict[str, int] = {} + by_group: dict[str, int] = {} + for api in self.apis.values(): + cat = _category_for(api) + by_cat[cat] = by_cat.get(cat, 0) + 1 + proto = str(api.get("protocolType") or "?") + by_proto[proto] = by_proto.get(proto, 0) + 1 + gn = str(api.get("groupName") or "?") + by_group[gn] = by_group.get(gn, 0) + 1 + return { + "api_count": len(self.apis), + "by_category": dict(sorted(by_cat.items(), key=lambda x: (-x[1], x[0]))), + "by_protocol": dict(sorted(by_proto.items(), key=lambda x: (-x[1], x[0]))), + "by_group": dict(sorted(by_group.items(), key=lambda x: (-x[1], x[0]))), + "spec_path": self.path, + "fetched_at": self.meta.get("fetchedAt"), + "source": self.meta.get("source"), + } + + def _summary(self, api: dict[str, Any]) -> dict[str, Any]: + return { + "apiId": api.get("apiId") or api.get("trCode"), + "trCode": api.get("trCode"), + "apiNm": api.get("apiNm") or api.get("trName"), + "method": api.get("method"), + "url": api.get("url"), + "domain": api.get("domain"), + "mockDomain": api.get("mockDomain"), + "protocolType": api.get("protocolType"), + "category": _category_for(api), + "groupName": api.get("groupName"), + "transactionPerSec": api.get("transactionPerSec"), + "docsUrl": api.get("docsUrl"), + "description": _strip_html(api.get("description") or ""), + } + + def _filter_io( + self, + rows: Any, + *, + body_fields_only: bool, + ) -> list[dict[str, Any]]: + if not isinstance(rows, list): + return [] + out: list[dict[str, Any]] = [] + for it in rows: + if not isinstance(it, dict): + continue + item_id = str(it.get("itemId") or "") + bt = str(it.get("bodyType") or "") + if body_fields_only: + if bt in {"req_h", "res_h"}: + continue + if item_id.lower() in HEADERISH: + continue + out.append( + { + "itemId": item_id, + "itemNm": it.get("itemNm") or "", + "type": it.get("type") or "", + "length": it.get("length") or "", + "required": it.get("required") or "", + "order": it.get("order") or "", + "bodyType": bt, + "desc": _strip_html(it.get("desc") or ""), + } + ) + return out + + def _detail( + self, + api: dict[str, Any], + *, + include_examples: bool = True, + body_fields_only: bool = False, + ) -> dict[str, Any]: + out = self._summary(api) + out.update( + { + "format": api.get("format"), + "contentType": api.get("contentType"), + "trId": api.get("trId"), + "groupId": api.get("groupId"), + "requestIo": self._filter_io( + api.get("requestIo"), body_fields_only=body_fields_only + ), + "responseIo": self._filter_io( + api.get("responseIo"), body_fields_only=body_fields_only + ), + } + ) + if include_examples: + out["requestExample"] = _parse_example(api.get("requestExample")) + out["responseExample"] = _parse_example(api.get("responseExample")) + return out + + def get(self, api_id: str, **kwargs: Any) -> dict[str, Any]: + raw = (api_id or "").strip() + if not raw: + return {"status": "error", "message": "api_id (trCode) required"} + api = self.apis.get(raw) + matches = self._by_lower.get(raw.lower(), []) + if api is None and len(matches) == 1: + api = self.apis.get(matches[0]) + elif api is None and len(matches) > 1: + return { + "status": "ambiguous", + "message": f"multiple trCode match: {raw}", + "candidates": matches, + "apis": [self._summary(self.apis[m]) for m in matches if m in self.apis], + } + if not api: + hints = [k for k in self.apis if raw.lower() in k.lower()][:8] + return { + "status": "not_found", + "message": f"trCode not found: {api_id}", + "candidates": hints, + } + return {"status": "success", "api": self._detail(api, **kwargs)} + + def list_apis( + self, + *, + category: Optional[str] = None, + protocol: Optional[str] = None, + url_contains: Optional[str] = None, + group_contains: Optional[str] = None, + limit: int = 100, + ) -> dict[str, Any]: + limit = max(1, min(int(limit or 100), 400)) + rows: list[dict[str, Any]] = [] + cat = (category or "").strip() + proto = (protocol or "").strip().upper() + url_q = (url_contains or "").strip().lower() + grp_q = (group_contains or "").strip().lower() + for api in self.apis.values(): + if cat and cat not in _category_for(api) and _category_for(api) != cat: + continue + if proto and str(api.get("protocolType") or "").upper() != proto: + continue + if url_q and url_q not in str(api.get("url") or "").lower(): + continue + if grp_q and grp_q not in str(api.get("groupName") or "").lower(): + continue + rows.append(self._summary(api)) + rows.sort(key=lambda x: str(x.get("trCode") or x.get("apiId") or "")) + total = len(rows) + return { + "status": "success", + "total_count": total, + "showing": min(total, limit), + "results": rows[:limit], + } + + def search(self, query: str, limit: Optional[int] = None) -> dict[str, Any]: + q = (query or "").strip() + if not q: + return {"status": "error", "message": "query required", "total_count": 0, "results": []} + lim = max(1, min(int(limit or self.MAX_SEARCH), 50)) + q_lower = q.lower() + tokens = [t for t in re.split(r"\s+", q_lower) if t] + + scored: list[tuple[int, dict[str, Any]]] = [] + for api in self.apis.values(): + aid = str(api.get("trCode") or api.get("apiId") or "") + anm = str(api.get("apiNm") or api.get("trName") or "") + desc = _strip_html(api.get("description") or "") + url = str(api.get("url") or "") + cat = _category_for(api) + group = str(api.get("groupName") or "") + field_blob = " ".join( + f"{x.get('itemId','')} {x.get('itemNm','')} {x.get('desc','')}" + for x in (api.get("requestIo") or []) + (api.get("responseIo") or []) + if isinstance(x, dict) + ) + hay = f"{aid} {anm} {desc} {url} {cat} {group} {field_blob}".lower() + + score = 0 + if q_lower == aid.lower(): + score += 100 + elif aid.lower().startswith(q_lower): + score += 60 + elif q_lower in aid.lower(): + score += 40 + if q_lower in anm.lower(): + score += 35 + if q_lower in desc.lower(): + score += 15 + if q_lower in url.lower(): + score += 20 + if q_lower in cat.lower() or q_lower in group.lower(): + score += 12 + if tokens and all(t in hay for t in tokens): + score += 25 + 5 * len(tokens) + elif tokens: + hit = sum(1 for t in tokens if t in hay) + if hit: + score += hit * 8 + else: + continue + elif score == 0: + continue + scored.append((score, self._summary(api))) + + scored.sort(key=lambda x: (-x[0], str(x[1].get("trCode") or ""))) + results = [row for _, row in scored[:lim]] + if not results: + return { + "status": "no_results", + "message": f"No APIs matched: {query}", + "total_count": 0, + "results": [], + } + return { + "status": "success", + "message": f"Found {len(scored)} (showing {len(results)})", + "total_count": len(scored), + "results": results, + } + + +@lru_cache(maxsize=1) +def get_index() -> LSSpecIndex: + path = os.environ.get("LS_SPEC_PATH") or DEFAULT_SPEC + return LSSpecIndex(path) + + +mcp = FastMCP( + name="ls-docs-mcp", + version=VERSION, + instructions=( + "LS증권 OpenAPI TR 스펙 조회 전용 MCP다. " + "사용자가 LS TR 코드(t8412, US3, g3101…), URL, 요청/응답 필드를 물을 때 " + "반드시 이 도구로 스펙을 확인한 뒤 답하라. " + "이 MCP는 실제 API를 호출하지 않는다. 주문/체결/토큰 발급을 수행하지 않는다." + ), +) + + +@mcp.tool( + name="ls_api_stats", + description="LS OpenAPI 스펙 요약(총 TR 수, 카테고리/프로토콜/그룹 분포). 탐색 시작 시 사용.", +) +def ls_api_stats() -> dict[str, Any]: + return {"status": "success", **get_index().stats()} + + +@mcp.tool( + name="search_ls_api", + description=( + "LS OpenAPI TR을 자연어/키워드로 검색한다. " + "예: '분봉', 't8412', '조건검색', '해외차트', '호가', 'US3'. " + "결과는 요약만 반환하므로, 상세 필드는 get_ls_api(tr_code)를 이어서 호출하라." + ), +) +def search_ls_api(query: str, limit: int = 20) -> dict[str, Any]: + return get_index().search(query, limit=limit) + + +@mcp.tool( + name="get_ls_api", + description=( + "trCode(예: t8412, t1101, US3, g3203)로 LS TR 전체 스펙을 반환한다. " + "method/url/domain/requestIo/responseIo/예제/docsUrl 포함. " + "body_fields_only=true 이면 공통 헤더(content-type, authorization, tr_cd…)를 제외한다." + ), +) +def get_ls_api( + tr_code: str, + include_examples: bool = True, + body_fields_only: bool = False, +) -> dict[str, Any]: + return get_index().get( + tr_code, + include_examples=include_examples, + body_fields_only=body_fields_only, + ) + + +@mcp.tool( + name="list_ls_apis", + description=( + "LS TR 목록. category(주식_차트 등), protocol(REST|WEBSOCKET), " + "url_contains(/stock/chart), group_contains(실시간)로 필터. " + "카테고리 목록은 ls_api_stats 참고." + ), +) +def list_ls_apis( + category: str = "", + protocol: str = "", + url_contains: str = "", + group_contains: str = "", + limit: int = 100, +) -> dict[str, Any]: + return get_index().list_apis( + category=category or None, + protocol=protocol or None, + url_contains=url_contains or None, + group_contains=group_contains or None, + limit=limit, + ) + + +def main() -> None: + if "--http" in sys.argv: + port = int(os.environ.get("PORT", "8083")) + mcp.run(transport="http", host="127.0.0.1", port=port) + return + mcp.run(transport="stdio") + + +if __name__ == "__main__": + main() diff --git a/mcp/ls-docs-mcp/uv.lock b/mcp/ls-docs-mcp/uv.lock new file mode 100644 index 0000000..a6df23b --- /dev/null +++ b/mcp/ls-docs-mcp/uv.lock @@ -0,0 +1,1341 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform != 'win32'", + "python_full_version < '3.14' and sys_platform == 'win32'", + "python_full_version < '3.14' and sys_platform != 'win32'", +] + +[[package]] +name = "aiofile" +version = "3.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "caio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/41/2fea7e193e061ce54eacc3b7bc0e6a99e4fcff43c78cf0a76dd781ed8334/aiofile-3.11.1.tar.gz", hash = "sha256:1f91912c6643d2a4e49ca4ae3514f0bf3867ce948a36d99a6411b8f4755f4cf9", size = 19342, upload-time = "2026-05-16T08:18:33.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/cd/0d76dfc5de72bde52f55f53e925c7d152d9c7906634ec1e0cbc7e8d4ad93/aiofile-3.11.1-py3-none-any.whl", hash = "sha256:ce77d14ac07f77bc2b757834a5c129321f3f705c474593deed5ab209079a52c9", size = 20446, upload-time = "2026-05-16T08:18:32.051Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "anyio" +version = "4.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/cc/a381afa6efea9f496eff839d4a6a1aed3bfafc7b3ab4b0d1b243a12573dd/anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f", size = 260176, upload-time = "2026-07-12T20:29:07.082Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "authlib" +version = "1.7.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "joserfc" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/36/98/7d93f30d029643c0275dbc0bd6d5a6f670661ee6c9a94d93af7ab4887600/authlib-1.7.2.tar.gz", hash = "sha256:2cea25fefcd4e7173bdf1372c0afc265c8034b23a8cd5dcb6a9164b826c64231", size = 176511, upload-time = "2026-05-06T08:10:23.116Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/95/adcb68e20c34162e9135f370d6e31737719c2b6f94bc953fe7ed1f10fe21/authlib-1.7.2-py2.py3-none-any.whl", hash = "sha256:3e1faedc9d87e7d56a164eca3ccb6ace0d61b94abe83e92242f8dc8bba9b4a9f", size = 259548, upload-time = "2026-05-06T08:10:21.436Z" }, +] + +[[package]] +name = "beartype" +version = "0.22.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/94/1009e248bbfbab11397abca7193bea6626806be9a327d399810d523a07cb/beartype-0.22.9.tar.gz", hash = "sha256:8f82b54aa723a2848a56008d18875f91c1db02c32ef6a62319a002e3e25a975f", size = 1608866, upload-time = "2025-12-13T06:50:30.72Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/cc/18245721fa7747065ab478316c7fea7c74777d07f37ae60db2e84f8172e8/beartype-0.22.9-py3-none-any.whl", hash = "sha256:d16c9bbc61ea14637596c5f6fbff2ee99cbe3573e46a716401734ef50c3060c2", size = 1333658, upload-time = "2025-12-13T06:50:28.266Z" }, +] + +[[package]] +name = "cachetools" +version = "7.1.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/87/23/635f22bbd6478b02672432656a5f46775768e24b2715c2e8658b3d210602/cachetools-7.1.5.tar.gz", hash = "sha256:0def7134eba79e59448edaf5d2e3cc8e49978ab2fd56189c1efd19856b134ab5", size = 40500, upload-time = "2026-07-22T23:51:31.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/9b/8bd3cf22c5559a39e905b4884f773768f849091d91e374212d5a9ab66cd7/cachetools-7.1.5-py3-none-any.whl", hash = "sha256:900cda61ff34fafca2b7f78cfd2a91e2d4f9655c19309ef542ce0a04f91e6cd9", size = 16963, upload-time = "2026-07-22T23:51:30.279Z" }, +] + +[[package]] +name = "caio" +version = "0.9.25" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/92/88/b8527e1b00c1811db339a1df8bd1ae49d146fcea9d6a5c40e3a80aaeb38d/caio-0.9.25.tar.gz", hash = "sha256:16498e7f81d1d0f5a4c0ad3f2540e65fe25691376e0a5bd367f558067113ed10", size = 26781, upload-time = "2025-12-26T15:21:36.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/25/79c98ebe12df31548ba4eaf44db11b7cad6b3e7b4203718335620939083c/caio-0.9.25-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:fb7ff95af4c31ad3f03179149aab61097a71fd85e05f89b4786de0359dffd044", size = 36983, upload-time = "2025-12-26T15:21:36.075Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2b/21288691f16d479945968a0a4f2856818c1c5be56881d51d4dac9b255d26/caio-0.9.25-cp312-cp312-manylinux2010_x86_64.manylinux2014_x86_64.manylinux_2_12_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:97084e4e30dfa598449d874c4d8e0c8d5ea17d2f752ef5e48e150ff9d240cd64", size = 82012, upload-time = "2025-12-26T15:22:20.983Z" }, + { url = "https://files.pythonhosted.org/packages/03/c4/8a1b580875303500a9c12b9e0af58cb82e47f5bcf888c2457742a138273c/caio-0.9.25-cp312-cp312-manylinux_2_34_aarch64.whl", hash = "sha256:4fa69eba47e0f041b9d4f336e2ad40740681c43e686b18b191b6c5f4c5544bfb", size = 81502, upload-time = "2026-03-04T22:08:22.381Z" }, + { url = "https://files.pythonhosted.org/packages/d1/1c/0fe770b8ffc8362c48134d1592d653a81a3d8748d764bec33864db36319d/caio-0.9.25-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:6bebf6f079f1341d19f7386db9b8b1f07e8cc15ae13bfdaff573371ba0575d69", size = 80200, upload-time = "2026-03-04T22:08:23.382Z" }, + { url = "https://files.pythonhosted.org/packages/31/57/5e6ff127e6f62c9f15d989560435c642144aa4210882f9494204bc892305/caio-0.9.25-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d6c2a3411af97762a2b03840c3cec2f7f728921ff8adda53d7ea2315a8563451", size = 36979, upload-time = "2025-12-26T15:21:35.484Z" }, + { url = "https://files.pythonhosted.org/packages/a3/9f/f21af50e72117eb528c422d4276cbac11fb941b1b812b182e0a9c70d19c5/caio-0.9.25-cp313-cp313-manylinux2010_x86_64.manylinux2014_x86_64.manylinux_2_12_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0998210a4d5cd5cb565b32ccfe4e53d67303f868a76f212e002a8554692870e6", size = 81900, upload-time = "2025-12-26T15:22:21.919Z" }, + { url = "https://files.pythonhosted.org/packages/9c/12/c39ae2a4037cb10ad5eb3578eb4d5f8c1a2575c62bba675f3406b7ef0824/caio-0.9.25-cp313-cp313-manylinux_2_34_aarch64.whl", hash = "sha256:1a177d4777141b96f175fe2c37a3d96dec7911ed9ad5f02bac38aaa1c936611f", size = 81523, upload-time = "2026-03-04T22:08:25.187Z" }, + { url = "https://files.pythonhosted.org/packages/22/59/f8f2e950eb4f1a5a3883e198dca514b9d475415cb6cd7b78b9213a0dd45a/caio-0.9.25-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:9ed3cfb28c0e99fec5e208c934e5c157d0866aa9c32aa4dc5e9b6034af6286b7", size = 80243, upload-time = "2026-03-04T22:08:26.449Z" }, + { url = "https://files.pythonhosted.org/packages/69/ca/a08fdc7efdcc24e6a6131a93c85be1f204d41c58f474c42b0670af8c016b/caio-0.9.25-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fab6078b9348e883c80a5e14b382e6ad6aabbc4429ca034e76e730cf464269db", size = 36978, upload-time = "2025-12-26T15:21:41.055Z" }, + { url = "https://files.pythonhosted.org/packages/5e/6c/d4d24f65e690213c097174d26eda6831f45f4734d9d036d81790a27e7b78/caio-0.9.25-cp314-cp314-manylinux2010_x86_64.manylinux2014_x86_64.manylinux_2_12_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:44a6b58e52d488c75cfaa5ecaa404b2b41cc965e6c417e03251e868ecd5b6d77", size = 81832, upload-time = "2025-12-26T15:22:22.757Z" }, + { url = "https://files.pythonhosted.org/packages/87/a4/e534cf7d2d0e8d880e25dd61e8d921ffcfe15bd696734589826f5a2df727/caio-0.9.25-cp314-cp314-manylinux_2_34_aarch64.whl", hash = "sha256:628a630eb7fb22381dd8e3c8ab7f59e854b9c806639811fc3f4310c6bd711d79", size = 81565, upload-time = "2026-03-04T22:08:27.483Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ed/bf81aeac1d290017e5e5ac3e880fd56ee15e50a6d0353986799d1bc5cfd5/caio-0.9.25-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:0ba16aa605ccb174665357fc729cf500679c2d94d5f1458a6f0d5ca48f2060a7", size = 80071, upload-time = "2026-03-04T22:08:28.751Z" }, + { url = "https://files.pythonhosted.org/packages/86/93/1f76c8d1bafe3b0614e06b2195784a3765bbf7b0a067661af9e2dd47fc33/caio-0.9.25-py3-none-any.whl", hash = "sha256:06c0bb02d6b929119b1cfbe1ca403c768b2013a369e2db46bfa2a5761cf82e40", size = 19087, upload-time = "2025-12-26T15:22:00.221Z" }, +] + +[[package]] +name = "certifi" +version = "2026.7.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, +] + +[[package]] +name = "cffi" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/5f/ff100cae70ebe9d8df1c01a00e510e45d9adb5c1fdda84791b199141de97/cffi-2.1.0.tar.gz", hash = "sha256:efc1cdd798b1aaf39b4610bba7aad28c9bea9b910f25c784ccf9ec1fa719d1f9", size = 531036, upload-time = "2026-07-06T21:34:30.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/85/990925db5df586ec90beb97529c853497e7f85ba0234830447faf41c3057/cffi-2.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:df2b82571a1b30f58a87bf4e5a9e78d2b1eff6c6ce8fd3aa3757221f93f0863f", size = 184829, upload-time = "2026-07-06T21:32:44.324Z" }, + { url = "https://files.pythonhosted.org/packages/4b/92/e7bb136ad6b5352603732cf907ef862ca103f20f2031c1735a46300c20c9/cffi-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78474632761faa0fb96f30b1c928c84ebcf68713cbb80d15bab09dfe61640fde", size = 184728, upload-time = "2026-07-06T21:32:45.683Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c0/d1ec30ffb370f748f2fb54425972bfef9871e0132e82fb589c46b6676049/cffi-2.1.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5972433ad71a9e46516584ef60a0fda12d9dc459938d1539c3ddecf9bdc1368d", size = 214815, upload-time = "2026-07-06T21:32:48.557Z" }, + { url = "https://files.pythonhosted.org/packages/1b/dc/5620cf930688be01f2d673804291de757a934c90b946dbdc3d84130c2ea4/cffi-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6422532152adf4e59b110cb2808cee7a033800952f5c036b4af047ee43199e7", size = 222429, upload-time = "2026-07-06T21:32:49.848Z" }, + { url = "https://files.pythonhosted.org/packages/4b/a4/77b53abbf7a1e0beb9637edbef2a94d15f9c822f591e85d439ffd91519a6/cffi-2.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:46b1c8db8f6122420f32d02fffb924c2fe9bc772d228c7c711748fff56aabb2b", size = 210315, upload-time = "2026-07-06T21:32:51.221Z" }, + { url = "https://files.pythonhosted.org/packages/58/0c/f528df19cc94b675087324d4760d9e6d5bfae97d6217aa4fac43de4f5fcc/cffi-2.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9fafc5aa2e2a39aaf7f8cc0c1f044a9b07fca12e558dca53a3cc5c654ad67a7", size = 208859, upload-time = "2026-07-06T21:32:52.512Z" }, + { url = "https://files.pythonhosted.org/packages/62/f2/c9522a81c32132799a1972c39f5c5f8b4c8b9f00488a23feaa6c06f07741/cffi-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e9f50d192a3e525b15a75ab5114e442d83d657b7ec29182a991bc9a88fd3a66", size = 221844, upload-time = "2026-07-06T21:32:53.704Z" }, + { url = "https://files.pythonhosted.org/packages/6e/28/bd53988b9833e8f8ad539d26f4c07a6b3f6bcb1e9e02e7ca038250b3428d/cffi-2.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98fff996e983a36d3aa2eca83af40c5821202e7e6f32d13ae94e3d2286f10cfe", size = 225287, upload-time = "2026-07-06T21:32:54.907Z" }, + { url = "https://files.pythonhosted.org/packages/79/99/0d0fd37f055224085f42bbb2c022d002e17dde4a97972822327b07d84101/cffi-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:379de10ce1ba048b1448599d1b37b24caee16309d1ac98d3982fc997f768700b", size = 223681, upload-time = "2026-07-06T21:32:56.329Z" }, + { url = "https://files.pythonhosted.org/packages/b0/80/c138990aa2a70b1a269f6e06348729836d733d6f970867943f61d367f8cc/cffi-2.1.0-cp312-cp312-win32.whl", hash = "sha256:9b8f0f26ca4e7513c534d351eca551947d053fac438f2a04ac96d882909b0d3a", size = 175269, upload-time = "2026-07-06T21:32:57.777Z" }, + { url = "https://files.pythonhosted.org/packages/a8/eb/f636456ff21a83fc13c032b58cc5dde061691546ac79efa284b2989b7982/cffi-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:c97f080ea627e2863524c5af3836e2270b5f5dfff1f104392b959f8df0c5d384", size = 185881, upload-time = "2026-07-06T21:32:59.253Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/400ea43e721727dca8a65c4521390e9196757caba4a45643acb2b63271b8/cffi-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:6d194185eabd279f1c05ebe3504265ddfc5ad2b58d0714f7db9f01da592e9eb6", size = 180088, upload-time = "2026-07-06T21:33:02.278Z" }, + { url = "https://files.pythonhosted.org/packages/96/88/a996879e2eeccb815f6e3a5967b12a308257412acec882039d386bd2aa7b/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:10537b1df4967ca26d21e5072d7d54188354483b91dc75058968d3f0cf13fbda", size = 194331, upload-time = "2026-07-06T21:33:03.697Z" }, + { url = "https://files.pythonhosted.org/packages/58/85/7ae00d5c8dd6266f4e944c3db630f3c5c9a98b61d469c714d848b1d8138a/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a95b05f9baf29b91171b3a8bd2020b028835243e7b0ff6bb23e2a3c228518b1b", size = 196966, upload-time = "2026-07-06T21:33:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e9/45c3a76ad8d43ad9261f4c95436da61128d3ca545d72b9612c0ab5be0b1c/cffi-2.1.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:15faec4adfff450819f3aee0e2e02c812de6edb88203aa58807955db2003472a", size = 184795, upload-time = "2026-07-06T21:33:06.699Z" }, + { url = "https://files.pythonhosted.org/packages/84/4c/82f132cb4418ee6d953d982b19191e87e2a6372c8a4ce36e50b69d6ade4a/cffi-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:716ff8ec22f20b4d988b12884086bcef0fc99737043e503f7a3935a6be99b1ea", size = 184746, upload-time = "2026-07-06T21:33:08.071Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1c/4ed5a0e5bdca6cbc275556de3328dd1b76fd0c11cc13c88fe66d1d8715f2/cffi-2.1.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:63960549e4f8dc41e31accb97b975abaecfc44c03e396c093a6436763c2ea7db", size = 214747, upload-time = "2026-07-06T21:33:09.671Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a6/e879bb68cc23a2bc9ba8f4b7d8019f0c2694bad2ab6c4a3701d429439f58/cffi-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff067a8d8d880e7809e4ac88eb009bb848870115317b306666502ccad30b147f", size = 222392, upload-time = "2026-07-06T21:33:10.896Z" }, + { url = "https://files.pythonhosted.org/packages/88/f6/01890cfd63c08f8eb96a8319b0443690197d240a8bd6346048cf7bde9190/cffi-2.1.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3b926723c13eba9f81d2ef3820d63aeceec3b2d4639906047bf675cb8a7a500d", size = 210285, upload-time = "2026-07-06T21:33:12.251Z" }, + { url = "https://files.pythonhosted.org/packages/a6/cf/2b684132056f438567b61e19d690dd31cd0921ace051e0a458be6074369e/cffi-2.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:47ff3a8bfd8cb9da1af7524b965127095055654c177fcfc7578debcb015eecd0", size = 208801, upload-time = "2026-07-06T21:33:13.617Z" }, + { url = "https://files.pythonhosted.org/packages/6f/08/f2e7d62c460faae0926f2d6e423694aa409ced3bc1fe2927a0a6e5f05416/cffi-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:799416bae98336e400981ff6e532d67d5c709cfb30afb79865a1315f94b0e224", size = 221808, upload-time = "2026-07-06T21:33:15.466Z" }, + { url = "https://files.pythonhosted.org/packages/38/37/04f54b8e63a02f3d908332c9effbf8c366167c6f733ed8a3d4f79b7e2a1e/cffi-2.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:961be50688f7fba2fa65f63712d3b9b341a22311f5253460ce933f52f0de1c8c", size = 225241, upload-time = "2026-07-06T21:33:16.869Z" }, + { url = "https://files.pythonhosted.org/packages/a9/d6/c72eecca433cd3e681c65ed313ab4835d9d4a379704d0f628a6a05f51c2e/cffi-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf5c6cf48238b0eb4c086978c492ad1cbc22373fc5b2d7353b3a598ce6db887a", size = 223588, upload-time = "2026-07-06T21:33:18.239Z" }, + { url = "https://files.pythonhosted.org/packages/c6/4b/e706f67279140f92939da3475ad610df18bfd52d50f14953a8e5fede71d5/cffi-2.1.0-cp313-cp313-win32.whl", hash = "sha256:db3eb7d46527159a878ec3460e9d40615bc25ba337d477db681aea6e4f05c5d2", size = 175248, upload-time = "2026-07-06T21:33:19.799Z" }, + { url = "https://files.pythonhosted.org/packages/5a/47/59eb7975cb0e4ef0afa764ea945b29a5bb4537a9f771cb7d6c8a5dd74c95/cffi-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:8e74a6135550c4748af665b1b1118b6aab33b1fc6a16f9aff630af107c3b4512", size = 185717, upload-time = "2026-07-06T21:33:21.47Z" }, + { url = "https://files.pythonhosted.org/packages/5a/af/34fee85c48f8d94efc8597bc09470c9dd274c145f1c12e0fbc6ab6d38d74/cffi-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:2282cd5e38aa8accd03e99d1256af8411c84cdbee6a89d841b563fdbd1f3e50f", size = 180114, upload-time = "2026-07-06T21:33:22.515Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f0/81478e482afa03f6d18dc8f2afb5edc45b3080853b634b5ed91961be0998/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d2117334c3af3bdcb9a88522b844a2bdb5efdc4f71c6c822df55486ae1c3347a", size = 194142, upload-time = "2026-07-06T21:33:23.657Z" }, + { url = "https://files.pythonhosted.org/packages/7d/95/8de304305cd9204974b0ca051b86d307cafca13aa575a0ef1b44d92c0d8c/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:702c436735fbe99d59ada02a1f65cfc0d31c0ee8b7290912f8fbc5cd1e4b16c3", size = 196819, upload-time = "2026-07-06T21:33:25.007Z" }, + { url = "https://files.pythonhosted.org/packages/20/71/7c8372d30e42415602ed9f268f7cfd66f1b855fed881ecd168bcb45dbc0b/cffi-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1ff3456eab0d889592d1936d6125bbfbc7ae4d3354a700f8bd80450a66445d4d", size = 184965, upload-time = "2026-07-06T21:33:26.605Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5c/584e626835f0375c928176c04137c96927165cb8733cdb3150ec04e5ee5e/cffi-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c4165821e131d6d4ca444347c2b694e2311bcfa3fe5a861cc72968f28867beac", size = 184952, upload-time = "2026-07-06T21:33:27.823Z" }, + { url = "https://files.pythonhosted.org/packages/2e/d2/065fcae1c73979fac8e054462478d0ff8a29c40cdc2ed7ea5676a061df53/cffi-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:276f20fffd7b396e12516ba8edf9509210ac248cbbc5acbc39cd512f9f59ebe6", size = 222353, upload-time = "2026-07-06T21:33:29.178Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a5/e8bbb1ce5b3ac2f53ad6a10bde44318a5a8d99d4f4a000d44a6e39aeb3e4/cffi-2.1.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7d5980a3433d4b71a5e120f9dd551403d7824e31e2e67124fe2769c404c06913", size = 210051, upload-time = "2026-07-06T21:33:30.534Z" }, + { url = "https://files.pythonhosted.org/packages/28/ed/c127d3ac36e899c965e3361357c3befacd6578c03f40125183e41c3b219e/cffi-2.1.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6ca4919c6e4f89aa99c42510b42cf54596892c00b3f9077f6bdd1505e24b9c8d", size = 208630, upload-time = "2026-07-06T21:33:31.753Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d7/97d3136f81db489ec8d1d67748c110d6c994268fd7528014aa9f2b085e4e/cffi-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d53d10f7da99ae46f7373b9150393e9c5eab9b224909982b43832668de4779f5", size = 221593, upload-time = "2026-07-06T21:33:33.044Z" }, + { url = "https://files.pythonhosted.org/packages/d3/27/93195977168ee63aed233a1a0993a2178798654d1f4bddcdd321d6fd3b21/cffi-2.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c351efb95e832a853a29361675f33a7ce53de1a109cd73fd47af0712213aa4ce", size = 225146, upload-time = "2026-07-06T21:33:34.224Z" }, + { url = "https://files.pythonhosted.org/packages/b3/c1/6dbd291ee2ae5a50a034aa057207081f545923bbf15dad4511e985aafff5/cffi-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf7c7a88e2bac086f06d14577332760bdeecc42bdec8ac4077f6260557d9326", size = 223240, upload-time = "2026-07-06T21:33:35.57Z" }, + { url = "https://files.pythonhosted.org/packages/0f/6f/ade5ce9863a57992a6ea3d0d10d7e29b8749fc127204b3d493d667b2815f/cffi-2.1.0-cp314-cp314-win32.whl", hash = "sha256:1854b724d00f6654c742097d5387569021be12d3a0f770eae1df8f8acfcc6acd", size = 177723, upload-time = "2026-07-06T21:33:51.626Z" }, + { url = "https://files.pythonhosted.org/packages/41/de/92b9eeed4ae4a21d6fd9b2a2c8505cbed573299902ea73981cc13f7ff62c/cffi-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:1b96bfe2c4bd825681b7d311ad6d9b7280a091f43e8f63da5729638083cd3bfb", size = 187937, upload-time = "2026-07-06T21:33:53.403Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1a/cc6ae6c2913a03aab8898eee57963cf1035b8df5872ed8b9115fcc7e2be8/cffi-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:7d28dff1db6764108bc30788d85d61c876beff416d9a49cb9dd7c5a9f34f5804", size = 183001, upload-time = "2026-07-06T21:33:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/14/f0/134c00ce0779ec86dea2aa1aac69339c2741a8045072676763512363a2ea/cffi-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7ea6b3e2c4250ff1de21c630fe72d0f63eb95c2c32ffbf64a358cf4a8836d714", size = 188538, upload-time = "2026-07-06T21:33:36.792Z" }, + { url = "https://files.pythonhosted.org/packages/50/d8/3b86aba791cb610d24e8a3e1b2cd529e71fa15096b04e4d4e360049d4a4c/cffi-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6af371f3767faeffc6ac1ef57cdfd25844403e9d3f476c5537caee499de96376", size = 188230, upload-time = "2026-07-06T21:33:38.011Z" }, + { url = "https://files.pythonhosted.org/packages/14/d0/117dcd9209255ad8571fbc8c92ef32593a1d294dcec91ddc4e4db50606f2/cffi-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb4e8997a49aa2c08a3e43c9045d224448b8941d88e7ac163c7d383e560cbf98", size = 223899, upload-time = "2026-07-06T21:33:39.514Z" }, + { url = "https://files.pythonhosted.org/packages/b6/3d/f20f8b886b254e3ad10e15cd4186d3aed49f3e6a35ab37aab9f8f25f7c03/cffi-2.1.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf01d8c84cbea96b944c73b22182e6c7c432b3475632b8111dbfdc95ddad6e13", size = 211652, upload-time = "2026-07-06T21:33:40.851Z" }, + { url = "https://files.pythonhosted.org/packages/28/3b/fad54de07260b93ddeef4b96d0131d57ea900675df1d410ae1deee52d7a6/cffi-2.1.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:33eb1ad83ebe8f313e0df035c406227d55a79456704a863fad9842136af5ad7d", size = 210755, upload-time = "2026-07-06T21:33:42.183Z" }, + { url = "https://files.pythonhosted.org/packages/cc/82/3d5c705acb7abbba9bbd7d79b8e62e0f25b6120eb7ae6ac49f1b721722fe/cffi-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ac0f1a2d0cfa7eea3f2aaf006ab6e70e8feeb16b75d65b7e5939982ca2f11056", size = 223933, upload-time = "2026-07-06T21:33:43.603Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d0/47e338384ab6b1004241002fa616301020cea4fc95f283506565d252f276/cffi-2.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c16914df9fb7f500e440e6875fa23ff5e0b31db01fa9c06af98d59a91f0dc2e4", size = 226749, upload-time = "2026-07-06T21:33:45.046Z" }, + { url = "https://files.pythonhosted.org/packages/70/25/65bd5b58ea4bfdfc15cde02cb5365f89ef8ab8b2adfb8fe5c4bd4233382f/cffi-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5ecbd0499275d57506d397eebe1981cee87b47fcd9ef5c22cab7ed7644a39a94", size = 225703, upload-time = "2026-07-06T21:33:46.374Z" }, + { url = "https://files.pythonhosted.org/packages/dc/78/aa01ac599a8a4322533d45a1f9bc93b338276d2d59dabbe7c6d92a775c81/cffi-2.1.0-cp314-cp314t-win32.whl", hash = "sha256:7d034dcffa09e9a46c93fa3a3be402096cb5354ac6e41ab8e5cc9cd8b642ad76", size = 182857, upload-time = "2026-07-06T21:33:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/b9/26/d00496b22de4d4228f32dde94ad996f350c8aad676d63bcca0743c8dea4d/cffi-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0582a58f3051372229ca8e7f5f589f9e5632678208d8636fea3676711fdf7fe5", size = 194065, upload-time = "2026-07-06T21:33:48.953Z" }, + { url = "https://files.pythonhosted.org/packages/d5/dd/0c7dbf815a579ff005008a2d815a55d6bb047c349eef536d9dc53d3f0a8d/cffi-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:510aeeeac94811b138077451da1fb18b308a5feab47dd2b603af55804155e1c8", size = 186404, upload-time = "2026-07-06T21:33:50.309Z" }, + { url = "https://files.pythonhosted.org/packages/55/c7/8c8c50cb11c6750051daf12164098a9a6f027ac4356967fd4d800a07f242/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:2e9dabb9abcb7ad15938c7196ad5c1718a4e6d33cc79b4c0209bdb64c4a54a5c", size = 194121, upload-time = "2026-07-06T21:33:56.109Z" }, + { url = "https://files.pythonhosted.org/packages/99/e2/67680bf19a6b60d2bb7ff83baefa2a4c3d2d7dc0f3277034b802e1fc504c/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:37f525a7e7e50c017fdebe58b787be310ad59357ae43a053943a6e1a6c526001", size = 196820, upload-time = "2026-07-06T21:33:57.288Z" }, + { url = "https://files.pythonhosted.org/packages/ed/da/4bbe583a3b3a5c8c60892124fe17f3fa3656523faf0d3484eae90f091853/cffi-2.1.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:95f2954c2c9473d892eca6e0409f3568b37ab62a8eedb122461f73cc273476e3", size = 184936, upload-time = "2026-07-06T21:33:58.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4b/1f4c36ab273980d7aa75bb126ea4f8971f24a96108acad3a0a084028c57b/cffi-2.1.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:cdf2448aab5f661c9315308ec8b93f4e8a1a67a3c733f8631067a2b67d5913dc", size = 185045, upload-time = "2026-07-06T21:34:00.085Z" }, + { url = "https://files.pythonhosted.org/packages/ef/c3/ad299dc38f3583f8d916b299f028af418a9ec98bc695fcbebeae7420691c/cffi-2.1.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:90bec57cf82089383bd06a605b3eb8daebf7e5a668520beaf6e327a83a947699", size = 222342, upload-time = "2026-07-06T21:34:01.814Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d8/df4543cc087245044ed02ef3ad8e0a26619d0075ac7a77a12dc81177851b/cffi-2.1.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6274dcb2d15cef48daa73ed1be5a40d501d74dccd0cd6db364776d12cb6ba022", size = 210073, upload-time = "2026-07-06T21:34:03.255Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0e/fac738d73728c6cea2a88a2883dca54892496cbba88a1dc1f2909cb8a6f5/cffi-2.1.0-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b71d409cccee78310ab5dec549aed052aaea483346e282c7b02362596e01bb0", size = 208551, upload-time = "2026-07-06T21:34:04.433Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3f/0b04a700dd64f465c93020253a793a82c9b4dff9961f48facd0df945d9b8/cffi-2.1.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7d3538f9c0e50670f4deb93dbb696576e60590369cae2faf7de681e597a8a1f1", size = 221649, upload-time = "2026-07-06T21:34:06.157Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7c/b7379a5704c79eda57ce075869ba70a0368d1c850f803b3c0d078d39dcaf/cffi-2.1.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:8f9ec95b8a043d3dfbc74d9abc6f7baf524dd27a8dc160b0a32ff9cdab650c28", size = 225203, upload-time = "2026-07-06T21:34:07.489Z" }, + { url = "https://files.pythonhosted.org/packages/5a/02/d5e6c43ea85c41bda2a184a3418f195fe7cf602967a8d2b94e085b83deef/cffi-2.1.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:af5e2915d41fe6c961694d7bfdc8562942638200f3ce2765dfb8b745cf997629", size = 223263, upload-time = "2026-07-06T21:34:08.712Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d8/772b8259bf75749adffb1c546828978381fb516f60cf701f6c83daf60c85/cffi-2.1.0-cp315-cp315-win32.whl", hash = "sha256:0a42c688d19fca6e095a53c6a6e2295a5b050a8b289f109adab02a9e61a25de6", size = 177696, upload-time = "2026-07-06T21:34:26.355Z" }, + { url = "https://files.pythonhosted.org/packages/2f/dd/afa2191fc6d57fedd26e5844a2fe2fcc0bbfa00961bbaa5a41e4921e7cca/cffi-2.1.0-cp315-cp315-win_amd64.whl", hash = "sha256:bccbbb5ee76a61f9d99b5bf3846a51d7fca4b6a732fe46f89295610edaf41853", size = 187914, upload-time = "2026-07-06T21:34:27.58Z" }, + { url = "https://files.pythonhosted.org/packages/05/ef/6cd4f8c671517162379dc79cfae5aea9106bc38abb89628d5c16adf6a838/cffi-2.1.0-cp315-cp315-win_arm64.whl", hash = "sha256:8d35c139744adb3e727cd51b1a18324bbe44b8bd41bf8322bca4d41289f48eda", size = 183004, upload-time = "2026-07-06T21:34:28.905Z" }, + { url = "https://files.pythonhosted.org/packages/11/b6/12fc55092817a5faa26fb8c40c7f9d662e11a46ee248c137aafc42517d92/cffi-2.1.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f9912624a0c0b834b7520d7769b3644453aabc0a7e1c839da7359f050750e9bc", size = 188378, upload-time = "2026-07-06T21:34:09.926Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2e/cdac88979f295fde5daa69622c7d2111e56e7ceb94f211357fbe452339e4/cffi-2.1.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:df92f2aba50eb4d96718b68ef76f2e57a57b54f2fa62333496d16c6d585a85ca", size = 188319, upload-time = "2026-07-06T21:34:11.101Z" }, + { url = "https://files.pythonhosted.org/packages/e0/27/1d0b408497e41a74795af122d7b603c418c5fed0171450f899afd04e594f/cffi-2.1.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0520e1f4c35f44e209cbbb421b67eec42e6a157f59444dfb6058874ff3610e5d", size = 223904, upload-time = "2026-07-06T21:34:12.606Z" }, + { url = "https://files.pythonhosted.org/packages/8b/31/e115c985105dd7ffb32444505f18ceb874bb42d992af05d5dced7ecf1980/cffi-2.1.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3681e031db29958a7502f5c0c9d6bbc4c36cb20f7b104086fa642d1799631ff8", size = 211554, upload-time = "2026-07-06T21:34:13.987Z" }, + { url = "https://files.pythonhosted.org/packages/5a/67/9e6e09409336d9e515c58367e7cfcf4f89df06ad25252675595a58eb59d5/cffi-2.1.0-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:762f99479dcb369f60ab9017ad4ab97a36a1dd7c1ee5a3b15db0f4b8659120cd", size = 210795, upload-time = "2026-07-06T21:34:15.972Z" }, + { url = "https://files.pythonhosted.org/packages/19/e5/d3cc82a4a0be7902af279c04181ad038449c096734464a5ae1de3e1401bd/cffi-2.1.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0611e7ebf90573a535ebdc33ae9da222d037853983e13359f580fab781ca017f", size = 223843, upload-time = "2026-07-06T21:34:17.509Z" }, + { url = "https://files.pythonhosted.org/packages/b9/65/b434abc97ce7cecc2c640fde160507c0ecc7e21544b483ba3325d2e2ea17/cffi-2.1.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:86cf8755a791f72c85dc287128cc62d4f24d392e3f1e15837245623f4a33cccc", size = 226773, upload-time = "2026-07-06T21:34:19.05Z" }, + { url = "https://files.pythonhosted.org/packages/b5/9f/d4dc66ca651eb1145a133314cda721abf13cfac3d28c4a0402263ae6ad75/cffi-2.1.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:ba00f661f8ba35d075c937174e27c2c421cec3942fd2e0ea3e66996757c0fdd9", size = 225719, upload-time = "2026-07-06T21:34:20.576Z" }, + { url = "https://files.pythonhosted.org/packages/68/5a/e536c528bc8057496c360c0978559a2dc45653f89dd6151078aa7d8fca1a/cffi-2.1.0-cp315-cp315t-win32.whl", hash = "sha256:cb96698e3c7413d906ce83f8ffd245ec1bd94707541f299d0ce4d6b0193e982b", size = 182760, upload-time = "2026-07-06T21:34:22.059Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0b/0ffe8b82d3875bced5fa1e7986a7a46b748262a40ab7f60b475eb9fb1bb3/cffi-2.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:f146d154428a2523f9cc7936c02353c2459b8f6cf07d3cd1ee1c0a611109c5d5", size = 193769, upload-time = "2026-07-06T21:34:23.589Z" }, + { url = "https://files.pythonhosted.org/packages/a0/17/1073b53b68c9b5ca6914adf5f8bf55aacc2d3be102418c90700160ea8605/cffi-2.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:cbb7640ce37159548d2147b5b8c241f962143d4c71231431820783f4dc78f210", size = 186405, upload-time = "2026-07-06T21:34:24.857Z" }, +] + +[[package]] +name = "click" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/d4/81420972a676e8ffea40450d8c8c92943e7218a78fe9b64359836cc9876b/click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6", size = 338000, upload-time = "2026-06-24T17:45:15.148Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76", size = 119243, upload-time = "2026-06-24T17:45:13.73Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "cryptography" +version = "49.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/22/adf66990e63584a68dfb50c24f48a125c07b1699899381c8151e63ed458c/cryptography-49.0.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:966fe0e9c67490071f14c0d2b1cb2dfb3023c5ce39457343931415f08382f2db", size = 4032100, upload-time = "2026-06-12T20:02:32.143Z" }, + { url = "https://files.pythonhosted.org/packages/09/41/3797cfaf69cae04a13ee78ebd83f0678d9c02b4779d21ce24445326f1a69/cryptography-49.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:36d1709f992593689b45bda411498d62c6e365f2ca00b84657d4dadd24de16db", size = 4692978, upload-time = "2026-06-12T20:01:21.305Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8b/43011f7ebe515a8aa20d61f290a326cd890c2e738e16e59eaff8d9c3a412/cryptography-49.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0e959b578856a3924bc0cbb710fc12c387b9412a951389f3ca61704a9e25f325", size = 4716422, upload-time = "2026-06-12T20:01:48.566Z" }, + { url = "https://files.pythonhosted.org/packages/4a/91/01ce7303a4579e6d3a6abef01bd322848e9ea7a219adcabc5048b9033571/cryptography-49.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:53ecee2e23f7169b6117e99fc8a944e5e50f79e69758a83b52a00cb98ab2b2d2", size = 4700503, upload-time = "2026-06-12T20:02:47.091Z" }, + { url = "https://files.pythonhosted.org/packages/62/99/a2c95cf8293f07491e9e27c20cc4dcd18176d944e674679adeb1d0173fd6/cryptography-49.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:2eda353d8a27bcbcaa4cbed18994a74ab4d19a2ca897db188ea269ab9b71419b", size = 5309779, upload-time = "2026-06-12T20:02:08.987Z" }, + { url = "https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2afe9051da7ae7bd5905da5a949280c7d2bb75682e188f650a9d0f2756b834c6", size = 4749683, upload-time = "2026-06-12T20:02:03.335Z" }, + { url = "https://files.pythonhosted.org/packages/a3/5b/c5246635d5fd3b64e0d45ae10e99fd32fe9676a79915ccfe5a61ba9af1a5/cryptography-49.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:0b82e28ee398a386f0807bba7884d30f25218855690f45115831bcce5d90822c", size = 4337874, upload-time = "2026-06-12T20:02:54.323Z" }, + { url = "https://files.pythonhosted.org/packages/6d/88/05563c7fe2e914e87d1a536d06fe83e66b4e1d95cb593e05aea375531da8/cryptography-49.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ccac2bfebc306b862133e3bb71f3f6ee8bb525240089b2d952e4144b3a6d5da7", size = 4700283, upload-time = "2026-06-12T20:01:34.822Z" }, + { url = "https://files.pythonhosted.org/packages/c4/b6/d7696e4e890d6ae1469935164c9e5215c557671cb78d6e3f458ccceaa632/cryptography-49.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:d0527ce944105f257f605a827d6ebead966c752038b6e8656abb9c5edee6fc68", size = 5265844, upload-time = "2026-06-12T20:01:24.09Z" }, + { url = "https://files.pythonhosted.org/packages/a9/3c/f3ad17eecc1a57b0ba236dc01f90e783c51f4a2f35f64777cc4f47a184b2/cryptography-49.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:cbc77da8c523d5abd028635ba850a6966fcee2c82e2bf65a41d1d8afe0f98be9", size = 4749290, upload-time = "2026-06-12T20:01:30.848Z" }, + { url = "https://files.pythonhosted.org/packages/4f/01/339573cf1023163a400b0b5d16f6d507de413b9f60be6fd1b77feeaf6737/cryptography-49.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b87e65d263b3e5d3bb92a57e2a6638e2f31110fa7aa890c7b2dbba42248d0a3f", size = 4834612, upload-time = "2026-06-12T20:01:29.246Z" }, + { url = "https://files.pythonhosted.org/packages/71/fd/577302e213a1be9468f92d1afef66fcf1ef83d516819d9992ca547f592bd/cryptography-49.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:66ec79c3904820572d7e987abdf304281f141d37ad9a489b8e97066e7b9b6459", size = 4980804, upload-time = "2026-06-12T20:01:42.853Z" }, + { url = "https://files.pythonhosted.org/packages/1f/09/f42b1d190c5ba75f72062a387f8030d1d75f6ab035788f1d9c4b01de6525/cryptography-49.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:e5dfc1e64de5677cec922ffa8da89c546d0415bf6efdf081842e5d44c84e1f0e", size = 3810026, upload-time = "2026-06-12T20:02:39.262Z" }, + { url = "https://files.pythonhosted.org/packages/ec/9e/db72b3ae7fc9cfad53e630e56c6ae83b9b6ff0bf3718ffb8012d20b3aabf/cryptography-49.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:73a205dce83953d131a4aa1e0fd917a2fd1c5b1eef251e9d7152efefcbf5caf7", size = 4013892, upload-time = "2026-06-12T20:02:10.735Z" }, + { url = "https://files.pythonhosted.org/packages/86/12/c48a424f38db03027be9f7ed5c7dc5de9933dbee992865f98b13727a009d/cryptography-49.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:196ecd6a36e4e9aa10270393bb98d8df88fccee0bf1e5128b91ae4eb4375896d", size = 4678835, upload-time = "2026-06-12T20:02:48.743Z" }, + { url = "https://files.pythonhosted.org/packages/68/28/8a3ad4653662c93fc44dc4e5d8fd374c25c42e07b34bbfbadf49cf57a5a8/cryptography-49.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7abcee80084cda3f7691f3eb1ce480d8df49cec637b429aa35986c1de71738aa", size = 4697239, upload-time = "2026-06-12T20:02:56.03Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b2/2193fc74f81aee4f9b62733133b73b5176718932ed8f2e4b03fa040480a6/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:4ae387c9cb68ea569ca17e490d66d8142b81c3cc814bf179974b7d146e490bbb", size = 4685593, upload-time = "2026-06-12T20:02:50.666Z" }, + { url = "https://files.pythonhosted.org/packages/47/f1/1d3eaa243bfc5de4a187b22aa8c048b3e4980bfbe830ac46e6bac2e66947/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:f37d847238971164fdbc68ade6f6574aecc9c0af714190e2083429ff68f4ce9d", size = 5289961, upload-time = "2026-06-12T20:01:46.468Z" }, + { url = "https://files.pythonhosted.org/packages/58/39/2d51306721330c486495853eda1c567880ff036de15a14c4b74f399934af/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:c2bc30226390d60ea19d9f82b19db005fe0452154a23c1c410c12ea801e43561", size = 4731145, upload-time = "2026-06-12T20:02:16.832Z" }, + { url = "https://files.pythonhosted.org/packages/17/50/983e838c7fd0d87fd8c969bcdd328edaf5f756e38df5281637424c155873/cryptography-49.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:07cab27cc7b7e0fd28e5e26bb9eeedde5c135c868b46de4a27845abe94af6122", size = 4321719, upload-time = "2026-06-12T20:02:52.611Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f5/8f571d7e27c55bce9f76f026143bcb1e040a4233149ecca0bea5fa5dd5f7/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:b20133d204d2bb56ba047642199603876c872026ca53e79c35b83772ab2cc505", size = 4685209, upload-time = "2026-06-12T20:02:07.282Z" }, + { url = "https://files.pythonhosted.org/packages/e7/84/0e27016a6fc5a0886f797018b26aa42f40c09a82332bff77822a451deaaa/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b970c6da94d5bb18629db453d14f2a1300f6bf59b61e9b82377931ef95504866", size = 5246285, upload-time = "2026-06-12T20:01:32.439Z" }, + { url = "https://files.pythonhosted.org/packages/11/2d/5e1fb307cb5931881516b464c98774b3f2c36b5d4bb9a2830253cf553cad/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:d8ecde755e2e91bf773fc94e8c9d730cd7f2007004cb492263a794ec3899a1c8", size = 4730441, upload-time = "2026-06-12T20:02:01.469Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c0/bff5a02ee731d207d6a1ed51732549d8c53d2bc8da1d10ec6f2844201d68/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e3fb64c420688e5319ae25113a354015abbd8dffbfbc41781a1ea66fc7622ac3", size = 4815869, upload-time = "2026-06-12T20:01:36.574Z" }, + { url = "https://files.pythonhosted.org/packages/b9/26/814681d14248d95d73d5c3eea0c39a94eb8302df966f670a2c60de90974b/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:32703d93296f5c1f4b53349ad3a250c2cae0fdecd3a3dd5d47e616d8d616af27", size = 4960948, upload-time = "2026-06-12T20:02:18.688Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fe/93ecac273d3738939d023612ad12cca9a3740a5345d69fda04134c43fd96/cryptography-49.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:33cd0565932807baddb67b96dbee92f2c374b5c89dee09fd74079aeb8c8dba61", size = 3799153, upload-time = "2026-06-12T20:01:39.059Z" }, + { url = "https://files.pythonhosted.org/packages/19/2a/5bb823f5bedcf80718cea7fbc95ec5515cca3769633c4b01a32be7f30e7c/cryptography-49.0.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ec5e529fb80935c94fe7b729f9972b50e351a0e6b50aa294fd5cabb109fcc29a", size = 4025947, upload-time = "2026-06-12T20:01:25.745Z" }, + { url = "https://files.pythonhosted.org/packages/3d/df/40577043ca124e17012f408ddddaeb213b856336ac82ddb3bc915f39e29f/cryptography-49.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f78ff2c9ed8dc2d036b0f4d640e22522213d047c1b14e61205a7e55c80a494d4", size = 4692429, upload-time = "2026-06-12T20:01:53.628Z" }, + { url = "https://files.pythonhosted.org/packages/2c/99/2d13299eb3dd27b02dcfaafcc91d6b5cb3329f7cbd6d8f51921acd566c1a/cryptography-49.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:35b151772baff2c74cba7fa290ceaff4c3b11c0c881eb93eb5dbc05a7cfbba18", size = 4700968, upload-time = "2026-06-12T20:02:45.383Z" }, + { url = "https://files.pythonhosted.org/packages/a5/4d/9c0cd02f95e2602dd5e563da149ee0830abef3537be8b34dc56281ebe27a/cryptography-49.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0f21641cf4b30fca7aee061ced0ec7ad7b073518088b7c9969a297c0ae796c69", size = 4697758, upload-time = "2026-06-12T20:01:41.13Z" }, + { url = "https://files.pythonhosted.org/packages/24/01/186c825898477d77e2324d5360fefe622ff1d8d1963ec0554e2cada8ec77/cryptography-49.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:9e82dcc8e56052715fb18b2429e3bca4823b1629136a2084fc45a9a5cecb9b64", size = 5298863, upload-time = "2026-06-12T20:02:24.579Z" }, + { url = "https://files.pythonhosted.org/packages/b8/7b/62cbbab75d0659865bf0273790031544a0b16c8072d258f9428dcd8190dc/cryptography-49.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6f2debedf9ca60cf1d5bd466475638af5130f89965605cd818484d19987d3a21", size = 4735983, upload-time = "2026-06-12T20:01:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/6c/72/3e798c064bc39e471008075d0f9bc9daf77a80879c092e4a8e170c585ed4/cryptography-49.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:8c25ceb16df5b9435f3f6a9829204985b0e0cbee3b48aacd432c7d2c850b44d9", size = 4334173, upload-time = "2026-06-12T20:01:44.743Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ee/6fca21d1ac73e06f8bef71940abfd4d2f6472b4bca284d770f32bd4086f6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:28d8b15e6275f12c8a207dc309dfa957903c927d08d0cc937ee3f63f200693cc", size = 4697298, upload-time = "2026-06-12T20:02:20.918Z" }, + { url = "https://files.pythonhosted.org/packages/67/d0/a5fcd3515f0bae49a7b6d0413cc1bdccdcc1fc0047037a0d480642cdc5d6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:6fc361c34fb6aac015ce19435876635e5c6d21db31998b0920f675f131e043b8", size = 5254338, upload-time = "2026-06-12T20:02:22.737Z" }, + { url = "https://files.pythonhosted.org/packages/a0/84/84fe36f19caf857d61cb7fc9c63035a47ffabd84ea12d1d393148efa3615/cryptography-49.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2400ef9c9e2299a25614eb1dea3db54a69b1349efd043bfac9c67630d136df36", size = 4735650, upload-time = "2026-06-12T20:02:41.389Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a0/db537264e234f7273a73ec020873d6d6b39dfd8a53db78b550ca8320440e/cryptography-49.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:67e1d20ad9ef3a563c59ef22e7a8a0b8210bd26604369ea4a30a7c66aefe504e", size = 4834820, upload-time = "2026-06-12T20:01:51.847Z" }, + { url = "https://files.pythonhosted.org/packages/93/77/8df9eb486495979bccecd1062e2eaf435250e84437040295b57d09048b0b/cryptography-49.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:42b0684e0e40cf26122427802486f6d93aea593612603a94fbf260c7eb1e9c1b", size = 4967968, upload-time = "2026-06-12T20:02:12.524Z" }, + { url = "https://files.pythonhosted.org/packages/c2/e6/f60198ea8d9dfa15fff9ed4ca02ce362f6eadd9ba757dcc50634c4257b63/cryptography-49.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:026ac7423e6fa66872d3bf889be5974507da3944f866f704fa200eadacd00001", size = 3785547, upload-time = "2026-06-12T20:02:26.847Z" }, +] + +[[package]] +name = "cyclopts" +version = "4.22.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "docstring-parser" }, + { name = "rich" }, + { name = "rich-rst" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/47/32d992e829f63aedea5b93360db23c8882c9bbbde094bcf0fff899ea8a3b/cyclopts-4.22.1.tar.gz", hash = "sha256:49cd3779da7113a96ac5c23b151aa61ac9ae1b4b1fe813594d207ca843c97892", size = 193551, upload-time = "2026-07-20T17:38:59.38Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/89/f2710638cd2f824cb976777e63ef6ed1e83fc56888cf5c9f5a053490b7be/cyclopts-4.22.1-py3-none-any.whl", hash = "sha256:9b614e231075aee9849c0bfd78f7611ab7adf417f16af5b9e42b9ed6e18c17d1", size = 232953, upload-time = "2026-07-20T17:38:58.078Z" }, +] + +[[package]] +name = "dnspython" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/57666417c0f90f08bcafa776861060426765fdb422eb10212086fb811d26/dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f", size = 368251, upload-time = "2025-09-07T18:58:00.022Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, +] + +[[package]] +name = "docstring-parser" +version = "0.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/4d/f332313098c1de1b2d2ff91cf2674415cc7cddab2ca1b01ae29774bd5fdf/docstring_parser-0.18.0.tar.gz", hash = "sha256:292510982205c12b1248696f44959db3cdd1740237a968ea1e2e7a900eeb2015", size = 29341, upload-time = "2026-04-14T04:09:19.867Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/5f/ed01f9a3cdffbd5a008556fc7b2a08ddb1cc6ace7effa7340604b1d16699/docstring_parser-0.18.0-py3-none-any.whl", hash = "sha256:b3fcbed555c47d8479be0796ef7e19c2670d428d72e96da63f3a40122860374b", size = 22484, upload-time = "2026-04-14T04:09:18.638Z" }, +] + +[[package]] +name = "email-validator" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dnspython" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/22/900cb125c76b7aaa450ce02fd727f452243f2e91a61af068b40adba60ea9/email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426", size = 51238, upload-time = "2025-08-26T13:09:06.831Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, +] + +[[package]] +name = "fastmcp" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastmcp-slim", extra = ["client", "server"] }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/f7/5188565d1b93ad611cbd80bf473e7ad669d1f3b689c4bedcd304e1ec3472/fastmcp-3.4.4.tar.gz", hash = "sha256:378202e26ec15b23819d9a1c0d1b0ebda096bc712720532010a0b82a45c2b1df", size = 28796458, upload-time = "2026-07-09T00:32:41.352Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/67/3cef84ba38a23dca1e1e776bfda8a35ab3c7a6c94a8ca81d0715de6dd3c5/fastmcp-3.4.4-py3-none-any.whl", hash = "sha256:f86f208713212260068cf55c32936839eee856fefc7808e18a032f31eb0f718e", size = 8019, upload-time = "2026-07-09T00:32:39.411Z" }, +] + +[[package]] +name = "fastmcp-slim" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "pydantic", extra = ["email"] }, + { name = "pydantic-settings" }, + { name = "python-dotenv" }, + { name = "rich" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/45/79/f35661c6a1d76dfbe17a079f912d96fffcfdd40fad5a9144bb9e7dfb1fdf/fastmcp_slim-3.4.4.tar.gz", hash = "sha256:dcaa3e0be2127d7eacdce592c2ef0039204923dc0ec396454615cb4a3275b078", size = 590203, upload-time = "2026-07-09T00:32:20.531Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/91/321e0b2e9ed70d0628b17ddaec76fc7b09f3e1d5d290f70bf101a2890142/fastmcp_slim-3.4.4-py3-none-any.whl", hash = "sha256:9d3a6327b9ee835188eb7323fc3b5d4cd061631b48da8ece56794bb538972505", size = 765158, upload-time = "2026-07-09T00:32:19.11Z" }, +] + +[package.optional-dependencies] +client = [ + { name = "authlib" }, + { name = "exceptiongroup" }, + { name = "httpx" }, + { name = "mcp" }, + { name = "opentelemetry-api" }, + { name = "py-key-value-aio", extra = ["filetree", "keyring", "memory"] }, + { name = "starlette" }, +] +server = [ + { name = "authlib" }, + { name = "cyclopts" }, + { name = "exceptiongroup" }, + { name = "griffelib" }, + { name = "httpx" }, + { name = "joserfc" }, + { name = "jsonref" }, + { name = "jsonschema-path" }, + { name = "mcp" }, + { name = "openapi-pydantic" }, + { name = "opentelemetry-api" }, + { name = "packaging" }, + { name = "py-key-value-aio", extra = ["filetree", "keyring", "memory"] }, + { name = "pyperclip" }, + { name = "python-multipart" }, + { name = "pyyaml" }, + { name = "starlette" }, + { name = "uncalled-for" }, + { name = "uvicorn" }, + { name = "watchfiles" }, + { name = "websockets" }, +] + +[[package]] +name = "griffelib" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/e4/8d187ea29c2e30b3a09505c567513077d6117861bde1fbd997a167f262ec/griffelib-2.1.0.tar.gz", hash = "sha256:762a186d2c6fd6794d4ea20d428d597ffb857cb56b66421651cbba15bdd5e813", size = 216234, upload-time = "2026-06-19T12:05:42.278Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/d3/5268aeabf2ad82658c4e2ff3a060648d0f02f3926cb53247c0e4d0dab49e/griffelib-2.1.0-py3-none-any.whl", hash = "sha256:cc7b3d2d2865ad0b909fcc38086e3f554b5ea7acbaa7bbb7ecaa3f5dfb7d9f00", size = 142560, upload-time = "2026-06-19T12:05:38.742Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[[package]] +name = "httpx-sse" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/4c/751061ffa58615a32c31b2d82e8482be8dd4a89154f003147acee90f2be9/httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d", size = 15943, upload-time = "2025-10-10T21:48:22.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc", size = 8960, upload-time = "2025-10-10T21:48:21.158Z" }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, +] + +[[package]] +name = "jaraco-classes" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", size = 11780, upload-time = "2024-03-31T07:27:36.643Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", size = 6777, upload-time = "2024-03-31T07:27:34.792Z" }, +] + +[[package]] +name = "jaraco-context" +version = "6.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/50/4763cd07e722bb6285316d390a164bc7e479db9d90daa769f22578f698b4/jaraco_context-6.1.2.tar.gz", hash = "sha256:f1a6c9d391e661cc5b8d39861ff077a7dc24dc23833ccee564b234b81c82dfe3", size = 16801, upload-time = "2026-03-20T22:13:33.922Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/58/bc8954bda5fcda97bd7c19be11b85f91973d67a706ed4a3aec33e7de22db/jaraco_context-6.1.2-py3-none-any.whl", hash = "sha256:bf8150b79a2d5d91ae48629d8b427a8f7ba0e1097dd6202a9059f29a36379535", size = 7871, upload-time = "2026-03-20T22:13:32.808Z" }, +] + +[[package]] +name = "jaraco-functools" +version = "4.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "more-itertools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/1f/c23395957d41ccf27c4e535c3d334c4051e5395b3752057ba4cbaec35c56/jaraco_functools-4.6.0.tar.gz", hash = "sha256:880c577ec9720b3a052d5bc611fb9f2269b3d87902ef42440df443b88e443280", size = 20837, upload-time = "2026-07-14T01:28:02.544Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/36/ecc85bc96c273dc8a11273ed4782272975e6338d4a3e9228621175edf0e3/jaraco_functools-4.6.0-py3-none-any.whl", hash = "sha256:99e3dc0060c5cbe8fcd1cdb36258e2a65ca40f1566b2033b12abb1bb44dd3c30", size = 11677, upload-time = "2026-07-14T01:28:01.59Z" }, +] + +[[package]] +name = "jeepney" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/6f/357efd7602486741aa73ffc0617fb310a29b588ed0fd69c2399acbb85b0c/jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732", size = 106758, upload-time = "2025-02-27T18:51:01.684Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", size = 49010, upload-time = "2025-02-27T18:51:00.104Z" }, +] + +[[package]] +name = "joserfc" +version = "1.7.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/e0/27a6a081ae25420eda6768ceae05d7022a7f2447f420588843f2a44e4298/joserfc-1.7.4.tar.gz", hash = "sha256:b3bc561672ae541b17a9237053b48a03dacddd92d68047b3ecdfb4b5714a88ed", size = 234027, upload-time = "2026-07-19T15:43:02.739Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/bf/249dcd99b3376375910b7fa922383b57792975c8758f50d44612e749226c/joserfc-1.7.4-py3-none-any.whl", hash = "sha256:32d46c2cd5e3203c13e87a6c61333cab310b1ba80cd54b4c4f386a848a122463", size = 71000, upload-time = "2026-07-19T15:43:01.299Z" }, +] + +[[package]] +name = "jsonref" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/0d/c1f3277e90ccdb50d33ed5ba1ec5b3f0a242ed8c1b1a85d3afeb68464dca/jsonref-1.1.0.tar.gz", hash = "sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552", size = 8814, upload-time = "2023-01-16T16:10:04.455Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/ec/e1db9922bceb168197a558a2b8c03a7963f1afe93517ddd3cf99f202f996/jsonref-1.1.0-py3-none-any.whl", hash = "sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9", size = 9425, upload-time = "2023-01-16T16:10:02.255Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, +] + +[[package]] +name = "jsonschema-path" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "pathable" }, + { name = "pyyaml" }, + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/79/cd02a4df6d9270efdc7d3feefe6edd730b0820c39eeaa107a2faee8322d5/jsonschema_path-0.5.0.tar.gz", hash = "sha256:493b156ba895c97602655b620a8456caa2ce08c1aa389f5a7addec065e6e855c", size = 19597, upload-time = "2026-05-19T20:45:00.971Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/2c/9e69d73c4297508be9e3b64a970ea3971b3eb8db64ffc5802d40bd25981f/jsonschema_path-0.5.0-py3-none-any.whl", hash = "sha256:2790a070bc7abb08ea3dbe4d340ece4efadf639223001f020c7503229ba068e2", size = 24077, upload-time = "2026-05-19T20:44:59.225Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "keyring" +version = "25.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jaraco-classes" }, + { name = "jaraco-context" }, + { name = "jaraco-functools" }, + { name = "jeepney", marker = "sys_platform == 'linux'" }, + { name = "pywin32-ctypes", marker = "sys_platform == 'win32'" }, + { name = "secretstorage", marker = "sys_platform == 'linux'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/4b/674af6ef2f97d56f0ab5153bf0bfa28ccb6c3ed4d1babf4305449668807b/keyring-25.7.0.tar.gz", hash = "sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b", size = 63516, upload-time = "2025-11-16T16:26:09.482Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl", hash = "sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f", size = 39160, upload-time = "2025-11-16T16:26:08.402Z" }, +] + +[[package]] +name = "ls-docs-mcp" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "fastmcp" }, +] + +[package.metadata] +requires-dist = [{ name = "fastmcp", specifier = ">=2.11.3" }] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, +] + +[[package]] +name = "mcp" +version = "1.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "httpx" }, + { name = "httpx-sse" }, + { name = "jsonschema" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pyjwt", extra = ["crypto"] }, + { name = "python-multipart" }, + { name = "pywin32", marker = "sys_platform == 'win32'" }, + { name = "sse-starlette" }, + { name = "starlette" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, + { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6e/77/9450b8f251a13affb6281997d0523c4615f8a8b35d0b21ff30db3a5aac9d/mcp-1.28.1.tar.gz", hash = "sha256:d51e36a5f5644faea4f85ea649bfffa6bc6c26770d42798ad6a3de3d2ba69683", size = 638501, upload-time = "2026-06-26T12:57:29.093Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/5e/d118fce19f87a2e7d8101c35c8ae0ec289098a4df0ff244cec23e415aca0/mcp-1.28.1-py3-none-any.whl", hash = "sha256:2726bca5e7193f61c5dde8b12500a6de2d9acf6d1a1c0be9e8c2e706437991df", size = 222620, upload-time = "2026-06-26T12:57:27.218Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "more-itertools" +version = "11.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/1d/f4da6f02cdffe04d6362210b807146a26044c88d839208aec273bb0d9184/more_itertools-11.1.0.tar.gz", hash = "sha256:48e8f4d9e7e5878571ecf6f2b4e57634f93cd474cc8cfbd2376f2d11b396e30d", size = 145772, upload-time = "2026-05-22T14:14:29.909Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/3d/1087453384dbde46a8c7f9356eead2c58be8a7bf156bca40243377c85715/more_itertools-11.1.0-py3-none-any.whl", hash = "sha256:4b65538ae22f6fed0ce4874efd317463a7489796a0939fa66824dd542125a192", size = 72226, upload-time = "2026-05-22T14:14:28.824Z" }, +] + +[[package]] +name = "openapi-pydantic" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/2e/58d83848dd1a79cb92ed8e63f6ba901ca282c5f09d04af9423ec26c56fd7/openapi_pydantic-0.5.1.tar.gz", hash = "sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d", size = 60892, upload-time = "2025-01-08T19:29:27.083Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/cf/03675d8bd8ecbf4445504d8071adab19f5f993676795708e36402ab38263/openapi_pydantic-0.5.1-py3-none-any.whl", hash = "sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146", size = 96381, upload-time = "2025-01-08T19:29:25.275Z" }, +] + +[[package]] +name = "opentelemetry-api" +version = "1.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ee/8b/aa9e2d8b8dfa7c946f7dec5d1f8f6ba8eca062f43509a06bdb5ce93d26c0/opentelemetry_api-1.44.0.tar.gz", hash = "sha256:67647e5e9566edcf421166fdf022b3537f818635daa852b289e34604dc6fb33a", size = 72406, upload-time = "2026-07-16T15:25:32.678Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/6f/a04e900f465ff3221ccc395522503e2d10e79fa21f2723c8e177aae1e0d1/opentelemetry_api-1.44.0-py3-none-any.whl", hash = "sha256:94b98c893a91b88657eaac1e3ba89618cdb85be6918196705354f34728b2cdef", size = 60018, upload-time = "2026-07-16T15:25:11.657Z" }, +] + +[[package]] +name = "packaging" +version = "26.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, +] + +[[package]] +name = "pathable" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/f3/5a20387de9bcd0607871bfc2198ee0e15836da7baa4592ccd7f24c27c986/pathable-0.6.0.tar.gz", hash = "sha256:6404b8b82aef5ff0fd478934137128b99b12212ba35afdde5525ca4f8388ea58", size = 18970, upload-time = "2026-05-19T18:15:11.911Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/e8/6d75ffd9784bce2e93d1ae4415649427e39a53bb172d4672b2b59c6f0a7b/pathable-0.6.0-py3-none-any.whl", hash = "sha256:82c4ca6c98c502ad12e0d4e9779b6210afee93c38990988c8c5d1b49bdcdf566", size = 18983, upload-time = "2026-05-19T18:15:10.728Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/78/9b/560e4be8e26f6fd133a03630a8df0c663b9e8d61b4ade152b72005aec83b/platformdirs-4.11.0.tar.gz", hash = "sha256:0555d18370482847566ffabcaa53ad7c6c1c29f195989ae1ed634a05f76ea1e0", size = 31953, upload-time = "2026-07-21T13:09:36.565Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/68/d8d58938dfb1370b266a1a729e6d77a985be23689a0496498ee17b2cbf90/platformdirs-4.11.0-py3-none-any.whl", hash = "sha256:360ccded2b7fce0af0ff80cc8f5942a1c5d99b0e856033acb030bfc634709e74", size = 23247, upload-time = "2026-07-21T13:09:35.422Z" }, +] + +[[package]] +name = "py-key-value-aio" +version = "0.4.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beartype" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fb/e2/d689d922894a7ecde73b6daeaf9b13dab5aae06fe6aaaf7514722644d382/py_key_value_aio-0.4.5.tar.gz", hash = "sha256:c6563a2c6abe5da5e20f4f9e875c2a9b425a2244a54fadbf46cf140a9eea45d7", size = 107547, upload-time = "2026-05-27T16:37:08.107Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/95/b8ba862968712caa12a19666175334fa979e1f198b896a430adb3bacfe87/py_key_value_aio-0.4.5-py3-none-any.whl", hash = "sha256:ab862adbcb8c72547d1c57821f22cbbb71ab86509039c96f36e914e0336c8dd7", size = 170005, upload-time = "2026-05-27T16:37:06.629Z" }, +] + +[package.optional-dependencies] +filetree = [ + { name = "aiofile" }, + { name = "anyio" }, +] +keyring = [ + { name = "keyring" }, +] +memory = [ + { name = "cachetools" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pydantic" +version = "2.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, +] + +[package.optional-dependencies] +email = [ + { name = "email-validator" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" }, + { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" }, + { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" }, + { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" }, + { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" }, + { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" }, + { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" }, + { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" }, + { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" }, + { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" }, + { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" }, + { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" }, + { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" }, + { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" }, + { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" }, + { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" }, + { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" }, + { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" }, + { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" }, + { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" }, + { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" }, + { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" }, + { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" }, + { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" }, + { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" }, + { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" }, + { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" }, + { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" }, + { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" }, + { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" }, + { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" }, + { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" }, + { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" }, + { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" }, + { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" }, + { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" }, + { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" }, + { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" }, + { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" }, +] + +[[package]] +name = "pydantic-settings" +version = "2.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5c/b5/8f48e906c3e0205276e8bd8cb7512217a87b2685304d64be27cad5b3019f/pydantic_settings-2.14.2.tar.gz", hash = "sha256:c19dd64b19097f1de80184f0cc7b0272a13ae6e170cbf240a3e27e381ed14a5f", size = 237700, upload-time = "2026-06-19T13:44:56.324Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/c1/6e422f34e569cf8e18df68d1939c81c099d2b61e4f7d9621c8a77560799c/pydantic_settings-2.14.2-py3-none-any.whl", hash = "sha256:a20c97b37910b6550d5ea50fbcc2d4187defe58cd57070b73863d069419c9440", size = 61715, upload-time = "2026-06-19T13:44:55.02Z" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3b/81/58d0ac84e1ef3a3843791d6954d94c0b33d526c75eeb1efbce9d0a4c4077/pyjwt-2.13.0.tar.gz", hash = "sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423", size = 107515, upload-time = "2026-05-21T19:54:36.618Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/5e/ecf12fdb62546d64385c158514e9b2b671f7832108ef2ecd2020ce0af2d1/pyjwt-2.13.0-py3-none-any.whl", hash = "sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728", size = 31274, upload-time = "2026-05-21T19:54:35.362Z" }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography" }, +] + +[[package]] +name = "pyperclip" +version = "1.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/52/d87eba7cb129b81563019d1679026e7a112ef76855d6159d24754dbd2a51/pyperclip-1.11.0.tar.gz", hash = "sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6", size = 12185, upload-time = "2025-09-26T14:40:37.245Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/80/fc9d01d5ed37ba4c42ca2b55b4339ae6e200b456be3a1aaddf4a9fa99b8c/pyperclip-1.11.0-py3-none-any.whl", hash = "sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273", size = 11063, upload-time = "2025-09-26T14:40:36.069Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, +] + +[[package]] +name = "python-multipart" +version = "0.0.32" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/42/55c32bb9b12693c092ad250a0e82edb5b31ddeda6eb772de5f308b3804ad/python_multipart-0.0.32.tar.gz", hash = "sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e", size = 46881, upload-time = "2026-06-04T16:18:58.647Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23", size = 30042, upload-time = "2026-06-04T16:18:57.319Z" }, +] + +[[package]] +name = "pywin32" +version = "312" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/ff/32aa7d2ed0ab12b323aaa64f9b75e6ad4f8fd09f9ccfc28c79414d46838d/pywin32-312-cp312-cp312-win32.whl", hash = "sha256:dab4f65ac9c4e48400a2a0530c46c3c579cd5905ecd11b80692373915269208b", size = 6371877, upload-time = "2026-06-04T07:49:28.836Z" }, + { url = "https://files.pythonhosted.org/packages/03/d9/77040d3b43df3f3be32ea289433d660d2727f5ba327bc73be835127d9d60/pywin32-312-cp312-cp312-win_amd64.whl", hash = "sha256:b457f6d628a47e8a7346ce22acb7e1a46a4a78b52e1d17e1af56871bd19a93bc", size = 6914841, upload-time = "2026-06-04T07:49:31.85Z" }, + { url = "https://files.pythonhosted.org/packages/e3/cc/7b1ec671775756020a0ee7f4feeaf3c568f0ab86bd3900088cf986937a92/pywin32-312-cp312-cp312-win_arm64.whl", hash = "sha256:6017c58e12f6809fbb0555b75df144c2922a9ffd18e4b9b5afa863b6c1a9d950", size = 6727901, upload-time = "2026-06-04T07:49:34.244Z" }, + { url = "https://files.pythonhosted.org/packages/2d/41/12fbfd7f36ed2146d8bc9de96c2741296bf0d490b98508496cff322e274c/pywin32-312-cp313-cp313-win32.whl", hash = "sha256:7a27df850933d16a8eabfbaeb73d52b273e2da667f80d70b01a89d1f6828d02c", size = 6370184, upload-time = "2026-06-04T07:49:36.253Z" }, + { url = "https://files.pythonhosted.org/packages/ba/db/36a78e3403099d31d9746d13fdcde5accc43c1155f375a34d15983a479a7/pywin32-312-cp313-cp313-win_amd64.whl", hash = "sha256:c53e878d15a1c44788082bfe712a905433473aa38f86375b7cf8b45e3acbaaf9", size = 6914298, upload-time = "2026-06-04T07:49:38.876Z" }, + { url = "https://files.pythonhosted.org/packages/84/37/c1697194092b76de9ed47ca124323f02c57ffc8a45c06f88a3d5acaf01eb/pywin32-312-cp313-cp313-win_arm64.whl", hash = "sha256:59aba5d5940842075343a5ddc6b11f1cdf0d1567fe745290359dfbcc7c2eb831", size = 6727640, upload-time = "2026-06-04T07:49:41.083Z" }, + { url = "https://files.pythonhosted.org/packages/fc/2b/1f3cded5822fd49c02f40544cbb5f58c7cfd6b1694869fd476cb6170ee97/pywin32-312-cp314-cp314-win32.whl", hash = "sha256:a77a90fbb6881238d2ca9c6fd797b25817f3768fe78d214a90137ff055a75f5b", size = 6468928, upload-time = "2026-06-04T07:49:43.188Z" }, + { url = "https://files.pythonhosted.org/packages/21/82/3bf86d2e2808902013132e1ce905a7da0da53790f3836c64bf44d55e24f3/pywin32-312-cp314-cp314-win_amd64.whl", hash = "sha256:a4dd3a848290ef724347b19f301045831d8e802fa4464f491b98b1e0a081432e", size = 7024157, upload-time = "2026-06-04T07:49:45.34Z" }, + { url = "https://files.pythonhosted.org/packages/a4/0e/73f6d6800b4f27655abd9e9f6aaeaefcddb2b946e4674efa2bab184a7f7b/pywin32-312-cp314-cp314-win_arm64.whl", hash = "sha256:9fce94568364e0155e6dfb781ac5d95903be8baf28670632beab1b523f300daa", size = 6839598, upload-time = "2026-06-04T07:49:47.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/61/caa39686032d2ebdd04ff0ab5cbe163126c0066d98e00c9018646e42393b/pywin32-312-cp315-cp315-win32.whl", hash = "sha256:5c1fbe4a937a73ae9297384a3da38518cbc694c68ad8a809b2e19acd350f03ed", size = 6471159, upload-time = "2026-06-04T07:49:50.035Z" }, + { url = "https://files.pythonhosted.org/packages/0f/cd/7e1de64a4a6f69c04214169657ccab0d93a670ea50e35eb8f489d7378249/pywin32-312-cp315-cp315-win_amd64.whl", hash = "sha256:c2f03a0f73f804a13c2735b99392b0cd426bb4f2c4d0178e5ac966a0f21618d5", size = 7025293, upload-time = "2026-06-04T07:49:54.857Z" }, + { url = "https://files.pythonhosted.org/packages/23/ed/4532e9388e65fa16b46776ef47ad631a64eda1631884488af707666350ed/pywin32-312-cp315-cp315-win_arm64.whl", hash = "sha256:a8597d28f267b39074aef51fa593530082b39cbe5a074226096857b1fed2dfb9", size = 6840337, upload-time = "2026-06-04T07:49:57.531Z" }, +] + +[[package]] +name = "pywin32-ctypes" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471, upload-time = "2024-08-14T10:15:34.626Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, +] + +[[package]] +name = "rich" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, +] + +[[package]] +name = "rich-rst" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, + { name = "rich" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e2/d6/d0b9fafc73b65767200da027acab1db1bdb1048f4fea5ebf659df01c700e/rich_rst-2.1.0.tar.gz", hash = "sha256:f4d117b49697f338769759fa5cacf5197da4888b347b9fda2e50aef5cd8d93bd", size = 302732, upload-time = "2026-07-05T02:59:44.308Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/68/1fc93dd759605b5d00fc98b50200739e41ed32bd22d6ba35ca6c3932371b/rich_rst-2.1.0-py3-none-any.whl", hash = "sha256:7ecd1343ee12c879d0e7ae74c3eb6d263b023d2929c6d114212eb1fd91057255", size = 272987, upload-time = "2026-07-05T02:59:42.792Z" }, +] + +[[package]] +name = "rpds-py" +version = "2026.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/2a/9618a122aeb2a169a28b03889a2995fe297588964333d4a7d67bdf46e147/rpds_py-2026.6.3.tar.gz", hash = "sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4", size = 64051, upload-time = "2026-06-30T07:17:53.009Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/be/2e8974163072e7bab7df1a5acd54c4498e75e35d6d18b864d3a9d5dadc92/rpds_py-2026.6.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0", size = 343691, upload-time = "2026-06-30T07:15:14.96Z" }, + { url = "https://files.pythonhosted.org/packages/a4/73/319dfa745dd668efe89309141ded489126461fcecd2b8f3a3cda185129b6/rpds_py-2026.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf", size = 338542, upload-time = "2026-06-30T07:15:16.267Z" }, + { url = "https://files.pythonhosted.org/packages/21/63/4239893be1c4d09b709b1a8f6be4188f0870084ff547f46606b8a75f1b03/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24", size = 368180, upload-time = "2026-06-30T07:15:17.62Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ca/9c5de382225234ceb37b1844ebdb140db12b2a278bb9efe2fcd19f6c82ce/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e", size = 375067, upload-time = "2026-06-30T07:15:18.952Z" }, + { url = "https://files.pythonhosted.org/packages/87/dc/863f69d1bf04ade34b7fe0d59b9fdf6f0135fe2d7cbca74f1d665589559d/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975", size = 490509, upload-time = "2026-06-30T07:15:20.434Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ef/eac16a12048b45ec7c7fa94f2be3438a5f26bf9cc8580b18a1cfd609b7f6/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680", size = 382754, upload-time = "2026-06-30T07:15:21.831Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/d2f3f532616be4d06c316ef119683e832bd3d41e112bf3a88f4151c95b17/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6", size = 366189, upload-time = "2026-06-30T07:15:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/e3/29/41a7b0e98a4b44cd676ab7598419623373eb43b20be68c084935c1a8cf88/rpds_py-2026.6.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a", size = 377750, upload-time = "2026-06-30T07:15:24.659Z" }, + { url = "https://files.pythonhosted.org/packages/2e/05/ecda0bec46f9a1565090bcdc941d023f6a25aff85fda28f89f8d19878152/rpds_py-2026.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4", size = 395576, upload-time = "2026-06-30T07:15:25.987Z" }, + { url = "https://files.pythonhosted.org/packages/68/a8/6ed52f03ee6cb854ce78785cc9a9a672eb880e83fd7224d471f667d151f1/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa", size = 543807, upload-time = "2026-06-30T07:15:27.356Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d6/156c0d3eea27ba09b92562ba2364ba124c0a061b199e17eac637cd25a5e2/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc", size = 611187, upload-time = "2026-06-30T07:15:28.931Z" }, + { url = "https://files.pythonhosted.org/packages/f1/31/774212ed989c62f7f310220089f9b0a3fb8f40f5443d1727abd5d9f52bc9/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822", size = 573030, upload-time = "2026-06-30T07:15:30.553Z" }, + { url = "https://files.pythonhosted.org/packages/c9/50/22f73127a41f1ce4f87fe39aadfb9a126345801c274aa93ae88456249327/rpds_py-2026.6.3-cp312-cp312-win32.whl", hash = "sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed", size = 202185, upload-time = "2026-06-30T07:15:32.027Z" }, + { url = "https://files.pythonhosted.org/packages/04/3a/f0ee4d4dde9d3b69dedf1b5f74e7a40017046d55052d173e418c6a94f960/rpds_py-2026.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f", size = 220394, upload-time = "2026-06-30T07:15:33.359Z" }, + { url = "https://files.pythonhosted.org/packages/f3/83/3382fe37f809b59f02aac04dbc4e765b480b46ee0227ed516e3bdc4d3dfc/rpds_py-2026.6.3-cp312-cp312-win_arm64.whl", hash = "sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96", size = 215753, upload-time = "2026-06-30T07:15:34.778Z" }, + { url = "https://files.pythonhosted.org/packages/a4/9e/b818ee580026ec578138e961027a68820c40afeb1ec8f6819b54fb99e196/rpds_py-2026.6.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223", size = 343012, upload-time = "2026-06-30T07:15:36.005Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6b/686d9dc4359a8f163cfbbf89ee0b4e586431de22fe8248edb63a8cf50d49/rpds_py-2026.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f", size = 338203, upload-time = "2026-06-30T07:15:37.462Z" }, + { url = "https://files.pythonhosted.org/packages/9e/9b/069aa329940f8207615e091f5eedbbd40e1e15eac68a0790fd05ccdf796c/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f", size = 367984, upload-time = "2026-06-30T07:15:39.008Z" }, + { url = "https://files.pythonhosted.org/packages/14/db/34c203e4becff3703e4d3bc121842c00b8689197f398161203a880052f4e/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7", size = 374815, upload-time = "2026-06-30T07:15:40.253Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7d/8071067d2cc453d916ad836e828c943f575e8a44612537759002a1e07381/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6", size = 490545, upload-time = "2026-06-30T07:15:41.729Z" }, + { url = "https://files.pythonhosted.org/packages/a3/42/da06c5aa8f0484ff07f270787434204d9f4535e2f8c3b51ed402267e63c3/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af", size = 382828, upload-time = "2026-06-30T07:15:43.327Z" }, + { url = "https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf", size = 365678, upload-time = "2026-06-30T07:15:44.992Z" }, + { url = "https://files.pythonhosted.org/packages/69/9d/1d8922e1990b2a6eb532b6ff53d3e73d2b3bbffc84116c75826bee73dfc6/rpds_py-2026.6.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885", size = 377811, upload-time = "2026-06-30T07:15:46.523Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3d/198dceafb4fb034a6a47347e1b0735d34e0bd4a50be4e898d408ee66cb14/rpds_py-2026.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4", size = 395382, upload-time = "2026-06-30T07:15:47.955Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f1/13968e49655d40b6b19d8b9140296bbc6f1d86b3f0f6c346cf9f1adddf4b/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7", size = 543832, upload-time = "2026-06-30T07:15:49.33Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ab/289bcb1b90bd3e40a2900c561fa0e2087345ecbb094f0b870f2345142b7c/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d", size = 611011, upload-time = "2026-06-30T07:15:50.847Z" }, + { url = "https://files.pythonhosted.org/packages/1e/16/5043105e679436ccfbc8e5e0dd2d663ed18a8b8113515fd06a5e5d77c83e/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97", size = 572431, upload-time = "2026-06-30T07:15:52.394Z" }, + { url = "https://files.pythonhosted.org/packages/85/ed/adab103321c0a6565d5ae1c2998349bc3ee175b82ccc5ae8fc04cc413075/rpds_py-2026.6.3-cp313-cp313-win32.whl", hash = "sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0", size = 201710, upload-time = "2026-06-30T07:15:53.894Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ed/a03b09668e74e5dabbf2e211f6468e1820c0552f7b0500082da31841bf7b/rpds_py-2026.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80", size = 219454, upload-time = "2026-06-30T07:15:55.25Z" }, + { url = "https://files.pythonhosted.org/packages/27/17/b8642c12930b71bc2b25831f6708ccf0f75abcd11883932ec9ce54ba3a78/rpds_py-2026.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb", size = 215063, upload-time = "2026-06-30T07:15:56.573Z" }, + { url = "https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e", size = 344510, upload-time = "2026-06-30T07:15:57.921Z" }, + { url = "https://files.pythonhosted.org/packages/ba/54/f785cc3d3f60839ca57a5af4927a9f347b07b2799c373fc20f7949f87c7e/rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd", size = 339495, upload-time = "2026-06-30T07:15:59.238Z" }, + { url = "https://files.pythonhosted.org/packages/63/ef/d4cdaf309e6b095b43597103cf8c0b951d6cca2acce68c474f75ec12e0c7/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d", size = 369454, upload-time = "2026-06-30T07:16:01.021Z" }, + { url = "https://files.pythonhosted.org/packages/96/4a/9559a68b7ee15db09d7981212e8c2e219d2a1d6d4faa0391d813c3496a36/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda", size = 374583, upload-time = "2026-06-30T07:16:02.287Z" }, + { url = "https://files.pythonhosted.org/packages/ef/75/8964aa7d2c6e8ac43eba8eb6e6b0fdda1f46d39f2fc3e6aa9f2cb17f485d/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8", size = 492919, upload-time = "2026-06-30T07:16:03.723Z" }, + { url = "https://files.pythonhosted.org/packages/8f/97/6908094ac804115e65aedfd90f1b5fee4eebebd3f6c4cfc5419939267565/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53", size = 383725, upload-time = "2026-06-30T07:16:05.305Z" }, + { url = "https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504", size = 367255, upload-time = "2026-06-30T07:16:07.086Z" }, + { url = "https://files.pythonhosted.org/packages/c4/fe/f0209ca4a9ed074bc8acb44dfd0e81c3122e94c9689f5645b7973a866719/rpds_py-2026.6.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc", size = 379060, upload-time = "2026-06-30T07:16:08.525Z" }, + { url = "https://files.pythonhosted.org/packages/c6/8d/f1cc54c616b9d8897de8738aac148d20afca93f68187475fe194d09a71b9/rpds_py-2026.6.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77", size = 395960, upload-time = "2026-06-30T07:16:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/fb/04/aafff00f73aeca2945f734f1d483c64ab8f472d0864ab02377fd8e89c3b2/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698", size = 545356, upload-time = "2026-06-30T07:16:11.816Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cc/e229663b9e4ddac5a4acbe9085dd80a71af2a5d356b8b39d6bff233f24b0/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd", size = 612319, upload-time = "2026-06-30T07:16:13.586Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7a/8a0e6d3e6cd066af108b71b43122c3fe158dd9eb86acac626593a2582eb1/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d", size = 573508, upload-time = "2026-06-30T07:16:15.23Z" }, + { url = "https://files.pythonhosted.org/packages/87/03/2a69ab618a789cf6cf85c86bb844c62d090e700ab1a2aa676b3741b6c516/rpds_py-2026.6.3-cp314-cp314-win32.whl", hash = "sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8", size = 202504, upload-time = "2026-06-30T07:16:16.893Z" }, + { url = "https://files.pythonhosted.org/packages/85/62/a3892ba945f4e24c78f352e5de3c7620d8479f73f211406a97263d13c7d2/rpds_py-2026.6.3-cp314-cp314-win_amd64.whl", hash = "sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5", size = 220380, upload-time = "2026-06-30T07:16:18.108Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e7/c2bd44dc831931815ad11ebb5f430b5a0a4d3caa9de837107876c30c3432/rpds_py-2026.6.3-cp314-cp314-win_arm64.whl", hash = "sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703", size = 215976, upload-time = "2026-06-30T07:16:19.654Z" }, + { url = "https://files.pythonhosted.org/packages/79/9c/fff7b74bce9a091ec9a012a03f9ff5f69364eaf9451060dfc4486da2ffdd/rpds_py-2026.6.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90", size = 346840, upload-time = "2026-06-30T07:16:21.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/77bcb1168b33704908295533d27f10eb811e9e3e193e8993dc99572211d3/rpds_py-2026.6.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4", size = 340282, upload-time = "2026-06-30T07:16:22.875Z" }, + { url = "https://files.pythonhosted.org/packages/87/3c/7a9081c7c9e645b39efe19e4ffbeccd80add246327cd9b888aecffd72317/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9", size = 370403, upload-time = "2026-06-30T07:16:24.415Z" }, + { url = "https://files.pythonhosted.org/packages/f7/69/af47021eb7dad6ff3396cb001c08f0f3c4d06c20253f75be6421a59fe6b7/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f", size = 376055, upload-time = "2026-06-30T07:16:26.111Z" }, + { url = "https://files.pythonhosted.org/packages/81/fc/a3bcf517084396a6dd258c592567a3c011ba4557f2fde23dceaf26e74f2e/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41", size = 494419, upload-time = "2026-06-30T07:16:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/c9/eb/13d529d1788135425c7bf207f8463458ca5d92e43f3f701365b83e9dffc1/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945", size = 384848, upload-time = "2026-06-30T07:16:29.183Z" }, + { url = "https://files.pythonhosted.org/packages/8e/f4/b7ac49f30013aba8f7b9566b1dd07e81de95e708c1374b7bacc5b9bc5c9c/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f", size = 371369, upload-time = "2026-06-30T07:16:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/31/86/6260bafa622f788b07ddec0e52d810305c8b9b0b8c27f58a2ab04bf62b4f/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1", size = 379673, upload-time = "2026-06-30T07:16:32.486Z" }, + { url = "https://files.pythonhosted.org/packages/19/c3/03f1ee79a047b48daeca157c89a18509cde22b6b951d642b9b0af1be660a/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e", size = 397500, upload-time = "2026-06-30T07:16:34.471Z" }, + { url = "https://files.pythonhosted.org/packages/f0/95/8ed0cd8c377dca12aea498f119fe639fc474d1461545c39d2b5872eb1c0f/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538", size = 545978, upload-time = "2026-06-30T07:16:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/0eb57f0eaa83f8fc152a7e03de968ab77e1f00732bebc892b190c6eebde7/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db", size = 613350, upload-time = "2026-06-30T07:16:38.213Z" }, + { url = "https://files.pythonhosted.org/packages/5b/de/e0674bdbc3ef7634989b3f854c3f34bc1f587d36e5bfdc5c378d57034619/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2", size = 576486, upload-time = "2026-06-30T07:16:39.797Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f6/21101359743cd136ada781e8210a85769578422ba460672eea0e29739200/rpds_py-2026.6.3-cp314-cp314t-win32.whl", hash = "sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e", size = 201068, upload-time = "2026-06-30T07:16:41.316Z" }, + { url = "https://files.pythonhosted.org/packages/a6/b2/9574d4d44f7760c2aa32d92a0a4f41698e33f5b204a0bf5c9758f52c79d5/rpds_py-2026.6.3-cp314-cp314t-win_amd64.whl", hash = "sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2", size = 220600, upload-time = "2026-06-30T07:16:43.091Z" }, + { url = "https://files.pythonhosted.org/packages/08/ae/f23a2697e6ee6340a578b0f136be6483657bef0c6f9497b752bb5c0964bb/rpds_py-2026.6.3-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13", size = 344726, upload-time = "2026-06-30T07:16:44.5Z" }, + { url = "https://files.pythonhosted.org/packages/c3/63/e7b3a1a5358dd32c930a1062d8e15b67fd6e8922e81df9e91706d66ee5c8/rpds_py-2026.6.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05", size = 339587, upload-time = "2026-06-30T07:16:46.255Z" }, + { url = "https://files.pythonhosted.org/packages/ec/64/10a85681916ca55fffb91b0a211f84e34297c109243484dd6394660a8a7c/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba", size = 369585, upload-time = "2026-06-30T07:16:48.101Z" }, + { url = "https://files.pythonhosted.org/packages/76/c2/baf95c7c38823e12ba34407c5f5767a89e5cf2233895e56f608167ae9493/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617", size = 375479, upload-time = "2026-06-30T07:16:49.93Z" }, + { url = "https://files.pythonhosted.org/packages/6a/94/0aad06c72d65101e11d33528d438cda99a39ce0da99466e156158f2541d3/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9", size = 492418, upload-time = "2026-06-30T07:16:51.641Z" }, + { url = "https://files.pythonhosted.org/packages/b5/17/de3f5a479a1f056535d7489819639d8cd591ea6281d700390b43b1abd745/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb", size = 384123, upload-time = "2026-06-30T07:16:53.622Z" }, + { url = "https://files.pythonhosted.org/packages/46/7d/bf09bd1b145bb2671c03e1e6d1ab8651858d90d8c7dfeadd85a37a934fd8/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885", size = 367351, upload-time = "2026-06-30T07:16:55.241Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ea/1bb734f314b8be319149ddee80b18bd41372bdcfbdf88d28131c0cd37719/rpds_py-2026.6.3-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a", size = 378827, upload-time = "2026-06-30T07:16:56.841Z" }, + { url = "https://files.pythonhosted.org/packages/4b/93/d9611e5b25e26df9a3649813ed66193ace9347a7c7fc4ab7cf70e94851c0/rpds_py-2026.6.3-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868", size = 395966, upload-time = "2026-06-30T07:16:58.557Z" }, + { url = "https://files.pythonhosted.org/packages/c3/cb/99d77e16e5534ae1d90629bbe419ba6ee170833a6a85e3aa1cc41726fbbc/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187", size = 545680, upload-time = "2026-06-30T07:17:00.164Z" }, + { url = "https://files.pythonhosted.org/packages/59/15/11a29755f790cef7a2f755e8e14f4f0c33f39489e1893a632a2eee59672b/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107", size = 611853, upload-time = "2026-06-30T07:17:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/0c27547e21644da938fb530f7e1a8148dd24d02db07e7a5f2567a17ce710/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba", size = 573715, upload-time = "2026-06-30T07:17:03.693Z" }, + { url = "https://files.pythonhosted.org/packages/29/71/4d8fcf700931815594bce892255bbd973b94efaf0fc1932b0590df18d886/rpds_py-2026.6.3-cp315-cp315-win32.whl", hash = "sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369", size = 202864, upload-time = "2026-06-30T07:17:05.746Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/b577562de0edbb55b2be85ce5fd09c33e386b9b13eee09833af4240fd5c4/rpds_py-2026.6.3-cp315-cp315-win_amd64.whl", hash = "sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146", size = 220430, upload-time = "2026-06-30T07:17:07.471Z" }, + { url = "https://files.pythonhosted.org/packages/c8/95/d6d0b2509825141eef60669a5739eec88dbc6a48053d6c92993a5704defe/rpds_py-2026.6.3-cp315-cp315-win_arm64.whl", hash = "sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e", size = 215877, upload-time = "2026-06-30T07:17:09.008Z" }, + { url = "https://files.pythonhosted.org/packages/b7/bf/f3ea278f0afd615c1d0f19cb69043a41526e2bb600c2b536eb192218eb27/rpds_py-2026.6.3-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b", size = 346933, upload-time = "2026-06-30T07:17:10.762Z" }, + { url = "https://files.pythonhosted.org/packages/9d/29/9907bdf1c5346763cf10b7f6852aad86652168c259def904cbe0082c5864/rpds_py-2026.6.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690", size = 340274, upload-time = "2026-06-30T07:17:12.266Z" }, + { url = "https://files.pythonhosted.org/packages/6f/2c/8e03767b5778ef25cebf74a7a91a2c3806f8eced4c92cb7406bbe060756d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342", size = 370763, upload-time = "2026-06-30T07:17:14.107Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e1/df2a7e1ba2efd796af26194250b8d42c821b46592311595162af9ef0528d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6", size = 376467, upload-time = "2026-06-30T07:17:15.76Z" }, + { url = "https://files.pythonhosted.org/packages/6b/de/8a0814d1946af29cb068fb259aa8622f856df1d0bab58429448726b537f5/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140", size = 496689, upload-time = "2026-06-30T07:17:17.308Z" }, + { url = "https://files.pythonhosted.org/packages/df/f3/f19e0c852ba13694f5a79f3b719331051573cb5693feacf8a88ffffc3a71/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442", size = 385340, upload-time = "2026-06-30T07:17:18.928Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ae/7ec3a9d2d4351f99e37bcb06b6b6f954512646bfdbf9742e1de727865daf/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12", size = 372179, upload-time = "2026-06-30T07:17:20.539Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ac/9cee911dff2aaa9a5a8354f6610bf2e6a616de9197c5fff4f54f82585f1e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5", size = 379993, upload-time = "2026-06-30T07:17:22.212Z" }, + { url = "https://files.pythonhosted.org/packages/83/6b/7c2a07ba88d1e9a936612f7a5d067467ed03d971d5a06f7d309dff044a7e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf", size = 398909, upload-time = "2026-06-30T07:17:23.66Z" }, + { url = "https://files.pythonhosted.org/packages/97/0b/776ffcb66783637b0031f6d58d6fb55913c8b5abf00aeecd46bf933fb477/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00", size = 546584, upload-time = "2026-06-30T07:17:25.264Z" }, + { url = "https://files.pythonhosted.org/packages/55/33/ba3bc04d7092bd553c9b2b195624992d2cc4f3de1f380b7b93cbee67bd79/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef", size = 614357, upload-time = "2026-06-30T07:17:26.888Z" }, + { url = "https://files.pythonhosted.org/packages/8b/71/14edf065f04630b1a8472f7653cad03f6c478bcf95ea0e6aed55451e33ea/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a", size = 576533, upload-time = "2026-06-30T07:17:28.546Z" }, + { url = "https://files.pythonhosted.org/packages/ba/76/65002b08596c389105720a8c0d22298b8dc25a4baf89b2ce431343c8b1de/rpds_py-2026.6.3-cp315-cp315t-win32.whl", hash = "sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577", size = 201204, upload-time = "2026-06-30T07:17:30.193Z" }, + { url = "https://files.pythonhosted.org/packages/8c/97/d855d6b3c322d1f27e26f5241c42016b56cf01377ea8ed348285f54652f0/rpds_py-2026.6.3-cp315-cp315t-win_amd64.whl", hash = "sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324", size = 220719, upload-time = "2026-06-30T07:17:31.788Z" }, +] + +[[package]] +name = "secretstorage" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "jeepney" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl", hash = "sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137", size = 15554, upload-time = "2025-11-23T19:02:51.545Z" }, +] + +[[package]] +name = "sse-starlette" +version = "3.4.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "starlette" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/10/a34c656829ffc1c4b22ef36d70d9ebb6b99c020e2aeb17cee5485099f028/sse_starlette-3.4.6.tar.gz", hash = "sha256:725f8a1bd6d26ae1b2c9610c0ef5065dfdd496f3988d28adcf8c4b49dc25c627", size = 32542, upload-time = "2026-07-20T14:16:32.201Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/36/e10c1d1b7ca881d2625db2ec28508578499187bb1c389952c398474e1834/sse_starlette-3.4.6-py3-none-any.whl", hash = "sha256:56217ab4c9a9f9c5db7b21e08732d3e7c2b807f45231ad23de0551a24c4a41f6", size = 16516, upload-time = "2026-07-20T14:16:30.978Z" }, +] + +[[package]] +name = "starlette" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/e3/7c1dc7381d9f8ab7d854328ebfa884e62cb3f3d8549ddfd37c7814f42afa/starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0", size = 2703240, upload-time = "2026-06-12T09:23:11.602Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/bb/2799cc2ede3ed41131f8975621e7213dfc7ef4acbbaadfa440f32500c370/starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6", size = 73632, upload-time = "2026-06-12T09:23:10.017Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + +[[package]] +name = "uncalled-for" +version = "0.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/82/345cc927f7fbdae6065e7768759932fcc827fc20b29b45dfbafa2f1f7da4/uncalled_for-0.3.2.tar.gz", hash = "sha256:89f5dbcd71e2b8f47c030b1fa302e6cce2ec795d1ac565eeb6525c5fe55cb8a2", size = 50032, upload-time = "2026-05-06T13:38:25.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/25/2c87754f3a9e692315f7b811244090e68f362979fc8886b3fbd2985a1d8c/uncalled_for-0.3.2-py3-none-any.whl", hash = "sha256:0ff60b142c7d1f8070bde9d42afaa70aedc77dcc10998c227687e9c15713418e", size = 11444, upload-time = "2026-05-06T13:38:24.025Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.51.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a2/65/b7c6c443ccc58678c91e1e973bbe2a878591538655d6e1d47f24ba1c51f3/uvicorn-0.51.0.tar.gz", hash = "sha256:f6f4b69b657c312f516dd2d268ab9ae6f254b11e4bac504f37b2ab58b24dd0b0", size = 94412, upload-time = "2026-07-08T10:59:05.962Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/ec/dbb7e5a6b91f86bfb9eb7d2988a2730907b6a729875b949c7f022e8b88fa/uvicorn-0.51.0-py3-none-any.whl", hash = "sha256:5d38af6cd620f2ae3849fb44fd4879e0890aa1febe8d47eb355fb45d93fe6a5b", size = 73219, upload-time = "2026-07-08T10:59:04.44Z" }, +] + +[[package]] +name = "watchfiles" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/41/5e1a4bb12aac5f1493fa1bdc11154eca3b258ca4eba65d39c473fe19d8e9/watchfiles-1.2.0.tar.gz", hash = "sha256:c995fba777f1ea992f090f9236e9284cf7a5d1a0130dd5a3d82c598cacd76838", size = 108252, upload-time = "2026-05-18T04:32:04.251Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/2f/e42c992d2afda3108ea1c02acecc991b9f31d05c14adc2a7cee9ee211fc4/watchfiles-1.2.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:bc13eb17538be00c874699dc0abe4ee2bc8d50bb1166a6b9e175ef3fd7eb8f26", size = 400115, upload-time = "2026-05-18T04:32:02.06Z" }, + { url = "https://files.pythonhosted.org/packages/5f/8f/6af2ea19065c91d8b0ea3516fdfc8c0d349f407e8e9fbf4e5a17360de8ad/watchfiles-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d95ddc1eb6914154253d239089900813f6a767e174b8e6a50e7fdacb7e4236c", size = 393659, upload-time = "2026-05-18T04:30:50.951Z" }, + { url = "https://files.pythonhosted.org/packages/13/01/b32a967c56fb3e3e5be3db52c3d3b87fa4513aa367d8ed1ad96d42952e5f/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f70d8b291ef6e88d19b1f297a6905ddb978888d9272b0d05e6f53309856bcfc", size = 453207, upload-time = "2026-05-18T04:31:04.231Z" }, + { url = "https://files.pythonhosted.org/packages/04/98/97557a812180338cb1abd32e1cffcc4588f59b5f23e0cb006b2ba95ba64a/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:56d8641cf834c2836922899105bd3ce3d0dfc69291d52edf0b4d0436829b34c0", size = 459273, upload-time = "2026-05-18T04:31:50.377Z" }, + { url = "https://files.pythonhosted.org/packages/e8/a8/b4b08dcb7653b8087c6586f7ce649505900e866bbcfe40dc9587af02e686/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2581a94056e55d7d0a31a823ea92bf73749c489ca2285bfdc0fbe6b2bb49d50c", size = 489927, upload-time = "2026-05-18T04:31:42.485Z" }, + { url = "https://files.pythonhosted.org/packages/50/94/3dceea03545d2e5ddfd839f0ddd5e1cecbf1697b5a428d5ba11cef6af95d/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41bc1199f7523b3f82843c88cbb979180c949caef0342cf90968f178e5d49b01", size = 570476, upload-time = "2026-05-18T04:31:03.071Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f2/d39a5450c3532092b91f81d274360e613c2371bc874a89c7a1a3c5e8d138/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7571e4464cb6e434958f867f7f730b8ab0b75e3f8e5eac0499168486ab3c33a8", size = 465650, upload-time = "2026-05-18T04:30:12.701Z" }, + { url = "https://files.pythonhosted.org/packages/22/24/ed72f68cbc1333ca9b9f2200aa048bb6658ae41709bc1caad4310f4bdffd/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e53a384f76b631c3ae5334ce6a52f0baa3a911eb94a4eac7f160079868b716d5", size = 456398, upload-time = "2026-05-18T04:30:13.784Z" }, + { url = "https://files.pythonhosted.org/packages/0d/64/982ef4a4e5bab5b6e5b6becc8cd5e732f6130a78b855f0abec6439a9a135/watchfiles-1.2.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:d20029a60a71a052a24c4db7673bc4de39ab89adbaccbfb5d67987c5d73f424d", size = 465140, upload-time = "2026-05-18T04:31:52.111Z" }, + { url = "https://files.pythonhosted.org/packages/a0/0c/95282abf4ed680b6096010bcfc30c5fa7a041fc5aa5a2ad17a2cc6c75bba/watchfiles-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2cb93af48550faf1cea04c303107c8b75833de7013e57ce27d3b8d21d8d0f58c", size = 630259, upload-time = "2026-05-18T04:31:25.676Z" }, + { url = "https://files.pythonhosted.org/packages/30/45/607c1de1530c4bdcf2cf1d1ecc2505ddba5d96bd43ba9f2b0e79876f850f/watchfiles-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2995c176de7692b86a2e4c58d9ec718f753150a979cb4a754e2b4ffa38e70906", size = 659859, upload-time = "2026-05-18T04:30:24.333Z" }, + { url = "https://files.pythonhosted.org/packages/fa/08/d9e2e0f9e8e6791d33aefc694ad7eefa7f901f63caff84a81ded38692f9c/watchfiles-1.2.0-cp312-cp312-win32.whl", hash = "sha256:7a2cffd17d27d2ecbb310c2b1d8174f222a5495b1a721894afa88ec11e25b898", size = 275480, upload-time = "2026-05-18T04:30:31.307Z" }, + { url = "https://files.pythonhosted.org/packages/1c/e6/9d42569c0102645cc8cea5d8c7d8a1e9d4ada2cb7f05f75e554b8aa2202a/watchfiles-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:f155b3a1b2a5fc89cdc70d47ee5d54e3b75e88efa34982028a35daef9ba00379", size = 288718, upload-time = "2026-05-18T04:32:10.745Z" }, + { url = "https://files.pythonhosted.org/packages/0a/26/88e0dc6ee3898169d7fa22bb6a69cabf2502d2ee25cb8c876d1262d204f8/watchfiles-1.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:8fa585ede612ee9f9e91b18bebf9ba11b9ae29a4e3a0d0cf6fca3e382133f0d5", size = 281026, upload-time = "2026-05-18T04:30:22.23Z" }, + { url = "https://files.pythonhosted.org/packages/d1/4d/70a7feced9f87e2ff26dba42667290f41694fc64646c67261fbb8cab5d5c/watchfiles-1.2.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:01ea8d66f0693b9b60a6541c8d10263091ca9a9060d242f3c1f3143f9aad2c98", size = 399730, upload-time = "2026-05-18T04:31:38.162Z" }, + { url = "https://files.pythonhosted.org/packages/31/3a/0da302f2307aee316922806ebd5726c542cbd787c938271cf14a074c7daf/watchfiles-1.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ba0480b9a74af058f43b337e937a451e109295c420916d68ad24e3dc02f5e44", size = 392842, upload-time = "2026-05-18T04:30:27.051Z" }, + { url = "https://files.pythonhosted.org/packages/db/ef/d5bdb705c224dbc256aa0c1ec47bf4e61ec52558f2afb44a71a1fe4d7015/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f34e26a19f91f710c08e0183429f0d1d15df734e6bc78c31e77b9ea9c433658", size = 452989, upload-time = "2026-05-18T04:31:11.945Z" }, + { url = "https://files.pythonhosted.org/packages/71/29/5495f2c1661949ef7a35e4d71111d129cfe7606414a26887a919d0a55406/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4e77f6a55f858504069abd35d336a637555c09bca453dde1ee1e5ada8a6a1fb", size = 458978, upload-time = "2026-05-18T04:30:52.606Z" }, + { url = "https://files.pythonhosted.org/packages/d5/8c/7f9c07c433811c2fffd93e13fdfb7135de9aab5f2ae41be08960fa0047dc/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cb4d80e212f116474a545c21c912b445f16bb0cef9e6a73a498164223e14e2f", size = 490248, upload-time = "2026-05-18T04:31:36.003Z" }, + { url = "https://files.pythonhosted.org/packages/3c/11/d93632febc52fbc21be90231bb7c17fd5387f46c9076fd40a5f9c2ae6910/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b974946a10af379d425e2eef5b62f5c6ebeaccf91d45eaad6f5b27ecd4f91aa0", size = 571847, upload-time = "2026-05-18T04:31:10.862Z" }, + { url = "https://files.pythonhosted.org/packages/55/b4/383173e73aabb07ad1d9c7aa859d95437ac46a6d6a1e11005facda0c9d19/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86bc13c25a8d1fcd70b51d0ce7c9b65e90de5666fcbfd3e34957cc73ee19aeb5", size = 465974, upload-time = "2026-05-18T04:30:17.006Z" }, + { url = "https://files.pythonhosted.org/packages/a7/6c/89b1a230a78f57c52dd8893adb1f92f94411721b6ec12596c56d98c74356/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca148d73dea36c9763aaa351e4d7a51780ec1584217c45276f4fe8239c768b71", size = 454782, upload-time = "2026-05-18T04:30:35.656Z" }, + { url = "https://files.pythonhosted.org/packages/24/62/1732118367cfff0a9fce3bf62ff4bfded09ef5df21d9d446b858b3f70a96/watchfiles-1.2.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:c525543d91961c6955b2636b308569e84a1d1c5f5f2932041ab9ef46422f43e3", size = 465182, upload-time = "2026-05-18T04:30:20.846Z" }, + { url = "https://files.pythonhosted.org/packages/28/96/716f7e5f51339bf22963f3345f9f27d7f3b30e2eadc597e257c881dd3c53/watchfiles-1.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a204794696ffb8f9b10fba6f7cb5216d42f3b2b71860ccac6b6e42f5f10973b0", size = 629841, upload-time = "2026-05-18T04:31:05.397Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fe/c40783950fd771ccf66ab3ec2722d188a9af1c7f96c6e811f36e40c6e03f/watchfiles-1.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:10d86db20695afe7997ac9e1717637d6714a8d0220458c33f3d2061f54cec427", size = 658028, upload-time = "2026-05-18T04:31:48.22Z" }, + { url = "https://files.pythonhosted.org/packages/71/72/4508db1856d1d87fcbb3b63f4839bab1b5682cb0e8d224d122263c09654a/watchfiles-1.2.0-cp313-cp313-win32.whl", hash = "sha256:eb283ee99e21ad6443c8cdb06ac5b34b1308c329cbdf03fa02b445363714c799", size = 275183, upload-time = "2026-05-18T04:30:59.57Z" }, + { url = "https://files.pythonhosted.org/packages/f9/36/14b76ca57652e5cc5fd1c11f32a261292c08a0d19a00351013c2549cbfb2/watchfiles-1.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a0f27f01bee51861392bb6b7c4fdb290b27d1eb194e9e28788d68102a0e898d9", size = 288059, upload-time = "2026-05-18T04:32:07.937Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8d/0a85e395398d8d20fadfe5c5d32c726eee17a519e78fb356f2cf7531bffe/watchfiles-1.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:3651aa7058595e9cfb75d35dd5ada2bf9f48a5b8a0f3562821d3e210c507e077", size = 280186, upload-time = "2026-05-18T04:31:54.484Z" }, + { url = "https://files.pythonhosted.org/packages/37/68/36db056f1fdcc5f07302f56e631774d6835bcd6fa3ace402304621d5f9e5/watchfiles-1.2.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:faea288b6f0ab1902ef08f4ca6de005dccf856c4e0c4f21b8c5fce02d90a1b08", size = 399031, upload-time = "2026-05-18T04:30:44.576Z" }, + { url = "https://files.pythonhosted.org/packages/c1/64/01a9d6f66a82a5c101ce939274106cc72759d62427e153f01edd2b9f87c2/watchfiles-1.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01859b11fd9fbca670f4d5da00fbac282cfea9bd67a2125d8b2833a3b5617ea9", size = 391205, upload-time = "2026-05-18T04:30:25.413Z" }, + { url = "https://files.pythonhosted.org/packages/84/2c/0a44fe058cb4bb7b8ede6b6670698bbb7c0400740e378d00022189b7b31d/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fff610d7bb2256a317bb1e96f0d7862c7aa8076733ee5df0fd41bbe76a24a4f4", size = 451892, upload-time = "2026-05-18T04:32:14.005Z" }, + { url = "https://files.pythonhosted.org/packages/67/a1/351e0d56cd35e6488b5c8b4fb11a809a5bc923e8fe8fed9faf8920be0c89/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b141a4891c995a039cd89e9a49e62df1dc8a559a5d1a6e4c7106d16c12777a55", size = 458867, upload-time = "2026-05-18T04:31:22.279Z" }, + { url = "https://files.pythonhosted.org/packages/d5/7d/9d09605187f1b838998624049fcf8bf47b73c1a3b76901fcac1782f62277/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f22943b7770483f6ea0721c6b11d022947a98eb0acae14694de034f4d0d38925", size = 490217, upload-time = "2026-05-18T04:31:43.657Z" }, + { url = "https://files.pythonhosted.org/packages/60/5d/a17a16eccb182f04188cd308ec24b1a71a9b5c4e7098269cf35d9fa56d02/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1bc6195825b7dcd217968bb1f801a60fd4c16e8eeab5bedc7fe917d7d5995ab4", size = 571458, upload-time = "2026-05-18T04:32:11.875Z" }, + { url = "https://files.pythonhosted.org/packages/d3/3d/4dd457062083ab1938e5dfd45032eb425cee2ac817287ca8ff4356183e5d/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4a4b147f5dca2a5d325a06a832fb43f345751adfbc63204aec30e0d9ca965a2", size = 464707, upload-time = "2026-05-18T04:30:43.492Z" }, + { url = "https://files.pythonhosted.org/packages/c6/71/ea8c57b128f5383de74d0c7d2d9c57ad7c9a65a930c451bd25d524b295b7/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4543579a9bdb0c9560039b4ffddbdb39545707659fbc430ce4c10f3f68d557f9", size = 454663, upload-time = "2026-05-18T04:30:16.061Z" }, + { url = "https://files.pythonhosted.org/packages/53/fd/2e812bf938406d7db351f0703ddd3fc6c061cf30d96153a77bc79a943a44/watchfiles-1.2.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:20aa0e708b920bde876a4aa82dc7dd6ebea228a63a67cda6632c2fc87b787efa", size = 463537, upload-time = "2026-05-18T04:31:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/86/56/d17a7f1dd1bc3035f1072694a551301272f1739c2d8e319c927cb9e29b38/watchfiles-1.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:d413349d565dab74297f2a63e84a097936be69bf8f3b3801f27f380e32040f44", size = 629194, upload-time = "2026-05-18T04:31:14.141Z" }, + { url = "https://files.pythonhosted.org/packages/be/06/f1ff66bf5cae50aa4062779a0ecd0bbaf15e466195719074078947d9a17d/watchfiles-1.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:f28b2725eb8cce327b9b3ab02415c853011dc55c95832fe90de6bc56f5315f72", size = 656194, upload-time = "2026-05-18T04:31:47.14Z" }, + { url = "https://files.pythonhosted.org/packages/e7/54/a9c7ea9a82a4ac65e7004c0a03920b5cdd2f9c3b678757d9cd425aa51d53/watchfiles-1.2.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:b8c8358484d5fa12ef34f05b7f4168eaf1932f408725ff6d023c33ec17bd79d4", size = 400205, upload-time = "2026-05-18T04:32:05.153Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5d/c9ab3534374a4a67450696905d6ef16a04405448b8dc52bd752ae50423d4/watchfiles-1.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f04b092229ad2c50126dd3c922c8822e51e605993764a33058d4a791ab42281", size = 392508, upload-time = "2026-05-18T04:30:54.849Z" }, + { url = "https://files.pythonhosted.org/packages/26/ca/1ad30103535cf0cecd7b993e8d50edc5351b1820e38f2d22e3df58962feb/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a7ce236284f002a156f70add88efe5c70879cccbb658be0822c54b1306fc09d", size = 452448, upload-time = "2026-05-18T04:30:53.727Z" }, + { url = "https://files.pythonhosted.org/packages/37/a1/ceee2cdf2afbd715fa07758d39c9859513eae411b23196f7fd039e5feedd/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b9909cc2b48468b575eefa944919e1fe8a36c5849d5c7c168f80a8c1db69398e", size = 459605, upload-time = "2026-05-18T04:30:23.312Z" }, + { url = "https://files.pythonhosted.org/packages/e8/f6/421e30fd1cb3907a84ed92ab3f1983e37ba2dca015e9a894a048418417a2/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a37faaed405c67e28e6be45a1fa4f206ef5a2860f27c237db9fa30704c38242", size = 490757, upload-time = "2026-05-18T04:30:47.358Z" }, + { url = "https://files.pythonhosted.org/packages/41/b0/55ed1b97ed08be7bba6f9a541cac15f2a858e1d74d2b07b6da70a82aab00/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9649193aa27bd9ff2e80ff29bfaa93085496c7a3a377592823cc58b77ee88add", size = 568672, upload-time = "2026-05-18T04:30:38.915Z" }, + { url = "https://files.pythonhosted.org/packages/d1/cf/d8ae8a80dd7bafab395ea7681c10237311bbf34d37704a8c744e7cf31fc7/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e4ff8e37f99cf1da89e255e07c9c4b37c214038c4283707bdec308cb1b0ea1f", size = 464197, upload-time = "2026-05-18T04:30:09.914Z" }, + { url = "https://files.pythonhosted.org/packages/7c/8a/3076c496ca8dafe0e8cd03fcebdfc47be4b1174b4e5b24ff6e396e6b3af2/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:054dc20fd2e3132b4c3883b4a00d72fd6e1f56fdaf89fccd12e8057d74cd74d7", size = 453181, upload-time = "2026-05-18T04:30:14.829Z" }, + { url = "https://files.pythonhosted.org/packages/e5/10/9745e17c98e7b8a86454df0a3c7b5686bd650383f1e9f26e4ebcbd6cc0c0/watchfiles-1.2.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e140ed30ebde76796b686e67c182cff10ea2fbab186fafd1560f74bb5a473a6e", size = 465109, upload-time = "2026-05-18T04:30:28.123Z" }, + { url = "https://files.pythonhosted.org/packages/8f/95/8ef4a95481d3e0cb52d62a06fa6e972e81424be2d9698b91a2fecca9904c/watchfiles-1.2.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:bb7e52ecf68ba46d22df23467b87cffeb2146908aa523ebfe803019618cfda06", size = 630653, upload-time = "2026-05-18T04:31:49.304Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e4/3b3bf36b0f829b50c6ebcb8d031583863c59f923d6a6af3d485e470d0fac/watchfiles-1.2.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:23282a321c8baf9b3a3c4afff673f9fe65eb7fdc2338d765ccad9d3d1916a5ba", size = 657838, upload-time = "2026-05-18T04:31:06.497Z" }, + { url = "https://files.pythonhosted.org/packages/21/b1/6cbbb50c1f3002ab568777d44aa21206dfb8807a840990c4037523b51812/watchfiles-1.2.0-cp314-cp314-win32.whl", hash = "sha256:c0db965c5f79aa49fe672d297cf1febc5ad149b658594944f49a54a2b96270a7", size = 275108, upload-time = "2026-05-18T04:30:06.891Z" }, + { url = "https://files.pythonhosted.org/packages/92/45/190ce6db8dcb4536682cf75d3889ff1a27182a58cb519d343cb6d9ea63d8/watchfiles-1.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:71283b39fd17e5408eb123bd37aeecfd9d54c81fc184421943208aadb879d103", size = 288441, upload-time = "2026-05-18T04:32:12.901Z" }, + { url = "https://files.pythonhosted.org/packages/74/0d/3eae1c2313ab08378431d907c3f8095ecca00f3eda33111cf4f0f2591799/watchfiles-1.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:c5c19526f4e54a00f2666a6c0e9e40d582c09e865055ea7378bf0009aab857b3", size = 280684, upload-time = "2026-05-18T04:31:26.902Z" }, + { url = "https://files.pythonhosted.org/packages/b1/75/fb64e6c25d6b5ca636d03df34ffb1c6e9873303e76d27967e045f8df088f/watchfiles-1.2.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:d73a585accffa5ae39c17264c36ec3166d2fad7000c780f5ef83b2722afb9dd2", size = 398857, upload-time = "2026-05-18T04:32:17.108Z" }, + { url = "https://files.pythonhosted.org/packages/73/4e/9f7adf01754cbf81843722ccfec169d8f26c69778281a302855cecd2ee08/watchfiles-1.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ae99b14c5f21e026e0e9d96f40e07d8570ebee6cafd9d8fc318354606daa7a28", size = 392413, upload-time = "2026-05-18T04:31:07.911Z" }, + { url = "https://files.pythonhosted.org/packages/47/c8/bec626bcc2d69f44b9acb24ce7d60ed7b16b73628eea747fcbd169d8edda/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4429f3b105524a10b72c3a819b091c495d2811d419c1e1e8df773a5a5974f831", size = 452409, upload-time = "2026-05-18T04:31:20.142Z" }, + { url = "https://files.pythonhosted.org/packages/00/b7/b6362068e81e7c556d155a34c35d40ac3ef42d747b06d7f6e5bf58e359c2/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43d818978d06062d9b22c4fab2ebe44cf5213d42dc8e62bda8c2760cfa2eeb33", size = 458827, upload-time = "2026-05-18T04:32:06.219Z" }, + { url = "https://files.pythonhosted.org/packages/67/f8/9a813fa42afb1e0b4625e75f0479826644d3ee8dc287e093799bc01f390c/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9f732dc58b2dbe69e464ccf8fff7a03b0dd0be439da4c0720d3558527d3d6b4", size = 490104, upload-time = "2026-05-18T04:31:56.034Z" }, + { url = "https://files.pythonhosted.org/packages/2f/bf/27dfb6094ca4c9aad21298b5525b6c53cb36121ee454331d05161e58d130/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f200104103feb097de4cab8fe4f5dd18a2026934c7dea98c55a2f5fd6d5a33b", size = 571360, upload-time = "2026-05-18T04:31:57.133Z" }, + { url = "https://files.pythonhosted.org/packages/fb/39/44a096d67270ea93df91d33877dbe91fbda3aa4f8ec2edf799d93eda8736/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63ac26eefbf4af1741247d6fb68b11c49a25b2f7413fbd318a83a12aaa9cf666", size = 464644, upload-time = "2026-05-18T04:30:57.33Z" }, + { url = "https://files.pythonhosted.org/packages/0e/80/c7472203bad6268e3ef1ad260739704847898938ad7ea8b63a5131f46b50/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c4997d4e4a55f0d02b6cde327322daf3a0400e5df6c6b15948994bf72497925", size = 454771, upload-time = "2026-05-18T04:30:48.736Z" }, + { url = "https://files.pythonhosted.org/packages/51/cf/3b10b268b4b7f0fc26e9debb5eef1998b515887840f444cd3ec80c688755/watchfiles-1.2.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:4c887eba18b7945ac73067a8b4a66f21cd46c2539b2bc68588f7be6c7eb6d26b", size = 463494, upload-time = "2026-05-18T04:31:33.826Z" }, + { url = "https://files.pythonhosted.org/packages/3d/3e/a4302545cd589262a0dc7d140e86f7688eba3f9c72776c27f7e23b8864c4/watchfiles-1.2.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:3416ff151bb6b5a8d8d11664974fbef4d9305b9b2957839ab5a270468fd8df30", size = 629383, upload-time = "2026-05-18T04:31:15.596Z" }, + { url = "https://files.pythonhosted.org/packages/db/99/d5649df0a9a410d45b7c882304d0b790903ac9b6e8f2cfd12114e0c6b9f2/watchfiles-1.2.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:0e831a271c035d89789cffc386b6aa1375f39f1cd25eb7ca0997e4970d152fc5", size = 656093, upload-time = "2026-05-18T04:31:58.707Z" }, + { url = "https://files.pythonhosted.org/packages/92/b9/362702539275019a54dd2e94511b31a9b89c5f9e6a21966de7eb692549fc/watchfiles-1.2.0-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:37a6721cdf3f65dbb13aa9503510ccb4451603ac837e44d265d7992a597e1374", size = 400109, upload-time = "2026-05-18T04:31:16.879Z" }, + { url = "https://files.pythonhosted.org/packages/8f/75/71d5ba62db781e5587bded1d944c675374bc4aa37ff33d5018d98e8b6538/watchfiles-1.2.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2b37d10b5a63bd4d87e18472d80fa525bd670586fae62e5dd580452764879b65", size = 392167, upload-time = "2026-05-18T04:31:28.058Z" }, + { url = "https://files.pythonhosted.org/packages/3c/01/c66dd95d0423fe30d31820e2d1d5bda773764131bbb6ac0cb1cf303ac328/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a105bc2283f67e8fbec74253ec2d94925de92ed72c0393f1206bf326b7b7b69", size = 452372, upload-time = "2026-05-18T04:31:00.836Z" }, + { url = "https://files.pythonhosted.org/packages/91/15/2fe99557e72f85627c6a8eed50d889e8d101623e060a22ad75b875cb932d/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5327989a465505f05cfe06f04fa9d0c2fd5432bb243e10e6f012b1bdca3c8579", size = 459596, upload-time = "2026-05-18T04:31:34.96Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/d4acfa0023367428ed48351b3b9b267893037b6cadae55620c61c24bcfd4/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ecb47f183a8025b2aa18b546725c3657e542112ae9c0613a2af79b4fa8d04ad7", size = 490869, upload-time = "2026-05-18T04:31:59.923Z" }, + { url = "https://files.pythonhosted.org/packages/a4/5f/3164cbdce06c9fb95c4f7b9e2f9760b5e2797af43a9ecc317ef42a23a278/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8520a4ab0e37f770afc34459c4f8f7019e153f9124dc101c15538365875d1ab2", size = 571641, upload-time = "2026-05-18T04:32:00.948Z" }, + { url = "https://files.pythonhosted.org/packages/41/e6/85d3731c55e65cd7690f3f803d24c139588aaf863e4bf2148fe7a7fa1a19/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71cd71740ed2c15211ebb237ced4e39a1cdf6f80566e5fe95428da1626f4fde6", size = 464444, upload-time = "2026-05-18T04:30:34.298Z" }, + { url = "https://files.pythonhosted.org/packages/f4/7d/562641012b8b09872742c3b8adf9629ec479fd78f8d68ae4a0c13da8add6/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f88af53d6ddaf72179ef613ddc905e6f4785f712b49b80b3bef9f3525e6194b4", size = 453593, upload-time = "2026-05-18T04:31:23.464Z" }, + { url = "https://files.pythonhosted.org/packages/56/fe/cb8ef3d6f929d14158fdaaad9925985b7310abc9384dcd4d82dd0016fb59/watchfiles-1.2.0-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:cee9d5efd929efdac5f7e58f72b3376f676b64050a91c5b99a7094c5b2317488", size = 465096, upload-time = "2026-05-18T04:31:30.384Z" }, + { url = "https://files.pythonhosted.org/packages/25/91/80908e835e100527a9267147b08c0eee1fa6ab0ffec15edc04d1d44885f7/watchfiles-1.2.0-cp315-cp315-musllinux_1_1_aarch64.whl", hash = "sha256:b718bf356bbc15e559bd8ef41782b573b8ae0e3f177ab244b440568d7ea02cfb", size = 630638, upload-time = "2026-05-18T04:30:49.89Z" }, + { url = "https://files.pythonhosted.org/packages/46/4b/95ab2f256bb4af3cb2eb23b9317bda984ee6e0f11733a5c004a6c95b06e3/watchfiles-1.2.0-cp315-cp315-musllinux_1_1_x86_64.whl", hash = "sha256:922c0e019fe68b3ae392965a766b02a71ba1168c932cebc3733cd52c5fe5b377", size = 657684, upload-time = "2026-05-18T04:31:32.027Z" }, +] + +[[package]] +name = "websockets" +version = "16.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/f7/bc3a25c5ec26ce62ce487690becc2f3710bbc7b33338f005ad390db0b986/websockets-16.1.1.tar.gz", hash = "sha256:db234eda965dcce15df96bb9709f587cd87d4d52aaf0e80e2f34ec04c7670c57", size = 182204, upload-time = "2026-07-17T22:51:05.858Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/9d/681cda21c9eee743203a6cb79b9d3d05adad9aa60ec660c6c9bf4dd619ca/websockets-16.1.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:cc97814dfb786a83b6e2dc2e79351e1b83e6d715647d6887fcabd83026417a00", size = 179600, upload-time = "2026-07-17T22:49:13.92Z" }, + { url = "https://files.pythonhosted.org/packages/fb/8d/6195a88b45e8d2a8f745fc2046e36f885a3c9763e6767d2c46229bf9510c/websockets-16.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e047dc87ef7ca50f4d309bf775ad4a71711c58556d75d7bd0604b2317f43e94b", size = 177272, upload-time = "2026-07-17T22:49:15.453Z" }, + { url = "https://files.pythonhosted.org/packages/73/e3/fe2d498c64dea0095c9a9f9a351af4cd6eef31b618395582bc1f38ba45ff/websockets-16.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:01fbdcbac298efe19360b94bc0039c8f746f0220ba570f327577bfee81059175", size = 177542, upload-time = "2026-07-17T22:49:16.875Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ed/f1831681fce0e3242346e5458486003c5f124ed69e5e0b847fd029db4973/websockets-16.1.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0f62863e8a00a6d33c3d6566ec0b89f23787b747ffe0c3bc71ec0e76b82c94b1", size = 187137, upload-time = "2026-07-17T22:49:18.323Z" }, + { url = "https://files.pythonhosted.org/packages/6f/79/4ff9dcc1bb46f6b4c536936dde1fd60f9b564f3304307274db97f4c9496d/websockets-16.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8087e82f842609734c9b5a1330464f8e94e346ba0e18c832c08bafa4b0d63c15", size = 188374, upload-time = "2026-07-17T22:49:19.65Z" }, + { url = "https://files.pythonhosted.org/packages/62/c3/5c49b6efb36cab733d23773f6de575e1dba65736ead17d5d2b2a1daef779/websockets-16.1.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2bb5d041a8307d2e18782e7ce777f6fdb1e8c2f5d09291484b18c294b789d9aa", size = 191155, upload-time = "2026-07-17T22:49:21.331Z" }, + { url = "https://files.pythonhosted.org/packages/6e/f6/56ccceda3a4838d18f1d40821480da4775397e8b1eecf4031e20c50e2e90/websockets-16.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1db4de4a0e95673f7545d393c49eeb0c2f18ac1ef93073218c79d5cdb2ee75ab", size = 189011, upload-time = "2026-07-17T22:49:22.889Z" }, + { url = "https://files.pythonhosted.org/packages/86/d6/ad5286241a2bce1107e2798d3bfbd62cf79aee167bdb654f8cb1e9dbf949/websockets-16.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f17dbe07eb3ea7f99e4df9b7e0efefe80fbf30d37a8cc4d561a0aed310bc8847", size = 187766, upload-time = "2026-07-17T22:49:24.339Z" }, + { url = "https://files.pythonhosted.org/packages/bc/67/d65c970b7e347fdca69479beb7811c2060529956730a7a4e3ae7c66b0e31/websockets-16.1.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4b57693728576d84ede0a77987ab16881b783d2cd9f1dc180a8fbbc3f79c4428", size = 185173, upload-time = "2026-07-17T22:49:25.743Z" }, + { url = "https://files.pythonhosted.org/packages/1d/5b/14af3cd4ee69d8ea9baca58f3dc3cfb1ba78332a347fd478cb096549d60e/websockets-16.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2a636ff1e7a5c4edf71ef0e79adae7f25dba93b4fcbe3dc958733477ffeb0eaf", size = 187809, upload-time = "2026-07-17T22:49:27.147Z" }, + { url = "https://files.pythonhosted.org/packages/7b/11/be301710d70de97e3e7b3586e6d492c9c06d6a61bf1c2202c36cf0c75607/websockets-16.1.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d6bec75c290fe484a8ba4cacdf838501e17c06ecfbbf31eede81a9e431bd7751", size = 186412, upload-time = "2026-07-17T22:49:28.611Z" }, + { url = "https://files.pythonhosted.org/packages/db/07/fe1435bf6fe738a3d3b54dbe0c18dabf12cba4d909ac8b58b539ce27c1f4/websockets-16.1.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:54509b8e92fee4453e152b7558ddef37ce9705a044922f2095a6105e3f80c96f", size = 188290, upload-time = "2026-07-17T22:49:29.965Z" }, + { url = "https://files.pythonhosted.org/packages/8a/0a/81f394aff8efcbb01208c1ced77df0a3c7fcce584a88c7273663697946c2/websockets-16.1.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:f0aa4aad3b1b69ad3fd85a0fd0952ec64331c762bd77ec51cc814170873890b2", size = 185844, upload-time = "2026-07-17T22:49:31.447Z" }, + { url = "https://files.pythonhosted.org/packages/39/5c/dd485b995473f415510251fe9bd708f2d24458f439fce958daf8d66dc7c6/websockets-16.1.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:42290eb6db4ccaca7012656738214f8514082fb6fa40cdeb61bb9a471b52e383", size = 186823, upload-time = "2026-07-17T22:49:33.104Z" }, + { url = "https://files.pythonhosted.org/packages/9d/0b/f78de76ff446f1e66af12b43c48a35f31744de93cfdec2f4ea67d5d7bbf1/websockets-16.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:53260c8930da5771cec89439bff99c20c8cb03ddb9588b980697355a83cd4bd3", size = 187102, upload-time = "2026-07-17T22:49:34.616Z" }, + { url = "https://files.pythonhosted.org/packages/37/a1/4cf892007778eaf84ad162bfc98046e0ed89b63ac55949e3236626b2a23f/websockets-16.1.1-cp312-cp312-win32.whl", hash = "sha256:1d27fa8462ad6a1cb36206a3d0640b2333340def181fae11ed7f9adeaa5c0747", size = 179943, upload-time = "2026-07-17T22:49:36.213Z" }, + { url = "https://files.pythonhosted.org/packages/d9/de/6abe251d28c3a3f217096575400b27750b18e0b1d2fff3a2a239960fea07/websockets-16.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:b436f6ec4fc3a6b4237c84d3f83170ed2b40bb584222f0ac47a0c8a5921980c7", size = 180243, upload-time = "2026-07-17T22:49:37.626Z" }, + { url = "https://files.pythonhosted.org/packages/ce/fd/6ec6c6d2850aea25b1b2aa9901a016980bb87d01e89b3eb00470b1b5d471/websockets-16.1.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ab59169ace05dcb49a1d4118f0bde139557adf45091bd85747e36bf5de984dd1", size = 179587, upload-time = "2026-07-17T22:49:38.959Z" }, + { url = "https://files.pythonhosted.org/packages/5f/d8/1d299d2dd34087db39831a34cc645ef8a6f89d78efada6983093513cd81c/websockets-16.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5e3b7d601f6f84156b08cc4a5e541c2b50ad7b36cfc302b657a12477c904a5df", size = 177272, upload-time = "2026-07-17T22:49:40.293Z" }, + { url = "https://files.pythonhosted.org/packages/3d/86/0a70d3ae2f0f2256bb41302d9804dbca65d4360281e7feb3e1f94102ac46/websockets-16.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cd2ca96a082a36964aca83e992f72abeb61b7306c1a6cba4c7d06a7b93750cac", size = 177530, upload-time = "2026-07-17T22:49:41.786Z" }, + { url = "https://files.pythonhosted.org/packages/b5/c2/c676c69444d9db448b3f0a55a98dcc534affce0bce961d9d2f0b8499b10a/websockets-16.1.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f5d497865f05bb222cab7016c6034542e84e5f29f49c6fd3f4939cda7197b5b8", size = 187197, upload-time = "2026-07-17T22:49:43.658Z" }, + { url = "https://files.pythonhosted.org/packages/0b/13/88137fbaf726ebe29d62c1117fa11fa2bbb6209dc79d4ad738efbe36a2aa/websockets-16.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bae954c382e013d5ea5b190d2830526bfa45ad121c326da0049b8c769f185db6", size = 188433, upload-time = "2026-07-17T22:49:45.147Z" }, + { url = "https://files.pythonhosted.org/packages/01/6d/46c2f2ce6751cb26f39293e1ecbf8544cb01321397cd476c2756b98c216d/websockets-16.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e09f753a169951eb4f28c2c774f71069304f66e7277e0f5a2892423599cfa854", size = 189868, upload-time = "2026-07-17T22:49:46.581Z" }, + { url = "https://files.pythonhosted.org/packages/29/2b/170a9e8097636cfde4dc3c592b6e00b18a44a2f5407606d96ca542dd5838/websockets-16.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:024193f8551a2b0eafbdd160911012c4e6c228c28430c84433253299a9e42d6a", size = 189059, upload-time = "2026-07-17T22:49:47.972Z" }, + { url = "https://files.pythonhosted.org/packages/a7/48/f0d4ebc9ab4b473b8861b9e20fdb663d515d42f7befdf62cdb60fee7a1ec/websockets-16.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:aabe464bfd13bd25f4821faf111da6fefdc389f870265a53105580e45b0a2e49", size = 187814, upload-time = "2026-07-17T22:49:49.344Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ba/39a41d3ae8e72696a9492581900611c5a91e2b07563b0bcd2523adea9854/websockets-16.1.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a28fcbc9b6baf54a2e23f8655f308e4ccc6afdd7266f8fe7954f320dcda0f785", size = 185229, upload-time = "2026-07-17T22:49:50.787Z" }, + { url = "https://files.pythonhosted.org/packages/3c/36/ac15b604f850d1907f0a85ed721cefe47cd45034b3620069b829746cccbe/websockets-16.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:79eace538c6a97e96d0d03d4f9d314f9677f5ed85a8a984992ffd90b13cb8a56", size = 187874, upload-time = "2026-07-17T22:49:52.228Z" }, + { url = "https://files.pythonhosted.org/packages/a8/f3/3fbd5d71d59299c3770faa5884d4f45070236ca5a35ab3a61830812c409a/websockets-16.1.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:496af849a472b531f758dbd4d61338f5000538cb1a7b3d20d9d32a264517f509", size = 186469, upload-time = "2026-07-17T22:49:53.776Z" }, + { url = "https://files.pythonhosted.org/packages/b4/fc/dd90349bba58af2a53ef2ddd9c32716c81eb6d59a0687939fff561860878/websockets-16.1.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5283810d2646741a0d8da2aa733d6aefa0545809afccb2a5d105a26bc45125f1", size = 188347, upload-time = "2026-07-17T22:49:55.202Z" }, + { url = "https://files.pythonhosted.org/packages/4c/f3/f73ba86427682da59b78c11d77ba56d5b801c32e84afe79b274bbd6a9bb2/websockets-16.1.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:4e3b680b1e0a27457e727a0d572fd81dffa87b6dbf8b228ab57da64f7d85aead", size = 185903, upload-time = "2026-07-17T22:49:56.75Z" }, + { url = "https://files.pythonhosted.org/packages/34/7c/f95eb20e80104173b3a0a092291f89ea4047ef6e608e0a57ca06eb14eecb/websockets-16.1.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:69159730a823dde3ea8d08783e8d47ef135a6d7e8d44eb127e32b321c9db8e3e", size = 186855, upload-time = "2026-07-17T22:49:58.467Z" }, + { url = "https://files.pythonhosted.org/packages/b0/35/dd875b3e050ff232d60fa377707f890e369f74d134f1be32e8f68879747c/websockets-16.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ed5bb271084b46530ee2ddc0410537a9961152c5ccba2fc98c5276d992ccba87", size = 187140, upload-time = "2026-07-17T22:50:00.016Z" }, + { url = "https://files.pythonhosted.org/packages/e8/dc/5cbfcb41824502f6af93b8f3943a4d06c67c23c7d2e31eb18748c4a5b2a7/websockets-16.1.1-cp313-cp313-win32.whl", hash = "sha256:cfb70b4eb56cac4da0a83588f3ad50d46beb0690391082f3d4e2d488c70b68ea", size = 179928, upload-time = "2026-07-17T22:50:01.685Z" }, + { url = "https://files.pythonhosted.org/packages/b0/c1/71e5deb5b7f8f226997ab64908c184ac3105c0155ce2d486f318e5dd08a8/websockets-16.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:d9531d9cbeac99af6f038fb1bc351403531f7d634a2c2e10e2f7c854c6ed5b68", size = 180242, upload-time = "2026-07-17T22:50:03.117Z" }, + { url = "https://files.pythonhosted.org/packages/73/a2/ba78a164eeea4620df4a4df4bd2ed6017438c4655cc0f36f2c0bc0432355/websockets-16.1.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:443aefe96b7fdb132e2a70806cca1f2af49bb3f28e47abcd7c2e9dcf4d8fa1b8", size = 179635, upload-time = "2026-07-17T22:50:05.001Z" }, + { url = "https://files.pythonhosted.org/packages/b9/08/d26d7a7628cd4ac34cbbdb63ac80914ca842ed8e42938c40a53567806df3/websockets-16.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6456ff333092d509127d75a638cb411afae8ff17f092635015d1902efec8a293", size = 177320, upload-time = "2026-07-17T22:50:06.427Z" }, + { url = "https://files.pythonhosted.org/packages/0f/45/ebec83e6269536aa5932533c67b0af5c781f3e73fdbcd68672dcf43f4f44/websockets-16.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fce6c48559c86d1ac3632ccb1bebc7d5442fbe79bd9bb0e40379ee54be2a4051", size = 177544, upload-time = "2026-07-17T22:50:07.834Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d5/abc614d2297f6c1c3e01e61260364457a47c25cc1cf6a879038902bc6aa8/websockets-16.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:92b820d345f7a3fc7b8163949ee92df910f290c3fc517b3d5301c78065adafe1", size = 187270, upload-time = "2026-07-17T22:50:09.275Z" }, + { url = "https://files.pythonhosted.org/packages/52/71/4c99af3b87dff1b2927981f6876607d4acb45338c665242168d3982f7758/websockets-16.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a606d9c24035242a3e256e9d5b77ed9cd6bccfcb7cf993e5ca3c0f6f68fb6a7", size = 188509, upload-time = "2026-07-17T22:50:10.722Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b4/5c8ca14b0df7eb84ed0524165c5359150210140817a3312aee57bf62a1cf/websockets-16.1.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:414e596c75f74e0994084694189d7dc9229fb278e33064d6784b73ffbba3ca31", size = 189882, upload-time = "2026-07-17T22:50:12.293Z" }, + { url = "https://files.pythonhosted.org/packages/25/c1/bedfba9e70557129cb8083748d167bdcc01483dedf0f0df143676df05cbe/websockets-16.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:536676848fc5961aca9d20389951f59169508f765637a172403dc5434d722fa0", size = 189114, upload-time = "2026-07-17T22:50:13.789Z" }, + { url = "https://files.pythonhosted.org/packages/df/09/aa835b2787835aebd839114be5de51b797cb480b63ba42b26d34dfe147cb/websockets-16.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:97fd3a0e8b53efa41970ac1dff3d8cf0d2884cadeb4caaf95db7ad1526926ee3", size = 187861, upload-time = "2026-07-17T22:50:15.179Z" }, + { url = "https://files.pythonhosted.org/packages/20/26/f6408330694dbc9830857d9d23bc14ac4f6875127a480cfdda8d5ca21198/websockets-16.1.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7b1b19636af86a3c7995d4d028dbe376f39b4bf31541146f9c123582a6c94562", size = 185286, upload-time = "2026-07-17T22:50:16.741Z" }, + { url = "https://files.pythonhosted.org/packages/17/9a/e0675e70dd8a80762cf35bb18799d3f290a4890ffe6439bc51d222796083/websockets-16.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:41c8e77f17294c0ac18008a7309b99b34ee72247ef10b6dff4c3f8b5ac29896b", size = 187935, upload-time = "2026-07-17T22:50:18.213Z" }, + { url = "https://files.pythonhosted.org/packages/33/c1/3234cfb86afde01b81e9bddcc6e534c440975d60a13991259e833069ab3e/websockets-16.1.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:9f63bcef7f4b02b06b35fc01c93b96c43b5e88e1e8868676caacf493d5a31f3a", size = 186444, upload-time = "2026-07-17T22:50:19.67Z" }, + { url = "https://files.pythonhosted.org/packages/89/87/9c15206e1d778923d8daa9657de07aa62ea815e13448319c98458c37b281/websockets-16.1.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dab9eb87869da2d6ed3af3f3adf28414baae6ec9d4df355ffc18889132f3436c", size = 188409, upload-time = "2026-07-17T22:50:21.28Z" }, + { url = "https://files.pythonhosted.org/packages/f2/00/cf5de5c67676de2d3eef8b2a518f168f6796595447a5b7161ba0d012915c/websockets-16.1.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:43e3a9fdd7cbf7ba6040c31fae0faf84ca1474fef777c4e37912f1540f854499", size = 185958, upload-time = "2026-07-17T22:50:22.719Z" }, + { url = "https://files.pythonhosted.org/packages/62/c0/731b6ddede2e4136912ec4cff2cffbda35af73546be4762c3d7bd3bd79af/websockets-16.1.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:056ae37939ed7e9974f364f5864e76e49182622d8f9751ac1903c0d09b013985", size = 186911, upload-time = "2026-07-17T22:50:24.108Z" }, + { url = "https://files.pythonhosted.org/packages/8c/7f/39c634472c4469a24a7c09cecddffb08fac6d0e74f73881a94ee8a40a196/websockets-16.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a0eadbbf2c30f01efa58e1f110eb6fa293261f6b0b1aa38f7f48707107690af9", size = 187204, upload-time = "2026-07-17T22:50:25.548Z" }, + { url = "https://files.pythonhosted.org/packages/26/89/9667c256c256dafcc62d21328ce7a40067da857969b68ee9af375b0aaf72/websockets-16.1.1-cp314-cp314-win32.whl", hash = "sha256:195c978b065fa40910582464f99d6b15c8b314c68e0546549a55ed83f4735328", size = 179603, upload-time = "2026-07-17T22:50:27.086Z" }, + { url = "https://files.pythonhosted.org/packages/bd/dd/1c099d6c0fc5deb6b46ccdbb6981fdb4b12c917869cb3952408409dc18db/websockets-16.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:4e8d01cc3bcae7bbf8167f944aeafefed590fae5693552bba9794a9df68371cc", size = 179948, upload-time = "2026-07-17T22:50:28.521Z" }, + { url = "https://files.pythonhosted.org/packages/35/25/9956b2d5e0529d5d23924f21bba1440d4c5c88a562e4f08550871ffa97a7/websockets-16.1.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0ffd3031ea8bda8d61762e84220186105ba3b748b3c8da2ae4f7816fac03e573", size = 179963, upload-time = "2026-07-17T22:50:29.982Z" }, + { url = "https://files.pythonhosted.org/packages/17/06/55ffc976c488b6aee9ea05761ff7c4e88e7c1fd82818c8ca7b556ad2f90c/websockets-16.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:84a2cef8deffbd9ab8ee0ea546a2a6a7030c28f44e6cdd4547dbfeb489eb8999", size = 177497, upload-time = "2026-07-17T22:50:31.396Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e8/f7dac2e980bacc92bdc26cebae4ae4d50cae5380732c50980598fc0bbae4/websockets-16.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3df13f73af9b3b38ab1195eb299ecb67a4330c911c97ae04043ff74085728abe", size = 177698, upload-time = "2026-07-17T22:50:32.829Z" }, + { url = "https://files.pythonhosted.org/packages/b2/39/26762f734113e22da2b942c3aca85798e0c0405d64c256549540ff31e5a1/websockets-16.1.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23253dd5bcae3f9aaee0a1d30967a8dbd52e5d3cff93a2e5b84df57b77d4750d", size = 187561, upload-time = "2026-07-17T22:50:34.24Z" }, + { url = "https://files.pythonhosted.org/packages/11/94/c3f330851806b9b02138b774d593478323e73c99238681b4b93efe64e02d/websockets-16.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1c5705e314449e3308872fe084b8571ce078ee4fc55a98a769bdefe5917392", size = 188732, upload-time = "2026-07-17T22:50:36.088Z" }, + { url = "https://files.pythonhosted.org/packages/d1/f2/eb2c450f052de334ae33cf200ece6e87b0e14d186807074e4eb1cd2cdea2/websockets-16.1.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:69e52d175a0a7d1e13b4b67ad41c560b7d98e8c6f6126eb0bda496c784faf8c7", size = 190872, upload-time = "2026-07-17T22:50:38.008Z" }, + { url = "https://files.pythonhosted.org/packages/70/31/2ac8cecf3a74f7fed9132129fc3d90b3998a1554570c11a69b2a8c20332d/websockets-16.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1f79c89b5eb034d1722938a891916582f8f7f503f58ca22518a63c3f2cd18499", size = 189305, upload-time = "2026-07-17T22:50:39.53Z" }, + { url = "https://files.pythonhosted.org/packages/6a/cf/8ab19650d3c0d4562c92e70ab47c257c4aa5c6a713ed87fe63766b31fefc/websockets-16.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:39f2a024af5c345ffe8fcf1ee18c049c024c94df393bb09b044a6917c77bde43", size = 188033, upload-time = "2026-07-17T22:50:40.912Z" }, + { url = "https://files.pythonhosted.org/packages/66/d7/a49a38a6127a4acb134fb1912b215d900cc657605cff32445bf519f3acc4/websockets-16.1.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:952303a7318d4cbe1011400839bb2051c9f84fa0a35923267f5daba34b15d458", size = 185748, upload-time = "2026-07-17T22:50:42.559Z" }, + { url = "https://files.pythonhosted.org/packages/95/3e/ad1fa40388c7f2e0bb2c7930d0090b6c5498594bd1cdaec18864df3d9e97/websockets-16.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:249116b4a76063d930a46391ad56e135c286e4562a18309029fc2c73f4ed4c62", size = 188285, upload-time = "2026-07-17T22:50:43.974Z" }, + { url = "https://files.pythonhosted.org/packages/35/b8/d5db28ca264b9104f82196f92dc8843e35fd391f763d42e4ad358f5bc97e/websockets-16.1.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:61922544a0587a13fd3f53e4c0e5e606510c7b0d9d22c8444e5fae22a06b38cb", size = 186777, upload-time = "2026-07-17T22:50:45.474Z" }, + { url = "https://files.pythonhosted.org/packages/42/9c/726cb39d0cc43ae848dce4aa2acb04eecc6738b1264ec6d700bf6bcfb9f8/websockets-16.1.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:46dcaa042cd1de6c59e7d9269fa63ff7572b6df40510600b678f0826b3c7af51", size = 188682, upload-time = "2026-07-17T22:50:46.973Z" }, + { url = "https://files.pythonhosted.org/packages/be/c7/1168704de8c2dd483edabe4a22cbe4465dd8be8dd95561d214f9fe092871/websockets-16.1.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:38565aca3e01ea8734e578fb2118dade0ecb0250533f29e22b8d1a7a196cf4d0", size = 186377, upload-time = "2026-07-17T22:50:48.413Z" }, + { url = "https://files.pythonhosted.org/packages/ca/40/f9ff2d630ffce4e7dfea0b2288e1caf9ebbf9ff8a9ec9396136ce8b94935/websockets-16.1.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:42f599f4d48c7e1a3338fdaac3acd075be3b3cf02d4b274f3bf2767aedd3d217", size = 187148, upload-time = "2026-07-17T22:50:49.845Z" }, + { url = "https://files.pythonhosted.org/packages/b5/71/e177c8299f78d7cbe2d14df228643c10c70c0e86e108e092056bbcc16e46/websockets-16.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dcc04fedf83effaeb9cce98abc9469bb1b42ef85f03e01c8c1f4438ef7555737", size = 187578, upload-time = "2026-07-17T22:50:51.619Z" }, + { url = "https://files.pythonhosted.org/packages/49/b2/b6987faf330f5af5c787a2610124c2e8403d51724f9001ec4fff6311fe7a/websockets-16.1.1-cp314-cp314t-win32.whl", hash = "sha256:8483c2096363120eea8b07c06ae7304d520f686665fffd4811fad423930a65d7", size = 179729, upload-time = "2026-07-17T22:50:53.269Z" }, + { url = "https://files.pythonhosted.org/packages/a2/6e/fbac6ed878dd362fbad7d415fa4f84d38e3e33fed8cde45c64e783acf826/websockets-16.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:bcce07e23e5769375158f5efdcdafa8d5cd014b93c6683865b840ed65b96f231", size = 180072, upload-time = "2026-07-17T22:50:54.969Z" }, + { url = "https://files.pythonhosted.org/packages/be/4d/2d0d67834092e354d2b0498f014a41249a89556bc406cf86f3e1557bb463/websockets-16.1.1-py3-none-any.whl", hash = "sha256:6abbd3e82c731c8e531714466acd5d87b5e88ac3243465337ba71d68e23ae7e3", size = 173814, upload-time = "2026-07-17T22:51:04.184Z" }, +] diff --git a/permanent_subs.py b/permanent_subs.py index 3dd513e..bdd5a55 100644 --- a/permanent_subs.py +++ b/permanent_subs.py @@ -36,7 +36,7 @@ CREATE TABLE IF NOT EXISTS permanent_subscriptions ( market_type VARCHAR(8) NOT NULL DEFAULT 'KR', exchange VARCHAR(16) NOT NULL DEFAULT 'KRX', symbol VARCHAR(32) NOT NULL DEFAULT '', - tf_min INT NOT NULL DEFAULT 60, + tf_min INT NOT NULL DEFAULT 1, enabled TINYINT NOT NULL DEFAULT 1, note VARCHAR(100) NOT NULL DEFAULT '', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, @@ -85,11 +85,15 @@ def upsert_permanent_sub( market_type: Optional[str] = None, exchange: Optional[str] = None, symbol: Optional[str] = None, - tf_min: int = 60, + tf_min: int = 1, enabled: bool = True, note: str = "", ) -> None: - """코드 1건 등록/갱신 (code UNIQUE).""" + """코드 1건 등록/갱신 (code UNIQUE). + + tf_min 은 저장·표시용 기준봉. WS는 틱→1분 집계가 기본이고 상위봉은 롤업하므로 + 기본·권장은 1분 (env ``PERM_SUB_BASE_TF_MIN``). + """ ensure_permanent_subs_table(db) code = str(code or "").strip().upper() if not code: @@ -99,11 +103,18 @@ def upsert_permanent_sub( ex = (str(exchange).strip().upper() if exchange else "") or (g_ex if mt == g_mt else ("KRX" if mt == "KR" else "NASD")) sym = (str(symbol).strip().upper() if symbol else "") or g_sym or code try: - tfv = int(tf_min) + from kis_trader.utils.env import get_env_int + base_tf = int(get_env_int("PERM_SUB_BASE_TF_MIN", 1)) + except Exception: + base_tf = 1 + if base_tf < 1: + base_tf = 1 + # 요청값과 무관하게 기준봉으로 통일 (1분→롤업) + try: + _ = int(tf_min) except (TypeError, ValueError): - tfv = 60 - if tfv < 1: - tfv = 60 + pass + tfv = base_tf raw = _core(db) raw.conn.execute( """ @@ -120,6 +131,27 @@ def upsert_permanent_sub( raw.conn.commit() +def normalize_all_tf_to_base(db: Any) -> int: + """기존 영구구독 tf_min 을 기준봉(기본 1)으로 일괄 정리. 변경 건수 반환.""" + ensure_permanent_subs_table(db) + try: + from kis_trader.utils.env import get_env_int + base_tf = int(get_env_int("PERM_SUB_BASE_TF_MIN", 1)) + except Exception: + base_tf = 1 + if base_tf < 1: + base_tf = 1 + raw = _core(db) + cur = raw.conn.execute( + "UPDATE permanent_subscriptions SET tf_min=%s WHERE tf_min<>%s", + [base_tf, base_tf], + ) + raw.conn.commit() + try: + return int(cur.rowcount or 0) + except Exception: + return 0 + def remove_permanent_sub(db: Any, code: str) -> bool: ensure_permanent_subs_table(db) code = str(code or "").strip().upper() @@ -185,3 +217,103 @@ def migrate_env_codes(db: Any, env_csv: str) -> int: existing.add(c) n += 1 return n + + +def last_quotes_for_codes( + db: Any, + codes: List[str], + tf_min: int = 1, +) -> Dict[str, Dict[str, Any]]: + """영구구독 UI용 현재가 — REST/틱 전수스캔 없이 ``ws_candles`` 만. + + ※ 예전 ``ws_ticks`` ROW_NUMBER 전종목 스캔은 수십 초 지연 → UI 절대 금지. + 이 함수는 ``ws_candles`` 만 조회한다. ws_ticks 경로를 다시 넣지 말 것. + + 반환 code → { + price, price_src ('candle'|''), candle_time, tick_time(항상 ''), + chg_pct (직전 봉 종가 대비 %), volume, updated_at + } + """ + from datetime import datetime as _dt + + out: Dict[str, Dict[str, Any]] = {} + uniq = [] + seen = set() + for c in codes or []: + u = str(c or "").strip().upper() + if not u or u in seen: + continue + seen.add(u) + uniq.append(u) + out[u] = { + "price": 0.0, + "price_src": "", + "candle_time": "", + "tick_time": "", + "chg_pct": None, + "volume": 0, + "updated_at": "", + } + if not uniq: + return out + try: + tf = int(tf_min) if int(tf_min) >= 1 else 1 + except (TypeError, ValueError): + tf = 1 + # 미래 슬롯(이상봉) 제외 — 로컬 now + 2분 여유 + try: + now_slot = (_dt.now()).strftime("%Y%m%d%H%M") + except Exception: + now_slot = "999999999999" + raw = _core(db) + for code in uniq: + try: + rows = raw.conn.execute( + """ + SELECT candle_time, open, close, volume, updated_at + FROM ws_candles + WHERE code=%s AND timeframe=%s AND candle_time<=%s + ORDER BY candle_time DESC + LIMIT 2 + """, + [code, tf, now_slot], + ).fetchall() or [] + except Exception as e: + logger.debug("last_quotes candle %s: %s", code, e) + rows = [] + if not rows: + continue + parsed: List[Dict[str, Any]] = [] + for r in rows: + parsed.append(dict(r) if not isinstance(r, dict) else dict(r)) + last = parsed[0] + try: + px = float(last.get("close") or 0) + except (TypeError, ValueError): + px = 0.0 + if px <= 0: + try: + px = float(last.get("open") or 0) + except (TypeError, ValueError): + px = 0.0 + chg = None + if len(parsed) >= 2 and px > 0: + try: + prev = float(parsed[1].get("close") or 0) + if prev > 0: + chg = (px - prev) / prev * 100.0 + except (TypeError, ValueError, ZeroDivisionError): + chg = None + try: + vol = int(last.get("volume") or 0) + except (TypeError, ValueError): + vol = 0 + out[code].update({ + "price": px, + "price_src": "candle" if px > 0 else "", + "candle_time": str(last.get("candle_time") or ""), + "chg_pct": chg, + "volume": vol, + "updated_at": str(last.get("updated_at") or ""), + }) + return out diff --git a/sample_python.zip b/sample_python.zip new file mode 100644 index 0000000..836b3b2 Binary files /dev/null and b/sample_python.zip differ diff --git a/sample_python/ACF/ConditionToApi.ACF b/sample_python/ACF/ConditionToApi.ACF new file mode 100644 index 0000000..fea776e Binary files /dev/null and b/sample_python/ACF/ConditionToApi.ACF differ diff --git a/sample_python/ACF/test.ACF b/sample_python/ACF/test.ACF new file mode 100644 index 0000000..9a25336 Binary files /dev/null and b/sample_python/ACF/test.ACF differ diff --git a/sample_python/Res/B7_.res b/sample_python/Res/B7_.res new file mode 100644 index 0000000..cc53ee3 --- /dev/null +++ b/sample_python/Res/B7_.res @@ -0,0 +1,78 @@ +BEGIN_FUNCTION_MAP +.Feed, ETFȣܷ(B7), B7_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + LPŵȣ1, lp_offerho1, lp_offerho1, long, 9; + LPżȣ1, lp_bidho1, lp_bidho1, long, 9; + LPŵȣ2, lp_offerho2, lp_offerho2, long, 9; + LPżȣ2, lp_bidho2, lp_bidho2, long, 9; + LPŵȣ3, lp_offerho3, lp_offerho3, long, 9; + LPżȣ3, lp_bidho3, lp_bidho3, long, 9; + LPŵȣ4, lp_offerho4, lp_offerho4, long, 9; + LPżȣ4, lp_bidho4, lp_bidho4, long, 9; + LPŵȣ5, lp_offerho5, lp_offerho5, long, 9; + LPżȣ5, lp_bidho5, lp_bidho5, long, 9; + LPŵȣ6, lp_offerho6, lp_offerho6, long, 9; + LPżȣ6, lp_bidho6, lp_bidho6, long, 9; + LPŵȣ7, lp_offerho7, lp_offerho7, long, 9; + LPżȣ7, lp_bidho7, lp_bidho7, long, 9; + LPŵȣ8, lp_offerho8, lp_offerho8, long, 9; + LPżȣ8, lp_bidho8, lp_bidho8, long, 9; + LPŵȣ9, lp_offerho9, lp_offerho9, long, 9; + LPżȣ9, lp_bidho9, lp_bidho9, long, 9; + LPŵȣ10, lp_offerho10, lp_offerho10, long, 9; + LPżȣ10, lp_bidho10, lp_bidho10, long, 9; + ڵ, shcode, shcode, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/B7__1.res b/sample_python/Res/B7__1.res new file mode 100644 index 0000000..cc53ee3 --- /dev/null +++ b/sample_python/Res/B7__1.res @@ -0,0 +1,78 @@ +BEGIN_FUNCTION_MAP +.Feed, ETFȣܷ(B7), B7_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + LPŵȣ1, lp_offerho1, lp_offerho1, long, 9; + LPżȣ1, lp_bidho1, lp_bidho1, long, 9; + LPŵȣ2, lp_offerho2, lp_offerho2, long, 9; + LPżȣ2, lp_bidho2, lp_bidho2, long, 9; + LPŵȣ3, lp_offerho3, lp_offerho3, long, 9; + LPżȣ3, lp_bidho3, lp_bidho3, long, 9; + LPŵȣ4, lp_offerho4, lp_offerho4, long, 9; + LPżȣ4, lp_bidho4, lp_bidho4, long, 9; + LPŵȣ5, lp_offerho5, lp_offerho5, long, 9; + LPżȣ5, lp_bidho5, lp_bidho5, long, 9; + LPŵȣ6, lp_offerho6, lp_offerho6, long, 9; + LPżȣ6, lp_bidho6, lp_bidho6, long, 9; + LPŵȣ7, lp_offerho7, lp_offerho7, long, 9; + LPżȣ7, lp_bidho7, lp_bidho7, long, 9; + LPŵȣ8, lp_offerho8, lp_offerho8, long, 9; + LPżȣ8, lp_bidho8, lp_bidho8, long, 9; + LPŵȣ9, lp_offerho9, lp_offerho9, long, 9; + LPżȣ9, lp_bidho9, lp_bidho9, long, 9; + LPŵȣ10, lp_offerho10, lp_offerho10, long, 9; + LPżȣ10, lp_bidho10, lp_bidho10, long, 9; + ڵ, shcode, shcode, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/BMT.res b/sample_python/Res/BMT.res new file mode 100644 index 0000000..6b07715 --- /dev/null +++ b/sample_python/Res/BMT.res @@ -0,0 +1,111 @@ +BEGIN_FUNCTION_MAP +.Feed, ð뺰ڸŸ(BMT), BMT, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + Žð, tjjtime, tjjtime, char, 8; + + ڵ1(), tjjcode1, tjjcode1, char, 4; + ż ŷ1, msvolume1, msvolume1, long, 8; + ŵ ŷ1, mdvolume1, mdvolume1, long, 8; + ŷ ż1, msvol1, msvol1, long, 8; + ż ŷ1, msvalue1, msvalue1, long, 6; + ŵ ŷ1, mdvalue1, mdvalue1, long, 6; + ŷ ż1, msval1, msval1, long, 6; + + ڵ2(ܱ), tjjcode2, tjjcode2, char, 4; + ż ŷ2, msvolume2, msvolume2, long, 8; + ŵ ŷ2, mdvolume2, mdvolume2, long, 8; + ŷ ż2, msvol2, msvol2, long, 8; + ż ŷ2, msvalue2, msvalue2, long, 6; + ŵ ŷ2, mdvalue2, mdvalue2, long, 6; + ŷ ż2, msval2, msval2, long, 6; + + ڵ3(), tjjcode3, tjjcode3, char, 4; + ż ŷ3, msvolume3, msvolume3, long, 8; + ŵ ŷ3, mdvolume3, mdvolume3, long, 8; + ŷ ż3, msvol3, msvol3, long, 8; + ż ŷ3, msvalue3, msvalue3, long, 6; + ŵ ŷ3, mdvalue3, mdvalue3, long, 6; + ŷ ż3, msval3, msval3, long, 6; + + ڵ4(), tjjcode4, tjjcode4, char, 4; + ż ŷ4, msvolume4, msvolume4, long, 8; + ŵ ŷ4, mdvolume4, mdvolume4, long, 8; + ŷ ż4, msvol4, msvol4, long, 8; + ż ŷ4, msvalue4, msvalue4, long, 6; + ŵ ŷ4, mdvalue4, mdvalue4, long, 6; + ŷ ż4, msval4, msval4, long, 6; + + ڵ5(), tjjcode5, tjjcode5, char, 4; + ż ŷ5, msvolume5, msvolume5, long, 8; + ŵ ŷ5, mdvolume5, mdvolume5, long, 8; + ŷ ż5, msvol5, msvol5, long, 8; + ż ŷ5, msvalue5, msvalue5, long, 6; + ŵ ŷ5, mdvalue5, mdvalue5, long, 6; + ŷ ż5, msval5, msval5, long, 6; + + ڵ6(), tjjcode6, tjjcode6, char, 4; + ż ŷ6, msvolume6, msvolume6, long, 8; + ŵ ŷ6, mdvolume6, mdvolume6, long, 8; + ŷ ż6, msvol6, msvol6, long, 8; + ż ŷ6, msvalue6, msvalue6, long, 6; + ŵ ŷ6, mdvalue6, mdvalue6, long, 6; + ŷ ż6, msval6, msval6, long, 6; + + ڵ7(), tjjcode7, tjjcode7, char, 4; + ż ŷ7, msvolume7, msvolume7, long, 8; + ŵ ŷ7, mdvolume7, mdvolume7, long, 8; + ŷ ż7, msvol7, msvol7, long, 8; + ż ŷ7, msvalue7, msvalue7, long, 6; + ŵ ŷ7, mdvalue7, mdvalue7, long, 6; + ŷ ż7, msval7, msval7, long, 6; + + ڵ8(), tjjcode8, tjjcode8, char, 4; + ż ŷ8, msvolume8, msvolume8, long, 8; + ŵ ŷ8, mdvolume8, mdvolume8, long, 8; + ŷ ż8, msvol8, msvol8, long, 8; + ż ŷ8, msvalue8, msvalue8, long, 6; + ŵ ŷ8, mdvalue8, mdvalue8, long, 6; + ŷ ż8, msval8, msval8, long, 6; + + ڵ9(), tjjcode9, tjjcode9, char, 4; + ż ŷ9, msvolume9, msvolume9, long, 8; + ŵ ŷ9, mdvolume9, mdvolume9, long, 8; + ŷ ż9, msvol9, msvol9, long, 8; + ż ŷ9, msvalue9, msvalue9, long, 6; + ŵ ŷ9, mdvalue9, mdvalue9, long, 6; + ŷ ż9, msval9, msval9, long, 6; + + ڵ10(), tjjcode10, tjjcode10, char, 4; + ż ŷ10, msvolume10, msvolume10, long, 8; + ŵ ŷ10, mdvolume10, mdvolume10, long, 8; + ŷ ż10, msvol10, msvol10, long, 8; + ż ŷ10, msvalue10, msvalue10, long, 6; + ŵ ŷ10, mdvalue10, mdvalue10, long, 6; + ŷ ż10, msval10, msval10, long, 6; + + ڵ11(Ÿ), tjjcode11, tjjcode11, char, 4; + ż ŷ11, msvolume11, msvolume11, long, 8; + ŵ ŷ11, mdvolume11, mdvolume11, long, 8; + ŷ ż11, msvol11, msvol11, long, 8; + ż ŷ11, msvalue11, msvalue11, long, 6; + ŵ ŷ11, mdvalue11, mdvalue11, long, 6; + ŷ ż11, msval11, msval11, long, 6; + + ڵ, upcode, upcode, char, 3; + + ڵ0(ݵ), tjjcode0, tjjcode0, char, 4; + ż ŷ0, msvolume0, msvolume0, long, 8; + ŵ ŷ0, mdvolume0, mdvolume0, long, 8; + ŷ ż0, msvol0, msvol0, long, 8; + ż ŷ0, msvalue0, msvalue0, long, 6; + ŵ ŷ0, mdvalue0, mdvalue0, long, 6; + ŷ ż0, msval0, msval0, long, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/BMT_1.res b/sample_python/Res/BMT_1.res new file mode 100644 index 0000000..6b07715 --- /dev/null +++ b/sample_python/Res/BMT_1.res @@ -0,0 +1,111 @@ +BEGIN_FUNCTION_MAP +.Feed, ð뺰ڸŸ(BMT), BMT, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + Žð, tjjtime, tjjtime, char, 8; + + ڵ1(), tjjcode1, tjjcode1, char, 4; + ż ŷ1, msvolume1, msvolume1, long, 8; + ŵ ŷ1, mdvolume1, mdvolume1, long, 8; + ŷ ż1, msvol1, msvol1, long, 8; + ż ŷ1, msvalue1, msvalue1, long, 6; + ŵ ŷ1, mdvalue1, mdvalue1, long, 6; + ŷ ż1, msval1, msval1, long, 6; + + ڵ2(ܱ), tjjcode2, tjjcode2, char, 4; + ż ŷ2, msvolume2, msvolume2, long, 8; + ŵ ŷ2, mdvolume2, mdvolume2, long, 8; + ŷ ż2, msvol2, msvol2, long, 8; + ż ŷ2, msvalue2, msvalue2, long, 6; + ŵ ŷ2, mdvalue2, mdvalue2, long, 6; + ŷ ż2, msval2, msval2, long, 6; + + ڵ3(), tjjcode3, tjjcode3, char, 4; + ż ŷ3, msvolume3, msvolume3, long, 8; + ŵ ŷ3, mdvolume3, mdvolume3, long, 8; + ŷ ż3, msvol3, msvol3, long, 8; + ż ŷ3, msvalue3, msvalue3, long, 6; + ŵ ŷ3, mdvalue3, mdvalue3, long, 6; + ŷ ż3, msval3, msval3, long, 6; + + ڵ4(), tjjcode4, tjjcode4, char, 4; + ż ŷ4, msvolume4, msvolume4, long, 8; + ŵ ŷ4, mdvolume4, mdvolume4, long, 8; + ŷ ż4, msvol4, msvol4, long, 8; + ż ŷ4, msvalue4, msvalue4, long, 6; + ŵ ŷ4, mdvalue4, mdvalue4, long, 6; + ŷ ż4, msval4, msval4, long, 6; + + ڵ5(), tjjcode5, tjjcode5, char, 4; + ż ŷ5, msvolume5, msvolume5, long, 8; + ŵ ŷ5, mdvolume5, mdvolume5, long, 8; + ŷ ż5, msvol5, msvol5, long, 8; + ż ŷ5, msvalue5, msvalue5, long, 6; + ŵ ŷ5, mdvalue5, mdvalue5, long, 6; + ŷ ż5, msval5, msval5, long, 6; + + ڵ6(), tjjcode6, tjjcode6, char, 4; + ż ŷ6, msvolume6, msvolume6, long, 8; + ŵ ŷ6, mdvolume6, mdvolume6, long, 8; + ŷ ż6, msvol6, msvol6, long, 8; + ż ŷ6, msvalue6, msvalue6, long, 6; + ŵ ŷ6, mdvalue6, mdvalue6, long, 6; + ŷ ż6, msval6, msval6, long, 6; + + ڵ7(), tjjcode7, tjjcode7, char, 4; + ż ŷ7, msvolume7, msvolume7, long, 8; + ŵ ŷ7, mdvolume7, mdvolume7, long, 8; + ŷ ż7, msvol7, msvol7, long, 8; + ż ŷ7, msvalue7, msvalue7, long, 6; + ŵ ŷ7, mdvalue7, mdvalue7, long, 6; + ŷ ż7, msval7, msval7, long, 6; + + ڵ8(), tjjcode8, tjjcode8, char, 4; + ż ŷ8, msvolume8, msvolume8, long, 8; + ŵ ŷ8, mdvolume8, mdvolume8, long, 8; + ŷ ż8, msvol8, msvol8, long, 8; + ż ŷ8, msvalue8, msvalue8, long, 6; + ŵ ŷ8, mdvalue8, mdvalue8, long, 6; + ŷ ż8, msval8, msval8, long, 6; + + ڵ9(), tjjcode9, tjjcode9, char, 4; + ż ŷ9, msvolume9, msvolume9, long, 8; + ŵ ŷ9, mdvolume9, mdvolume9, long, 8; + ŷ ż9, msvol9, msvol9, long, 8; + ż ŷ9, msvalue9, msvalue9, long, 6; + ŵ ŷ9, mdvalue9, mdvalue9, long, 6; + ŷ ż9, msval9, msval9, long, 6; + + ڵ10(), tjjcode10, tjjcode10, char, 4; + ż ŷ10, msvolume10, msvolume10, long, 8; + ŵ ŷ10, mdvolume10, mdvolume10, long, 8; + ŷ ż10, msvol10, msvol10, long, 8; + ż ŷ10, msvalue10, msvalue10, long, 6; + ŵ ŷ10, mdvalue10, mdvalue10, long, 6; + ŷ ż10, msval10, msval10, long, 6; + + ڵ11(Ÿ), tjjcode11, tjjcode11, char, 4; + ż ŷ11, msvolume11, msvolume11, long, 8; + ŵ ŷ11, mdvolume11, mdvolume11, long, 8; + ŷ ż11, msvol11, msvol11, long, 8; + ż ŷ11, msvalue11, msvalue11, long, 6; + ŵ ŷ11, mdvalue11, mdvalue11, long, 6; + ŷ ż11, msval11, msval11, long, 6; + + ڵ, upcode, upcode, char, 3; + + ڵ0(ݵ), tjjcode0, tjjcode0, char, 4; + ż ŷ0, msvolume0, msvolume0, long, 8; + ŵ ŷ0, mdvolume0, mdvolume0, long, 8; + ŷ ż0, msvol0, msvol0, long, 8; + ż ŷ0, msvalue0, msvalue0, long, 6; + ŵ ŷ0, mdvalue0, mdvalue0, long, 6; + ŷ ż0, msval0, msval0, long, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/BM_.res b/sample_python/Res/BM_.res new file mode 100644 index 0000000..9151f70 --- /dev/null +++ b/sample_python/Res/BM_.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, ںŸȲ(BM), BM_, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + ڵ, tjjcode, tjjcode, char, 4; + Žð, tjjtime, tjjtime, char, 8; + ż ŷ, msvolume, msvolume, long, 8; + ŵ ŷ, mdvolume, mdvolume, long, 8; + ŷ ż, msvol, msvol, long, 8; + ŷ ż , p_msvol, p_msvol, long, 8; + ż ŷ, msvalue, msvalue, long, 6; + ŵ ŷ, mdvalue, mdvalue, long, 6; + ŷ ż, msval, msval, long, 6; + ŷ ż , p_msval, p_msval, long, 6; + ڵ, upcode, upcode, char, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/BM__1.res b/sample_python/Res/BM__1.res new file mode 100644 index 0000000..9151f70 --- /dev/null +++ b/sample_python/Res/BM__1.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, ںŸȲ(BM), BM_, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + ڵ, tjjcode, tjjcode, char, 4; + Žð, tjjtime, tjjtime, char, 8; + ż ŷ, msvolume, msvolume, long, 8; + ŵ ŷ, mdvolume, mdvolume, long, 8; + ŷ ż, msvol, msvol, long, 8; + ŷ ż , p_msvol, p_msvol, long, 8; + ż ŷ, msvalue, msvalue, long, 6; + ŵ ŷ, mdvalue, mdvalue, long, 6; + ŷ ż, msval, msval, long, 6; + ŷ ż , p_msval, p_msval, long, 6; + ڵ, upcode, upcode, char, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/C01.res b/sample_python/Res/C01.res new file mode 100644 index 0000000..82d14a3 --- /dev/null +++ b/sample_python/Res/C01.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹü, C01, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + + Ϸùȣ, seq, seq, long, 11; + trcode, trcode, trcode, char, 11; + Ī׷ȣ, megrpno, megrpno, char, 2; + ID, boardid, boardid, char, 2; + ȸȣ, memberno, memberno, char, 5; + ȣ, bpno, bpno, char, 5; + ֹȣ, ordno, ordno, char, 10; + ֹȣ, ordordno, orgordno, char, 10; + ڵ, expcode, expcode, char, 12; + ȣ, yakseq, yakseq, char, 11; + üᰡ, cheprice, cheprice, float, 11.2; + ü, chevol, chevol, long, 10; + ID, sessionid, sessionid, char, 2; + ü, chedate, chedate, char, 8; + üð, chetime, chetime, char, 9; + ֱٿüᰡ, spdprc1, spdprc1, float, 11.2; + ٿüᰡ, spdprc2, spdprc2, float, 11.2; + ŵ, dosugb, dosugb, char, 1; + ¹ȣ1, accno1, accno1, char, 12; + ȣ,sihogagb, sihogagb, char, 1; + Źȣ, jakino, jakino, char, 5; + ֱǰ¹ȣ,daeyong, daeyong, char, 12; + mem_filler, mem_filler, mem_filler, char, 7; + mem_accno, mem_accno, mem_accno, char, 11; + mem_filler1, mem_filler, mem_filler1,char, 42; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/C01_1.res b/sample_python/Res/C01_1.res new file mode 100644 index 0000000..82d14a3 --- /dev/null +++ b/sample_python/Res/C01_1.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹü, C01, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + + Ϸùȣ, seq, seq, long, 11; + trcode, trcode, trcode, char, 11; + Ī׷ȣ, megrpno, megrpno, char, 2; + ID, boardid, boardid, char, 2; + ȸȣ, memberno, memberno, char, 5; + ȣ, bpno, bpno, char, 5; + ֹȣ, ordno, ordno, char, 10; + ֹȣ, ordordno, orgordno, char, 10; + ڵ, expcode, expcode, char, 12; + ȣ, yakseq, yakseq, char, 11; + üᰡ, cheprice, cheprice, float, 11.2; + ü, chevol, chevol, long, 10; + ID, sessionid, sessionid, char, 2; + ü, chedate, chedate, char, 8; + üð, chetime, chetime, char, 9; + ֱٿüᰡ, spdprc1, spdprc1, float, 11.2; + ٿüᰡ, spdprc2, spdprc2, float, 11.2; + ŵ, dosugb, dosugb, char, 1; + ¹ȣ1, accno1, accno1, char, 12; + ȣ,sihogagb, sihogagb, char, 1; + Źȣ, jakino, jakino, char, 5; + ֱǰ¹ȣ,daeyong, daeyong, char, 12; + mem_filler, mem_filler, mem_filler, char, 7; + mem_accno, mem_accno, mem_accno, char, 11; + mem_filler1, mem_filler, mem_filler1,char, 42; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CD0.res b/sample_python/Res/CD0.res new file mode 100644 index 0000000..a6de27b --- /dev/null +++ b/sample_python/Res/CD0.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, ǰǽðѰ(D0), CD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, float, 8.2; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, float, 8.2; + ڵ , futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CD0_1.res b/sample_python/Res/CD0_1.res new file mode 100644 index 0000000..a6de27b --- /dev/null +++ b/sample_python/Res/CD0_1.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, ǰǽðѰ(D0), CD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, float, 8.2; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, float, 8.2; + ڵ , futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CDPCQ04700.res b/sample_python/Res/CDPCQ04700.res new file mode 100644 index 0000000..07990a5 --- /dev/null +++ b/sample_python/Res/CDPCQ04700.res @@ -0,0 +1,144 @@ +BEGIN_FUNCTION_MAP + .Func, ŷ,CDPCQ04700,SERVICE=CDPCQ04700,headtype=B,CREATOR=ȭ,CREDATE=2012/06/14 10:25:09; + BEGIN_DATA_MAP + CDPCQ04700InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ۹ȣ, SrtNo, SrtNo, long, 10; + ǰڵ, PdptnCode, PdptnCode, char, 2; + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + end + CDPCQ04700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ۹ȣ, SrtNo, SrtNo, long, 10; + ǰڵ, PdptnCode, PdptnCode, char, 2; + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + end + CDPCQ04700OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + end + CDPCQ04700OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ŷ, TrdDt, TrdDt, char, 8; + ŷȣ, TrdNo, TrdNo, long, 10; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ȣ, SmryNo, SmryNo, char, 4; + , SmryNm, SmryNm, char, 40; + ұ, CancTpNm, CancTpNm, char, 20; + ŷ, TrdQty, TrdQty, long, 16; + ŷ, Trtax, Trtax, long, 16; + ȭݾ, FcurrAdjstAmt, FcurrAdjstAmt, double, 25.4; + ݾ, AdjstAmt, AdjstAmt, long, 16; + ü, OvdSum, OvdSum, long, 16; + ܱݾ, DpsBfbalAmt, DpsBfbalAmt, long, 16; + ŵ㺸ȯ, SellPldgRfundAmt, SellPldgRfundAmt, long, 16; + Ź㺸ܱݾ, DpspdgLoanBfbalAmt, DpspdgLoanBfbalAmt, long, 16; + ŷü, TrdmdaNm, TrdmdaNm, char, 40; + ŷȣ, OrgTrdNo, OrgTrdNo, long, 10; + , IsuNm, IsuNm, char, 40; + ŷܰ, TrdUprc, TrdUprc, double, 13.2; + , CmsnAmt, CmsnAmt, long, 16; + ȭݾ, FcurrCmsnAmt, FcurrCmsnAmt, double, 15.2; + ȯ̱ݾ, RfundDiffAmt, RfundDiffAmt, long, 16; + հ, RepayAmtSum, RepayAmtSum, long, 16; + DZܼ, SecCrbalQty, SecCrbalQty, long, 16; + ŵݴ㺸ȯڱݾ, CslLoanRfundIntrstAmt, CslLoanRfundIntrstAmt, long, 16; + Ź㺸ܱݾ, DpspdgLoanCrbalAmt, DpspdgLoanCrbalAmt, long, 16; + óð, TrxTime, TrxTime, char, 9; + ⳳȣ, Inouno, Inouno, long, 10; + ȣ, IsuNo, IsuNo, char, 12; + ŷݾ, TrdAmt, TrdAmt, long, 16; + ǥݾ, ChckAmt, ChckAmt, long, 16; + հݾ, TaxSumAmt, TaxSumAmt, long, 16; + ȭհݾ, FcurrTaxSumAmt, FcurrTaxSumAmt, double, 26.6; + ̿, IntrstUtlfee, IntrstUtlfee, long, 16; + ݾ, MnyDvdAmt, MnyDvdAmt, long, 16; + ̼߻ݾ, RcvblOcrAmt, RcvblOcrAmt, long, 16; + óȣ, TrxBrnNo, TrxBrnNo, char, 3; + ó, TrxBrnNm, TrxBrnNm, char, 40; + Ź㺸ݾ, DpspdgLoanAmt, DpspdgLoanAmt, long, 16; + Ź㺸ȯݾ, DpspdgLoanRfundAmt, DpspdgLoanRfundAmt, long, 16; + ذ, BasePrc, BasePrc, double, 13.2; + ݱܱݾ, DpsCrbalAmt, DpsCrbalAmt, long, 16; + ǥ, BoaAmt, BoaAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + Ǵ㺸߻, BcrLoanOcrAmt, BcrLoanOcrAmt, long, 16; + Ǵ㺸ܱ, BcrLoanBfbalAmt, BcrLoanBfbalAmt, long, 16; + Ÿűذ, BnsBasePrc, BnsBasePrc, double, 20.10; + ذ, TaxchrBasePrc, TaxchrBasePrc, double, 20.10; + ŷ¼, TrdUnit, TrdUnit, long, 16; + ܰ¼, BalUnit, BalUnit, long, 16; + , EvrTax, EvrTax, long, 16; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + Ǵ㺸ȯ, BcrLoanRfundAmt, BcrLoanRfundAmt, long, 16; + Ǵ㺸ܱ, BcrLoanCrbalAmt, BcrLoanCrbalAmt, long, 16; + ߰űݹ߻Ѿ, AddMgnOcrTotamt, AddMgnOcrTotamt, long, 16; + ߰űݹ߻ݾ, AddMnyMgnOcrAmt, AddMnyMgnOcrAmt, long, 16; + ߰űݳѾ, AddMgnDfryTotamt, AddMgnDfryTotamt, long, 16; + ߰űݳαݾ, AddMnyMgnDfryAmt, AddMnyMgnDfryAmt, long, 16; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + ҵ漼, Ictax, Ictax, long, 16; + ֹμ, Ihtax, Ihtax, long, 16; + , LoanDt, LoanDt, char, 8; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ȭݾ, FcurrAmt, FcurrAmt, double, 24.4; + ȭŷݾ, FcurrTrdAmt, FcurrTrdAmt, double, 24.4; + ȭ, FcurrDps, FcurrDps, double, 21.4; + ȭܱݾ, FcurrDpsBfbalAmt, FcurrDpsBfbalAmt, double, 21.4; + ¸, OppAcntNm, OppAcntNm, char, 40; + ¹ȣ, OppAcntNo, OppAcntNo, char, 20; + ȯݾ, LoanRfundAmt, LoanRfundAmt, long, 16; + ڱݾ, LoanIntrstAmt, LoanIntrstAmt, long, 16; + Ƿθ, AskpsnNm, AskpsnNm, char, 40; + ֹ, OrdDt, OrdDt, char, 8; + ŷȯ, TrdXchrat, TrdXchrat, double, 15.4; + , RdctCmsn, RdctCmsn, double, 21.4; + ȭ, FcurrStmpTx, FcurrStmpTx, double, 21.4; + ȭڱŷ, FcurrElecfnTrtax, FcurrElecfnTrtax, double, 21.4; + ȭǰŷ, FcstckTrtax, FcstckTrtax, double, 21.4; + end + CDPCQ04700OutBlock4,Out3(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + հݾ, PnlSumAmt, PnlSumAmt, long, 16; + , CtrctAsm, CtrctAsm, long, 16; + հݾ, CmsnAmtSumAmt, CmsnAmtSumAmt, long, 16; + end + CDPCQ04700OutBlock5,Out4(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Աݱݾ, MnyinAmt, MnyinAmt, long, 16; + ԰ݾ, SecinAmt, SecinAmt, long, 16; + ݱݾ, MnyoutAmt, MnyoutAmt, long, 16; + ݾ, SecoutAmt, SecoutAmt, long, 16; + ̱ݾ, DiffAmt, DiffAmt, long, 16; + ̱ݾ0, DiffAmt0, DiffAmt0, long, 16; + ŵ, SellQty, SellQty, long, 16; + ŵݾ, SellAmt, SellAmt, long, 16; + ŵ, SellCmsn, SellCmsn, long, 16; + , EvrTax, EvrTax, long, 19; + ȭŵݾ, FcurrSellAdjstAmt, FcurrSellAdjstAmt, double, 25.4; + ż, BuyQty, BuyQty, long, 16; + żݾ, BuyAmt, BuyAmt, long, 16; + ż, BuyCmsn, BuyCmsn, long, 16; + üἼ, ExecTax, ExecTax, long, 16; + ȭżݾ, FcurrBuyAdjstAmt, FcurrBuyAdjstAmt, double, 25.4; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CDPCQ04700_1.res b/sample_python/Res/CDPCQ04700_1.res new file mode 100644 index 0000000..07990a5 --- /dev/null +++ b/sample_python/Res/CDPCQ04700_1.res @@ -0,0 +1,144 @@ +BEGIN_FUNCTION_MAP + .Func, ŷ,CDPCQ04700,SERVICE=CDPCQ04700,headtype=B,CREATOR=ȭ,CREDATE=2012/06/14 10:25:09; + BEGIN_DATA_MAP + CDPCQ04700InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ۹ȣ, SrtNo, SrtNo, long, 10; + ǰڵ, PdptnCode, PdptnCode, char, 2; + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + end + CDPCQ04700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ۹ȣ, SrtNo, SrtNo, long, 10; + ǰڵ, PdptnCode, PdptnCode, char, 2; + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + end + CDPCQ04700OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + end + CDPCQ04700OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ŷ, TrdDt, TrdDt, char, 8; + ŷȣ, TrdNo, TrdNo, long, 10; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ȣ, SmryNo, SmryNo, char, 4; + , SmryNm, SmryNm, char, 40; + ұ, CancTpNm, CancTpNm, char, 20; + ŷ, TrdQty, TrdQty, long, 16; + ŷ, Trtax, Trtax, long, 16; + ȭݾ, FcurrAdjstAmt, FcurrAdjstAmt, double, 25.4; + ݾ, AdjstAmt, AdjstAmt, long, 16; + ü, OvdSum, OvdSum, long, 16; + ܱݾ, DpsBfbalAmt, DpsBfbalAmt, long, 16; + ŵ㺸ȯ, SellPldgRfundAmt, SellPldgRfundAmt, long, 16; + Ź㺸ܱݾ, DpspdgLoanBfbalAmt, DpspdgLoanBfbalAmt, long, 16; + ŷü, TrdmdaNm, TrdmdaNm, char, 40; + ŷȣ, OrgTrdNo, OrgTrdNo, long, 10; + , IsuNm, IsuNm, char, 40; + ŷܰ, TrdUprc, TrdUprc, double, 13.2; + , CmsnAmt, CmsnAmt, long, 16; + ȭݾ, FcurrCmsnAmt, FcurrCmsnAmt, double, 15.2; + ȯ̱ݾ, RfundDiffAmt, RfundDiffAmt, long, 16; + հ, RepayAmtSum, RepayAmtSum, long, 16; + DZܼ, SecCrbalQty, SecCrbalQty, long, 16; + ŵݴ㺸ȯڱݾ, CslLoanRfundIntrstAmt, CslLoanRfundIntrstAmt, long, 16; + Ź㺸ܱݾ, DpspdgLoanCrbalAmt, DpspdgLoanCrbalAmt, long, 16; + óð, TrxTime, TrxTime, char, 9; + ⳳȣ, Inouno, Inouno, long, 10; + ȣ, IsuNo, IsuNo, char, 12; + ŷݾ, TrdAmt, TrdAmt, long, 16; + ǥݾ, ChckAmt, ChckAmt, long, 16; + հݾ, TaxSumAmt, TaxSumAmt, long, 16; + ȭհݾ, FcurrTaxSumAmt, FcurrTaxSumAmt, double, 26.6; + ̿, IntrstUtlfee, IntrstUtlfee, long, 16; + ݾ, MnyDvdAmt, MnyDvdAmt, long, 16; + ̼߻ݾ, RcvblOcrAmt, RcvblOcrAmt, long, 16; + óȣ, TrxBrnNo, TrxBrnNo, char, 3; + ó, TrxBrnNm, TrxBrnNm, char, 40; + Ź㺸ݾ, DpspdgLoanAmt, DpspdgLoanAmt, long, 16; + Ź㺸ȯݾ, DpspdgLoanRfundAmt, DpspdgLoanRfundAmt, long, 16; + ذ, BasePrc, BasePrc, double, 13.2; + ݱܱݾ, DpsCrbalAmt, DpsCrbalAmt, long, 16; + ǥ, BoaAmt, BoaAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + Ǵ㺸߻, BcrLoanOcrAmt, BcrLoanOcrAmt, long, 16; + Ǵ㺸ܱ, BcrLoanBfbalAmt, BcrLoanBfbalAmt, long, 16; + Ÿűذ, BnsBasePrc, BnsBasePrc, double, 20.10; + ذ, TaxchrBasePrc, TaxchrBasePrc, double, 20.10; + ŷ¼, TrdUnit, TrdUnit, long, 16; + ܰ¼, BalUnit, BalUnit, long, 16; + , EvrTax, EvrTax, long, 16; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + Ǵ㺸ȯ, BcrLoanRfundAmt, BcrLoanRfundAmt, long, 16; + Ǵ㺸ܱ, BcrLoanCrbalAmt, BcrLoanCrbalAmt, long, 16; + ߰űݹ߻Ѿ, AddMgnOcrTotamt, AddMgnOcrTotamt, long, 16; + ߰űݹ߻ݾ, AddMnyMgnOcrAmt, AddMnyMgnOcrAmt, long, 16; + ߰űݳѾ, AddMgnDfryTotamt, AddMgnDfryTotamt, long, 16; + ߰űݳαݾ, AddMnyMgnDfryAmt, AddMnyMgnDfryAmt, long, 16; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + ҵ漼, Ictax, Ictax, long, 16; + ֹμ, Ihtax, Ihtax, long, 16; + , LoanDt, LoanDt, char, 8; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ȭݾ, FcurrAmt, FcurrAmt, double, 24.4; + ȭŷݾ, FcurrTrdAmt, FcurrTrdAmt, double, 24.4; + ȭ, FcurrDps, FcurrDps, double, 21.4; + ȭܱݾ, FcurrDpsBfbalAmt, FcurrDpsBfbalAmt, double, 21.4; + ¸, OppAcntNm, OppAcntNm, char, 40; + ¹ȣ, OppAcntNo, OppAcntNo, char, 20; + ȯݾ, LoanRfundAmt, LoanRfundAmt, long, 16; + ڱݾ, LoanIntrstAmt, LoanIntrstAmt, long, 16; + Ƿθ, AskpsnNm, AskpsnNm, char, 40; + ֹ, OrdDt, OrdDt, char, 8; + ŷȯ, TrdXchrat, TrdXchrat, double, 15.4; + , RdctCmsn, RdctCmsn, double, 21.4; + ȭ, FcurrStmpTx, FcurrStmpTx, double, 21.4; + ȭڱŷ, FcurrElecfnTrtax, FcurrElecfnTrtax, double, 21.4; + ȭǰŷ, FcstckTrtax, FcstckTrtax, double, 21.4; + end + CDPCQ04700OutBlock4,Out3(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + հݾ, PnlSumAmt, PnlSumAmt, long, 16; + , CtrctAsm, CtrctAsm, long, 16; + հݾ, CmsnAmtSumAmt, CmsnAmtSumAmt, long, 16; + end + CDPCQ04700OutBlock5,Out4(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Աݱݾ, MnyinAmt, MnyinAmt, long, 16; + ԰ݾ, SecinAmt, SecinAmt, long, 16; + ݱݾ, MnyoutAmt, MnyoutAmt, long, 16; + ݾ, SecoutAmt, SecoutAmt, long, 16; + ̱ݾ, DiffAmt, DiffAmt, long, 16; + ̱ݾ0, DiffAmt0, DiffAmt0, long, 16; + ŵ, SellQty, SellQty, long, 16; + ŵݾ, SellAmt, SellAmt, long, 16; + ŵ, SellCmsn, SellCmsn, long, 16; + , EvrTax, EvrTax, long, 19; + ȭŵݾ, FcurrSellAdjstAmt, FcurrSellAdjstAmt, double, 25.4; + ż, BuyQty, BuyQty, long, 16; + żݾ, BuyAmt, BuyAmt, long, 16; + ż, BuyCmsn, BuyCmsn, long, 16; + üἼ, ExecTax, ExecTax, long, 16; + ȭżݾ, FcurrBuyAdjstAmt, FcurrBuyAdjstAmt, double, 25.4; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAQ21100.res b/sample_python/Res/CEXAQ21100.res new file mode 100644 index 0000000..b78719b --- /dev/null +++ b/sample_python/Res/CEXAQ21100.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func, ֹü᳻ȸ,CEXAQ21100,SERVICE=CEXAQ21100,headtype=B,CREATOR=̽,CREDATE=2012/07/02 21:01:29; + BEGIN_DATA_MAP + CEXAQ21100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ21100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ21100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ֹ, OrdQty, OrdQty, long, 16; + ü, ExecQty, ExecQty, long, 16; + end + CEXAQ21100OutBlock3,Out1(*EMPTY*),output,occurs; + begin + ¹ȣ1, AcntNo1, AcntNo1, char, 20; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ұи, MrcTpNm, MrcTpNm, char, 10; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ɼȣ, FnoOrdprcPtnNm, FnoOrdprcPtnNm, char, 40; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 25.8; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ֹ, OrdQty, OrdQty, long, 16; + ֹи, OrdTpNm, OrdTpNm, char, 10; + üᰡ, ExecPrc, ExecPrc, double, 13.2; + ü, ExecQty, ExecQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + Ÿü, CommdaNm, CommdaNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAQ21100_1.res b/sample_python/Res/CEXAQ21100_1.res new file mode 100644 index 0000000..b78719b --- /dev/null +++ b/sample_python/Res/CEXAQ21100_1.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func, ֹü᳻ȸ,CEXAQ21100,SERVICE=CEXAQ21100,headtype=B,CREATOR=̽,CREDATE=2012/07/02 21:01:29; + BEGIN_DATA_MAP + CEXAQ21100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ21100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ21100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ֹ, OrdQty, OrdQty, long, 16; + ü, ExecQty, ExecQty, long, 16; + end + CEXAQ21100OutBlock3,Out1(*EMPTY*),output,occurs; + begin + ¹ȣ1, AcntNo1, AcntNo1, char, 20; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ұи, MrcTpNm, MrcTpNm, char, 10; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ɼȣ, FnoOrdprcPtnNm, FnoOrdprcPtnNm, char, 40; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 25.8; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ֹ, OrdQty, OrdQty, long, 16; + ֹи, OrdTpNm, OrdTpNm, char, 10; + üᰡ, ExecPrc, ExecPrc, double, 13.2; + ü, ExecQty, ExecQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + Ÿü, CommdaNm, CommdaNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAQ21200.res b/sample_python/Res/CEXAQ21200.res new file mode 100644 index 0000000..b2d83b8 --- /dev/null +++ b/sample_python/Res/CEXAQ21200.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func, ֹ /ݾ ȸ,CEXAQ21200,SERVICE=CEXAQ21200,headtype=B,CREATOR=̽,CREDATE=2012/07/06 14:21:09; + BEGIN_DATA_MAP + CEXAQ21200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + end + CEXAQ21200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + end + CEXAQ21200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ȸ, QryDt, QryDt, char, 8; + 簡, NowPrc, NowPrc, double, 15.2; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + űֹɼ, NewOrdAbleQty, NewOrdAbleQty, long, 16; + ûֹɼ, LqdtOrdAbleQty, LqdtOrdAbleQty, long, 16; + 뿹űݾ, UsePreargMgn, UsePreargMgn, long, 16; + 뿹űݾ, UsePreargMnyMgn, UsePreargMnyMgn, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAQ21200_1.res b/sample_python/Res/CEXAQ21200_1.res new file mode 100644 index 0000000..b2d83b8 --- /dev/null +++ b/sample_python/Res/CEXAQ21200_1.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func, ֹ /ݾ ȸ,CEXAQ21200,SERVICE=CEXAQ21200,headtype=B,CREATOR=̽,CREDATE=2012/07/06 14:21:09; + BEGIN_DATA_MAP + CEXAQ21200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + end + CEXAQ21200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + end + CEXAQ21200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ȸ, QryDt, QryDt, char, 8; + 簡, NowPrc, NowPrc, double, 15.2; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + űֹɼ, NewOrdAbleQty, NewOrdAbleQty, long, 16; + ûֹɼ, LqdtOrdAbleQty, LqdtOrdAbleQty, long, 16; + 뿹űݾ, UsePreargMgn, UsePreargMgn, long, 16; + 뿹űݾ, UsePreargMnyMgn, UsePreargMnyMgn, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAQ31100.res b/sample_python/Res/CEXAQ31100.res new file mode 100644 index 0000000..70c2308 --- /dev/null +++ b/sample_python/Res/CEXAQ31100.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func, ߰ܰ Ȳ,CEXAQ31100,SERVICE=CEXAQ31100,headtype=B,CREATOR=̽,CREDATE=2012/12/22 14:39:24; + BEGIN_DATA_MAP + CEXAQ31100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ڵ, IsuCode, IsuCode, char, 12; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ڵ, IsuCode, IsuCode, char, 12; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31100OutBlock2,Out1(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ¸, AcntNm, AcntNm, char, 40; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + , AdjstDfamt, AdjstDfamt, long, 16; + 򰡱ݾ, TotEvalAmt, TotEvalAmt, long, 16; + Ѽͱݾ, TotPnlAmt, TotPnlAmt, long, 16; + end + CEXAQ31100OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ̰, UnsttQty, UnsttQty, long, 16; + û갡ɼ, LqdtAbleQty, LqdtAbleQty, long, 16; + հ, FnoAvrPrc, FnoAvrPrc, double, 19.8; + ذ, BasePrc, BasePrc, double, 30.10; + 簡, NowPrc, NowPrc, double, 13.2; + , CmpPrc, CmpPrc, double, 13.2; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + 򰡼, EvalPnl, EvalPnl, long, 16; + ͷ, PnlRat, PnlRat, double, 12.6; + ̰ݾ, UnsttAmt, UnsttAmt, long, 16; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAQ31100_1.res b/sample_python/Res/CEXAQ31100_1.res new file mode 100644 index 0000000..70c2308 --- /dev/null +++ b/sample_python/Res/CEXAQ31100_1.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func, ߰ܰ Ȳ,CEXAQ31100,SERVICE=CEXAQ31100,headtype=B,CREATOR=̽,CREDATE=2012/12/22 14:39:24; + BEGIN_DATA_MAP + CEXAQ31100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ڵ, IsuCode, IsuCode, char, 12; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ڵ, IsuCode, IsuCode, char, 12; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31100OutBlock2,Out1(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ¸, AcntNm, AcntNm, char, 40; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + , AdjstDfamt, AdjstDfamt, long, 16; + 򰡱ݾ, TotEvalAmt, TotEvalAmt, long, 16; + Ѽͱݾ, TotPnlAmt, TotPnlAmt, long, 16; + end + CEXAQ31100OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ̰, UnsttQty, UnsttQty, long, 16; + û갡ɼ, LqdtAbleQty, LqdtAbleQty, long, 16; + հ, FnoAvrPrc, FnoAvrPrc, double, 19.8; + ذ, BasePrc, BasePrc, double, 30.10; + 簡, NowPrc, NowPrc, double, 13.2; + , CmpPrc, CmpPrc, double, 13.2; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + 򰡼, EvalPnl, EvalPnl, long, 16; + ͷ, PnlRat, PnlRat, double, 12.6; + ̰ݾ, UnsttAmt, UnsttAmt, long, 16; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAQ31200.res b/sample_python/Res/CEXAQ31200.res new file mode 100644 index 0000000..d83e5b4 --- /dev/null +++ b/sample_python/Res/CEXAQ31200.res @@ -0,0 +1,66 @@ +BEGIN_FUNCTION_MAP + .Func, Ź ܰȸ,CEXAQ31200,SERVICE=CEXAQ31200,headtype=B,CREATOR=,CREDATE=2014/12/08 10:30:17; + BEGIN_DATA_MAP + CEXAQ31200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31200OutBlock2,Out1(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ¸, AcntNm, AcntNm, char, 40; + 򰡿ŹѾ, EvalDpsamtTotamt, EvalDpsamtTotamt, long, 15; + 򰡿Źݾ, MnyEvalDpstgAmt, MnyEvalDpstgAmt, long, 15; + ŹѾ, DpsamtTotamt, DpsamtTotamt, long, 16; + Ź, DpstgMny, DpstgMny, long, 16; + Ⱑѱݾ, PsnOutAbleTotAmt, PsnOutAbleTotAmt, long, 15; + Ⱑݾ, PsnOutAbleCurAmt, PsnOutAbleCurAmt, long, 16; + ֹѱݾ, OrdAbleTotAmt, OrdAbleTotAmt, long, 15; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ŹűѾ, CsgnMgnTotamt, CsgnMgnTotamt, long, 16; + Źűݾ, MnyCsgnMgn, MnyCsgnMgn, long, 16; + ߰űѾ, AddMgnTotamt, AddMgnTotamt, long, 15; + ߰űݾ, MnyAddMgn, MnyAddMgn, long, 16; + , CmsnAmt, CmsnAmt, long, 16; + 򰡼ͱݾ, FutsEvalPnlAmt, FutsEvalPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + ɼ򰡱ݾ, OptEvalAmt, OptEvalAmt, long, 16; + ɼǸŸżͱݾ, OptBnsplAmt, OptBnsplAmt, long, 16; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + Ѽͱݾ, TotPnlAmt, TotPnlAmt, long, 16; + ͱݾ, NetPnlAmt, NetPnlAmt, long, 16; + 򰡱ݾ, TotEvalAmt, TotEvalAmt, long, 16; + Աݱݾ, MnyinAmt, MnyinAmt, long, 16; + ݱݾ, MnyoutAmt, MnyoutAmt, long, 16; + ݾ, FutsCmsnAmt, FutsCmsnAmt, long, 16; + end + CEXAQ31200OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ̰, UnsttQty, UnsttQty, long, 16; + հ, FnoAvrPrc, FnoAvrPrc, double, 19.8; + 簡, NowPrc, NowPrc, double, 13.2; + , CmpPrc, CmpPrc, double, 13.2; + 򰡼, EvalPnl, EvalPnl, long, 16; + ͷ, PnlRat, PnlRat, double, 12.6; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + û갡ɼ, LqdtAbleQty, LqdtAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAQ31200_1.res b/sample_python/Res/CEXAQ31200_1.res new file mode 100644 index 0000000..d83e5b4 --- /dev/null +++ b/sample_python/Res/CEXAQ31200_1.res @@ -0,0 +1,66 @@ +BEGIN_FUNCTION_MAP + .Func, Ź ܰȸ,CEXAQ31200,SERVICE=CEXAQ31200,headtype=B,CREATOR=,CREDATE=2014/12/08 10:30:17; + BEGIN_DATA_MAP + CEXAQ31200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ܰ򰡱, BalEvalTp, BalEvalTp, char, 1; + 򰡱, FutsPrcEvalTp, FutsPrcEvalTp, char, 1; + end + CEXAQ31200OutBlock2,Out1(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ¸, AcntNm, AcntNm, char, 40; + 򰡿ŹѾ, EvalDpsamtTotamt, EvalDpsamtTotamt, long, 15; + 򰡿Źݾ, MnyEvalDpstgAmt, MnyEvalDpstgAmt, long, 15; + ŹѾ, DpsamtTotamt, DpsamtTotamt, long, 16; + Ź, DpstgMny, DpstgMny, long, 16; + Ⱑѱݾ, PsnOutAbleTotAmt, PsnOutAbleTotAmt, long, 15; + Ⱑݾ, PsnOutAbleCurAmt, PsnOutAbleCurAmt, long, 16; + ֹѱݾ, OrdAbleTotAmt, OrdAbleTotAmt, long, 15; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ŹűѾ, CsgnMgnTotamt, CsgnMgnTotamt, long, 16; + Źűݾ, MnyCsgnMgn, MnyCsgnMgn, long, 16; + ߰űѾ, AddMgnTotamt, AddMgnTotamt, long, 15; + ߰űݾ, MnyAddMgn, MnyAddMgn, long, 16; + , CmsnAmt, CmsnAmt, long, 16; + 򰡼ͱݾ, FutsEvalPnlAmt, FutsEvalPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + ɼ򰡱ݾ, OptEvalAmt, OptEvalAmt, long, 16; + ɼǸŸżͱݾ, OptBnsplAmt, OptBnsplAmt, long, 16; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + Ѽͱݾ, TotPnlAmt, TotPnlAmt, long, 16; + ͱݾ, NetPnlAmt, NetPnlAmt, long, 16; + 򰡱ݾ, TotEvalAmt, TotEvalAmt, long, 16; + Աݱݾ, MnyinAmt, MnyinAmt, long, 16; + ݱݾ, MnyoutAmt, MnyoutAmt, long, 16; + ݾ, FutsCmsnAmt, FutsCmsnAmt, long, 16; + end + CEXAQ31200OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ̰, UnsttQty, UnsttQty, long, 16; + հ, FnoAvrPrc, FnoAvrPrc, double, 19.8; + 簡, NowPrc, NowPrc, double, 13.2; + , CmpPrc, CmpPrc, double, 13.2; + 򰡼, EvalPnl, EvalPnl, long, 16; + ͷ, PnlRat, PnlRat, double, 12.6; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + û갡ɼ, LqdtAbleQty, LqdtAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAQ44200.res b/sample_python/Res/CEXAQ44200.res new file mode 100644 index 0000000..d41fe2b --- /dev/null +++ b/sample_python/Res/CEXAQ44200.res @@ -0,0 +1,74 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX ߰ɼ Ⱓֹüȸ,CEXAQ44200,SERVICE=CEXAQ44200,headtype=B,CREATOR=,CREDATE=2012/11/08 17:10:28; + BEGIN_DATA_MAP + CEXAQ44200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ɼǰŷڵ, FnoTrdPtnCode, FnoTrdPtnCode, char, 2; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ44200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ɼǰŷڵ, FnoTrdPtnCode, FnoTrdPtnCode, char, 2; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ44200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdQty, OrdQty, long, 16; + ü, ExecQty, ExecQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + üᰡ, ExecPrc, ExecPrc, double, 15.2; + end + CEXAQ44200OutBlock3,Out1(*EMPTY*),output,occurs; + begin + ¹ȣ1, AcntNo1, AcntNo1, char, 20; + ¸, AcntNm, AcntNm, char, 40; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣڵ, ErxOrdprcTpCode, ErxOrdprcTpCode, char, 1; + ұи, MrcTpNm, MrcTpNm, char, 10; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ڵ, CodeNm, CodeNm, char, 40; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ֹ, OrdQty, OrdQty, long, 16; + ɼǰźλڵ, FnoRjtRsnCode, FnoRjtRsnCode, char, 3; + ֹи, OrdTpNm, OrdTpNm, char, 10; + üᱸи, ExecTpNm, ExecTpNm, char, 10; + üᰡ, ExecPrc, ExecPrc, double, 13.2; + ü, ExecQty, ExecQty, long, 16; + üð, ExecTime, ExecTime, char, 9; + üȣ, ExecNo, ExecNo, long, 10; + ü, UnercQty, UnercQty, long, 16; + ID, UserId, UserId, char, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + Ÿüڵ, CommdaCodeNm, CommdaCodeNm, char, 40; + IPּ, IpAddr, IpAddr, char, 16; + ŷ, TrdPtnTpNm, TrdPtnTpNm, char, 20; + ֹڵ, ErxOrdStatCode, ErxOrdStatCode, char, 1; + ڵ0, CodeNm0, CodeNm0, char, 40; + ŷð, ExchRcptTime, ExchRcptTime, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAQ44200_1.res b/sample_python/Res/CEXAQ44200_1.res new file mode 100644 index 0000000..d41fe2b --- /dev/null +++ b/sample_python/Res/CEXAQ44200_1.res @@ -0,0 +1,74 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX ߰ɼ Ⱓֹüȸ,CEXAQ44200,SERVICE=CEXAQ44200,headtype=B,CREATOR=,CREDATE=2012/11/08 17:10:28; + BEGIN_DATA_MAP + CEXAQ44200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ɼǰŷڵ, FnoTrdPtnCode, FnoTrdPtnCode, char, 2; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ44200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Է±, ChoicInptTpCode, ChoicInptTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ɼǰŷڵ, FnoTrdPtnCode, FnoTrdPtnCode, char, 2; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + end + CEXAQ44200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdQty, OrdQty, long, 16; + ü, ExecQty, ExecQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + üᰡ, ExecPrc, ExecPrc, double, 15.2; + end + CEXAQ44200OutBlock3,Out1(*EMPTY*),output,occurs; + begin + ¹ȣ1, AcntNo1, AcntNo1, char, 20; + ¸, AcntNm, AcntNm, char, 40; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣڵ, ErxOrdprcTpCode, ErxOrdprcTpCode, char, 1; + ұи, MrcTpNm, MrcTpNm, char, 10; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ڵ, CodeNm, CodeNm, char, 40; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ֹ, OrdQty, OrdQty, long, 16; + ɼǰźλڵ, FnoRjtRsnCode, FnoRjtRsnCode, char, 3; + ֹи, OrdTpNm, OrdTpNm, char, 10; + üᱸи, ExecTpNm, ExecTpNm, char, 10; + üᰡ, ExecPrc, ExecPrc, double, 13.2; + ü, ExecQty, ExecQty, long, 16; + üð, ExecTime, ExecTime, char, 9; + üȣ, ExecNo, ExecNo, long, 10; + ü, UnercQty, UnercQty, long, 16; + ID, UserId, UserId, char, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + Ÿüڵ, CommdaCodeNm, CommdaCodeNm, char, 40; + IPּ, IpAddr, IpAddr, char, 16; + ŷ, TrdPtnTpNm, TrdPtnTpNm, char, 20; + ֹڵ, ErxOrdStatCode, ErxOrdStatCode, char, 1; + ڵ0, CodeNm0, CodeNm0, char, 40; + ŷð, ExchRcptTime, ExchRcptTime, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAT11100.res b/sample_python/Res/CEXAT11100.res new file mode 100644 index 0000000..db5130a --- /dev/null +++ b/sample_python/Res/CEXAT11100.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func, ż/ŵֹ,CEXAT11100,SERVICE=CEXAT11100,headtype=B,CREATOR=̽,CREDATE=2012/06/27 20:48:05; + BEGIN_DATA_MAP + CEXAT11100InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 15.2; + ֹ, OrdQty, OrdQty, long, 16; + end + CEXAT11100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 15.2; + ֹ, OrdQty, OrdQty, long, 16; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 25.8; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CEXAT11100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹű, OrdMgn, OrdMgn, long, 16; + ֹű, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAT11100_1.res b/sample_python/Res/CEXAT11100_1.res new file mode 100644 index 0000000..db5130a --- /dev/null +++ b/sample_python/Res/CEXAT11100_1.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func, ż/ŵֹ,CEXAT11100,SERVICE=CEXAT11100,headtype=B,CREATOR=̽,CREDATE=2012/06/27 20:48:05; + BEGIN_DATA_MAP + CEXAT11100InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 15.2; + ֹ, OrdQty, OrdQty, long, 16; + end + CEXAT11100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 15.2; + ֹ, OrdQty, OrdQty, long, 16; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 25.8; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CEXAT11100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹű, OrdMgn, OrdMgn, long, 16; + ֹű, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAT11200.res b/sample_python/Res/CEXAT11200.res new file mode 100644 index 0000000..98407ed --- /dev/null +++ b/sample_python/Res/CEXAT11200.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP + .Func, ֹ,CEXAT11200,SERVICE=CEXAT11200,headtype=B,CREATOR=̽,CREDATE=2012/06/27 21:27:10; + BEGIN_DATA_MAP + CEXAT11200InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 15.2; + end + CEXAT11200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 15.2; + , MdfyQty, MdfyQty, long, 16; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 25.8; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CEXAT11200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAT11200_1.res b/sample_python/Res/CEXAT11200_1.res new file mode 100644 index 0000000..98407ed --- /dev/null +++ b/sample_python/Res/CEXAT11200_1.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP + .Func, ֹ,CEXAT11200,SERVICE=CEXAT11200,headtype=B,CREATOR=̽,CREDATE=2012/06/27 21:27:10; + BEGIN_DATA_MAP + CEXAT11200InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 15.2; + end + CEXAT11200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + DZڵ, ErxPrcCndiTpCode, ErxPrcCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 15.2; + , MdfyQty, MdfyQty, long, 16; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 25.8; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CEXAT11200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAT11300.res b/sample_python/Res/CEXAT11300.res new file mode 100644 index 0000000..c5a56e5 --- /dev/null +++ b/sample_python/Res/CEXAT11300.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func, ֹ,CEXAT11300,SERVICE=CEXAT11300,headtype=B,CREATOR=̽,CREDATE=2012/06/27 21:31:41; + BEGIN_DATA_MAP + CEXAT11300InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + end + CEXAT11300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ҽ, CancQty, CancQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CEXAT11300OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CEXAT11300_1.res b/sample_python/Res/CEXAT11300_1.res new file mode 100644 index 0000000..c5a56e5 --- /dev/null +++ b/sample_python/Res/CEXAT11300_1.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func, ֹ,CEXAT11300,SERVICE=CEXAT11300,headtype=B,CREATOR=̽,CREDATE=2012/06/27 21:31:41; + BEGIN_DATA_MAP + CEXAT11300InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + end + CEXAT11300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ҽ, CancQty, CancQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CEXAT11300OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CFOAQ00600.res b/sample_python/Res/CFOAQ00600.res new file mode 100644 index 0000000..1a19106 --- /dev/null +++ b/sample_python/Res/CFOAQ00600.res @@ -0,0 +1,67 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹü᳻ȸ,CFOAQ00600,ENCRYPT,SERVICE=CFOAQ00600,headtype=B,CREATOR=,CREDATE=2012/03/12 16:35:20; + BEGIN_DATA_MAP + CFOAQ00600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ɼǺзڵ, FnoClssCode, FnoClssCode, char, 2; + ǰڵ, PrdgrpCode, PrdgrpCode, char, 2; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CFOAQ00600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ɼǺзڵ, FnoClssCode, FnoClssCode, char, 2; + ǰڵ, PrdgrpCode, PrdgrpCode, char, 2; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CFOAQ00600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ֹ, FutsOrdQty, FutsOrdQty, long, 16; + ü, FutsExecQty, FutsExecQty, long, 16; + ɼֹ, OptOrdQty, OptOrdQty, long, 16; + ɼü, OptExecQty, OptExecQty, long, 16; + end + CFOAQ00600OutBlock3,Out1(*EMPTY*),output,occurs; + begin + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ұи, MrcTpNm, MrcTpNm, char, 10; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼȣ, FnoOrdprcPtnNm, FnoOrdprcPtnNm, char, 40; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ֹ, OrdQty, OrdQty, long, 16; + ֹи, OrdTpNm, OrdTpNm, char, 10; + üᱸи, ExecTpNm, ExecTpNm, char, 10; + üᰡ, ExecPrc, ExecPrc, double, 13.2; + ü, ExecQty, ExecQty, long, 16; + ð, CtrctTime, CtrctTime, char, 9; + ȣ, CtrctNo, CtrctNo, long, 10; + üȣ, ExecNo, ExecNo, long, 10; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + ü, UnercQty, UnercQty, long, 16; + ID, UserId, UserId, char, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + Ÿüڵ, CommdaCodeNm, CommdaCodeNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CFOAQ00600_1.res b/sample_python/Res/CFOAQ00600_1.res new file mode 100644 index 0000000..1a19106 --- /dev/null +++ b/sample_python/Res/CFOAQ00600_1.res @@ -0,0 +1,67 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹü᳻ȸ,CFOAQ00600,ENCRYPT,SERVICE=CFOAQ00600,headtype=B,CREATOR=,CREDATE=2012/03/12 16:35:20; + BEGIN_DATA_MAP + CFOAQ00600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ɼǺзڵ, FnoClssCode, FnoClssCode, char, 2; + ǰڵ, PrdgrpCode, PrdgrpCode, char, 2; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CFOAQ00600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ɼǺзڵ, FnoClssCode, FnoClssCode, char, 2; + ǰڵ, PrdgrpCode, PrdgrpCode, char, 2; + üᱸ, PrdtExecTpCode, PrdtExecTpCode, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CFOAQ00600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ֹ, FutsOrdQty, FutsOrdQty, long, 16; + ü, FutsExecQty, FutsExecQty, long, 16; + ɼֹ, OptOrdQty, OptOrdQty, long, 16; + ɼü, OptExecQty, OptExecQty, long, 16; + end + CFOAQ00600OutBlock3,Out1(*EMPTY*),output,occurs; + begin + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ұи, MrcTpNm, MrcTpNm, char, 10; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼȣ, FnoOrdprcPtnNm, FnoOrdprcPtnNm, char, 40; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ֹ, OrdQty, OrdQty, long, 16; + ֹи, OrdTpNm, OrdTpNm, char, 10; + üᱸи, ExecTpNm, ExecTpNm, char, 10; + üᰡ, ExecPrc, ExecPrc, double, 13.2; + ü, ExecQty, ExecQty, long, 16; + ð, CtrctTime, CtrctTime, char, 9; + ȣ, CtrctNo, CtrctNo, long, 10; + üȣ, ExecNo, ExecNo, long, 10; + Ÿżͱݾ, BnsplAmt, BnsplAmt, long, 16; + ü, UnercQty, UnercQty, long, 16; + ID, UserId, UserId, char, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + Ÿüڵ, CommdaCodeNm, CommdaCodeNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CFOAQ10100.res b/sample_python/Res/CFOAQ10100.res new file mode 100644 index 0000000..6e09f1d --- /dev/null +++ b/sample_python/Res/CFOAQ10100.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹɼȸ,CFOAQ10100,SERVICE=CFOAQ10100,headtype=B,CREATOR=,CREDATE=2022/02/16 14:27:58; + BEGIN_DATA_MAP + CFOAQ10100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + end + CFOAQ10100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + end + CFOAQ10100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ȸ, QryDt, QryDt, char, 8; + ɼ簡, FnoNowPrc, FnoNowPrc, double, 27.8; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + űֹɼ, NewOrdAbleQty, NewOrdAbleQty, long, 16; + ûֹɼ, LqdtOrdAbleQty, LqdtOrdAbleQty, long, 16; + 뿹űݾ, UsePreargMgn, UsePreargMgn, long, 16; + 뿹űݾ, UsePreargMnyMgn, UsePreargMnyMgn, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CFOAQ10100_1.res b/sample_python/Res/CFOAQ10100_1.res new file mode 100644 index 0000000..6e09f1d --- /dev/null +++ b/sample_python/Res/CFOAQ10100_1.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹɼȸ,CFOAQ10100,SERVICE=CFOAQ10100,headtype=B,CREATOR=,CREDATE=2022/02/16 14:27:58; + BEGIN_DATA_MAP + CFOAQ10100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + end + CFOAQ10100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryTp, QryTp, char, 1; + ֹݾ, OrdAmt, OrdAmt, long, 16; + , RatVal, RatVal, double, 19.8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + end + CFOAQ10100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ȸ, QryDt, QryDt, char, 8; + ɼ簡, FnoNowPrc, FnoNowPrc, double, 27.8; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + űֹɼ, NewOrdAbleQty, NewOrdAbleQty, long, 16; + ûֹɼ, LqdtOrdAbleQty, LqdtOrdAbleQty, long, 16; + 뿹űݾ, UsePreargMgn, UsePreargMgn, long, 16; + 뿹űݾ, UsePreargMnyMgn, UsePreargMnyMgn, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CFOAT00100.res b/sample_python/Res/CFOAT00100.res new file mode 100644 index 0000000..75ad30e --- /dev/null +++ b/sample_python/Res/CFOAT00100.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹ,CFOAT00100,SERVICE=CFOAT00100,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2022/02/16 14:20:59; + BEGIN_DATA_MAP + CFOAT00100InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ֹ, OrdQty, OrdQty, long, 16; + end + CFOAT00100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼֹڵ, FnoOrdPtnCode, FnoOrdPtnCode, char, 2; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼǰŷڵ, FnoTrdPtnCode, FnoTrdPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ֹ, OrdQty, OrdQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ǸŸſϷð, DscusBnsCmpltTime, DscusBnsCmpltTime, char, 9; + ׷ID, GrpId, GrpId, char, 20; + ֹϷùȣ, OrdSeqno, OrdSeqno, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ׸ȣ, ItemNo, ItemNo, long, 16; + ùȣ, OpDrtnNo, OpDrtnNo, char, 12; + ȣ, MgempNo, MgempNo, char, 9; + ݵID, FundId, FundId, char, 12; + ݵֹȣ, FundOrdNo, FundOrdNo, long, 10; + end + CFOAT00100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹű, OrdMgn, OrdMgn, long, 16; + ֹű, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CFOAT00100 \ No newline at end of file diff --git a/sample_python/Res/CFOAT00100_1.res b/sample_python/Res/CFOAT00100_1.res new file mode 100644 index 0000000..75ad30e --- /dev/null +++ b/sample_python/Res/CFOAT00100_1.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹ,CFOAT00100,SERVICE=CFOAT00100,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2022/02/16 14:20:59; + BEGIN_DATA_MAP + CFOAT00100InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ֹ, OrdQty, OrdQty, long, 16; + end + CFOAT00100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ɼֹڵ, FnoOrdPtnCode, FnoOrdPtnCode, char, 2; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼǰŷڵ, FnoTrdPtnCode, FnoTrdPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + ֹ, OrdQty, OrdQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ǸŸſϷð, DscusBnsCmpltTime, DscusBnsCmpltTime, char, 9; + ׷ID, GrpId, GrpId, char, 20; + ֹϷùȣ, OrdSeqno, OrdSeqno, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ׸ȣ, ItemNo, ItemNo, long, 16; + ùȣ, OpDrtnNo, OpDrtnNo, char, 12; + ȣ, MgempNo, MgempNo, char, 9; + ݵID, FundId, FundId, char, 12; + ݵֹȣ, FundOrdNo, FundOrdNo, long, 10; + end + CFOAT00100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹű, OrdMgn, OrdMgn, long, 16; + ֹű, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CFOAT00100 \ No newline at end of file diff --git a/sample_python/Res/CFOAT00200.res b/sample_python/Res/CFOAT00200.res new file mode 100644 index 0000000..88ebc8e --- /dev/null +++ b/sample_python/Res/CFOAT00200.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹ,CFOAT00200,SERVICE=CFOAT00200,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2012/03/12 13:31:21; + BEGIN_DATA_MAP + CFOAT00200InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + , MdfyQty, MdfyQty, long, 16; + end + CFOAT00200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ɼֹڵ, FnoOrdPtnCode, FnoOrdPtnCode, char, 2; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + , MdfyQty, MdfyQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ǸŸſϷð, DscusBnsCmpltTime, DscusBnsCmpltTime, char, 9; + ׷ID, GrpId, GrpId, char, 20; + ֹϷùȣ, OrdSeqno, OrdSeqno, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + ȣ, MgempNo, MgempNo, char, 9; + ݵID, FundId, FundId, char, 12; + ݵֹȣ, FundOrgOrdNo, FundOrgOrdNo, long, 10; + ݵֹȣ, FundOrdNo, FundOrdNo, long, 10; + end + CFOAT00200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CFOAT00200 \ No newline at end of file diff --git a/sample_python/Res/CFOAT00200_1.res b/sample_python/Res/CFOAT00200_1.res new file mode 100644 index 0000000..88ebc8e --- /dev/null +++ b/sample_python/Res/CFOAT00200_1.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹ,CFOAT00200,SERVICE=CFOAT00200,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2012/03/12 13:31:21; + BEGIN_DATA_MAP + CFOAT00200InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + , MdfyQty, MdfyQty, long, 16; + end + CFOAT00200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ɼֹڵ, FnoOrdPtnCode, FnoOrdPtnCode, char, 2; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ɼȣڵ, FnoOrdprcPtnCode, FnoOrdprcPtnCode, char, 2; + ɼֹ, FnoOrdPrc, FnoOrdPrc, double, 27.8; + , MdfyQty, MdfyQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ǸŸſϷð, DscusBnsCmpltTime, DscusBnsCmpltTime, char, 9; + ׷ID, GrpId, GrpId, char, 20; + ֹϷùȣ, OrdSeqno, OrdSeqno, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + ȣ, MgempNo, MgempNo, char, 9; + ݵID, FundId, FundId, char, 12; + ݵֹȣ, FundOrgOrdNo, FundOrgOrdNo, long, 10; + ݵֹȣ, FundOrdNo, FundOrdNo, long, 10; + end + CFOAT00200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CFOAT00200 \ No newline at end of file diff --git a/sample_python/Res/CFOAT00300.res b/sample_python/Res/CFOAT00300.res new file mode 100644 index 0000000..9f54acc --- /dev/null +++ b/sample_python/Res/CFOAT00300.res @@ -0,0 +1,50 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹ,CFOAT00300,SERVICE=CFOAT00300,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/19 17:39:04; + BEGIN_DATA_MAP + CFOAT00300InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + Ҽ, CancQty, CancQty, long, 16; + end + CFOAT00300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ɼֹڵ, FnoOrdPtnCode, FnoOrdPtnCode, char, 2; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + Ҽ, CancQty, CancQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ǸŸſϷð, DscusBnsCmpltTime, DscusBnsCmpltTime, char, 9; + ׷ID, GrpId, GrpId, char, 20; + ֹϷùȣ, OrdSeqno, OrdSeqno, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + ȣ, MgempNo, MgempNo, char, 9; + ݵID, FundId, FundId, char, 12; + ݵֹȣ, FundOrgOrdNo, FundOrgOrdNo, long, 10; + ݵֹȣ, FundOrdNo, FundOrdNo, long, 10; + end + CFOAT00300OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CFOAT00300 \ No newline at end of file diff --git a/sample_python/Res/CFOAT00300_1.res b/sample_python/Res/CFOAT00300_1.res new file mode 100644 index 0000000..9f54acc --- /dev/null +++ b/sample_python/Res/CFOAT00300_1.res @@ -0,0 +1,50 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ֹ,CFOAT00300,SERVICE=CFOAT00300,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/19 17:39:04; + BEGIN_DATA_MAP + CFOAT00300InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + Ҽ, CancQty, CancQty, long, 16; + end + CFOAT00300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ɼֹڵ, FnoOrdPtnCode, FnoOrdPtnCode, char, 2; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + Ҽ, CancQty, CancQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ǸŸſϷð, DscusBnsCmpltTime, DscusBnsCmpltTime, char, 9; + ׷ID, GrpId, GrpId, char, 20; + ֹϷùȣ, OrdSeqno, OrdSeqno, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + ȣ, MgempNo, MgempNo, char, 9; + ݵID, FundId, FundId, char, 12; + ݵֹȣ, FundOrgOrdNo, FundOrgOrdNo, long, 10; + ݵֹȣ, FundOrdNo, FundOrdNo, long, 10; + end + CFOAT00300OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 50; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ֹűݾ, MnyOrdMgn, MnyOrdMgn, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CFOAT00300 \ No newline at end of file diff --git a/sample_python/Res/CFOBQ10500.res b/sample_python/Res/CFOBQ10500.res new file mode 100644 index 0000000..0e7625b --- /dev/null +++ b/sample_python/Res/CFOBQ10500.res @@ -0,0 +1,65 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ¿Źűȸ,CFOBQ10500,ENCRYPT,SERVICE=CFOBQ10500,headtype=B,CREATOR=,CREDATE=2012/03/12 15:03:11; + BEGIN_DATA_MAP + CFOBQ10500InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + end + CFOBQ10500OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + end + CFOBQ10500OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ŹѾ, DpsamtTotamt, DpsamtTotamt, long, 16; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + 翹ŹѾ, FilupDpsamtTotamt, FilupDpsamtTotamt, long, 16; + 翹, FilupDps, FilupDps, long, 16; + ͱݾ, FutsPnlAmt, FutsPnlAmt, long, 16; + Ⱑɱݾ, WthdwAbleAmt, WthdwAbleAmt, long, 16; + Ⱑݾ, PsnOutAbleCurAmt, PsnOutAbleCurAmt, long, 16; + Ⱑɴݾ, PsnOutAbleSubstAmt, PsnOutAbleSubstAmt, long, 16; + űݾ, Mgn, Mgn, long, 16; + űݾ, MnyMgn, MnyMgn, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ߰űݾ, AddMgn, AddMgn, long, 16; + ߰űݾ, MnyAddMgn, MnyAddMgn, long, 16; + ϼǥԱݾ, AmtPrdayChckInAmt, AmtPrdayChckInAmt, long, 16; + ɼϴŵݾ, FnoPrdaySubstSellAmt, FnoPrdaySubstSellAmt, long, 16; + ɼDZϴŵݾ, FnoCrdaySubstSellAmt, FnoCrdaySubstSellAmt, long, 16; + ɼϰԱݾ, FnoPrdayFdamt, FnoPrdayFdamt, long, 16; + ɼDZϰԱݾ, FnoCrdayFdamt, FnoCrdayFdamt, long, 16; + ȭݾ, FcurrSubstAmt, FcurrSubstAmt, long, 16; + ɼǰ»űݸ, FnoAcntAfmgnNm, FnoAcntAfmgnNm, char, 20; + end + CFOBQ10500OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ǰڵ, PdGrpCodeNm, PdGrpCodeNm, char, 20; + űݾ, NetRiskMgn, NetRiskMgn, long, 16; + űݾ, PrcMgn, PrcMgn, long, 16; + űݾ, SprdMgn, SprdMgn, long, 16; + ݺűݾ, PrcFlctMgn, PrcFlctMgn, long, 16; + ּűݾ, MinMgn, MinMgn, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ɼǼżݾ, OptNetBuyAmt, OptNetBuyAmt, long, 16; + Źűݾ, CsgnMgn, CsgnMgn, long, 16; + űݾ, MaintMgn, MaintMgn, long, 16; + żüݾ, FutsBuyExecAmt, FutsBuyExecAmt, long, 16; + ŵüݾ, FutsSellExecAmt, FutsSellExecAmt, long, 16; + ɼǸżüݾ, OptBuyExecAmt, OptBuyExecAmt, long, 16; + ɼǸŵüݾ, OptSellExecAmt, OptSellExecAmt, long, 16; + ͱݾ, FutsPnlAmt, FutsPnlAmt, long, 16; + Źű, TotRiskCsgnMgn, TotRiskCsgnMgn, long, 16; + μŹű, UndCsgnMgn, UndCsgnMgn, long, 16; + űݰݾ, MgnRdctAmt, MgnRdctAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CFOBQ10500_1.res b/sample_python/Res/CFOBQ10500_1.res new file mode 100644 index 0000000..0e7625b --- /dev/null +++ b/sample_python/Res/CFOBQ10500_1.res @@ -0,0 +1,65 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ¿Źűȸ,CFOBQ10500,ENCRYPT,SERVICE=CFOBQ10500,headtype=B,CREATOR=,CREDATE=2012/03/12 15:03:11; + BEGIN_DATA_MAP + CFOBQ10500InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + end + CFOBQ10500OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + end + CFOBQ10500OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ŹѾ, DpsamtTotamt, DpsamtTotamt, long, 16; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + 翹ŹѾ, FilupDpsamtTotamt, FilupDpsamtTotamt, long, 16; + 翹, FilupDps, FilupDps, long, 16; + ͱݾ, FutsPnlAmt, FutsPnlAmt, long, 16; + Ⱑɱݾ, WthdwAbleAmt, WthdwAbleAmt, long, 16; + Ⱑݾ, PsnOutAbleCurAmt, PsnOutAbleCurAmt, long, 16; + Ⱑɴݾ, PsnOutAbleSubstAmt, PsnOutAbleSubstAmt, long, 16; + űݾ, Mgn, Mgn, long, 16; + űݾ, MnyMgn, MnyMgn, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ߰űݾ, AddMgn, AddMgn, long, 16; + ߰űݾ, MnyAddMgn, MnyAddMgn, long, 16; + ϼǥԱݾ, AmtPrdayChckInAmt, AmtPrdayChckInAmt, long, 16; + ɼϴŵݾ, FnoPrdaySubstSellAmt, FnoPrdaySubstSellAmt, long, 16; + ɼDZϴŵݾ, FnoCrdaySubstSellAmt, FnoCrdaySubstSellAmt, long, 16; + ɼϰԱݾ, FnoPrdayFdamt, FnoPrdayFdamt, long, 16; + ɼDZϰԱݾ, FnoCrdayFdamt, FnoCrdayFdamt, long, 16; + ȭݾ, FcurrSubstAmt, FcurrSubstAmt, long, 16; + ɼǰ»űݸ, FnoAcntAfmgnNm, FnoAcntAfmgnNm, char, 20; + end + CFOBQ10500OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ǰڵ, PdGrpCodeNm, PdGrpCodeNm, char, 20; + űݾ, NetRiskMgn, NetRiskMgn, long, 16; + űݾ, PrcMgn, PrcMgn, long, 16; + űݾ, SprdMgn, SprdMgn, long, 16; + ݺűݾ, PrcFlctMgn, PrcFlctMgn, long, 16; + ּűݾ, MinMgn, MinMgn, long, 16; + ֹűݾ, OrdMgn, OrdMgn, long, 16; + ɼǼżݾ, OptNetBuyAmt, OptNetBuyAmt, long, 16; + Źűݾ, CsgnMgn, CsgnMgn, long, 16; + űݾ, MaintMgn, MaintMgn, long, 16; + żüݾ, FutsBuyExecAmt, FutsBuyExecAmt, long, 16; + ŵüݾ, FutsSellExecAmt, FutsSellExecAmt, long, 16; + ɼǸżüݾ, OptBuyExecAmt, OptBuyExecAmt, long, 16; + ɼǸŵüݾ, OptSellExecAmt, OptSellExecAmt, long, 16; + ͱݾ, FutsPnlAmt, FutsPnlAmt, long, 16; + Źű, TotRiskCsgnMgn, TotRiskCsgnMgn, long, 16; + μŹű, UndCsgnMgn, UndCsgnMgn, long, 16; + űݰݾ, MgnRdctAmt, MgnRdctAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CFOBQ10800.res b/sample_python/Res/CFOBQ10800.res new file mode 100644 index 0000000..ccfb7b4 --- /dev/null +++ b/sample_python/Res/CFOBQ10800.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ɼǸŵ ֹűȸ,CFOBQ10800,SERVICE=CFOBQ10800,headtype=B,CREATOR=,CREDATE=2019/08/01 10:51:29; + BEGIN_DATA_MAP + CFOBQ10800InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ǰڵ, PrdgrpClssCode, PrdgrpClssCode, char, 2; + ڻڵ, ClssGrpCode, ClssGrpCode, char, 3; + ؿ, BaseYear, BaseYear, char, 4; + ֱٿ, FstmmTpCode, FstmmTpCode, char, 1; + end + CFOBQ10800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ǰڵ, PrdgrpClssCode, PrdgrpClssCode, char, 2; + ڻڵ, ClssGrpCode, ClssGrpCode, char, 3; + ؿ, BaseYear, BaseYear, char, 4; + ֱٿ, FstmmTpCode, FstmmTpCode, char, 1; + end + CFOBQ10800OutBlock2,Out(*EMPTY*),output,occurs; + begin + 簡, ElwXrcPrc, ElwXrcPrc, double, 13.2; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ѱ1, HanglIsuNm1, HanglIsuNm1, char, 40; + и1, TpNm1, TpNm1, char, 40; + ¿ɼ̷а, UpOptRegulThrprc, UpOptRegulThrprc, double, 27.8; + ̷а1, Thrprc1, Thrprc1, double, 19.8; + ذ1, BasePrc1, BasePrc1, double, 13.2; + ֹűݾ1, OrdMgn1, OrdMgn1, long, 16; + ɼȣ0, FnoIsuNo0, FnoIsuNo0, char, 12; + ѱ2, HanglIsuNm2, HanglIsuNm2, char, 40; + и2, TpNm2, TpNm2, char, 40; + ϶ɼ̷а, DownOptRegulThrprc, DownOptRegulThrprc, double, 27.8; + ̷а2, Thrprc2, Thrprc2, double, 19.8; + ذ2, BasePrc2, BasePrc2, double, 13.2; + ֹűݾ2, OrdMgn2, OrdMgn2, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CFOBQ10800_1.res b/sample_python/Res/CFOBQ10800_1.res new file mode 100644 index 0000000..ccfb7b4 --- /dev/null +++ b/sample_python/Res/CFOBQ10800_1.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ ɼǸŵ ֹűȸ,CFOBQ10800,SERVICE=CFOBQ10800,headtype=B,CREATOR=,CREDATE=2019/08/01 10:51:29; + BEGIN_DATA_MAP + CFOBQ10800InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ǰڵ, PrdgrpClssCode, PrdgrpClssCode, char, 2; + ڻڵ, ClssGrpCode, ClssGrpCode, char, 3; + ؿ, BaseYear, BaseYear, char, 4; + ֱٿ, FstmmTpCode, FstmmTpCode, char, 1; + end + CFOBQ10800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ǰڵ, PrdgrpClssCode, PrdgrpClssCode, char, 2; + ڻڵ, ClssGrpCode, ClssGrpCode, char, 3; + ؿ, BaseYear, BaseYear, char, 4; + ֱٿ, FstmmTpCode, FstmmTpCode, char, 1; + end + CFOBQ10800OutBlock2,Out(*EMPTY*),output,occurs; + begin + 簡, ElwXrcPrc, ElwXrcPrc, double, 13.2; + ɼȣ, FnoIsuNo, FnoIsuNo, char, 12; + ѱ1, HanglIsuNm1, HanglIsuNm1, char, 40; + и1, TpNm1, TpNm1, char, 40; + ¿ɼ̷а, UpOptRegulThrprc, UpOptRegulThrprc, double, 27.8; + ̷а1, Thrprc1, Thrprc1, double, 19.8; + ذ1, BasePrc1, BasePrc1, double, 13.2; + ֹűݾ1, OrdMgn1, OrdMgn1, long, 16; + ɼȣ0, FnoIsuNo0, FnoIsuNo0, char, 12; + ѱ2, HanglIsuNm2, HanglIsuNm2, char, 40; + и2, TpNm2, TpNm2, char, 40; + ϶ɼ̷а, DownOptRegulThrprc, DownOptRegulThrprc, double, 27.8; + ̷а2, Thrprc2, Thrprc2, double, 19.8; + ذ2, BasePrc2, BasePrc2, double, 13.2; + ֹűݾ2, OrdMgn2, OrdMgn2, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CFOEQ11100.res b/sample_python/Res/CFOEQ11100.res new file mode 100644 index 0000000..6b66f33 --- /dev/null +++ b/sample_python/Res/CFOEQ11100.res @@ -0,0 +1,121 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǰ꿹Źݻ,CFOEQ11100,SERVICE=CFOEQ11100,headtype=B,CREATOR=,CREDATE=2012/03/16 14:04:41; + BEGIN_DATA_MAP + CFOEQ11100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ÿ, BnsDt, BnsDt, char, 8; + end + CFOEQ11100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ÿ, BnsDt, BnsDt, char, 8; + end + CFOEQ11100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ÿŹѾ, OpnmkDpsamtTotamt, OpnmkDpsamtTotamt, long, 16; + ÿ, OpnmkDps, OpnmkDps, long, 16; + ݹ̼, OpnmkMnyrclAmt, OpnmkMnyrclAmt, long, 16; + ôݾ, OpnmkSubstAmt, OpnmkSubstAmt, long, 16; + ѱݾ, TotAmt, TotAmt, long, 16; + , Dps, Dps, long, 16; + ݹ̼ݾ, MnyrclAmt, MnyrclAmt, long, 16; + ݾ, SubstDsgnAmt, SubstDsgnAmt, long, 16; + Źűݾ, CsgnMgn, CsgnMgn, long, 16; + Źűݾ, MnyCsgnMgn, MnyCsgnMgn, long, 16; + űݾ, MaintMgn, MaintMgn, long, 16; + űݾ, MnyMaintMgn, MnyMaintMgn, long, 16; + ݰѾ, OutAbleAmt, OutAbleAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ݰɴ, SubstOutAbleAmt, SubstOutAbleAmt, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ߰űݱ, AddMgnOcrTpCode, AddMgnOcrTpCode, char, 1; + ߰űݾ, AddMgn, AddMgn, long, 16; + ߰űݾ, MnyAddMgn, MnyAddMgn, long, 16; + ϿŹѾ, NtdayTotAmt, NtdayTotAmt, long, 16; + ϿŹ, NtdayDps, NtdayDps, long, 16; + Ϲ̼, NtdayMnyrclAmt, NtdayMnyrclAmt, long, 16; + ϿŹ, NtdaySubstAmt, NtdaySubstAmt, long, 16; + Źű, NtdayCsgnMgn, NtdayCsgnMgn, long, 16; + Źű, NtdayMnyCsgnMgn, NtdayMnyCsgnMgn, long, 16; + ű, NtdayMaintMgn, NtdayMaintMgn, long, 16; + ű, NtdayMnyMaintMgn, NtdayMnyMaintMgn, long, 16; + Ⱑɱݾ, NtdayOutAbleAmt, NtdayOutAbleAmt, long, 16; + Ⱑɱݾ, NtdayMnyoutAbleAmt, NtdayMnyoutAbleAmt, long, 16; + Ⱑɴ, NtdaySubstOutAbleAmt, NtdaySubstOutAbleAmt, long, 16; + ֹɱݾ, NtdayOrdAbleAmt, NtdayOrdAbleAmt, long, 16; + ֹ, NtdayMnyOrdAbleAmt, NtdayMnyOrdAbleAmt, long, 16; + ߰űݱ, NtdayAddMgnTp, NtdayAddMgnTp, char, 1; + ߰ű, NtdayAddMgn, NtdayAddMgn, long, 16; + ߰ű, NtdayMnyAddMgn, NtdayMnyAddMgn, long, 16; + ϰݾ, NtdaySettAmt, NtdaySettAmt, long, 16; + 򰡿ŹѾ, EvalDpsamtTotamt, EvalDpsamtTotamt, long, 15; + 򰡿Źݾ, MnyEvalDpstgAmt, MnyEvalDpstgAmt, long, 15; + Ź̿޿ݾ, DpsamtUtlfeeGivPrergAmt, DpsamtUtlfeeGivPrergAmt, long, 16; + , TaxAmt, TaxAmt, long, 16; + Źű , CsgnMgnrat, CsgnMgnrat, double, 7.2; + Źűݺ, CsgnMnyMgnrat, CsgnMnyMgnrat, double, 7.2; + ŹѾ׺ݾ(Źűݱ), DpstgTotamtLackAmt, DpstgTotamtLackAmt, long, 16; + Źݺݾ(Źűݱ), DpstgMnyLackAmt, DpstgMnyLackAmt, long, 16; + Աݾ, RealInAmt, RealInAmt, long, 16; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + , FutsThdayDfamt, FutsThdayDfamt, long, 16; + , FutsUpdtDfamt, FutsUpdtDfamt, long, 16; + , FutsLastSettDfamt, FutsLastSettDfamt, long, 16; + ɼǰ, OptSettDfamt, OptSettDfamt, long, 16; + ɼǸżݾ, OptBuyAmt, OptBuyAmt, long, 16; + ɼǸŵݾ, OptSellAmt, OptSellAmt, long, 16; + ɼ, OptXrcDfamt, OptXrcDfamt, long, 16; + ɼǹ, OptAsgnDfamt, OptAsgnDfamt, long, 16; + ǹμݾ, RealGdsUndAmt, RealGdsUndAmt, long, 16; + ǹμ, RealGdsUndAsgnAmt, RealGdsUndAsgnAmt, long, 16; + ǹμ, RealGdsUndXrcAmt, RealGdsUndXrcAmt, long, 16; + , CmsnAmt, CmsnAmt, long, 16; + , FutsCmsn, FutsCmsn, long, 16; + ɼǼ, OptCmsn, OptCmsn, long, 16; + , FutsCtrctQty, FutsCtrctQty, long, 16; + ݾ, FutsCtrctAmt, FutsCtrctAmt, long, 16; + ɼǾ, OptCtrctQty, OptCtrctQty, long, 16; + ɼǾݾ, OptCtrctAmt, OptCtrctAmt, long, 16; + ̰, FutsUnsttQty, FutsUnsttQty, long, 16; + ̰ݾ, FutsUnsttAmt, FutsUnsttAmt, long, 16; + ɼǹ̰, OptUnsttQty, OptUnsttQty, long, 16; + ɼǹ̰ݾ, OptUnsttAmt, OptUnsttAmt, long, 16; + ż̰, FutsBuyUnsttQty, FutsBuyUnsttQty, long, 16; + ż̰ݾ, FutsBuyUnsttAmt, FutsBuyUnsttAmt, long, 16; + ŵ̰, FutsSellUnsttQty, FutsSellUnsttQty, long, 16; + ŵ̰ݾ, FutsSellUnsttAmt, FutsSellUnsttAmt, long, 16; + ɼǸż̰, OptBuyUnsttQty, OptBuyUnsttQty, long, 16; + ɼǸż̰ݾ, OptBuyUnsttAmt, OptBuyUnsttAmt, long, 16; + ɼǸŵ̰, OptSellUnsttQty, OptSellUnsttQty, long, 16; + ɼǸŵ̰ݾ, OptSellUnsttAmt, OptSellUnsttAmt, long, 16; + ż, FutsBuyctrQty, FutsBuyctrQty, long, 16; + żݾ, FutsBuyctrAmt, FutsBuyctrAmt, long, 16; + ŵ, FutsSlctrQty, FutsSlctrQty, long, 16; + ŵݾ, FutsSlctrAmt, FutsSlctrAmt, long, 16; + ɼǸż, OptBuyctrQty, OptBuyctrQty, long, 16; + ɼǸżݾ, OptBuyctrAmt, OptBuyctrAmt, long, 16; + ɼǸŵ, OptSlctrQty, OptSlctrQty, long, 16; + ɼǸŵݾ, OptSlctrAmt, OptSlctrAmt, long, 16; + Ÿżͱݾ, FutsBnsplAmt, FutsBnsplAmt, long, 16; + ɼǸŸżͱݾ, OptBnsplAmt, OptBnsplAmt, long, 16; + 򰡼ͱݾ, FutsEvalPnlAmt, FutsEvalPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + 򰡱ݾ, FutsEvalAmt, FutsEvalAmt, long, 16; + ɼ򰡱ݾ, OptEvalAmt, OptEvalAmt, long, 16; + Աݱݾ, MktEndAfMnyInAmt, MktEndAfMnyInAmt, long, 16; + ݱݾ, MktEndAfMnyOutAmt, MktEndAfMnyOutAmt, long, 16; + Ĵݾ, MktEndAfSubstDsgnAmt, MktEndAfSubstDsgnAmt, long, 16; + Ĵݾ, MktEndAfSubstAbndAmt, MktEndAfSubstAbndAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CFOEQ11100_1.res b/sample_python/Res/CFOEQ11100_1.res new file mode 100644 index 0000000..6b66f33 --- /dev/null +++ b/sample_python/Res/CFOEQ11100_1.res @@ -0,0 +1,121 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǰ꿹Źݻ,CFOEQ11100,SERVICE=CFOEQ11100,headtype=B,CREATOR=,CREDATE=2012/03/16 14:04:41; + BEGIN_DATA_MAP + CFOEQ11100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ÿ, BnsDt, BnsDt, char, 8; + end + CFOEQ11100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ÿ, BnsDt, BnsDt, char, 8; + end + CFOEQ11100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ÿŹѾ, OpnmkDpsamtTotamt, OpnmkDpsamtTotamt, long, 16; + ÿ, OpnmkDps, OpnmkDps, long, 16; + ݹ̼, OpnmkMnyrclAmt, OpnmkMnyrclAmt, long, 16; + ôݾ, OpnmkSubstAmt, OpnmkSubstAmt, long, 16; + ѱݾ, TotAmt, TotAmt, long, 16; + , Dps, Dps, long, 16; + ݹ̼ݾ, MnyrclAmt, MnyrclAmt, long, 16; + ݾ, SubstDsgnAmt, SubstDsgnAmt, long, 16; + Źűݾ, CsgnMgn, CsgnMgn, long, 16; + Źűݾ, MnyCsgnMgn, MnyCsgnMgn, long, 16; + űݾ, MaintMgn, MaintMgn, long, 16; + űݾ, MnyMaintMgn, MnyMaintMgn, long, 16; + ݰѾ, OutAbleAmt, OutAbleAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ݰɴ, SubstOutAbleAmt, SubstOutAbleAmt, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ߰űݱ, AddMgnOcrTpCode, AddMgnOcrTpCode, char, 1; + ߰űݾ, AddMgn, AddMgn, long, 16; + ߰űݾ, MnyAddMgn, MnyAddMgn, long, 16; + ϿŹѾ, NtdayTotAmt, NtdayTotAmt, long, 16; + ϿŹ, NtdayDps, NtdayDps, long, 16; + Ϲ̼, NtdayMnyrclAmt, NtdayMnyrclAmt, long, 16; + ϿŹ, NtdaySubstAmt, NtdaySubstAmt, long, 16; + Źű, NtdayCsgnMgn, NtdayCsgnMgn, long, 16; + Źű, NtdayMnyCsgnMgn, NtdayMnyCsgnMgn, long, 16; + ű, NtdayMaintMgn, NtdayMaintMgn, long, 16; + ű, NtdayMnyMaintMgn, NtdayMnyMaintMgn, long, 16; + Ⱑɱݾ, NtdayOutAbleAmt, NtdayOutAbleAmt, long, 16; + Ⱑɱݾ, NtdayMnyoutAbleAmt, NtdayMnyoutAbleAmt, long, 16; + Ⱑɴ, NtdaySubstOutAbleAmt, NtdaySubstOutAbleAmt, long, 16; + ֹɱݾ, NtdayOrdAbleAmt, NtdayOrdAbleAmt, long, 16; + ֹ, NtdayMnyOrdAbleAmt, NtdayMnyOrdAbleAmt, long, 16; + ߰űݱ, NtdayAddMgnTp, NtdayAddMgnTp, char, 1; + ߰ű, NtdayAddMgn, NtdayAddMgn, long, 16; + ߰ű, NtdayMnyAddMgn, NtdayMnyAddMgn, long, 16; + ϰݾ, NtdaySettAmt, NtdaySettAmt, long, 16; + 򰡿ŹѾ, EvalDpsamtTotamt, EvalDpsamtTotamt, long, 15; + 򰡿Źݾ, MnyEvalDpstgAmt, MnyEvalDpstgAmt, long, 15; + Ź̿޿ݾ, DpsamtUtlfeeGivPrergAmt, DpsamtUtlfeeGivPrergAmt, long, 16; + , TaxAmt, TaxAmt, long, 16; + Źű , CsgnMgnrat, CsgnMgnrat, double, 7.2; + Źűݺ, CsgnMnyMgnrat, CsgnMnyMgnrat, double, 7.2; + ŹѾ׺ݾ(Źűݱ), DpstgTotamtLackAmt, DpstgTotamtLackAmt, long, 16; + Źݺݾ(Źűݱ), DpstgMnyLackAmt, DpstgMnyLackAmt, long, 16; + Աݾ, RealInAmt, RealInAmt, long, 16; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + , FutsThdayDfamt, FutsThdayDfamt, long, 16; + , FutsUpdtDfamt, FutsUpdtDfamt, long, 16; + , FutsLastSettDfamt, FutsLastSettDfamt, long, 16; + ɼǰ, OptSettDfamt, OptSettDfamt, long, 16; + ɼǸżݾ, OptBuyAmt, OptBuyAmt, long, 16; + ɼǸŵݾ, OptSellAmt, OptSellAmt, long, 16; + ɼ, OptXrcDfamt, OptXrcDfamt, long, 16; + ɼǹ, OptAsgnDfamt, OptAsgnDfamt, long, 16; + ǹμݾ, RealGdsUndAmt, RealGdsUndAmt, long, 16; + ǹμ, RealGdsUndAsgnAmt, RealGdsUndAsgnAmt, long, 16; + ǹμ, RealGdsUndXrcAmt, RealGdsUndXrcAmt, long, 16; + , CmsnAmt, CmsnAmt, long, 16; + , FutsCmsn, FutsCmsn, long, 16; + ɼǼ, OptCmsn, OptCmsn, long, 16; + , FutsCtrctQty, FutsCtrctQty, long, 16; + ݾ, FutsCtrctAmt, FutsCtrctAmt, long, 16; + ɼǾ, OptCtrctQty, OptCtrctQty, long, 16; + ɼǾݾ, OptCtrctAmt, OptCtrctAmt, long, 16; + ̰, FutsUnsttQty, FutsUnsttQty, long, 16; + ̰ݾ, FutsUnsttAmt, FutsUnsttAmt, long, 16; + ɼǹ̰, OptUnsttQty, OptUnsttQty, long, 16; + ɼǹ̰ݾ, OptUnsttAmt, OptUnsttAmt, long, 16; + ż̰, FutsBuyUnsttQty, FutsBuyUnsttQty, long, 16; + ż̰ݾ, FutsBuyUnsttAmt, FutsBuyUnsttAmt, long, 16; + ŵ̰, FutsSellUnsttQty, FutsSellUnsttQty, long, 16; + ŵ̰ݾ, FutsSellUnsttAmt, FutsSellUnsttAmt, long, 16; + ɼǸż̰, OptBuyUnsttQty, OptBuyUnsttQty, long, 16; + ɼǸż̰ݾ, OptBuyUnsttAmt, OptBuyUnsttAmt, long, 16; + ɼǸŵ̰, OptSellUnsttQty, OptSellUnsttQty, long, 16; + ɼǸŵ̰ݾ, OptSellUnsttAmt, OptSellUnsttAmt, long, 16; + ż, FutsBuyctrQty, FutsBuyctrQty, long, 16; + żݾ, FutsBuyctrAmt, FutsBuyctrAmt, long, 16; + ŵ, FutsSlctrQty, FutsSlctrQty, long, 16; + ŵݾ, FutsSlctrAmt, FutsSlctrAmt, long, 16; + ɼǸż, OptBuyctrQty, OptBuyctrQty, long, 16; + ɼǸżݾ, OptBuyctrAmt, OptBuyctrAmt, long, 16; + ɼǸŵ, OptSlctrQty, OptSlctrQty, long, 16; + ɼǸŵݾ, OptSlctrAmt, OptSlctrAmt, long, 16; + Ÿżͱݾ, FutsBnsplAmt, FutsBnsplAmt, long, 16; + ɼǸŸżͱݾ, OptBnsplAmt, OptBnsplAmt, long, 16; + 򰡼ͱݾ, FutsEvalPnlAmt, FutsEvalPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + 򰡱ݾ, FutsEvalAmt, FutsEvalAmt, long, 16; + ɼ򰡱ݾ, OptEvalAmt, OptEvalAmt, long, 16; + Աݱݾ, MktEndAfMnyInAmt, MktEndAfMnyInAmt, long, 16; + ݱݾ, MktEndAfMnyOutAmt, MktEndAfMnyOutAmt, long, 16; + Ĵݾ, MktEndAfSubstDsgnAmt, MktEndAfSubstDsgnAmt, long, 16; + Ĵݾ, MktEndAfSubstAbndAmt, MktEndAfSubstAbndAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CFOEQ82600.res b/sample_python/Res/CFOEQ82600.res new file mode 100644 index 0000000..18bc03b --- /dev/null +++ b/sample_python/Res/CFOEQ82600.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ Ϻ ¼ͳ,CFOEQ82600,SERVICE=CFOEQ82600,headtype=B,CREATOR=ȲԼ,CREDATE=2013/01/06 17:48:51; + BEGIN_DATA_MAP + CFOEQ82600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + ɼܰ򰡱ڵ, FnoBalEvalTpCode, FnoBalEvalTpCode, char, 1; + end + CFOEQ82600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + ɼܰ򰡱ڵ, FnoBalEvalTpCode, FnoBalEvalTpCode, char, 1; + end + CFOEQ82600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + ɼǸŸżͱݾ, OptBnsplAmt, OptBnsplAmt, long, 16; + ɼǼ, FnoCmsnAmt, FnoCmsnAmt, long, 16; + հݾ, PnlSumAmt, PnlSumAmt, long, 16; + Ահݾ, MnyinSumAmt, MnyinSumAmt, long, 16; + հݾ, MnyoutSumAmt, MnyoutSumAmt, long, 16; + ¸, AcntNm, AcntNm, char, 40; + end + CFOEQ82600OutBlock3,OutList(*EMPTY*),output,occurs; + begin + ȸ, QryDt, QryDt, char, 8; + ŹѾ, DpstgTotamt, DpstgTotamt, long, 16; + Ź, DpstgMny, DpstgMny, long, 16; + ɼűݾ, FnoMgn, FnoMgn, long, 16; + ͱݾ, FutsPnlAmt, FutsPnlAmt, long, 16; + ɼǸŸżͱݾ, OptBsnPnlAmt, OptBsnPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + , CmsnAmt, CmsnAmt, long, 16; + հݾ1, SumAmt1, SumAmt1, long, 16; + հݾ, SumAmt2, SumAmt2, long, 16; + հݾ, PnlSumAmt, PnlSumAmt, long, 16; + żݾ, FutsBuyAmt, FutsBuyAmt, long, 16; + ŵݾ, FutsSellAmt, FutsSellAmt, long, 16; + ɼǸżݾ, OptBuyAmt, OptBuyAmt, long, 16; + ɼǸŵݾ, OptSellAmt, OptSellAmt, long, 16; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + ջ򰡱ݾ, AddupEvalAmt, AddupEvalAmt, long, 16; + ݾ2, Amt2, Amt2, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CFOEQ82600_1.res b/sample_python/Res/CFOEQ82600_1.res new file mode 100644 index 0000000..18bc03b --- /dev/null +++ b/sample_python/Res/CFOEQ82600_1.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ Ϻ ¼ͳ,CFOEQ82600,SERVICE=CFOEQ82600,headtype=B,CREATOR=ȲԼ,CREDATE=2013/01/06 17:48:51; + BEGIN_DATA_MAP + CFOEQ82600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + ɼܰ򰡱ڵ, FnoBalEvalTpCode, FnoBalEvalTpCode, char, 1; + end + CFOEQ82600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + ļ, StnlnSeqTp, StnlnSeqTp, char, 1; + ɼܰ򰡱ڵ, FnoBalEvalTpCode, FnoBalEvalTpCode, char, 1; + end + CFOEQ82600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + ɼǸŸżͱݾ, OptBnsplAmt, OptBnsplAmt, long, 16; + ɼǼ, FnoCmsnAmt, FnoCmsnAmt, long, 16; + հݾ, PnlSumAmt, PnlSumAmt, long, 16; + Ահݾ, MnyinSumAmt, MnyinSumAmt, long, 16; + հݾ, MnyoutSumAmt, MnyoutSumAmt, long, 16; + ¸, AcntNm, AcntNm, char, 40; + end + CFOEQ82600OutBlock3,OutList(*EMPTY*),output,occurs; + begin + ȸ, QryDt, QryDt, char, 8; + ŹѾ, DpstgTotamt, DpstgTotamt, long, 16; + Ź, DpstgMny, DpstgMny, long, 16; + ɼűݾ, FnoMgn, FnoMgn, long, 16; + ͱݾ, FutsPnlAmt, FutsPnlAmt, long, 16; + ɼǸŸżͱݾ, OptBsnPnlAmt, OptBsnPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + , CmsnAmt, CmsnAmt, long, 16; + հݾ1, SumAmt1, SumAmt1, long, 16; + հݾ, SumAmt2, SumAmt2, long, 16; + հݾ, PnlSumAmt, PnlSumAmt, long, 16; + żݾ, FutsBuyAmt, FutsBuyAmt, long, 16; + ŵݾ, FutsSellAmt, FutsSellAmt, long, 16; + ɼǸżݾ, OptBuyAmt, OptBuyAmt, long, 16; + ɼǸŵݾ, OptSellAmt, OptSellAmt, long, 16; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + ջ򰡱ݾ, AddupEvalAmt, AddupEvalAmt, long, 16; + ݾ2, Amt2, Amt2, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CFOFQ02400.res b/sample_python/Res/CFOFQ02400.res new file mode 100644 index 0000000..41f5fdb --- /dev/null +++ b/sample_python/Res/CFOFQ02400.res @@ -0,0 +1,75 @@ +BEGIN_FUNCTION_MAP + .Func, ̰ Ȳ(հ),CFOFQ02400,SERVICE=CFOFQ02400,headtype=B,CREATOR=,CREDATE=2012/03/16 14:07:10; + BEGIN_DATA_MAP + CFOFQ02400InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ͻڵ, RegMktCode, RegMktCode, char, 2; + ż, BuyDt, BuyDt, char, 8; + end + CFOFQ02400OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ͻڵ, RegMktCode, RegMktCode, char, 2; + ż, BuyDt, BuyDt, char, 8; + end + CFOFQ02400OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + , FutsCtrctQty, FutsCtrctQty, long, 16; + ɼǾ, OptCtrctQty, OptCtrctQty, long, 16; + , CtrctQty, CtrctQty, long, 16; + ݾ, FutsCtrctAmt, FutsCtrctAmt, long, 16; + żݾ, FutsBuyctrAmt, FutsBuyctrAmt, long, 16; + ŵݾ, FutsSlctrAmt, FutsSlctrAmt, long, 16; + ݿɼǾݾ, CalloptCtrctAmt, CalloptCtrctAmt, long, 16; + ݸżݾ, CallBuyAmt, CallBuyAmt, long, 16; + ݸŵݾ, CallSellAmt, CallSellAmt, long, 16; + DzɼǾݾ, PutoptCtrctAmt, PutoptCtrctAmt, long, 16; + Dzżݾ, PutBuyAmt, PutBuyAmt, long, 16; + Dzŵݾ, PutSellAmt, PutSellAmt, long, 16; + üݾ, AllCtrctAmt, AllCtrctAmt, long, 16; + żݾ, BuyctrAsmAmt, BuyctrAsmAmt, long, 16; + ŵݾ, SlctrAsmAmt, SlctrAsmAmt, long, 16; + հ, FutsPnlSum, FutsPnlSum, long, 16; + ɼǼհ, OptPnlSum, OptPnlSum, long, 16; + üհ, AllPnlSum, AllPnlSum, long, 16; + end + CFOFQ02400OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ɼǰ񱸺, FnoClssCode, FnoClssCode, char, 1; + ŵ, FutsSellQty, FutsSellQty, long, 16; + ŵ, FutsSellPnl, FutsSellPnl, long, 16; + ż, FutsBuyQty, FutsBuyQty, long, 16; + ż, FutsBuyPnl, FutsBuyPnl, long, 16; + ݸŵ, CallSellQty, CallSellQty, long, 16; + ݸŵ, CallSellPnl, CallSellPnl, long, 16; + ݸż, CallBuyQty, CallBuyQty, long, 16; + ݸż, CallBuyPnl, CallBuyPnl, long, 16; + Dzŵ, PutSellQty, PutSellQty, long, 16; + Dzŵ, PutSellPnl, PutSellPnl, long, 16; + Dzż, PutBuyQty, PutBuyQty, long, 16; + Dzż, PutBuyPnl, PutBuyPnl, long, 16; + end + CFOFQ02400OutBlock4,Out3(*EMPTY*),output,occurs; + begin + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ܰ, BalQty, BalQty, long, 16; + հ, FnoAvrPrc, FnoAvrPrc, double, 19.8; + ʱݾ, BgnAmt, BgnAmt, long, 16; + û, ThdayLqdtQty, ThdayLqdtQty, long, 16; + 簡, Curprc, Curprc, double, 13.2; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + 򰡼ͱݾ, EvalPnlAmt, EvalPnlAmt, long, 16; + 򰡼ͷ, EvalErnrat, EvalErnrat, double, 12.6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CFOFQ02400_1.res b/sample_python/Res/CFOFQ02400_1.res new file mode 100644 index 0000000..41f5fdb --- /dev/null +++ b/sample_python/Res/CFOFQ02400_1.res @@ -0,0 +1,75 @@ +BEGIN_FUNCTION_MAP + .Func, ̰ Ȳ(հ),CFOFQ02400,SERVICE=CFOFQ02400,headtype=B,CREATOR=,CREDATE=2012/03/16 14:07:10; + BEGIN_DATA_MAP + CFOFQ02400InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ͻڵ, RegMktCode, RegMktCode, char, 2; + ż, BuyDt, BuyDt, char, 8; + end + CFOFQ02400OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + Ͻڵ, RegMktCode, RegMktCode, char, 2; + ż, BuyDt, BuyDt, char, 8; + end + CFOFQ02400OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + , FutsCtrctQty, FutsCtrctQty, long, 16; + ɼǾ, OptCtrctQty, OptCtrctQty, long, 16; + , CtrctQty, CtrctQty, long, 16; + ݾ, FutsCtrctAmt, FutsCtrctAmt, long, 16; + żݾ, FutsBuyctrAmt, FutsBuyctrAmt, long, 16; + ŵݾ, FutsSlctrAmt, FutsSlctrAmt, long, 16; + ݿɼǾݾ, CalloptCtrctAmt, CalloptCtrctAmt, long, 16; + ݸżݾ, CallBuyAmt, CallBuyAmt, long, 16; + ݸŵݾ, CallSellAmt, CallSellAmt, long, 16; + DzɼǾݾ, PutoptCtrctAmt, PutoptCtrctAmt, long, 16; + Dzżݾ, PutBuyAmt, PutBuyAmt, long, 16; + Dzŵݾ, PutSellAmt, PutSellAmt, long, 16; + üݾ, AllCtrctAmt, AllCtrctAmt, long, 16; + żݾ, BuyctrAsmAmt, BuyctrAsmAmt, long, 16; + ŵݾ, SlctrAsmAmt, SlctrAsmAmt, long, 16; + հ, FutsPnlSum, FutsPnlSum, long, 16; + ɼǼհ, OptPnlSum, OptPnlSum, long, 16; + üհ, AllPnlSum, AllPnlSum, long, 16; + end + CFOFQ02400OutBlock3,Out2(*EMPTY*),output,occurs; + begin + ɼǰ񱸺, FnoClssCode, FnoClssCode, char, 1; + ŵ, FutsSellQty, FutsSellQty, long, 16; + ŵ, FutsSellPnl, FutsSellPnl, long, 16; + ż, FutsBuyQty, FutsBuyQty, long, 16; + ż, FutsBuyPnl, FutsBuyPnl, long, 16; + ݸŵ, CallSellQty, CallSellQty, long, 16; + ݸŵ, CallSellPnl, CallSellPnl, long, 16; + ݸż, CallBuyQty, CallBuyQty, long, 16; + ݸż, CallBuyPnl, CallBuyPnl, long, 16; + Dzŵ, PutSellQty, PutSellQty, long, 16; + Dzŵ, PutSellPnl, PutSellPnl, long, 16; + Dzż, PutBuyQty, PutBuyQty, long, 16; + Dzż, PutBuyPnl, PutBuyPnl, long, 16; + end + CFOFQ02400OutBlock4,Out3(*EMPTY*),output,occurs; + begin + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ܰ, BalQty, BalQty, long, 16; + հ, FnoAvrPrc, FnoAvrPrc, double, 19.8; + ʱݾ, BgnAmt, BgnAmt, long, 16; + û, ThdayLqdtQty, ThdayLqdtQty, long, 16; + 簡, Curprc, Curprc, double, 13.2; + 򰡱ݾ, EvalAmt, EvalAmt, long, 16; + 򰡼ͱݾ, EvalPnlAmt, EvalPnlAmt, long, 16; + 򰡼ͷ, EvalErnrat, EvalErnrat, double, 12.6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBQ01400.res b/sample_python/Res/CIDBQ01400.res new file mode 100644 index 0000000..631dc19 --- /dev/null +++ b/sample_python/Res/CIDBQ01400.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ü᳻ ȸ,CIDBQ01400,SERVICE=CIDBQ01400,headtype=B,CREATOR=ȣ,CREDATE=2018/08/23 09:07:51; + BEGIN_DATA_MAP + CIDBQ01400InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸڵ, QryTpCode, QryTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + end + CIDBQ01400OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸڵ, QryTpCode, QryTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + end + CIDBQ01400OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBQ01400_1.res b/sample_python/Res/CIDBQ01400_1.res new file mode 100644 index 0000000..631dc19 --- /dev/null +++ b/sample_python/Res/CIDBQ01400_1.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ü᳻ ȸ,CIDBQ01400,SERVICE=CIDBQ01400,headtype=B,CREATOR=ȣ,CREDATE=2018/08/23 09:07:51; + BEGIN_DATA_MAP + CIDBQ01400InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸڵ, QryTpCode, QryTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + end + CIDBQ01400OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸڵ, QryTpCode, QryTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + end + CIDBQ01400OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBQ01500.res b/sample_python/Res/CIDBQ01500.res new file mode 100644 index 0000000..b44e72f --- /dev/null +++ b/sample_python/Res/CIDBQ01500.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ̰ ܰ,CIDBQ01500,SERVICE=CIDBQ01500,ENCRYPT,headtype=B,CREATOR=ȣ,CREDATE=2018/08/28 09:14:25; + BEGIN_DATA_MAP + CIDBQ01500InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryDt, QryDt, char, 8; + ܰڵ, BalTpCode, BalTpCode, char, 1; + end + CIDBQ01500OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryDt, QryDt, char, 8; + ܰڵ, BalTpCode, BalTpCode, char, 1; + end + CIDBQ01500OutBlock2,Out(*EMPTY*),output,occurs; + begin + , BaseDt, BaseDt, char, 8; + , Dps, Dps, long, 16; + ûͱݾ, LpnlAmt, LpnlAmt, double, 19.2; + ûͱݾ, FutsDueBfLpnlAmt, FutsDueBfLpnlAmt, double, 23.2; + , FutsDueBfCmsn, FutsDueBfCmsn, double, 23.2; + Źűݾ, CsgnMgn, CsgnMgn, long, 16; + ű, MaintMgn, MaintMgn, long, 16; + ſѵݾ, CtlmtAmt, CtlmtAmt, double, 23.2; + ߰űݾ, AddMgn, AddMgn, long, 16; + , MgnclRat, MgnclRat, double, 27.10; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + Ⱑɱݾ, WthdwAbleAmt, WthdwAbleAmt, long, 16; + ¹ȣ, AcntNo, AcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + , IsuNm, IsuNm, char, 50; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + ؿĻɼDZڵ, OvrsDrvtOptTpCode, OvrsDrvtOptTpCode, char, 1; + , DueDt, DueDt, char, 8; + ؿĻ簡, OvrsDrvtXrcPrc, OvrsDrvtXrcPrc, double, 30.11; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ڵ, CmnCodeNm, CmnCodeNm, char, 100; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ܰ, BalQty, BalQty, long, 16; + ԰, PchsPrc, PchsPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + Ź, CsgnCmsn, CsgnCmsn, double, 19.2; + ǹȣ, PosNo, PosNo, char, 13; + ŷҺ1ݾ, EufOneCmsnAmt, EufOneCmsnAmt, double, 19.2; + ŷҺ2ݾ, EufTwoCmsnAmt, EufTwoCmsnAmt, double, 19.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBQ01500_1.res b/sample_python/Res/CIDBQ01500_1.res new file mode 100644 index 0000000..b44e72f --- /dev/null +++ b/sample_python/Res/CIDBQ01500_1.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ̰ ܰ,CIDBQ01500,SERVICE=CIDBQ01500,ENCRYPT,headtype=B,CREATOR=ȣ,CREDATE=2018/08/28 09:14:25; + BEGIN_DATA_MAP + CIDBQ01500InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryDt, QryDt, char, 8; + ܰڵ, BalTpCode, BalTpCode, char, 1; + end + CIDBQ01500OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QryDt, QryDt, char, 8; + ܰڵ, BalTpCode, BalTpCode, char, 1; + end + CIDBQ01500OutBlock2,Out(*EMPTY*),output,occurs; + begin + , BaseDt, BaseDt, char, 8; + , Dps, Dps, long, 16; + ûͱݾ, LpnlAmt, LpnlAmt, double, 19.2; + ûͱݾ, FutsDueBfLpnlAmt, FutsDueBfLpnlAmt, double, 23.2; + , FutsDueBfCmsn, FutsDueBfCmsn, double, 23.2; + Źűݾ, CsgnMgn, CsgnMgn, long, 16; + ű, MaintMgn, MaintMgn, long, 16; + ſѵݾ, CtlmtAmt, CtlmtAmt, double, 23.2; + ߰űݾ, AddMgn, AddMgn, long, 16; + , MgnclRat, MgnclRat, double, 27.10; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + Ⱑɱݾ, WthdwAbleAmt, WthdwAbleAmt, long, 16; + ¹ȣ, AcntNo, AcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + , IsuNm, IsuNm, char, 50; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + ؿĻɼDZڵ, OvrsDrvtOptTpCode, OvrsDrvtOptTpCode, char, 1; + , DueDt, DueDt, char, 8; + ؿĻ簡, OvrsDrvtXrcPrc, OvrsDrvtXrcPrc, double, 30.11; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ڵ, CmnCodeNm, CmnCodeNm, char, 100; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ܰ, BalQty, BalQty, long, 16; + ԰, PchsPrc, PchsPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + Ź, CsgnCmsn, CsgnCmsn, double, 19.2; + ǹȣ, PosNo, PosNo, char, 13; + ŷҺ1ݾ, EufOneCmsnAmt, EufOneCmsnAmt, double, 19.2; + ŷҺ2ݾ, EufTwoCmsnAmt, EufTwoCmsnAmt, double, 19.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBQ01800.res b/sample_python/Res/CIDBQ01800.res new file mode 100644 index 0000000..4855a1d --- /dev/null +++ b/sample_python/Res/CIDBQ01800.res @@ -0,0 +1,83 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ֹü᳻ ȸ,CIDBQ01800,SERVICE=CIDBQ01800,headtype=B,CREATOR=ȣ,CREDATE=2021/04/13 14:06:45; + BEGIN_DATA_MAP + CIDBQ01800InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹ, OrdDt, OrdDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ01800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹ, OrdDt, OrdDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ01800OutBlock2,Out(*EMPTY*),output,occurs; + begin + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + FCMֹȣ, FcmOrdNo, FcmOrdNo, char, 15; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + , IsuNm, IsuNm, char, 50; + ؿܼ簡, AbrdFutsXrcPrc, AbrdFutsXrcPrc, double, 30.11; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + Ÿűи, BnsTpNm, BnsTpNm, char, 10; + ֹڵ, FutsOrdStatCode, FutsOrdStatCode, char, 1; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ŷи, TrdTpNm, TrdTpNm, char, 20; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ֹ, OrdPtnNm, OrdPtnNm, char, 40; + ֹⰣڵ, OrdPtnTermTpCode, OrdPtnTermTpCode, char, 2; + ڵ, CmnCodeNm, CmnCodeNm, char, 100; + , AppSrtDt, AppSrtDt, char, 8; + , AppEndDt, AppEndDt, char, 8; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻüڵ, OvrsDrvtExecIsuCode, OvrsDrvtExecIsuCode, char, 30; + ü, ExecIsuNm, ExecIsuNm, char, 50; + üŸűڵ, ExecBnsTpCode, ExecBnsTpCode, char, 1; + üŸűи, ExecBnsTpNm, ExecBnsTpNm, char, 10; + ؿܼüᰡ, AbrdFutsExecPrc, AbrdFutsExecPrc, double, 30.11; + ü, ExecQty, ExecQty, long, 16; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + , MdfyQty, MdfyQty, long, 16; + Ҽ, CancQty, CancQty, long, 16; + źμ, RjtQty, RjtQty, long, 13; + Ȯμ, CnfQty, CnfQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + ݴŸſ, CvrgYn, CvrgYn, char, 1; + ϴܸȣ, RegTmnlNo, RegTmnlNo, char, 3; + ȣ, RegBrnNo, RegBrnNo, char, 3; + ϻID, RegUserId, RegUserId, char, 16; + ֹ, OrdDt, OrdDt, char, 8; + ֹð, OrdTime, OrdTime, char, 9; + ؿܿɼ翹౸ڵ, OvrsOptXrcRsvTpCode, OvrsOptXrcRsvTpCode, char, 1; + ؿĻɼDZڵ, OvrsDrvtOptTpCode, OvrsDrvtOptTpCode, char, 1; + 񿩺, SprdBaseIsuYn, SprdBaseIsuYn, char, 1; + ؿֹܼ, OvrsFutsOrdDt, OvrsFutsOrdDt, char, 8; + ؿֹܼȣ2, OvrsFutsOrdNo2, OvrsFutsOrdNo2, char, 10; + ؿֹܼȣ2, OvrsFutsOrgOrdNo2, OvrsFutsOrgOrdNo2, char, 10; + ؿĻڵ2, OvrsDrvtIsuCode2, OvrsDrvtIsuCode2, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBQ01800_1.res b/sample_python/Res/CIDBQ01800_1.res new file mode 100644 index 0000000..4855a1d --- /dev/null +++ b/sample_python/Res/CIDBQ01800_1.res @@ -0,0 +1,83 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ֹü᳻ ȸ,CIDBQ01800,SERVICE=CIDBQ01800,headtype=B,CREATOR=ȣ,CREDATE=2021/04/13 14:06:45; + BEGIN_DATA_MAP + CIDBQ01800InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹ, OrdDt, OrdDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ01800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹ, OrdDt, OrdDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ01800OutBlock2,Out(*EMPTY*),output,occurs; + begin + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + FCMֹȣ, FcmOrdNo, FcmOrdNo, char, 15; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + , IsuNm, IsuNm, char, 50; + ؿܼ簡, AbrdFutsXrcPrc, AbrdFutsXrcPrc, double, 30.11; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + Ÿűи, BnsTpNm, BnsTpNm, char, 10; + ֹڵ, FutsOrdStatCode, FutsOrdStatCode, char, 1; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ŷи, TrdTpNm, TrdTpNm, char, 20; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ֹ, OrdPtnNm, OrdPtnNm, char, 40; + ֹⰣڵ, OrdPtnTermTpCode, OrdPtnTermTpCode, char, 2; + ڵ, CmnCodeNm, CmnCodeNm, char, 100; + , AppSrtDt, AppSrtDt, char, 8; + , AppEndDt, AppEndDt, char, 8; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻüڵ, OvrsDrvtExecIsuCode, OvrsDrvtExecIsuCode, char, 30; + ü, ExecIsuNm, ExecIsuNm, char, 50; + üŸűڵ, ExecBnsTpCode, ExecBnsTpCode, char, 1; + üŸűи, ExecBnsTpNm, ExecBnsTpNm, char, 10; + ؿܼüᰡ, AbrdFutsExecPrc, AbrdFutsExecPrc, double, 30.11; + ü, ExecQty, ExecQty, long, 16; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + , MdfyQty, MdfyQty, long, 16; + Ҽ, CancQty, CancQty, long, 16; + źμ, RjtQty, RjtQty, long, 13; + Ȯμ, CnfQty, CnfQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + ݴŸſ, CvrgYn, CvrgYn, char, 1; + ϴܸȣ, RegTmnlNo, RegTmnlNo, char, 3; + ȣ, RegBrnNo, RegBrnNo, char, 3; + ϻID, RegUserId, RegUserId, char, 16; + ֹ, OrdDt, OrdDt, char, 8; + ֹð, OrdTime, OrdTime, char, 9; + ؿܿɼ翹౸ڵ, OvrsOptXrcRsvTpCode, OvrsOptXrcRsvTpCode, char, 1; + ؿĻɼDZڵ, OvrsDrvtOptTpCode, OvrsDrvtOptTpCode, char, 1; + 񿩺, SprdBaseIsuYn, SprdBaseIsuYn, char, 1; + ؿֹܼ, OvrsFutsOrdDt, OvrsFutsOrdDt, char, 8; + ؿֹܼȣ2, OvrsFutsOrdNo2, OvrsFutsOrdNo2, char, 10; + ؿֹܼȣ2, OvrsFutsOrgOrdNo2, OvrsFutsOrgOrdNo2, char, 10; + ؿĻڵ2, OvrsDrvtIsuCode2, OvrsDrvtIsuCode2, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBQ02400.res b/sample_python/Res/CIDBQ02400.res new file mode 100644 index 0000000..17f81b6 --- /dev/null +++ b/sample_python/Res/CIDBQ02400.res @@ -0,0 +1,100 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ֹü᳻ ȸ,CIDBQ02400,SERVICE=CIDBQ02400,ENCRYPT,headtype=B,CREATOR=ȣ,CREDATE=2021/04/04 13:14:10; + BEGIN_DATA_MAP + CIDBQ02400InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ02400OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ02400OutBlock2,Out(*EMPTY*),output,occurs; + begin + ֹ, OrdDt, OrdDt, char, 8; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + FCMֹȣ, FcmOrdNo, FcmOrdNo, char, 15; + ü, ExecDt, ExecDt, char, 8; + ؿܼüȣ, OvrsFutsExecNo, OvrsFutsExecNo, char, 10; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + , IsuNm, IsuNm, char, 50; + ؿܼ簡, AbrdFutsXrcPrc, AbrdFutsXrcPrc, double, 30.11; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + Ÿűи, BnsTpNm, BnsTpNm, char, 10; + ֹڵ, FutsOrdStatCode, FutsOrdStatCode, char, 1; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ŷи, TrdTpNm, TrdTpNm, char, 20; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ֹ, OrdPtnNm, OrdPtnNm, char, 40; + ֹⰣڵ, OrdPtnTermTpCode, OrdPtnTermTpCode, char, 2; + ڵ, CmnCodeNm, CmnCodeNm, char, 100; + , AppSrtDt, AppSrtDt, char, 8; + , AppEndDt, AppEndDt, char, 8; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ؿĻüڵ, OvrsDrvtExecIsuCode, OvrsDrvtExecIsuCode, char, 30; + ü, ExecIsuNm, ExecIsuNm, char, 50; + üŸűڵ, ExecBnsTpCode, ExecBnsTpCode, char, 1; + üŸűи, ExecBnsTpNm, ExecBnsTpNm, char, 10; + ü, ExecQty, ExecQty, long, 16; + ؿܼüᰡ, AbrdFutsExecPrc, AbrdFutsExecPrc, double, 30.11; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + ü, UnercQty, UnercQty, long, 16; + óڵ, TrxStatCode, TrxStatCode, char, 2; + óڵ, TrxStatCodeNm, TrxStatCodeNm, char, 40; + Ź, CsgnCmsn, CsgnCmsn, double, 19.2; + FCM, FcmCmsn, FcmCmsn, double, 21.4; + , ThcoCmsn, ThcoCmsn, double, 19.2; + üڵ, MdaCode, MdaCode, char, 2; + üڵ, MdaCodeNm, MdaCodeNm, char, 40; + ϴܸȣ, RegTmnlNo, RegTmnlNo, char, 3; + ϻID, RegUserId, RegUserId, char, 16; + ֹ߼Ͻ, OrdSndDttm, OrdSndDttm, char, 17; + üϽ, ExecDttm, ExecDttm, char, 17; + ŷҺ1ݾ, EufOneCmsnAmt, EufOneCmsnAmt, double, 19.2; + ŷҺ2ݾ, EufTwoCmsnAmt, EufTwoCmsnAmt, double, 19.2; + û1ݾ, LchOneCmsnAmt, LchOneCmsnAmt, double, 19.2; + û2ݾ, LchTwoCmsnAmt, LchTwoCmsnAmt, double, 19.2; + ŷ1ݾ, TrdOneCmsnAmt, TrdOneCmsnAmt, double, 19.2; + ŷ2ݾ, TrdTwoCmsnAmt, TrdTwoCmsnAmt, double, 19.2; + ŷ3ݾ, TrdThreeCmsnAmt, TrdThreeCmsnAmt, double, 19.2; + ܱ1ݾ, StrmOneCmsnAmt, StrmOneCmsnAmt, double, 19.2; + ܱ2ݾ, StrmTwoCmsnAmt, StrmTwoCmsnAmt, double, 19.2; + ܱ3ݾ, StrmThreeCmsnAmt, StrmThreeCmsnAmt, double, 19.2; + 1ݾ, TransOneCmsnAmt, TransOneCmsnAmt, double, 19.2; + 2ݾ, TransTwoCmsnAmt, TransTwoCmsnAmt, double, 19.2; + 3ݾ, TransThreeCmsnAmt, TransThreeCmsnAmt, double, 19.2; + 4ݾ, TransFourCmsnAmt, TransFourCmsnAmt, double, 19.2; + ؿܿɼ翹౸ڵ, OvrsOptXrcRsvTpCode, OvrsOptXrcRsvTpCode, char, 1; + ؿĻɼDZڵ, OvrsDrvtOptTpCode, OvrsDrvtOptTpCode, char, 1; + 񿩺, SprdBaseIsuYn, SprdBaseIsuYn, char, 1; + ؿĻڵ2, OvrsDrvtIsuCode2, OvrsDrvtIsuCode2, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBQ02400_1.res b/sample_python/Res/CIDBQ02400_1.res new file mode 100644 index 0000000..17f81b6 --- /dev/null +++ b/sample_python/Res/CIDBQ02400_1.res @@ -0,0 +1,100 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ֹü᳻ ȸ,CIDBQ02400,SERVICE=CIDBQ02400,ENCRYPT,headtype=B,CREATOR=ȣ,CREDATE=2021/04/04 13:14:10; + BEGIN_DATA_MAP + CIDBQ02400InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ02400OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ϱڵ, ThdayTpCode, ThdayTpCode, char, 1; + ֹڵ, OrdStatCode, OrdStatCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ȸڵ, QryTpCode, QryTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ؿĻɼDZڵ, OvrsDrvtFnoTpCode, OvrsDrvtFnoTpCode, char, 1; + end + CIDBQ02400OutBlock2,Out(*EMPTY*),output,occurs; + begin + ֹ, OrdDt, OrdDt, char, 8; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + FCMֹȣ, FcmOrdNo, FcmOrdNo, char, 15; + ü, ExecDt, ExecDt, char, 8; + ؿܼüȣ, OvrsFutsExecNo, OvrsFutsExecNo, char, 10; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + , IsuNm, IsuNm, char, 50; + ؿܼ簡, AbrdFutsXrcPrc, AbrdFutsXrcPrc, double, 30.11; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + Ÿűи, BnsTpNm, BnsTpNm, char, 10; + ֹڵ, FutsOrdStatCode, FutsOrdStatCode, char, 1; + ڵ, TpCodeNm, TpCodeNm, char, 50; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ŷи, TrdTpNm, TrdTpNm, char, 20; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ֹ, OrdPtnNm, OrdPtnNm, char, 40; + ֹⰣڵ, OrdPtnTermTpCode, OrdPtnTermTpCode, char, 2; + ڵ, CmnCodeNm, CmnCodeNm, char, 100; + , AppSrtDt, AppSrtDt, char, 8; + , AppEndDt, AppEndDt, char, 8; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ؿĻüڵ, OvrsDrvtExecIsuCode, OvrsDrvtExecIsuCode, char, 30; + ü, ExecIsuNm, ExecIsuNm, char, 50; + üŸűڵ, ExecBnsTpCode, ExecBnsTpCode, char, 1; + üŸűи, ExecBnsTpNm, ExecBnsTpNm, char, 10; + ü, ExecQty, ExecQty, long, 16; + ؿܼüᰡ, AbrdFutsExecPrc, AbrdFutsExecPrc, double, 30.11; + ֹǰ, OrdCndiPrc, OrdCndiPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + ü, UnercQty, UnercQty, long, 16; + óڵ, TrxStatCode, TrxStatCode, char, 2; + óڵ, TrxStatCodeNm, TrxStatCodeNm, char, 40; + Ź, CsgnCmsn, CsgnCmsn, double, 19.2; + FCM, FcmCmsn, FcmCmsn, double, 21.4; + , ThcoCmsn, ThcoCmsn, double, 19.2; + üڵ, MdaCode, MdaCode, char, 2; + üڵ, MdaCodeNm, MdaCodeNm, char, 40; + ϴܸȣ, RegTmnlNo, RegTmnlNo, char, 3; + ϻID, RegUserId, RegUserId, char, 16; + ֹ߼Ͻ, OrdSndDttm, OrdSndDttm, char, 17; + üϽ, ExecDttm, ExecDttm, char, 17; + ŷҺ1ݾ, EufOneCmsnAmt, EufOneCmsnAmt, double, 19.2; + ŷҺ2ݾ, EufTwoCmsnAmt, EufTwoCmsnAmt, double, 19.2; + û1ݾ, LchOneCmsnAmt, LchOneCmsnAmt, double, 19.2; + û2ݾ, LchTwoCmsnAmt, LchTwoCmsnAmt, double, 19.2; + ŷ1ݾ, TrdOneCmsnAmt, TrdOneCmsnAmt, double, 19.2; + ŷ2ݾ, TrdTwoCmsnAmt, TrdTwoCmsnAmt, double, 19.2; + ŷ3ݾ, TrdThreeCmsnAmt, TrdThreeCmsnAmt, double, 19.2; + ܱ1ݾ, StrmOneCmsnAmt, StrmOneCmsnAmt, double, 19.2; + ܱ2ݾ, StrmTwoCmsnAmt, StrmTwoCmsnAmt, double, 19.2; + ܱ3ݾ, StrmThreeCmsnAmt, StrmThreeCmsnAmt, double, 19.2; + 1ݾ, TransOneCmsnAmt, TransOneCmsnAmt, double, 19.2; + 2ݾ, TransTwoCmsnAmt, TransTwoCmsnAmt, double, 19.2; + 3ݾ, TransThreeCmsnAmt, TransThreeCmsnAmt, double, 19.2; + 4ݾ, TransFourCmsnAmt, TransFourCmsnAmt, double, 19.2; + ؿܿɼ翹౸ڵ, OvrsOptXrcRsvTpCode, OvrsOptXrcRsvTpCode, char, 1; + ؿĻɼDZڵ, OvrsDrvtOptTpCode, OvrsDrvtOptTpCode, char, 1; + 񿩺, SprdBaseIsuYn, SprdBaseIsuYn, char, 1; + ؿĻڵ2, OvrsDrvtIsuCode2, OvrsDrvtIsuCode2, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBQ03000.res b/sample_python/Res/CIDBQ03000.res new file mode 100644 index 0000000..84b8bdd --- /dev/null +++ b/sample_python/Res/CIDBQ03000.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ /ܰȲ,CIDBQ03000,SERVICE=CIDBQ03000,headtype=B,CREATOR=ȣ,CREDATE=2015/06/25 09:12:31; + BEGIN_DATA_MAP + CIDBQ03000InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDBQ03000OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDBQ03000OutBlock2,Out(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ŷ, TrdDt, TrdDt, char, 8; + ȭڵ, CrcyObjCode, CrcyObjCode, char, 12; + ؿܼ, OvrsFutsDps, OvrsFutsDps, double, 23.2; + ݱݾ, CustmMnyioAmt, CustmMnyioAmt, double, 19.2; + ؿܼûͱݾ, AbrdFutsLqdtPnlAmt, AbrdFutsLqdtPnlAmt, double, 19.2; + ؿܼݾ, AbrdFutsCmsnAmt, AbrdFutsCmsnAmt, double, 19.2; + ȯ, PrexchDps, PrexchDps, double, 19.2; + ڻݾ, EvalAssetAmt, EvalAssetAmt, double, 19.2; + ؿܼŹűݾ, AbrdFutsCsgnMgn, AbrdFutsCsgnMgn, double, 19.2; + ؿܼ߰űݾ, AbrdFutsAddMgn, AbrdFutsAddMgn, double, 19.2; + ؿܼⰡɱݾ, AbrdFutsWthdwAbleAmt, AbrdFutsWthdwAbleAmt, double, 19.2; + ؿֹܼɱݾ, AbrdFutsOrdAbleAmt, AbrdFutsOrdAbleAmt, double, 19.2; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ͱݾ, LastSettPnlAmt, LastSettPnlAmt, double, 19.2; + ؿܿɼǰݾ, OvrsOptSettAmt, OvrsOptSettAmt, double, 19.2; + ؿܿɼܰ򰡱ݾ, OvrsOptBalEvalAmt, OvrsOptBalEvalAmt, double, 19.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBQ03000_1.res b/sample_python/Res/CIDBQ03000_1.res new file mode 100644 index 0000000..84b8bdd --- /dev/null +++ b/sample_python/Res/CIDBQ03000_1.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ /ܰȲ,CIDBQ03000,SERVICE=CIDBQ03000,headtype=B,CREATOR=ȣ,CREDATE=2015/06/25 09:12:31; + BEGIN_DATA_MAP + CIDBQ03000InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDBQ03000OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ±ڵ, AcntTpCode, AcntTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDBQ03000OutBlock2,Out(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ŷ, TrdDt, TrdDt, char, 8; + ȭڵ, CrcyObjCode, CrcyObjCode, char, 12; + ؿܼ, OvrsFutsDps, OvrsFutsDps, double, 23.2; + ݱݾ, CustmMnyioAmt, CustmMnyioAmt, double, 19.2; + ؿܼûͱݾ, AbrdFutsLqdtPnlAmt, AbrdFutsLqdtPnlAmt, double, 19.2; + ؿܼݾ, AbrdFutsCmsnAmt, AbrdFutsCmsnAmt, double, 19.2; + ȯ, PrexchDps, PrexchDps, double, 19.2; + ڻݾ, EvalAssetAmt, EvalAssetAmt, double, 19.2; + ؿܼŹűݾ, AbrdFutsCsgnMgn, AbrdFutsCsgnMgn, double, 19.2; + ؿܼ߰űݾ, AbrdFutsAddMgn, AbrdFutsAddMgn, double, 19.2; + ؿܼⰡɱݾ, AbrdFutsWthdwAbleAmt, AbrdFutsWthdwAbleAmt, double, 19.2; + ؿֹܼɱݾ, AbrdFutsOrdAbleAmt, AbrdFutsOrdAbleAmt, double, 19.2; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ͱݾ, LastSettPnlAmt, LastSettPnlAmt, double, 19.2; + ؿܿɼǰݾ, OvrsOptSettAmt, OvrsOptSettAmt, double, 19.2; + ؿܿɼܰ򰡱ݾ, OvrsOptBalEvalAmt, OvrsOptBalEvalAmt, double, 19.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBQ05300.res b/sample_python/Res/CIDBQ05300.res new file mode 100644 index 0000000..b164cd4 --- /dev/null +++ b/sample_python/Res/CIDBQ05300.res @@ -0,0 +1,74 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ¿Źڻȸ,CIDBQ05300,SERVICE=CIDBQ05300,headtype=B,CREATOR=ȣ,CREDATE=2015/06/22 19:42:57; + BEGIN_DATA_MAP + CIDBQ05300InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ؿܰ±ڵ, OvrsAcntTpCode, OvrsAcntTpCode, char, 1; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ȭڵ, CrcyCode, CrcyCode, char, 3; + end + CIDBQ05300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ؿܰ±ڵ, OvrsAcntTpCode, OvrsAcntTpCode, char, 1; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ȭڵ, CrcyCode, CrcyCode, char, 3; + end + CIDBQ05300OutBlock2,Out(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ؿܼ, OvrsFutsDps, OvrsFutsDps, double, 23.2; + ؿܼŹűݾ, AbrdFutsCsgnMgn, AbrdFutsCsgnMgn, double, 19.2; + ؿܼ߰ű, OvrsFutsSplmMgn, OvrsFutsSplmMgn, double, 23.2; + ûͱݾ, CustmLpnlAmt, CustmLpnlAmt, double, 19.2; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ؿܼݾ, AbrdFutsCmsnAmt, AbrdFutsCmsnAmt, double, 19.2; + ؿܼ򰡿Źѱݾ, AbrdFutsEvalDpstgTotAmt, AbrdFutsEvalDpstgTotAmt, double, 19.2; + ȯ, Xchrat, Xchrat, double, 15.4; + ȭȯݾ, FcurrRealMxchgAmt, FcurrRealMxchgAmt, double, 19.2; + ؿܼⰡɱݾ, AbrdFutsWthdwAbleAmt, AbrdFutsWthdwAbleAmt, double, 19.2; + ؿֹܼɱݾ, AbrdFutsOrdAbleAmt, AbrdFutsOrdAbleAmt, double, 19.2; + ̵ûͱݾ, FutsDueNarrvLqdtPnlAmt, FutsDueNarrvLqdtPnlAmt, double, 19.2; + ̵, FutsDueNarrvCmsn, FutsDueNarrvCmsn, double, 19.2; + ؿܼûͱݾ, AbrdFutsLqdtPnlAmt, AbrdFutsLqdtPnlAmt, double, 19.2; + ؿܼ, OvrsFutsDueCmsn, OvrsFutsDueCmsn, double, 19.2; + ؿܼɼǸżݾ, OvrsFutsOptBuyAmt, OvrsFutsOptBuyAmt, double, 23.2; + ؿܼɼǸŵݾ, OvrsFutsOptSellAmt, OvrsFutsOptSellAmt, double, 23.2; + ɼǸż尡ġݾ, OptBuyMktWrthAmt, OptBuyMktWrthAmt, double, 19.2; + ɼǸŵ尡ġݾ, OptSellMktWrthAmt, OptSellMktWrthAmt, double, 19.2; + end + CIDBQ05300OutBlock3,SelOut(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ؿܼ, OvrsFutsDps, OvrsFutsDps, double, 23.2; + ؿܼûͱݾ, AbrdFutsLqdtPnlAmt, AbrdFutsLqdtPnlAmt, double, 19.2; + ̵ûͱݾ, FutsDueNarrvLqdtPnlAmt, FutsDueNarrvLqdtPnlAmt, double, 19.2; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ؿܼ򰡿Źѱݾ, AbrdFutsEvalDpstgTotAmt, AbrdFutsEvalDpstgTotAmt, double, 19.2; + ûͱݾ, CustmLpnlAmt, CustmLpnlAmt, double, 19.2; + ؿܼ, OvrsFutsDueCmsn, OvrsFutsDueCmsn, double, 19.2; + ȭȯݾ, FcurrRealMxchgAmt, FcurrRealMxchgAmt, double, 19.2; + ؿܼݾ, AbrdFutsCmsnAmt, AbrdFutsCmsnAmt, double, 19.2; + ̵, FutsDueNarrvCmsn, FutsDueNarrvCmsn, double, 19.2; + ؿܼŹűݾ, AbrdFutsCsgnMgn, AbrdFutsCsgnMgn, double, 19.2; + ؿܼű, OvrsFutsMaintMgn, OvrsFutsMaintMgn, double, 19.2; + ؿܼɼǸżݾ, OvrsFutsOptBuyAmt, OvrsFutsOptBuyAmt, double, 23.2; + ؿܼɼǸŵݾ, OvrsFutsOptSellAmt, OvrsFutsOptSellAmt, double, 23.2; + ſѵݾ, CtlmtAmt, CtlmtAmt, double, 23.2; + ؿܼ߰ű, OvrsFutsSplmMgn, OvrsFutsSplmMgn, double, 23.2; + , MgnclRat, MgnclRat, double, 27.10; + ؿֹܼɱݾ, AbrdFutsOrdAbleAmt, AbrdFutsOrdAbleAmt, double, 19.2; + ؿܼⰡɱݾ, AbrdFutsWthdwAbleAmt, AbrdFutsWthdwAbleAmt, double, 19.2; + ɼǸż尡ġݾ, OptBuyMktWrthAmt, OptBuyMktWrthAmt, double, 19.2; + ɼǸŵ尡ġݾ, OptSellMktWrthAmt, OptSellMktWrthAmt, double, 19.2; + ؿܿɼǰݾ, OvrsOptSettAmt, OvrsOptSettAmt, double, 19.2; + ؿܿɼܰ򰡱ݾ, OvrsOptBalEvalAmt, OvrsOptBalEvalAmt, double, 19.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBQ05300_1.res b/sample_python/Res/CIDBQ05300_1.res new file mode 100644 index 0000000..b164cd4 --- /dev/null +++ b/sample_python/Res/CIDBQ05300_1.res @@ -0,0 +1,74 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ ¿Źڻȸ,CIDBQ05300,SERVICE=CIDBQ05300,headtype=B,CREATOR=ȣ,CREDATE=2015/06/22 19:42:57; + BEGIN_DATA_MAP + CIDBQ05300InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ؿܰ±ڵ, OvrsAcntTpCode, OvrsAcntTpCode, char, 1; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ȭڵ, CrcyCode, CrcyCode, char, 3; + end + CIDBQ05300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ؿܰ±ڵ, OvrsAcntTpCode, OvrsAcntTpCode, char, 1; + FCM¹ȣ, FcmAcntNo, FcmAcntNo, char, 20; + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ȭڵ, CrcyCode, CrcyCode, char, 3; + end + CIDBQ05300OutBlock2,Out(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ؿܼ, OvrsFutsDps, OvrsFutsDps, double, 23.2; + ؿܼŹűݾ, AbrdFutsCsgnMgn, AbrdFutsCsgnMgn, double, 19.2; + ؿܼ߰ű, OvrsFutsSplmMgn, OvrsFutsSplmMgn, double, 23.2; + ûͱݾ, CustmLpnlAmt, CustmLpnlAmt, double, 19.2; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ؿܼݾ, AbrdFutsCmsnAmt, AbrdFutsCmsnAmt, double, 19.2; + ؿܼ򰡿Źѱݾ, AbrdFutsEvalDpstgTotAmt, AbrdFutsEvalDpstgTotAmt, double, 19.2; + ȯ, Xchrat, Xchrat, double, 15.4; + ȭȯݾ, FcurrRealMxchgAmt, FcurrRealMxchgAmt, double, 19.2; + ؿܼⰡɱݾ, AbrdFutsWthdwAbleAmt, AbrdFutsWthdwAbleAmt, double, 19.2; + ؿֹܼɱݾ, AbrdFutsOrdAbleAmt, AbrdFutsOrdAbleAmt, double, 19.2; + ̵ûͱݾ, FutsDueNarrvLqdtPnlAmt, FutsDueNarrvLqdtPnlAmt, double, 19.2; + ̵, FutsDueNarrvCmsn, FutsDueNarrvCmsn, double, 19.2; + ؿܼûͱݾ, AbrdFutsLqdtPnlAmt, AbrdFutsLqdtPnlAmt, double, 19.2; + ؿܼ, OvrsFutsDueCmsn, OvrsFutsDueCmsn, double, 19.2; + ؿܼɼǸżݾ, OvrsFutsOptBuyAmt, OvrsFutsOptBuyAmt, double, 23.2; + ؿܼɼǸŵݾ, OvrsFutsOptSellAmt, OvrsFutsOptSellAmt, double, 23.2; + ɼǸż尡ġݾ, OptBuyMktWrthAmt, OptBuyMktWrthAmt, double, 19.2; + ɼǸŵ尡ġݾ, OptSellMktWrthAmt, OptSellMktWrthAmt, double, 19.2; + end + CIDBQ05300OutBlock3,SelOut(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ؿܼ, OvrsFutsDps, OvrsFutsDps, double, 23.2; + ؿܼûͱݾ, AbrdFutsLqdtPnlAmt, AbrdFutsLqdtPnlAmt, double, 19.2; + ̵ûͱݾ, FutsDueNarrvLqdtPnlAmt, FutsDueNarrvLqdtPnlAmt, double, 19.2; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ؿܼ򰡿Źѱݾ, AbrdFutsEvalDpstgTotAmt, AbrdFutsEvalDpstgTotAmt, double, 19.2; + ûͱݾ, CustmLpnlAmt, CustmLpnlAmt, double, 19.2; + ؿܼ, OvrsFutsDueCmsn, OvrsFutsDueCmsn, double, 19.2; + ȭȯݾ, FcurrRealMxchgAmt, FcurrRealMxchgAmt, double, 19.2; + ؿܼݾ, AbrdFutsCmsnAmt, AbrdFutsCmsnAmt, double, 19.2; + ̵, FutsDueNarrvCmsn, FutsDueNarrvCmsn, double, 19.2; + ؿܼŹűݾ, AbrdFutsCsgnMgn, AbrdFutsCsgnMgn, double, 19.2; + ؿܼű, OvrsFutsMaintMgn, OvrsFutsMaintMgn, double, 19.2; + ؿܼɼǸżݾ, OvrsFutsOptBuyAmt, OvrsFutsOptBuyAmt, double, 23.2; + ؿܼɼǸŵݾ, OvrsFutsOptSellAmt, OvrsFutsOptSellAmt, double, 23.2; + ſѵݾ, CtlmtAmt, CtlmtAmt, double, 23.2; + ؿܼ߰ű, OvrsFutsSplmMgn, OvrsFutsSplmMgn, double, 23.2; + , MgnclRat, MgnclRat, double, 27.10; + ؿֹܼɱݾ, AbrdFutsOrdAbleAmt, AbrdFutsOrdAbleAmt, double, 19.2; + ؿܼⰡɱݾ, AbrdFutsWthdwAbleAmt, AbrdFutsWthdwAbleAmt, double, 19.2; + ɼǸż尡ġݾ, OptBuyMktWrthAmt, OptBuyMktWrthAmt, double, 19.2; + ɼǸŵ尡ġݾ, OptSellMktWrthAmt, OptSellMktWrthAmt, double, 19.2; + ؿܿɼǰݾ, OvrsOptSettAmt, OvrsOptSettAmt, double, 19.2; + ؿܿɼܰ򰡱ݾ, OvrsOptBalEvalAmt, OvrsOptBalEvalAmt, double, 19.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBT00100.res b/sample_python/Res/CIDBT00100.res new file mode 100644 index 0000000..3b0853c --- /dev/null +++ b/sample_python/Res/CIDBT00100.res @@ -0,0 +1,49 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼűֹ,CIDBT00100,SERVICE=CIDBT00100,ENCRYPT,SIGNATURE,headtype=B,CREATOR=ȣ,CREDATE=2018/08/28 16:28:20; + BEGIN_DATA_MAP + CIDBT00100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ڵ, BrnCode, BrnCode, char, 7; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ǰڵ, PrdtCode, PrdtCode, char, 6; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ڵ, BrnCode, BrnCode, char, 7; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ǰڵ, PrdtCode, PrdtCode, char, 6; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBT00100_1.res b/sample_python/Res/CIDBT00100_1.res new file mode 100644 index 0000000..3b0853c --- /dev/null +++ b/sample_python/Res/CIDBT00100_1.res @@ -0,0 +1,49 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼűֹ,CIDBT00100,SERVICE=CIDBT00100,ENCRYPT,SIGNATURE,headtype=B,CREATOR=ȣ,CREDATE=2018/08/28 16:28:20; + BEGIN_DATA_MAP + CIDBT00100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ڵ, BrnCode, BrnCode, char, 7; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ǰڵ, PrdtCode, PrdtCode, char, 6; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ڵ, BrnCode, BrnCode, char, 7; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ؿֹܼڵ, AbrdFutsOrdPtnCode, AbrdFutsOrdPtnCode, char, 1; + ȭڵ, CrcyCode, CrcyCode, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ǰڵ, PrdtCode, PrdtCode, char, 6; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00100OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBT00900.res b/sample_python/Res/CIDBT00900.res new file mode 100644 index 0000000..c1f7bb6 --- /dev/null +++ b/sample_python/Res/CIDBT00900.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,ؿֹܼ,CIDBT00900,SERVICE=CIDBT00900,ENCRYPT,SIGNATURE,headtype=B,CREATOR=ȣ,CREDATE=2018/08/28 16:29:03; + BEGIN_DATA_MAP + CIDBT00900InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, RegBrnNo, RegBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ֹڵ, FutsOrdPtnCode, FutsOrdPtnCode, char, 1; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00900OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, RegBrnNo, RegBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ֹڵ, FutsOrdPtnCode, FutsOrdPtnCode, char, 1; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00900OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + θ޽, InnerMsgCnts, InnerMsgCnts, char, 80; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBT00900_1.res b/sample_python/Res/CIDBT00900_1.res new file mode 100644 index 0000000..c1f7bb6 --- /dev/null +++ b/sample_python/Res/CIDBT00900_1.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,ؿֹܼ,CIDBT00900,SERVICE=CIDBT00900,ENCRYPT,SIGNATURE,headtype=B,CREATOR=ȣ,CREDATE=2018/08/28 16:29:03; + BEGIN_DATA_MAP + CIDBT00900InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, RegBrnNo, RegBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ֹڵ, FutsOrdPtnCode, FutsOrdPtnCode, char, 1; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00900OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, RegBrnNo, RegBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + Ÿűڵ, BnsTpCode, BnsTpCode, char, 1; + ֹڵ, FutsOrdPtnCode, FutsOrdPtnCode, char, 1; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻֹ, OvrsDrvtOrdPrc, OvrsDrvtOrdPrc, double, 30.11; + ֹ, CndiOrdPrc, CndiOrdPrc, double, 30.11; + ֹ, OrdQty, OrdQty, long, 16; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + , DueYymm, DueYymm, char, 6; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT00900OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + θ޽, InnerMsgCnts, InnerMsgCnts, char, 80; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBT01000.res b/sample_python/Res/CIDBT01000.res new file mode 100644 index 0000000..29713e4 --- /dev/null +++ b/sample_python/Res/CIDBT01000.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ؿֹܼ,CIDBT01000,SERVICE=CIDBT01000,ENCRYPT,SIGNATURE,headtype=B,CREATOR=ֿȣ,CREDATE=2012/04/26 14:52:30; + BEGIN_DATA_MAP + CIDBT01000InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, BrnNo, BrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ǰڵ, PrdtTpCode, PrdtTpCode, char, 2; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT01000OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, BrnNo, BrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ǰڵ, PrdtTpCode, PrdtTpCode, char, 2; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT01000OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + θ޽, InnerMsgCnts, InnerMsgCnts, char, 80; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDBT01000_1.res b/sample_python/Res/CIDBT01000_1.res new file mode 100644 index 0000000..29713e4 --- /dev/null +++ b/sample_python/Res/CIDBT01000_1.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ؿֹܼ,CIDBT01000,SERVICE=CIDBT01000,ENCRYPT,SIGNATURE,headtype=B,CREATOR=ֿȣ,CREDATE=2012/04/26 14:52:30; + BEGIN_DATA_MAP + CIDBT01000InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, BrnNo, BrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ǰڵ, PrdtTpCode, PrdtTpCode, char, 2; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT01000OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹ, OrdDt, OrdDt, char, 8; + ȣ, BrnNo, BrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + ؿֹܼȣ, OvrsFutsOrgOrdNo, OvrsFutsOrgOrdNo, char, 10; + ֹڵ, FutsOrdTpCode, FutsOrdTpCode, char, 1; + ǰڵ, PrdtTpCode, PrdtTpCode, char, 2; + ŷڵ, ExchCode, ExchCode, char, 10; + end + CIDBT01000OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ؿֹܼȣ, OvrsFutsOrdNo, OvrsFutsOrdNo, char, 10; + θ޽, InnerMsgCnts, InnerMsgCnts, char, 80; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDEQ00800.res b/sample_python/Res/CIDEQ00800.res new file mode 100644 index 0000000..f8d15bf --- /dev/null +++ b/sample_python/Res/CIDEQ00800.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ں ̰ ܰ,CIDEQ00800,SERVICE=CIDEQ00800,ENCRYPT,headtype=B,CREATOR=ȣ,CREDATE=2018/08/27 10:26:32; + BEGIN_DATA_MAP + CIDEQ00800InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDEQ00800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDEQ00800OutBlock2,Out(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ŷ, TrdDt, TrdDt, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + Ÿűи, BnsTpNm, BnsTpNm, char, 10; + ܰ, BalQty, BalQty, long, 16; + û갡ɼ, LqdtAbleQty, LqdtAbleQty, long, 16; + ԰, PchsPrc, PchsPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ܰݾ, CustmBalAmt, CustmBalAmt, double, 19.2; + ȭ򰡱ݾ, FcurrEvalAmt, FcurrEvalAmt, double, 21.4; + , IsuNm, IsuNm, char, 50; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + , DueDt, DueDt, char, 8; + ݾ, PrcntrAmt, PrcntrAmt, double, 19.2; + ȭ򰡼ͱݾ, FcurrEvalPnlAmt, FcurrEvalPnlAmt, double, 21.4; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CIDEQ00800_1.res b/sample_python/Res/CIDEQ00800_1.res new file mode 100644 index 0000000..f8d15bf --- /dev/null +++ b/sample_python/Res/CIDEQ00800_1.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ں ̰ ܰ,CIDEQ00800,SERVICE=CIDEQ00800,ENCRYPT,headtype=B,CREATOR=ȣ,CREDATE=2018/08/27 10:26:32; + BEGIN_DATA_MAP + CIDEQ00800InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDEQ00800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + ºйȣ, AcntPwd, AcntPwd, char, 8; + ŷ, TrdDt, TrdDt, char, 8; + end + CIDEQ00800OutBlock2,Out(*EMPTY*),output,occurs; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + ŷ, TrdDt, TrdDt, char, 8; + ڵ尪, IsuCodeVal, IsuCodeVal, char, 18; + Ÿűи, BnsTpNm, BnsTpNm, char, 10; + ܰ, BalQty, BalQty, long, 16; + û갡ɼ, LqdtAbleQty, LqdtAbleQty, long, 16; + ԰, PchsPrc, PchsPrc, double, 30.11; + ؿĻ簡, OvrsDrvtNowPrc, OvrsDrvtNowPrc, double, 30.11; + ؿܼ򰡼ͱݾ, AbrdFutsEvalPnlAmt, AbrdFutsEvalPnlAmt, double, 19.2; + ܰݾ, CustmBalAmt, CustmBalAmt, double, 19.2; + ȭ򰡱ݾ, FcurrEvalAmt, FcurrEvalAmt, double, 21.4; + , IsuNm, IsuNm, char, 50; + ȭڵ尪, CrcyCodeVal, CrcyCodeVal, char, 3; + ؿĻǰڵ, OvrsDrvtPrdtCode, OvrsDrvtPrdtCode, char, 10; + , DueDt, DueDt, char, 8; + ݾ, PrcntrAmt, PrcntrAmt, double, 19.2; + ȭ򰡼ͱݾ, FcurrEvalPnlAmt, FcurrEvalPnlAmt, double, 21.4; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CLNAQ00100.res b/sample_python/Res/CLNAQ00100.res new file mode 100644 index 0000000..95992ed --- /dev/null +++ b/sample_python/Res/CLNAQ00100.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,Ź㺸ڰȲȸ,CLNAQ00100,SERVICE=CLNAQ00100,headtype=B,CREATOR=̼ȣ,CREDATE=2012/01/10 15:45:49; + BEGIN_DATA_MAP + CLNAQ00100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + DZ, SecTpCode, SecTpCode, char, 1; + ڵڵ, LoanIntrstGrdCode, LoanIntrstGrdCode, char, 2; + ⱸ, LoanTp, LoanTp, char, 1; + end + CLNAQ00100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + DZ, SecTpCode, SecTpCode, char, 1; + ڵڵ, LoanIntrstGrdCode, LoanIntrstGrdCode, char, 2; + ⱸ, LoanTp, LoanTp, char, 1; + end + CLNAQ00100OutBlock2,Out(*EMPTY*),output,occurs; + begin + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + ׸鰡, Parprc, Parprc, double, 13.2; + , PrdayCprc, PrdayCprc, double, 13.2; + , RatVal, RatVal, double, 19.8; + 밡, SubstPrc, SubstPrc, double, 13.2; + ϱ, RegTpNm, RegTpNm, char, 20; + ű¡з, SpotMgnLevyClssNm, SpotMgnLevyClssNm, char, 40; + ŷ, FnoTrdStopRsnCnts, FnoTrdStopRsnCnts, char, 40; + , DgrsPtnNm, DgrsPtnNm, char, 40; + , AcdPtnNm, AcdPtnNm, char, 40; + 屸, MktTpNm, MktTpNm, char, 20; + ѵ, LmtVal, LmtVal, long, 18; + ѵ, AcntLmtVal, AcntLmtVal, long, 18; + ڵ, LoanGrdCode, LoanGrdCode, char, 2; + ݾ, LoanAmt, LoanAmt, long, 16; + Ⱑ, LoanAbleRat, LoanAbleRat, double, 26.9; + 1, LoanIntrat1, LoanIntrat1, double, 14.4; + ID, RegPsnId, RegPsnId, char, 16; + , Rat01, Rat01, double, 19.8; + , Rat02, Rat02, double, 19.8; + end + CLNAQ00100OutBlock3,Sum(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + հݾ, LrgMnyoutSumAmt, LrgMnyoutSumAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CLNAQ00100_1.res b/sample_python/Res/CLNAQ00100_1.res new file mode 100644 index 0000000..95992ed --- /dev/null +++ b/sample_python/Res/CLNAQ00100_1.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,Ź㺸ڰȲȸ,CLNAQ00100,SERVICE=CLNAQ00100,headtype=B,CREATOR=̼ȣ,CREDATE=2012/01/10 15:45:49; + BEGIN_DATA_MAP + CLNAQ00100InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + DZ, SecTpCode, SecTpCode, char, 1; + ڵڵ, LoanIntrstGrdCode, LoanIntrstGrdCode, char, 2; + ⱸ, LoanTp, LoanTp, char, 1; + end + CLNAQ00100OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȸ, QryTp, QryTp, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + DZ, SecTpCode, SecTpCode, char, 1; + ڵڵ, LoanIntrstGrdCode, LoanIntrstGrdCode, char, 2; + ⱸ, LoanTp, LoanTp, char, 1; + end + CLNAQ00100OutBlock2,Out(*EMPTY*),output,occurs; + begin + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + ׸鰡, Parprc, Parprc, double, 13.2; + , PrdayCprc, PrdayCprc, double, 13.2; + , RatVal, RatVal, double, 19.8; + 밡, SubstPrc, SubstPrc, double, 13.2; + ϱ, RegTpNm, RegTpNm, char, 20; + ű¡з, SpotMgnLevyClssNm, SpotMgnLevyClssNm, char, 40; + ŷ, FnoTrdStopRsnCnts, FnoTrdStopRsnCnts, char, 40; + , DgrsPtnNm, DgrsPtnNm, char, 40; + , AcdPtnNm, AcdPtnNm, char, 40; + 屸, MktTpNm, MktTpNm, char, 20; + ѵ, LmtVal, LmtVal, long, 18; + ѵ, AcntLmtVal, AcntLmtVal, long, 18; + ڵ, LoanGrdCode, LoanGrdCode, char, 2; + ݾ, LoanAmt, LoanAmt, long, 16; + Ⱑ, LoanAbleRat, LoanAbleRat, double, 26.9; + 1, LoanIntrat1, LoanIntrat1, double, 14.4; + ID, RegPsnId, RegPsnId, char, 16; + , Rat01, Rat01, double, 19.8; + , Rat02, Rat02, double, 19.8; + end + CLNAQ00100OutBlock3,Sum(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + հݾ, LrgMnyoutSumAmt, LrgMnyoutSumAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CSPAQ00600.res b/sample_python/Res/CSPAQ00600.res new file mode 100644 index 0000000..3e6faa8 --- /dev/null +++ b/sample_python/Res/CSPAQ00600.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,ºſѵȸ,CSPAQ00600,SERVICE=CSPAQ00600,headtype=B,CREATOR=ۿ켮,CREDATE=2018/09/17 15:17:35; + BEGIN_DATA_MAP + CSPAQ00600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + 󼼺зڵ, LoanDtlClssCode, LoanDtlClssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CSPAQ00600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + 󼼺зڵ, LoanDtlClssCode, LoanDtlClssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CSPAQ00600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ѵ, SloanLmtAmt, SloanLmtAmt, long, 16; + ֱݾհ, SloanAmtSum, SloanAmtSum, long, 16; + ֽűԱݾ, SloanNewAmt, SloanNewAmt, long, 16; + ֻȯݾ, SloanRfundAmt, SloanRfundAmt, long, 16; + ѵݾ, MktcplMloanLmtAmt, MktcplMloanLmtAmt, long, 16; + ڱݾհ, MktcplMloanAmtSum, MktcplMloanAmtSum, long, 16; + ڽűԱݾ, MktcplMloanNewAmt, MktcplMloanNewAmt, long, 16; + ڻȯݾ, MktcplMloanRfundAmt, MktcplMloanRfundAmt, long, 16; + ڱѵݾ, SfaccMloanLmtAmt, SfaccMloanLmtAmt, long, 16; + ڱڱݾհ, SfaccMloanAmtSum, SfaccMloanAmtSum, long, 16; + ڱڽűԱݾ, SfaccMloanNewAmt, SfaccMloanNewAmt, long, 16; + ڱڻȯݾ, SfaccMloanRfundAmt, SfaccMloanRfundAmt, long, 16; + ѵݾ, BrnMktcplMloanLmtAmt, BrnMktcplMloanLmtAmt, long, 16; + ڽűԱݾ, BrnMktcplMloanNewAmt, BrnMktcplMloanNewAmt, long, 16; + ڻȯݾ, BrnMktcplMloanRfundAmt, BrnMktcplMloanRfundAmt, long, 16; + ڻݾ, BrnMktcplMloanUseAmt, BrnMktcplMloanUseAmt, long, 16; + ڱѵݾ, BrnSfaccMloanLmtAmt, BrnSfaccMloanLmtAmt, long, 16; + ڱڽűԱݾ, BrnSfaccMloanNewAmt, BrnSfaccMloanNewAmt, long, 16; + ڱڻȯݾ, BrnSfaccMloanRfundAmt, BrnSfaccMloanRfundAmt, long, 16; + ڱڻݾ, BrnSfaccMloanUseAmt, BrnSfaccMloanUseAmt, long, 16; + ̿ѵ, FirmMloanLmtMgmtYn, FirmMloanLmtMgmtYn, char, 1; + ̿ſѱ, FirmCrdtIsuRestrcTp, FirmCrdtIsuRestrcTp, char, 1; + 㺸, PldgMaintRat, PldgMaintRat, double, 7.4; + ̿, FirmNm, FirmNm, char, 50; + 㺸, PldgRat, PldgRat, double, 7.4; + Źڻհ, DpsastSum, DpsastSum, long, 17; + ѵ氡ɱݾ, LmtChgAbleAmt, LmtChgAbleAmt, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + ̼Ұֹɼ, RcvblUablOrdAbleQty, RcvblUablOrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CSPAQ00600_1.res b/sample_python/Res/CSPAQ00600_1.res new file mode 100644 index 0000000..3e6faa8 --- /dev/null +++ b/sample_python/Res/CSPAQ00600_1.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,ºſѵȸ,CSPAQ00600,SERVICE=CSPAQ00600,headtype=B,CREATOR=ۿ켮,CREDATE=2018/09/17 15:17:35; + BEGIN_DATA_MAP + CSPAQ00600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + 󼼺зڵ, LoanDtlClssCode, LoanDtlClssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CSPAQ00600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + 󼼺зڵ, LoanDtlClssCode, LoanDtlClssCode, char, 2; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + end + CSPAQ00600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + ֹ, OrdPrc, OrdPrc, double, 13.2; + ѵ, SloanLmtAmt, SloanLmtAmt, long, 16; + ֱݾհ, SloanAmtSum, SloanAmtSum, long, 16; + ֽűԱݾ, SloanNewAmt, SloanNewAmt, long, 16; + ֻȯݾ, SloanRfundAmt, SloanRfundAmt, long, 16; + ѵݾ, MktcplMloanLmtAmt, MktcplMloanLmtAmt, long, 16; + ڱݾհ, MktcplMloanAmtSum, MktcplMloanAmtSum, long, 16; + ڽűԱݾ, MktcplMloanNewAmt, MktcplMloanNewAmt, long, 16; + ڻȯݾ, MktcplMloanRfundAmt, MktcplMloanRfundAmt, long, 16; + ڱѵݾ, SfaccMloanLmtAmt, SfaccMloanLmtAmt, long, 16; + ڱڱݾհ, SfaccMloanAmtSum, SfaccMloanAmtSum, long, 16; + ڱڽűԱݾ, SfaccMloanNewAmt, SfaccMloanNewAmt, long, 16; + ڱڻȯݾ, SfaccMloanRfundAmt, SfaccMloanRfundAmt, long, 16; + ѵݾ, BrnMktcplMloanLmtAmt, BrnMktcplMloanLmtAmt, long, 16; + ڽűԱݾ, BrnMktcplMloanNewAmt, BrnMktcplMloanNewAmt, long, 16; + ڻȯݾ, BrnMktcplMloanRfundAmt, BrnMktcplMloanRfundAmt, long, 16; + ڻݾ, BrnMktcplMloanUseAmt, BrnMktcplMloanUseAmt, long, 16; + ڱѵݾ, BrnSfaccMloanLmtAmt, BrnSfaccMloanLmtAmt, long, 16; + ڱڽűԱݾ, BrnSfaccMloanNewAmt, BrnSfaccMloanNewAmt, long, 16; + ڱڻȯݾ, BrnSfaccMloanRfundAmt, BrnSfaccMloanRfundAmt, long, 16; + ڱڻݾ, BrnSfaccMloanUseAmt, BrnSfaccMloanUseAmt, long, 16; + ̿ѵ, FirmMloanLmtMgmtYn, FirmMloanLmtMgmtYn, char, 1; + ̿ſѱ, FirmCrdtIsuRestrcTp, FirmCrdtIsuRestrcTp, char, 1; + 㺸, PldgMaintRat, PldgMaintRat, double, 7.4; + ̿, FirmNm, FirmNm, char, 50; + 㺸, PldgRat, PldgRat, double, 7.4; + Źڻհ, DpsastSum, DpsastSum, long, 17; + ѵ氡ɱݾ, LmtChgAbleAmt, LmtChgAbleAmt, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + ̼Ұֹɼ, RcvblUablOrdAbleQty, RcvblUablOrdAbleQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CSPAQ12200.res b/sample_python/Res/CSPAQ12200.res new file mode 100644 index 0000000..93e9667 --- /dev/null +++ b/sample_python/Res/CSPAQ12200.res @@ -0,0 +1,82 @@ +BEGIN_FUNCTION_MAP + .Func,¿ ֹɱݾ ȸ,CSPAQ12200,SERVICE=CSPAQ12200,headtype=B,CREATOR=̻,CREDATE=2015/04/13 08:41:27; + BEGIN_DATA_MAP + CSPAQ12200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ12200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ12200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + ܰ򰡱ݾ, BalEvalAmt, BalEvalAmt, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + ŹڻѾ, DpsastTotamt, DpsastTotamt, long, 16; + , PnlRat, PnlRat, double, 18.6; + ڿ, InvstOrgAmt, InvstOrgAmt, long, 20; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ſ㺸ֹݾ, CrdtPldgOrdAmt, CrdtPldgOrdAmt, long, 16; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + D1, D1Dps, D1Dps, long, 16; + D2, D2Dps, D2Dps, long, 16; + ݹ̼ݾ, MnyrclAmt, MnyrclAmt, long, 16; + ű, MgnMny, MgnMny, long, 16; + űݴ, MgnSubst, MgnSubst, long, 16; + ǥݾ, ChckAmt, ChckAmt, long, 16; + ֹɱݾ, SubstOrdAbleAmt, SubstOrdAbleAmt, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + űݷ35%ֹɱݾ, MgnRat35ordAbleAmt, MgnRat35ordAbleAmt, long, 16; + űݷ50%ֹɱݾ, MgnRat50ordAbleAmt, MgnRat50ordAbleAmt, long, 16; + ϸŵݾ, PrdaySellAdjstAmt, PrdaySellAdjstAmt, long, 16; + ϸżݾ, PrdayBuyAdjstAmt, PrdayBuyAdjstAmt, long, 16; + ϸŵݾ, CrdaySellAdjstAmt, CrdaySellAdjstAmt, long, 16; + ϸżݾ, CrdayBuyAdjstAmt, CrdayBuyAdjstAmt, long, 16; + D1üҿݾ, D1ovdRepayRqrdAmt, D1ovdRepayRqrdAmt, long, 16; + D2üҿݾ, D2ovdRepayRqrdAmt, D2ovdRepayRqrdAmt, long, 16; + D1Ⱑɱݾ, D1PrsmptWthdwAbleAmt, D1PrsmptWthdwAbleAmt, long, 16; + D2Ⱑɱݾ, D2PrsmptWthdwAbleAmt, D2PrsmptWthdwAbleAmt, long, 16; + Ź㺸ݾ, DpspdgLoanAmt, DpspdgLoanAmt, long, 16; + ſ뼳, Imreq, Imreq, long, 16; + ڱݾ, MloanAmt, MloanAmt, long, 16; + Ĵ㺸, ChgAfPldgRat, ChgAfPldgRat, double, 9.3; + 㺸ݾ, OrgPldgAmt, OrgPldgAmt, long, 16; + δ㺸ݾ, SubPldgAmt, SubPldgAmt, long, 16; + ҿ㺸ݾ, RqrdPldgAmt, RqrdPldgAmt, long, 16; + 㺸ݾ, OrgPdlckAmt, OrgPdlckAmt, long, 16; + 㺸ݾ, PdlckAmt, PdlckAmt, long, 16; + ߰㺸, AddPldgMny, AddPldgMny, long, 16; + D1ֹɱݾ, D1OrdAbleAmt, D1OrdAbleAmt, long, 16; + ſڹ̳ݾ, CrdtIntdltAmt, CrdtIntdltAmt, long, 16; + Ÿ뿩ݾ, EtclndAmt, EtclndAmt, long, 16; + ݴŸűݾ, NtdayPrsmptCvrgAmt, NtdayPrsmptCvrgAmt, long, 16; + 㺸հݾ, OrgPldgSumAmt, OrgPldgSumAmt, long, 16; + ſֹɱݾ, CrdtOrdAbleAmt, CrdtOrdAbleAmt, long, 16; + δ㺸հݾ, SubPldgSumAmt, SubPldgSumAmt, long, 16; + ſ㺸, CrdtPldgAmtMny, CrdtPldgAmtMny, long, 16; + ſ㺸ݾ, CrdtPldgSubstAmt, CrdtPldgSubstAmt, long, 16; + ߰ſ㺸, AddCrdtPldgMny, AddCrdtPldgMny, long, 16; + ſ㺸ݾ, CrdtPldgRuseAmt, CrdtPldgRuseAmt, long, 16; + ߰ſ㺸, AddCrdtPldgSubst, AddCrdtPldgSubst, long, 16; + ŵݴ㺸ݾ, CslLoanAmtdt1, CslLoanAmtdt1, long, 16; + óѱݾ, DpslRestrcAmt, DpslRestrcAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CSPAQ12200_1.res b/sample_python/Res/CSPAQ12200_1.res new file mode 100644 index 0000000..93e9667 --- /dev/null +++ b/sample_python/Res/CSPAQ12200_1.res @@ -0,0 +1,82 @@ +BEGIN_FUNCTION_MAP + .Func,¿ ֹɱݾ ȸ,CSPAQ12200,SERVICE=CSPAQ12200,headtype=B,CREATOR=̻,CREDATE=2015/04/13 08:41:27; + BEGIN_DATA_MAP + CSPAQ12200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ12200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ12200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + ܰ򰡱ݾ, BalEvalAmt, BalEvalAmt, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + ŹڻѾ, DpsastTotamt, DpsastTotamt, long, 16; + , PnlRat, PnlRat, double, 18.6; + ڿ, InvstOrgAmt, InvstOrgAmt, long, 20; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ſ㺸ֹݾ, CrdtPldgOrdAmt, CrdtPldgOrdAmt, long, 16; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + D1, D1Dps, D1Dps, long, 16; + D2, D2Dps, D2Dps, long, 16; + ݹ̼ݾ, MnyrclAmt, MnyrclAmt, long, 16; + ű, MgnMny, MgnMny, long, 16; + űݴ, MgnSubst, MgnSubst, long, 16; + ǥݾ, ChckAmt, ChckAmt, long, 16; + ֹɱݾ, SubstOrdAbleAmt, SubstOrdAbleAmt, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + űݷ35%ֹɱݾ, MgnRat35ordAbleAmt, MgnRat35ordAbleAmt, long, 16; + űݷ50%ֹɱݾ, MgnRat50ordAbleAmt, MgnRat50ordAbleAmt, long, 16; + ϸŵݾ, PrdaySellAdjstAmt, PrdaySellAdjstAmt, long, 16; + ϸżݾ, PrdayBuyAdjstAmt, PrdayBuyAdjstAmt, long, 16; + ϸŵݾ, CrdaySellAdjstAmt, CrdaySellAdjstAmt, long, 16; + ϸżݾ, CrdayBuyAdjstAmt, CrdayBuyAdjstAmt, long, 16; + D1üҿݾ, D1ovdRepayRqrdAmt, D1ovdRepayRqrdAmt, long, 16; + D2üҿݾ, D2ovdRepayRqrdAmt, D2ovdRepayRqrdAmt, long, 16; + D1Ⱑɱݾ, D1PrsmptWthdwAbleAmt, D1PrsmptWthdwAbleAmt, long, 16; + D2Ⱑɱݾ, D2PrsmptWthdwAbleAmt, D2PrsmptWthdwAbleAmt, long, 16; + Ź㺸ݾ, DpspdgLoanAmt, DpspdgLoanAmt, long, 16; + ſ뼳, Imreq, Imreq, long, 16; + ڱݾ, MloanAmt, MloanAmt, long, 16; + Ĵ㺸, ChgAfPldgRat, ChgAfPldgRat, double, 9.3; + 㺸ݾ, OrgPldgAmt, OrgPldgAmt, long, 16; + δ㺸ݾ, SubPldgAmt, SubPldgAmt, long, 16; + ҿ㺸ݾ, RqrdPldgAmt, RqrdPldgAmt, long, 16; + 㺸ݾ, OrgPdlckAmt, OrgPdlckAmt, long, 16; + 㺸ݾ, PdlckAmt, PdlckAmt, long, 16; + ߰㺸, AddPldgMny, AddPldgMny, long, 16; + D1ֹɱݾ, D1OrdAbleAmt, D1OrdAbleAmt, long, 16; + ſڹ̳ݾ, CrdtIntdltAmt, CrdtIntdltAmt, long, 16; + Ÿ뿩ݾ, EtclndAmt, EtclndAmt, long, 16; + ݴŸűݾ, NtdayPrsmptCvrgAmt, NtdayPrsmptCvrgAmt, long, 16; + 㺸հݾ, OrgPldgSumAmt, OrgPldgSumAmt, long, 16; + ſֹɱݾ, CrdtOrdAbleAmt, CrdtOrdAbleAmt, long, 16; + δ㺸հݾ, SubPldgSumAmt, SubPldgSumAmt, long, 16; + ſ㺸, CrdtPldgAmtMny, CrdtPldgAmtMny, long, 16; + ſ㺸ݾ, CrdtPldgSubstAmt, CrdtPldgSubstAmt, long, 16; + ߰ſ㺸, AddCrdtPldgMny, AddCrdtPldgMny, long, 16; + ſ㺸ݾ, CrdtPldgRuseAmt, CrdtPldgRuseAmt, long, 16; + ߰ſ㺸, AddCrdtPldgSubst, AddCrdtPldgSubst, long, 16; + ŵݴ㺸ݾ, CslLoanAmtdt1, CslLoanAmtdt1, long, 16; + óѱݾ, DpslRestrcAmt, DpslRestrcAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CSPAQ12300.res b/sample_python/Res/CSPAQ12300.res new file mode 100644 index 0000000..d49591a --- /dev/null +++ b/sample_python/Res/CSPAQ12300.res @@ -0,0 +1,142 @@ +BEGIN_FUNCTION_MAP + .Func,BEPܰȸ,CSPAQ12300,SERVICE=CSPAQ12300,headtype=B,CREATOR=̻,CREDATE=2015/04/13 08:43:20; + BEGIN_DATA_MAP + CSPAQ12300InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + 뱸, CmsnAppTpCode, CmsnAppTpCode, char, 1; + D2ܰȸ, D2balBaseQryTp, D2balBaseQryTp, char, 1; + ܰ, UprcTpCode, UprcTpCode, char, 1; + end + CSPAQ12300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + 뱸, CmsnAppTpCode, CmsnAppTpCode, char, 1; + D2ܰȸ, D2balBaseQryTp, D2balBaseQryTp, char, 1; + ܰ, UprcTpCode, UprcTpCode, char, 1; + end + CSPAQ12300OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + HTSֹɱݾ, HtsOrdAbleAmt, HtsOrdAbleAmt, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + ܰ򰡱ݾ, BalEvalAmt, BalEvalAmt, long, 16; + Աݾ, PchsAmt, PchsAmt, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + , PnlRat, PnlRat, double, 18.6; + ڿ, InvstOrgAmt, InvstOrgAmt, long, 20; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ſ㺸ֹݾ, CrdtPldgOrdAmt, CrdtPldgOrdAmt, long, 16; + , Dps, Dps, long, 16; + D1, D1Dps, D1Dps, long, 16; + D2, D2Dps, D2Dps, long, 16; + ֹ, OrdDt, OrdDt, char, 8; + űݾ, MnyMgn, MnyMgn, long, 16; + űݾ, SubstMgn, SubstMgn, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + ϸżüݾ, PrdayBuyExecAmt, PrdayBuyExecAmt, long, 16; + ϸŵüݾ, PrdaySellExecAmt, PrdaySellExecAmt, long, 16; + ϸżüݾ, CrdayBuyExecAmt, CrdayBuyExecAmt, long, 16; + ϸŵüݾ, CrdaySellExecAmt, CrdaySellExecAmt, long, 16; + 򰡼հ, EvalPnlSum, EvalPnlSum, long, 15; + ŹڻѾ, DpsastTotamt, DpsastTotamt, long, 16; + , Evrprc, Evrprc, long, 19; + ݾ, RuseAmt, RuseAmt, long, 16; + Ÿ뿩ݾ, EtclndAmt, EtclndAmt, long, 16; + ݾ, PrcAdjstAmt, PrcAdjstAmt, long, 16; + D1, D1CmsnAmt, D1CmsnAmt, long, 16; + D2, D2CmsnAmt, D2CmsnAmt, long, 16; + D1, D1EvrTax, D1EvrTax, long, 16; + D2, D2EvrTax, D2EvrTax, long, 16; + D1ݾ, D1SettPrergAmt, D1SettPrergAmt, long, 16; + D2ݾ, D2SettPrergAmt, D2SettPrergAmt, long, 16; + KSEű, PrdayKseMnyMgn, PrdayKseMnyMgn, long, 16; + KSEű, PrdayKseSubstMgn, PrdayKseSubstMgn, long, 16; + KSEſű, PrdayKseCrdtMnyMgn, PrdayKseCrdtMnyMgn, long, 16; + KSEſű, PrdayKseCrdtSubstMgn, PrdayKseCrdtSubstMgn, long, 16; + KSEű, CrdayKseMnyMgn, CrdayKseMnyMgn, long, 16; + KSEű, CrdayKseSubstMgn, CrdayKseSubstMgn, long, 16; + KSEſű, CrdayKseCrdtMnyMgn, CrdayKseCrdtMnyMgn, long, 16; + KSEſű, CrdayKseCrdtSubstMgn, CrdayKseCrdtSubstMgn, long, 16; + ڽű, PrdayKdqMnyMgn, PrdayKdqMnyMgn, long, 16; + ڽڴű, PrdayKdqSubstMgn, PrdayKdqSubstMgn, long, 16; + ڽڽſű, PrdayKdqCrdtMnyMgn, PrdayKdqCrdtMnyMgn, long, 16; + ڽڽſű, PrdayKdqCrdtSubstMgn, PrdayKdqCrdtSubstMgn, long, 16; + ڽű, CrdayKdqMnyMgn, CrdayKdqMnyMgn, long, 16; + ڽڴű, CrdayKdqSubstMgn, CrdayKdqSubstMgn, long, 16; + ڽڽſű, CrdayKdqCrdtMnyMgn, CrdayKdqCrdtMnyMgn, long, 16; + ڽڽſű, CrdayKdqCrdtSubstMgn, CrdayKdqCrdtSubstMgn, long, 16; + ű, PrdayFrbrdMnyMgn, PrdayFrbrdMnyMgn, long, 16; + ű, PrdayFrbrdSubstMgn, PrdayFrbrdSubstMgn, long, 16; + ű, CrdayFrbrdMnyMgn, CrdayFrbrdMnyMgn, long, 16; + ű, CrdayFrbrdSubstMgn, CrdayFrbrdSubstMgn, long, 16; + ű, PrdayCrbmkMnyMgn, PrdayCrbmkMnyMgn, long, 16; + ܴű, PrdayCrbmkSubstMgn, PrdayCrbmkSubstMgn, long, 16; + ű, CrdayCrbmkMnyMgn, CrdayCrbmkMnyMgn, long, 16; + ܴű, CrdayCrbmkSubstMgn, CrdayCrbmkSubstMgn, long, 16; + Ź㺸, DpspdgQty, DpspdgQty, long, 16; + ż(D+2), BuyAdjstAmtD2, BuyAdjstAmtD2, long, 16; + ŵ(D+2), SellAdjstAmtD2, SellAdjstAmtD2, long, 16; + ҿ(D+1), RepayRqrdAmtD1, RepayRqrdAmtD1, long, 16; + ҿ(D+2), RepayRqrdAmtD2, RepayRqrdAmtD2, long, 16; + ݾ, LoanAmt, LoanAmt, long, 16; + end + CSPAQ12300OutBlock3,ST_OUT(*EMPTY*),output,occurs; + begin + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + ܰڵ, SecBalPtnCode, SecBalPtnCode, char, 2; + ܰ, SecBalPtnNm, SecBalPtnNm, char, 40; + ܰ, BalQty, BalQty, long, 16; + Ÿűܰ, BnsBaseBalQty, BnsBaseBalQty, long, 16; + ϸżü, CrdayBuyExecQty, CrdayBuyExecQty, long, 16; + ϸŵü, CrdaySellExecQty, CrdaySellExecQty, long, 16; + ŵ, SellPrc, SellPrc, double, 21.4; + ż, BuyPrc, BuyPrc, double, 21.4; + ŵͱݾ, SellPnlAmt, SellPnlAmt, long, 16; + , PnlRat, PnlRat, double, 18.6; + 簡, NowPrc, NowPrc, double, 15.2; + ſݾ, CrdtAmt, CrdtAmt, long, 16; + , DueDt, DueDt, char, 8; + ϸŵüᰡ, PrdaySellExecPrc, PrdaySellExecPrc, double, 13.2; + ϸŵ, PrdaySellQty, PrdaySellQty, long, 16; + ϸżüᰡ, PrdayBuyExecPrc, PrdayBuyExecPrc, double, 13.2; + ϸż, PrdayBuyQty, PrdayBuyQty, long, 16; + , LoanDt, LoanDt, char, 8; + մܰ, AvrUprc, AvrUprc, double, 13.2; + ŵɼ, SellAbleQty, SellAbleQty, long, 16; + ŵֹ, SellOrdQty, SellOrdQty, long, 16; + ϸżüݾ, CrdayBuyExecAmt, CrdayBuyExecAmt, long, 16; + ϸŵüݾ, CrdaySellExecAmt, CrdaySellExecAmt, long, 16; + ϸżüݾ, PrdayBuyExecAmt, PrdayBuyExecAmt, long, 16; + ϸŵüݾ, PrdaySellExecAmt, PrdaySellExecAmt, long, 16; + ܰ򰡱ݾ, BalEvalAmt, BalEvalAmt, long, 16; + 򰡼, EvalPnl, EvalPnl, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ŵü, SellUnercQty, SellUnercQty, long, 16; + ŵ̰, SellUnsttQty, SellUnsttQty, long, 16; + żü, BuyUnercQty, BuyUnercQty, long, 16; + ż̰, BuyUnsttQty, BuyUnsttQty, long, 16; + ̰, UnsttQty, UnsttQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + , PrdayCprc, PrdayCprc, double, 15.2; + Աݾ, PchsAmt, PchsAmt, long, 16; + Ͻڵ, RegMktCode, RegMktCode, char, 2; + 󼼺зڵ, LoanDtlClssCode, LoanDtlClssCode, char, 2; + Ź㺸, DpspdgLoanQty, DpspdgLoanQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CSPAQ12300_1.res b/sample_python/Res/CSPAQ12300_1.res new file mode 100644 index 0000000..d49591a --- /dev/null +++ b/sample_python/Res/CSPAQ12300_1.res @@ -0,0 +1,142 @@ +BEGIN_FUNCTION_MAP + .Func,BEPܰȸ,CSPAQ12300,SERVICE=CSPAQ12300,headtype=B,CREATOR=̻,CREDATE=2015/04/13 08:43:20; + BEGIN_DATA_MAP + CSPAQ12300InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + 뱸, CmsnAppTpCode, CmsnAppTpCode, char, 1; + D2ܰȸ, D2balBaseQryTp, D2balBaseQryTp, char, 1; + ܰ, UprcTpCode, UprcTpCode, char, 1; + end + CSPAQ12300OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + 뱸, CmsnAppTpCode, CmsnAppTpCode, char, 1; + D2ܰȸ, D2balBaseQryTp, D2balBaseQryTp, char, 1; + ܰ, UprcTpCode, UprcTpCode, char, 1; + end + CSPAQ12300OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + HTSֹɱݾ, HtsOrdAbleAmt, HtsOrdAbleAmt, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + ܰ򰡱ݾ, BalEvalAmt, BalEvalAmt, long, 16; + Աݾ, PchsAmt, PchsAmt, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + , PnlRat, PnlRat, double, 18.6; + ڿ, InvstOrgAmt, InvstOrgAmt, long, 20; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ſ㺸ֹݾ, CrdtPldgOrdAmt, CrdtPldgOrdAmt, long, 16; + , Dps, Dps, long, 16; + D1, D1Dps, D1Dps, long, 16; + D2, D2Dps, D2Dps, long, 16; + ֹ, OrdDt, OrdDt, char, 8; + űݾ, MnyMgn, MnyMgn, long, 16; + űݾ, SubstMgn, SubstMgn, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + ϸżüݾ, PrdayBuyExecAmt, PrdayBuyExecAmt, long, 16; + ϸŵüݾ, PrdaySellExecAmt, PrdaySellExecAmt, long, 16; + ϸżüݾ, CrdayBuyExecAmt, CrdayBuyExecAmt, long, 16; + ϸŵüݾ, CrdaySellExecAmt, CrdaySellExecAmt, long, 16; + 򰡼հ, EvalPnlSum, EvalPnlSum, long, 15; + ŹڻѾ, DpsastTotamt, DpsastTotamt, long, 16; + , Evrprc, Evrprc, long, 19; + ݾ, RuseAmt, RuseAmt, long, 16; + Ÿ뿩ݾ, EtclndAmt, EtclndAmt, long, 16; + ݾ, PrcAdjstAmt, PrcAdjstAmt, long, 16; + D1, D1CmsnAmt, D1CmsnAmt, long, 16; + D2, D2CmsnAmt, D2CmsnAmt, long, 16; + D1, D1EvrTax, D1EvrTax, long, 16; + D2, D2EvrTax, D2EvrTax, long, 16; + D1ݾ, D1SettPrergAmt, D1SettPrergAmt, long, 16; + D2ݾ, D2SettPrergAmt, D2SettPrergAmt, long, 16; + KSEű, PrdayKseMnyMgn, PrdayKseMnyMgn, long, 16; + KSEű, PrdayKseSubstMgn, PrdayKseSubstMgn, long, 16; + KSEſű, PrdayKseCrdtMnyMgn, PrdayKseCrdtMnyMgn, long, 16; + KSEſű, PrdayKseCrdtSubstMgn, PrdayKseCrdtSubstMgn, long, 16; + KSEű, CrdayKseMnyMgn, CrdayKseMnyMgn, long, 16; + KSEű, CrdayKseSubstMgn, CrdayKseSubstMgn, long, 16; + KSEſű, CrdayKseCrdtMnyMgn, CrdayKseCrdtMnyMgn, long, 16; + KSEſű, CrdayKseCrdtSubstMgn, CrdayKseCrdtSubstMgn, long, 16; + ڽű, PrdayKdqMnyMgn, PrdayKdqMnyMgn, long, 16; + ڽڴű, PrdayKdqSubstMgn, PrdayKdqSubstMgn, long, 16; + ڽڽſű, PrdayKdqCrdtMnyMgn, PrdayKdqCrdtMnyMgn, long, 16; + ڽڽſű, PrdayKdqCrdtSubstMgn, PrdayKdqCrdtSubstMgn, long, 16; + ڽű, CrdayKdqMnyMgn, CrdayKdqMnyMgn, long, 16; + ڽڴű, CrdayKdqSubstMgn, CrdayKdqSubstMgn, long, 16; + ڽڽſű, CrdayKdqCrdtMnyMgn, CrdayKdqCrdtMnyMgn, long, 16; + ڽڽſű, CrdayKdqCrdtSubstMgn, CrdayKdqCrdtSubstMgn, long, 16; + ű, PrdayFrbrdMnyMgn, PrdayFrbrdMnyMgn, long, 16; + ű, PrdayFrbrdSubstMgn, PrdayFrbrdSubstMgn, long, 16; + ű, CrdayFrbrdMnyMgn, CrdayFrbrdMnyMgn, long, 16; + ű, CrdayFrbrdSubstMgn, CrdayFrbrdSubstMgn, long, 16; + ű, PrdayCrbmkMnyMgn, PrdayCrbmkMnyMgn, long, 16; + ܴű, PrdayCrbmkSubstMgn, PrdayCrbmkSubstMgn, long, 16; + ű, CrdayCrbmkMnyMgn, CrdayCrbmkMnyMgn, long, 16; + ܴű, CrdayCrbmkSubstMgn, CrdayCrbmkSubstMgn, long, 16; + Ź㺸, DpspdgQty, DpspdgQty, long, 16; + ż(D+2), BuyAdjstAmtD2, BuyAdjstAmtD2, long, 16; + ŵ(D+2), SellAdjstAmtD2, SellAdjstAmtD2, long, 16; + ҿ(D+1), RepayRqrdAmtD1, RepayRqrdAmtD1, long, 16; + ҿ(D+2), RepayRqrdAmtD2, RepayRqrdAmtD2, long, 16; + ݾ, LoanAmt, LoanAmt, long, 16; + end + CSPAQ12300OutBlock3,ST_OUT(*EMPTY*),output,occurs; + begin + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + ܰڵ, SecBalPtnCode, SecBalPtnCode, char, 2; + ܰ, SecBalPtnNm, SecBalPtnNm, char, 40; + ܰ, BalQty, BalQty, long, 16; + Ÿűܰ, BnsBaseBalQty, BnsBaseBalQty, long, 16; + ϸżü, CrdayBuyExecQty, CrdayBuyExecQty, long, 16; + ϸŵü, CrdaySellExecQty, CrdaySellExecQty, long, 16; + ŵ, SellPrc, SellPrc, double, 21.4; + ż, BuyPrc, BuyPrc, double, 21.4; + ŵͱݾ, SellPnlAmt, SellPnlAmt, long, 16; + , PnlRat, PnlRat, double, 18.6; + 簡, NowPrc, NowPrc, double, 15.2; + ſݾ, CrdtAmt, CrdtAmt, long, 16; + , DueDt, DueDt, char, 8; + ϸŵüᰡ, PrdaySellExecPrc, PrdaySellExecPrc, double, 13.2; + ϸŵ, PrdaySellQty, PrdaySellQty, long, 16; + ϸżüᰡ, PrdayBuyExecPrc, PrdayBuyExecPrc, double, 13.2; + ϸż, PrdayBuyQty, PrdayBuyQty, long, 16; + , LoanDt, LoanDt, char, 8; + մܰ, AvrUprc, AvrUprc, double, 13.2; + ŵɼ, SellAbleQty, SellAbleQty, long, 16; + ŵֹ, SellOrdQty, SellOrdQty, long, 16; + ϸżüݾ, CrdayBuyExecAmt, CrdayBuyExecAmt, long, 16; + ϸŵüݾ, CrdaySellExecAmt, CrdaySellExecAmt, long, 16; + ϸżüݾ, PrdayBuyExecAmt, PrdayBuyExecAmt, long, 16; + ϸŵüݾ, PrdaySellExecAmt, PrdaySellExecAmt, long, 16; + ܰ򰡱ݾ, BalEvalAmt, BalEvalAmt, long, 16; + 򰡼, EvalPnl, EvalPnl, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + ŵü, SellUnercQty, SellUnercQty, long, 16; + ŵ̰, SellUnsttQty, SellUnsttQty, long, 16; + żü, BuyUnercQty, BuyUnercQty, long, 16; + ż̰, BuyUnsttQty, BuyUnsttQty, long, 16; + ̰, UnsttQty, UnsttQty, long, 16; + ü, UnercQty, UnercQty, long, 16; + , PrdayCprc, PrdayCprc, double, 15.2; + Աݾ, PchsAmt, PchsAmt, long, 16; + Ͻڵ, RegMktCode, RegMktCode, char, 2; + 󼼺зڵ, LoanDtlClssCode, LoanDtlClssCode, char, 2; + Ź㺸, DpspdgLoanQty, DpspdgLoanQty, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CSPAQ13700.res b/sample_python/Res/CSPAQ13700.res new file mode 100644 index 0000000..33f4983 --- /dev/null +++ b/sample_python/Res/CSPAQ13700.res @@ -0,0 +1,81 @@ +BEGIN_FUNCTION_MAP + .Func,ֹü᳻ȸ,CSPAQ13700,SERVICE=CSPAQ13700,headtype=B,CREATOR=̻,CREDATE=2015/04/13 08:39:53; + BEGIN_DATA_MAP + CSPAQ13700InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + üῩ, ExecYn, ExecYn, char, 1; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + , BkseqTpCode, BkseqTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + end + CSPAQ13700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + üῩ, ExecYn, ExecYn, char, 1; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + , BkseqTpCode, BkseqTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + end + CSPAQ13700OutBlock2,OUT1(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ŵüݾ, SellExecAmt, SellExecAmt, long, 16; + żüݾ, BuyExecAmt, BuyExecAmt, long, 16; + ŵü, SellExecQty, SellExecQty, long, 16; + żü, BuyExecQty, BuyExecQty, long, 16; + ŵֹ, SellOrdQty, SellOrdQty, long, 16; + żֹ, BuyOrdQty, BuyOrdQty, long, 16; + end + CSPAQ13700OutBlock3,OUT(*EMPTY*),output,occurs; + begin + ֹ, OrdDt, OrdDt, char, 8; + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ֹ, OrdPtnNm, OrdPtnNm, char, 40; + ֹóڵ, OrdTrxPtnCode, OrdTrxPtnCode, long, 9; + ֹó, OrdTrxPtnNm, OrdTrxPtnNm, char, 50; + ұ, MrcTpCode, MrcTpCode, char, 1; + ұи, MrcTpNm, MrcTpNm, char, 10; + Ҽ, MrcQty, MrcQty, long, 16; + Ұɼ, MrcAbleQty, MrcAbleQty, long, 16; + ֹ, OrdQty, OrdQty, long, 16; + ֹ, OrdPrc, OrdPrc, double, 15.2; + ü, ExecQty, ExecQty, long, 16; + üᰡ, ExecPrc, ExecPrc, double, 15.2; + üóð, ExecTrxTime, ExecTrxTime, char, 9; + üð, LastExecTime, LastExecTime, char, 9; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ȣ, OrdprcPtnNm, OrdprcPtnNm, char, 40; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + üü, AllExecQty, AllExecQty, long, 16; + Ÿüڵ, RegCommdaCode, RegCommdaCode, char, 2; + Ÿü, CommdaNm, CommdaNm, char, 40; + ȸȣ, MbrNo, MbrNo, char, 3; + ֹ, RsvOrdYn, RsvOrdYn, char, 1; + , LoanDt, LoanDt, char, 8; + ֹð, OrdTime, OrdTime, char, 9; + ùȣ, OpDrtnNo, OpDrtnNo, char, 12; + ֹID, OdrrId, OdrrId, char, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CSPAQ13700_1.res b/sample_python/Res/CSPAQ13700_1.res new file mode 100644 index 0000000..33f4983 --- /dev/null +++ b/sample_python/Res/CSPAQ13700_1.res @@ -0,0 +1,81 @@ +BEGIN_FUNCTION_MAP + .Func,ֹü᳻ȸ,CSPAQ13700,SERVICE=CSPAQ13700,headtype=B,CREATOR=̻,CREDATE=2015/04/13 08:39:53; + BEGIN_DATA_MAP + CSPAQ13700InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + üῩ, ExecYn, ExecYn, char, 1; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + , BkseqTpCode, BkseqTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + end + CSPAQ13700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣ, IsuNo, IsuNo, char, 12; + üῩ, ExecYn, ExecYn, char, 1; + ֹ, OrdDt, OrdDt, char, 8; + ֹȣ2, SrtOrdNo2, SrtOrdNo2, long, 10; + , BkseqTpCode, BkseqTpCode, char, 1; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + end + CSPAQ13700OutBlock2,OUT1(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ŵüݾ, SellExecAmt, SellExecAmt, long, 16; + żüݾ, BuyExecAmt, BuyExecAmt, long, 16; + ŵü, SellExecQty, SellExecQty, long, 16; + żü, BuyExecQty, BuyExecQty, long, 16; + ŵֹ, SellOrdQty, SellOrdQty, long, 16; + żֹ, BuyOrdQty, BuyOrdQty, long, 16; + end + CSPAQ13700OutBlock3,OUT(*EMPTY*),output,occurs; + begin + ֹ, OrdDt, OrdDt, char, 8; + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ȣ, IsuNo, IsuNo, char, 12; + , IsuNm, IsuNm, char, 40; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + Ÿű, BnsTpNm, BnsTpNm, char, 10; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ֹ, OrdPtnNm, OrdPtnNm, char, 40; + ֹóڵ, OrdTrxPtnCode, OrdTrxPtnCode, long, 9; + ֹó, OrdTrxPtnNm, OrdTrxPtnNm, char, 50; + ұ, MrcTpCode, MrcTpCode, char, 1; + ұи, MrcTpNm, MrcTpNm, char, 10; + Ҽ, MrcQty, MrcQty, long, 16; + Ұɼ, MrcAbleQty, MrcAbleQty, long, 16; + ֹ, OrdQty, OrdQty, long, 16; + ֹ, OrdPrc, OrdPrc, double, 15.2; + ü, ExecQty, ExecQty, long, 16; + üᰡ, ExecPrc, ExecPrc, double, 15.2; + üóð, ExecTrxTime, ExecTrxTime, char, 9; + üð, LastExecTime, LastExecTime, char, 9; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ȣ, OrdprcPtnNm, OrdprcPtnNm, char, 40; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + üü, AllExecQty, AllExecQty, long, 16; + Ÿüڵ, RegCommdaCode, RegCommdaCode, char, 2; + Ÿü, CommdaNm, CommdaNm, char, 40; + ȸȣ, MbrNo, MbrNo, char, 3; + ֹ, RsvOrdYn, RsvOrdYn, char, 1; + , LoanDt, LoanDt, char, 8; + ֹð, OrdTime, OrdTime, char, 9; + ùȣ, OpDrtnNo, OpDrtnNo, char, 12; + ֹID, OdrrId, OdrrId, char, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CSPAQ22200.res b/sample_python/Res/CSPAQ22200.res new file mode 100644 index 0000000..88114e9 --- /dev/null +++ b/sample_python/Res/CSPAQ22200.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,¿ ֹɱݾ 2,CSPAQ22200,SERVICE=CSPAQ22200,headtype=B,CREATOR=ۿ켮,CREDATE=2020/02/25 08:21:10; + BEGIN_DATA_MAP + CSPAQ22200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ22200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ22200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹɱݾ, SubstOrdAbleAmt, SubstOrdAbleAmt, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + ſ㺸ֹݾ, CrdtPldgOrdAmt, CrdtPldgOrdAmt, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + űݷ35%ֹɱݾ, MgnRat35ordAbleAmt, MgnRat35ordAbleAmt, long, 16; + űݷ50%ֹɱݾ, MgnRat50ordAbleAmt, MgnRat50ordAbleAmt, long, 16; + ſֹɱݾ, CrdtOrdAbleAmt, CrdtOrdAbleAmt, long, 16; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + ű, MgnMny, MgnMny, long, 16; + űݴ, MgnSubst, MgnSubst, long, 16; + D1, D1Dps, D1Dps, long, 16; + D2, D2Dps, D2Dps, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + D1üҿݾ, D1ovdRepayRqrdAmt, D1ovdRepayRqrdAmt, long, 16; + D2üҿݾ, D2ovdRepayRqrdAmt, D2ovdRepayRqrdAmt, long, 16; + ڱݾ, MloanAmt, MloanAmt, long, 16; + Ĵ㺸, ChgAfPldgRat, ChgAfPldgRat, double, 9.3; + ҿ㺸ݾ, RqrdPldgAmt, RqrdPldgAmt, long, 16; + 㺸ݾ, PdlckAmt, PdlckAmt, long, 16; + 㺸հݾ, OrgPldgSumAmt, OrgPldgSumAmt, long, 16; + δ㺸հݾ, SubPldgSumAmt, SubPldgSumAmt, long, 16; + ſ㺸, CrdtPldgAmtMny, CrdtPldgAmtMny, long, 16; + ſ㺸ݾ, CrdtPldgSubstAmt, CrdtPldgSubstAmt, long, 16; + ſ뼳, Imreq, Imreq, long, 16; + ſ㺸ݾ, CrdtPldgRuseAmt, CrdtPldgRuseAmt, long, 16; + óѱݾ, DpslRestrcAmt, DpslRestrcAmt, long, 16; + ϸŵݾ, PrdaySellAdjstAmt, PrdaySellAdjstAmt, long, 16; + ϸżݾ, PrdayBuyAdjstAmt, PrdayBuyAdjstAmt, long, 16; + ϸŵݾ, CrdaySellAdjstAmt, CrdaySellAdjstAmt, long, 16; + ϸżݾ, CrdayBuyAdjstAmt, CrdayBuyAdjstAmt, long, 16; + ŵݴ㺸ݾ, CslLoanAmtdt1, CslLoanAmtdt1, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CSPAQ22200_1.res b/sample_python/Res/CSPAQ22200_1.res new file mode 100644 index 0000000..88114e9 --- /dev/null +++ b/sample_python/Res/CSPAQ22200_1.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,¿ ֹɱݾ 2,CSPAQ22200,SERVICE=CSPAQ22200,headtype=B,CREATOR=ۿ켮,CREDATE=2020/02/25 08:21:10; + BEGIN_DATA_MAP + CSPAQ22200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ22200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ȣ, MgmtBrnNo, MgmtBrnNo, char, 3; + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ܰ, BalCreTp, BalCreTp, char, 1; + end + CSPAQ22200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + , BrnNm, BrnNm, char, 40; + ¸, AcntNm, AcntNm, char, 40; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹɱݾ, SubstOrdAbleAmt, SubstOrdAbleAmt, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + ſ㺸ֹݾ, CrdtPldgOrdAmt, CrdtPldgOrdAmt, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + űݷ35%ֹɱݾ, MgnRat35ordAbleAmt, MgnRat35ordAbleAmt, long, 16; + űݷ50%ֹɱݾ, MgnRat50ordAbleAmt, MgnRat50ordAbleAmt, long, 16; + ſֹɱݾ, CrdtOrdAbleAmt, CrdtOrdAbleAmt, long, 16; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + ű, MgnMny, MgnMny, long, 16; + űݴ, MgnSubst, MgnSubst, long, 16; + D1, D1Dps, D1Dps, long, 16; + D2, D2Dps, D2Dps, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + D1üҿݾ, D1ovdRepayRqrdAmt, D1ovdRepayRqrdAmt, long, 16; + D2üҿݾ, D2ovdRepayRqrdAmt, D2ovdRepayRqrdAmt, long, 16; + ڱݾ, MloanAmt, MloanAmt, long, 16; + Ĵ㺸, ChgAfPldgRat, ChgAfPldgRat, double, 9.3; + ҿ㺸ݾ, RqrdPldgAmt, RqrdPldgAmt, long, 16; + 㺸ݾ, PdlckAmt, PdlckAmt, long, 16; + 㺸հݾ, OrgPldgSumAmt, OrgPldgSumAmt, long, 16; + δ㺸հݾ, SubPldgSumAmt, SubPldgSumAmt, long, 16; + ſ㺸, CrdtPldgAmtMny, CrdtPldgAmtMny, long, 16; + ſ㺸ݾ, CrdtPldgSubstAmt, CrdtPldgSubstAmt, long, 16; + ſ뼳, Imreq, Imreq, long, 16; + ſ㺸ݾ, CrdtPldgRuseAmt, CrdtPldgRuseAmt, long, 16; + óѱݾ, DpslRestrcAmt, DpslRestrcAmt, long, 16; + ϸŵݾ, PrdaySellAdjstAmt, PrdaySellAdjstAmt, long, 16; + ϸżݾ, PrdayBuyAdjstAmt, PrdayBuyAdjstAmt, long, 16; + ϸŵݾ, CrdaySellAdjstAmt, CrdaySellAdjstAmt, long, 16; + ϸżݾ, CrdayBuyAdjstAmt, CrdayBuyAdjstAmt, long, 16; + ŵݴ㺸ݾ, CslLoanAmtdt1, CslLoanAmtdt1, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CSPAT00600.res b/sample_python/Res/CSPAT00600.res new file mode 100644 index 0000000..fc5f207 --- /dev/null +++ b/sample_python/Res/CSPAT00600.res @@ -0,0 +1,69 @@ +BEGIN_FUNCTION_MAP + .Func,ֹ,CSPAT00600,SERVICE=CSPAT00600,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/07 09:23:39; + BEGIN_DATA_MAP + CSPAT00600InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + end + CSPAT00600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + α׷ȣڵ, PrgmOrdprcPtnCode, PrgmOrdprcPtnCode, char, 2; + ŵɿ, StslAbleYn, StslAbleYn, char, 1; + ŵȣ, StslOrdprcTpCode, StslOrdprcTpCode, char, 1; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ȸȣ, MbrNo, MbrNo, char, 3; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + ڵ, StrtgCode, StrtgCode, char, 6; + ׷ID, GrpId, GrpId, char, 20; + ֹȸ, OrdSeqNo, OrdSeqNo, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + ùȣ, OpDrtnNo, OpDrtnNo, char, 12; + ڿ, LpYn, LpYn, char, 1; + ݴŸű, CvrgTpCode, CvrgTpCode, char, 1; + end + CSPAT00600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ȣ, ShtnIsuNo, ShtnIsuNo, char, 9; + ȣ, MgempNo, MgempNo, char, 9; + ֹݾ, OrdAmt, OrdAmt, long, 16; + ֹȣ, SpareOrdNo, SpareOrdNo, long, 10; + ݴŸϷùȣ, CvrgSeqno, CvrgSeqno, long, 10; + ֹȣ, RsvOrdNo, RsvOrdNo, long, 10; + ǹֹ, SpotOrdQty, SpotOrdQty, long, 16; + ֹ, RuseOrdQty, RuseOrdQty, long, 16; + ֹݾ, MnyOrdAmt, MnyOrdAmt, long, 16; + ֹݾ, SubstOrdAmt, SubstOrdAmt, long, 16; + ֹݾ, RuseOrdAmt, RuseOrdAmt, long, 16; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPAT00600 \ No newline at end of file diff --git a/sample_python/Res/CSPAT00600_1.res b/sample_python/Res/CSPAT00600_1.res new file mode 100644 index 0000000..fc5f207 --- /dev/null +++ b/sample_python/Res/CSPAT00600_1.res @@ -0,0 +1,69 @@ +BEGIN_FUNCTION_MAP + .Func,ֹ,CSPAT00600,SERVICE=CSPAT00600,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/07 09:23:39; + BEGIN_DATA_MAP + CSPAT00600InBlock1,In(*EMPTY*),input; + begin + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + end + CSPAT00600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + α׷ȣڵ, PrgmOrdprcPtnCode, PrgmOrdprcPtnCode, char, 2; + ŵɿ, StslAbleYn, StslAbleYn, char, 1; + ŵȣ, StslOrdprcTpCode, StslOrdprcTpCode, char, 1; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ȸȣ, MbrNo, MbrNo, char, 3; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + ڵ, StrtgCode, StrtgCode, char, 6; + ׷ID, GrpId, GrpId, char, 20; + ֹȸ, OrdSeqNo, OrdSeqNo, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + ùȣ, OpDrtnNo, OpDrtnNo, char, 12; + ڿ, LpYn, LpYn, char, 1; + ݴŸű, CvrgTpCode, CvrgTpCode, char, 1; + end + CSPAT00600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ȣ, ShtnIsuNo, ShtnIsuNo, char, 9; + ȣ, MgempNo, MgempNo, char, 9; + ֹݾ, OrdAmt, OrdAmt, long, 16; + ֹȣ, SpareOrdNo, SpareOrdNo, long, 10; + ݴŸϷùȣ, CvrgSeqno, CvrgSeqno, long, 10; + ֹȣ, RsvOrdNo, RsvOrdNo, long, 10; + ǹֹ, SpotOrdQty, SpotOrdQty, long, 16; + ֹ, RuseOrdQty, RuseOrdQty, long, 16; + ֹݾ, MnyOrdAmt, MnyOrdAmt, long, 16; + ֹݾ, SubstOrdAmt, SubstOrdAmt, long, 16; + ֹݾ, RuseOrdAmt, RuseOrdAmt, long, 16; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPAT00600 \ No newline at end of file diff --git a/sample_python/Res/CSPAT00700.res b/sample_python/Res/CSPAT00700.res new file mode 100644 index 0000000..43e96ad --- /dev/null +++ b/sample_python/Res/CSPAT00700.res @@ -0,0 +1,65 @@ +BEGIN_FUNCTION_MAP + .Func,ֹ,CSPAT00700,SERVICE=CSPAT00700,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/07 09:23:43; + BEGIN_DATA_MAP + CSPAT00700InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + end + CSPAT00700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ڵ, StrtgCode, StrtgCode, char, 6; + ׷ID, GrpId, GrpId, char, 20; + ֹȸ, OrdSeqNo, OrdSeqNo, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + end + CSPAT00700OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, PrntOrdNo, PrntOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ȣ, ShtnIsuNo, ShtnIsuNo, char, 9; + α׷ȣڵ, PrgmOrdprcPtnCode, PrgmOrdprcPtnCode, char, 2; + ŵȣ, StslOrdprcTpCode, StslOrdprcTpCode, char, 1; + ŵɿ, StslAbleYn, StslAbleYn, char, 1; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ݴŸֹ, CvrgOrdTp, CvrgOrdTp, char, 1; + ڿ, LpYn, LpYn, char, 1; + ȣ, MgempNo, MgempNo, char, 9; + ֹݾ, OrdAmt, OrdAmt, long, 16; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹȣ, SpareOrdNo, SpareOrdNo, long, 10; + ݴŸϷùȣ, CvrgSeqno, CvrgSeqno, long, 10; + ֹȣ, RsvOrdNo, RsvOrdNo, long, 10; + ֹݾ, MnyOrdAmt, MnyOrdAmt, long, 16; + ֹݾ, SubstOrdAmt, SubstOrdAmt, long, 16; + ֹݾ, RuseOrdAmt, RuseOrdAmt, long, 16; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPAT00700 \ No newline at end of file diff --git a/sample_python/Res/CSPAT00700_1.res b/sample_python/Res/CSPAT00700_1.res new file mode 100644 index 0000000..43e96ad --- /dev/null +++ b/sample_python/Res/CSPAT00700_1.res @@ -0,0 +1,65 @@ +BEGIN_FUNCTION_MAP + .Func,ֹ,CSPAT00700,SERVICE=CSPAT00700,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/07 09:23:43; + BEGIN_DATA_MAP + CSPAT00700InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + end + CSPAT00700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + ȣڵ, OrdprcPtnCode, OrdprcPtnCode, char, 2; + ֹDZ, OrdCndiTpCode, OrdCndiTpCode, char, 1; + ֹ, OrdPrc, OrdPrc, double, 13.2; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ڵ, StrtgCode, StrtgCode, char, 6; + ׷ID, GrpId, GrpId, char, 20; + ֹȸ, OrdSeqNo, OrdSeqNo, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + end + CSPAT00700OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, PrntOrdNo, PrntOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ȣ, ShtnIsuNo, ShtnIsuNo, char, 9; + α׷ȣڵ, PrgmOrdprcPtnCode, PrgmOrdprcPtnCode, char, 2; + ŵȣ, StslOrdprcTpCode, StslOrdprcTpCode, char, 1; + ŵɿ, StslAbleYn, StslAbleYn, char, 1; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ݴŸֹ, CvrgOrdTp, CvrgOrdTp, char, 1; + ڿ, LpYn, LpYn, char, 1; + ȣ, MgempNo, MgempNo, char, 9; + ֹݾ, OrdAmt, OrdAmt, long, 16; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹȣ, SpareOrdNo, SpareOrdNo, long, 10; + ݴŸϷùȣ, CvrgSeqno, CvrgSeqno, long, 10; + ֹȣ, RsvOrdNo, RsvOrdNo, long, 10; + ֹݾ, MnyOrdAmt, MnyOrdAmt, long, 16; + ֹݾ, SubstOrdAmt, SubstOrdAmt, long, 16; + ֹݾ, RuseOrdAmt, RuseOrdAmt, long, 16; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPAT00700 \ No newline at end of file diff --git a/sample_python/Res/CSPAT00800.res b/sample_python/Res/CSPAT00800.res new file mode 100644 index 0000000..8c7d2f3 --- /dev/null +++ b/sample_python/Res/CSPAT00800.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ֹ,CSPAT00800,SERVICE=CSPAT00800,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/07 09:23:48; + BEGIN_DATA_MAP + CSPAT00800InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + end + CSPAT00800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ׷ID, GrpId, GrpId, char, 20; + ڵ, StrtgCode, StrtgCode, char, 6; + ֹȸ, OrdSeqNo, OrdSeqNo, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + end + CSPAT00800OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, PrntOrdNo, PrntOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ȣ, ShtnIsuNo, ShtnIsuNo, char, 9; + α׷ȣڵ, PrgmOrdprcPtnCode, PrgmOrdprcPtnCode, char, 2; + ŵȣ, StslOrdprcTpCode, StslOrdprcTpCode, char, 1; + ŵɿ, StslAbleYn, StslAbleYn, char, 1; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ݴŸֹ, CvrgOrdTp, CvrgOrdTp, char, 1; + ڿ, LpYn, LpYn, char, 1; + ȣ, MgempNo, MgempNo, char, 9; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹȣ, SpareOrdNo, SpareOrdNo, long, 10; + ݴŸϷùȣ, CvrgSeqno, CvrgSeqno, long, 10; + ֹȣ, RsvOrdNo, RsvOrdNo, long, 10; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPAT00800 \ No newline at end of file diff --git a/sample_python/Res/CSPAT00800_1.res b/sample_python/Res/CSPAT00800_1.res new file mode 100644 index 0000000..8c7d2f3 --- /dev/null +++ b/sample_python/Res/CSPAT00800_1.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ֹ,CSPAT00800,SERVICE=CSPAT00800,ENCRYPT,SIGNATURE,headtype=B,CREATOR=,CREDATE=2011/12/07 09:23:48; + BEGIN_DATA_MAP + CSPAT00800InBlock1,In(*EMPTY*),input; + begin + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + end + CSPAT00800OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrgOrdNo, OrgOrdNo, long, 10; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdQty, OrdQty, long, 16; + Ÿüڵ, CommdaCode, CommdaCode, char, 2; + ׷ID, GrpId, GrpId, char, 20; + ڵ, StrtgCode, StrtgCode, char, 6; + ֹȸ, OrdSeqNo, OrdSeqNo, long, 10; + Ʈȣ, PtflNo, PtflNo, long, 10; + ٽϹȣ, BskNo, BskNo, long, 10; + Ʈġȣ, TrchNo, TrchNo, long, 10; + ۹ȣ, ItemNo, ItemNo, long, 10; + end + CSPAT00800OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ֹȣ, OrdNo, OrdNo, long, 10; + ֹȣ, PrntOrdNo, PrntOrdNo, long, 10; + ֹð, OrdTime, OrdTime, char, 9; + ֹڵ, OrdMktCode, OrdMktCode, char, 2; + ֹڵ, OrdPtnCode, OrdPtnCode, char, 2; + ȣ, ShtnIsuNo, ShtnIsuNo, char, 9; + α׷ȣڵ, PrgmOrdprcPtnCode, PrgmOrdprcPtnCode, char, 2; + ŵȣ, StslOrdprcTpCode, StslOrdprcTpCode, char, 1; + ŵɿ, StslAbleYn, StslAbleYn, char, 1; + ſŷڵ, MgntrnCode, MgntrnCode, char, 3; + , LoanDt, LoanDt, char, 8; + ݴŸֹ, CvrgOrdTp, CvrgOrdTp, char, 1; + ڿ, LpYn, LpYn, char, 1; + ȣ, MgempNo, MgempNo, char, 9; + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ֹȣ, SpareOrdNo, SpareOrdNo, long, 10; + ݴŸϷùȣ, CvrgSeqno, CvrgSeqno, long, 10; + ֹȣ, RsvOrdNo, RsvOrdNo, long, 10; + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPAT00800 \ No newline at end of file diff --git a/sample_python/Res/CSPBQ00200.res b/sample_python/Res/CSPBQ00200.res new file mode 100644 index 0000000..378f48e --- /dev/null +++ b/sample_python/Res/CSPBQ00200.res @@ -0,0 +1,71 @@ +BEGIN_FUNCTION_MAP + .Func,űݷֹɼȸ,CSPBQ00200,SERVICE=CSPBQ00200,headtype=B,CREATOR=̻,CREDATE=2011/12/12 09:22:25; + BEGIN_DATA_MAP + CSPBQ00200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 15.2; + Ÿüڵ, RegCommdaCode, RegCommdaCode, char, 2; + end + CSPBQ00200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 15.2; + Ÿüڵ, RegCommdaCode, RegCommdaCode, char, 2; + end + CSPBQ00200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + ſ㺸ݾ, CrdtPldgRuseAmt, CrdtPldgRuseAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹɱݾ, SubstOrdAbleAmt, SubstOrdAbleAmt, long, 16; + űݾ, MnyMgn, MnyMgn, long, 16; + űݾ, SubstMgn, SubstMgn, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + (D+1), PrsmptDpsD1, PrsmptDpsD1, long, 16; + (D+2), PrsmptDpsD2, PrsmptDpsD2, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + , CmsnRat, CmsnRat, double, 15.5; + ߰¡ݾ, AddLevyAmt, AddLevyAmt, long, 16; + ݾ, RuseObjAmt, RuseObjAmt, long, 16; + ݾ, MnyRuseObjAmt, MnyRuseObjAmt, long, 16; + ̿űݷ, FirmMgnRat, FirmMgnRat, double, 7.4; + ݾ, SubstRuseObjAmt, SubstRuseObjAmt, long, 16; + űݷ, IsuMgnRat, IsuMgnRat, double, 7.4; + űݷ, AcntMgnRat, AcntMgnRat, double, 7.4; + ŷűݷ, TrdMgnrt, TrdMgnrt, double, 7.4; + , Cmsn, Cmsn, long, 16; + űݷ20ۼƮֹɱݾ, MgnRat20pctOrdAbleAmt, MgnRat20pctOrdAbleAmt, long, 16; + űݷ100ۼƮֹɼ?, MgnRat20OrdAbleQty, MgnRat20OrdAbleQty, long, 16; + űݷ30ۼƮֹɱݾ, MgnRat30pctOrdAbleAmt, MgnRat30pctOrdAbleAmt, long, 16; + űݷ30ۼƮֹɼ??, MgnRat30OrdAbleQty, MgnRat30OrdAbleQty, long, 16; + űݷ40ۼƮֹɱݾ, MgnRat40pctOrdAbleAmt, MgnRat40pctOrdAbleAmt, long, 16; + űݷ40ۼƮֹɼ??, MgnRat40OrdAbleQty, MgnRat40OrdAbleQty, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + űݷ100ۼƮֹɼ??, MgnRat100OrdAbleQty, MgnRat100OrdAbleQty, long, 16; + űݷ100ۼƮֹɱݾ?, MgnRat100MnyOrdAbleAmt, MgnRat100MnyOrdAbleAmt, long, 16; + űݷ100ۼƮֹɼ, MgnRat100MnyOrdAbleQty, MgnRat100MnyOrdAbleQty, long, 16; + űݷ20ۼƮ밡ɱݾ, MgnRat20pctRuseAbleAmt, MgnRat20pctRuseAbleAmt, long, 16; + űݷ30ۼƮ밡ɱݾ, MgnRat30pctRuseAbleAmt, MgnRat30pctRuseAbleAmt, long, 16; + űݷ40ۼƮ밡ɱݾ, MgnRat40pctRuseAbleAmt, MgnRat40pctRuseAbleAmt, long, 16; + űݷ100ۼƮ밡ɱݾ, MgnRat100pctRuseAbleAmt, MgnRat100pctRuseAbleAmt, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPBQ00200 \ No newline at end of file diff --git a/sample_python/Res/CSPBQ00200_1.res b/sample_python/Res/CSPBQ00200_1.res new file mode 100644 index 0000000..378f48e --- /dev/null +++ b/sample_python/Res/CSPBQ00200_1.res @@ -0,0 +1,71 @@ +BEGIN_FUNCTION_MAP + .Func,űݷֹɼȸ,CSPBQ00200,SERVICE=CSPBQ00200,headtype=B,CREATOR=̻,CREDATE=2011/12/12 09:22:25; + BEGIN_DATA_MAP + CSPBQ00200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 15.2; + Ÿüڵ, RegCommdaCode, RegCommdaCode, char, 2; + end + CSPBQ00200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + Ÿű, BnsTpCode, BnsTpCode, char, 1; + ¹ȣ, AcntNo, AcntNo, char, 20; + Էºйȣ, InptPwd, InptPwd, char, 8; + ȣ, IsuNo, IsuNo, char, 12; + ֹ, OrdPrc, OrdPrc, double, 15.2; + Ÿüڵ, RegCommdaCode, RegCommdaCode, char, 2; + end + CSPBQ00200OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + , IsuNm, IsuNm, char, 40; + , Dps, Dps, long, 16; + ݾ, SubstAmt, SubstAmt, long, 16; + ſ㺸ݾ, CrdtPldgRuseAmt, CrdtPldgRuseAmt, long, 16; + ֹɱݾ, MnyOrdAbleAmt, MnyOrdAbleAmt, long, 16; + ֹɱݾ, SubstOrdAbleAmt, SubstOrdAbleAmt, long, 16; + űݾ, MnyMgn, MnyMgn, long, 16; + űݾ, SubstMgn, SubstMgn, long, 16; + ŷұݾ, SeOrdAbleAmt, SeOrdAbleAmt, long, 16; + ڽڱݾ, KdqOrdAbleAmt, KdqOrdAbleAmt, long, 16; + (D+1), PrsmptDpsD1, PrsmptDpsD1, long, 16; + (D+2), PrsmptDpsD2, PrsmptDpsD2, long, 16; + ݰɱݾ, MnyoutAbleAmt, MnyoutAbleAmt, long, 16; + ̼ݾ, RcvblAmt, RcvblAmt, long, 16; + , CmsnRat, CmsnRat, double, 15.5; + ߰¡ݾ, AddLevyAmt, AddLevyAmt, long, 16; + ݾ, RuseObjAmt, RuseObjAmt, long, 16; + ݾ, MnyRuseObjAmt, MnyRuseObjAmt, long, 16; + ̿űݷ, FirmMgnRat, FirmMgnRat, double, 7.4; + ݾ, SubstRuseObjAmt, SubstRuseObjAmt, long, 16; + űݷ, IsuMgnRat, IsuMgnRat, double, 7.4; + űݷ, AcntMgnRat, AcntMgnRat, double, 7.4; + ŷűݷ, TrdMgnrt, TrdMgnrt, double, 7.4; + , Cmsn, Cmsn, long, 16; + űݷ20ۼƮֹɱݾ, MgnRat20pctOrdAbleAmt, MgnRat20pctOrdAbleAmt, long, 16; + űݷ100ۼƮֹɼ?, MgnRat20OrdAbleQty, MgnRat20OrdAbleQty, long, 16; + űݷ30ۼƮֹɱݾ, MgnRat30pctOrdAbleAmt, MgnRat30pctOrdAbleAmt, long, 16; + űݷ30ۼƮֹɼ??, MgnRat30OrdAbleQty, MgnRat30OrdAbleQty, long, 16; + űݷ40ۼƮֹɱݾ, MgnRat40pctOrdAbleAmt, MgnRat40pctOrdAbleAmt, long, 16; + űݷ40ۼƮֹɼ??, MgnRat40OrdAbleQty, MgnRat40OrdAbleQty, long, 16; + űݷ100ۼƮֹɱݾ, MgnRat100pctOrdAbleAmt, MgnRat100pctOrdAbleAmt, long, 16; + űݷ100ۼƮֹɼ??, MgnRat100OrdAbleQty, MgnRat100OrdAbleQty, long, 16; + űݷ100ۼƮֹɱݾ?, MgnRat100MnyOrdAbleAmt, MgnRat100MnyOrdAbleAmt, long, 16; + űݷ100ۼƮֹɼ, MgnRat100MnyOrdAbleQty, MgnRat100MnyOrdAbleQty, long, 16; + űݷ20ۼƮ밡ɱݾ, MgnRat20pctRuseAbleAmt, MgnRat20pctRuseAbleAmt, long, 16; + űݷ30ۼƮ밡ɱݾ, MgnRat30pctRuseAbleAmt, MgnRat30pctRuseAbleAmt, long, 16; + űݷ40ۼƮ밡ɱݾ, MgnRat40pctRuseAbleAmt, MgnRat40pctRuseAbleAmt, long, 16; + űݷ100ۼƮ밡ɱݾ, MgnRat100pctRuseAbleAmt, MgnRat100pctRuseAbleAmt, long, 16; + ֹɼ, OrdAbleQty, OrdAbleQty, long, 16; + ֹɱݾ, OrdAbleAmt, OrdAbleAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP +CSPBQ00200 \ No newline at end of file diff --git a/sample_python/Res/CUR.res b/sample_python/Res/CUR.res new file mode 100644 index 0000000..aa78773 --- /dev/null +++ b/sample_python/Res/CUR.res @@ -0,0 +1,24 @@ +BEGIN_FUNCTION_MAP +.Feed, USD ǽð(CUR), CUR, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڻID , base_id , base_id , char, 6; + end + OutBlock,,output; + begin + ۽ð , time , time , char, 6; + ŵȣ , offer , offer , float, 7.2; + żȣ , bid , bid , float, 7.2; + ð , open , open , float, 7.2; + , high , high , float, 7.2; + , low , low , float, 7.2; + üᰡ , price , price , float, 7.2; + ϴ񱸺 , sign , sign , char, 1; + ϴ , change , change , float, 7.2; + , drate , drate , float, 7.2; + Ÿ ߻ð , ctime , ctime , char, 6; + ڻID , base_id , base_id , char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/CUR_1.res b/sample_python/Res/CUR_1.res new file mode 100644 index 0000000..aa78773 --- /dev/null +++ b/sample_python/Res/CUR_1.res @@ -0,0 +1,24 @@ +BEGIN_FUNCTION_MAP +.Feed, USD ǽð(CUR), CUR, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڻID , base_id , base_id , char, 6; + end + OutBlock,,output; + begin + ۽ð , time , time , char, 6; + ŵȣ , offer , offer , float, 7.2; + żȣ , bid , bid , float, 7.2; + ð , open , open , float, 7.2; + , high , high , float, 7.2; + , low , low , float, 7.2; + üᰡ , price , price , float, 7.2; + ϴ񱸺 , sign , sign , char, 1; + ϴ , change , change , float, 7.2; + , drate , drate , float, 7.2; + Ÿ ߻ð , ctime , ctime , char, 6; + ڻID , base_id , base_id , char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/ChartExcel.res b/sample_python/Res/ChartExcel.res new file mode 100644 index 0000000..23af836 --- /dev/null +++ b/sample_python/Res/ChartExcel.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP + .Func,íƮȸ,CHARTEXCEL,headtype=B; + BEGIN_DATA_MAP + ChartExcelInBlock,In(*EMPTY*),input; + begin + ǥID, indexid, indexid, long, 10 + ǥ, indexname, indexname, char, 40; + ǥǼ, indexparam, indexparam, char, 40; + , indexouttype, indexouttype, char, 1; + 屸, market, market, char, 1; + ֱⱸ, period, period, char, 1; + ڵ, shcode, shcode, char, 8; + ǥ ǥ , isexcelout, isexcelout, char, 1; + ϸ, excelfilename, excelfilename, char, 256; + ǽð ͼ ڵ , IsReal, IsReal, char, 1; + end + ChartExcelOutBlock,Out(*EMPTY*),output; + begin + ǥID, indexid, indexid, long, 10; + ڵ尹, rec_cnt, rec_cnt, long, 5; + ȿ ÷ , validdata_cnt, validdata_cnt, long, 2; + end + ChartExcelOutBlock1,Out(*EMPTY*),output,occurs; + begin + , date, date, char, 8; + ð, time, time, char, 6; + ð, open, open, float, 10; + , high, high, float, 10; + , low, low, float, 10; + , close, close, float, 10; + ŷ, volume, volume, float, 12; + ǥ1, value1, value1, float, 10; + ǥ2, value2, value2, float, 10; + ǥ3, value3, value3, float, 10; + ǥ4, value4, value4, float, 10; + ǥ5, value5, value5, float, 10; + ġ, pos, pos, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/ChartExcel_1.res b/sample_python/Res/ChartExcel_1.res new file mode 100644 index 0000000..23af836 --- /dev/null +++ b/sample_python/Res/ChartExcel_1.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP + .Func,íƮȸ,CHARTEXCEL,headtype=B; + BEGIN_DATA_MAP + ChartExcelInBlock,In(*EMPTY*),input; + begin + ǥID, indexid, indexid, long, 10 + ǥ, indexname, indexname, char, 40; + ǥǼ, indexparam, indexparam, char, 40; + , indexouttype, indexouttype, char, 1; + 屸, market, market, char, 1; + ֱⱸ, period, period, char, 1; + ڵ, shcode, shcode, char, 8; + ǥ ǥ , isexcelout, isexcelout, char, 1; + ϸ, excelfilename, excelfilename, char, 256; + ǽð ͼ ڵ , IsReal, IsReal, char, 1; + end + ChartExcelOutBlock,Out(*EMPTY*),output; + begin + ǥID, indexid, indexid, long, 10; + ڵ尹, rec_cnt, rec_cnt, long, 5; + ȿ ÷ , validdata_cnt, validdata_cnt, long, 2; + end + ChartExcelOutBlock1,Out(*EMPTY*),output,occurs; + begin + , date, date, char, 8; + ð, time, time, char, 6; + ð, open, open, float, 10; + , high, high, float, 10; + , low, low, float, 10; + , close, close, float, 10; + ŷ, volume, volume, float, 12; + ǥ1, value1, value1, float, 10; + ǥ2, value2, value2, float, 10; + ǥ3, value3, value3, float, 10; + ǥ4, value4, value4, float, 10; + ǥ5, value5, value5, float, 10; + ġ, pos, pos, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/ChartIndex.res b/sample_python/Res/ChartIndex.res new file mode 100644 index 0000000..9ba059b --- /dev/null +++ b/sample_python/Res/ChartIndex.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,íƮǥȸ,CHARTINDEX,headtype=B; + BEGIN_DATA_MAP + ChartIndexInBlock,In(*EMPTY*),input; + begin + ǥID, indexid, indexid, long, 10 + ǥ, indexname, indexname, char, 40; + ǥǼ, indexparam, indexparam, char, 40; + 屸, market, market, char, 1; + ֱⱸ, period, period, char, 1; + ڵ, shcode, shcode, char, 8; + ûǼ(ִ 500), qrycnt, qrycnt, long, 4; + (nƽ/n), ncnt, ncnt, long, 4; + , sdate, sdate, char, 8; + , edate, edate, char, 8; + ְ ݿ , Isamend, Isamend, char, 1; + , Isgab, Isgab, char, 1; + ǽð ͼ ڵ , IsReal, IsReal, char, 1; + end + ChartIndexOutBlock,Out(*EMPTY*),output; + begin + ǥID, indexid, indexid, long, 10; + ڵ尹, rec_cnt, rec_cnt, long, 5; + ȿ ÷ , validdata_cnt, validdata_cnt, long, 2; + end + ChartIndexOutBlock1,Out(*EMPTY*),output,occurs; + begin + , date, date, char, 8; + ð, time, time, char, 6; + ð, open, open, float, 10; + , high, high, float, 10; + , low, low, float, 10; + , close, close, float, 10; + ŷ, volume, volume, float, 12; + ǥ1, value1, value1, float, 10; + ǥ2, value2, value2, float, 10; + ǥ3, value3, value3, float, 10; + ǥ4, value4, value4, float, 10; + ǥ5, value5, value5, float, 10; + ġ, pos, pos, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/ChartIndex_1.res b/sample_python/Res/ChartIndex_1.res new file mode 100644 index 0000000..9ba059b --- /dev/null +++ b/sample_python/Res/ChartIndex_1.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,íƮǥȸ,CHARTINDEX,headtype=B; + BEGIN_DATA_MAP + ChartIndexInBlock,In(*EMPTY*),input; + begin + ǥID, indexid, indexid, long, 10 + ǥ, indexname, indexname, char, 40; + ǥǼ, indexparam, indexparam, char, 40; + 屸, market, market, char, 1; + ֱⱸ, period, period, char, 1; + ڵ, shcode, shcode, char, 8; + ûǼ(ִ 500), qrycnt, qrycnt, long, 4; + (nƽ/n), ncnt, ncnt, long, 4; + , sdate, sdate, char, 8; + , edate, edate, char, 8; + ְ ݿ , Isamend, Isamend, char, 1; + , Isgab, Isgab, char, 1; + ǽð ͼ ڵ , IsReal, IsReal, char, 1; + end + ChartIndexOutBlock,Out(*EMPTY*),output; + begin + ǥID, indexid, indexid, long, 10; + ڵ尹, rec_cnt, rec_cnt, long, 5; + ȿ ÷ , validdata_cnt, validdata_cnt, long, 2; + end + ChartIndexOutBlock1,Out(*EMPTY*),output,occurs; + begin + , date, date, char, 8; + ð, time, time, char, 6; + ð, open, open, float, 10; + , high, high, float, 10; + , low, low, float, 10; + , close, close, float, 10; + ŷ, volume, volume, float, 12; + ǥ1, value1, value1, float, 10; + ǥ2, value2, value2, float, 10; + ǥ3, value3, value3, float, 10; + ǥ4, value4, value4, float, 10; + ǥ5, value5, value5, float, 10; + ġ, pos, pos, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/DH1.res b/sample_python/Res/DH1.res new file mode 100644 index 0000000..f4a8c7e --- /dev/null +++ b/sample_python/Res/DH1.res @@ -0,0 +1,56 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIðܴϰȣܷ(DH1), DH1, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰȣð, dan_hotime, dan_hotime, char, 6; +ðܴϰ屸, dan_hstatus, dan_hstatus, char, 2; +ðܴϰŵȣ1, dan_offerho1, dan_offerho1, long, 8; +ðܴϰżȣ1, dan_bidho1, dan_bidho1, long, 8; +ðܴϰŵȣܷ1, dan_offerrem1, dan_offerrem1, long, 12; +ðܴϰżȣܷ1, dan_bidrem1, dan_bidrem1, long, 12; +ðܴϰŵ1, dan_preoffercha1, dan_preoffercha1, long, 12; +ðܴϰż1, dan_prebidcha1, dan_prebidcha1, long, 12; +ðܴϰŵȣ2, dan_offerho2, dan_offerho2, long, 8; +ðܴϰżȣ2, dan_bidho2, dan_bidho2, long, 8; +ðܴϰŵȣܷ2, dan_offerrem2, dan_offerrem2, long, 12; +ðܴϰżȣܷ2, dan_bidrem2, dan_bidrem2, long, 12; +ðܴϰŵ2, dan_preoffercha2, dan_preoffercha2, long, 12; +ðܴϰż2, dan_prebidcha2, dan_prebidcha2, long, 12; +ðܴϰŵȣ3, dan_offerho3, dan_offerho3, long, 8; +ðܴϰżȣ3, dan_bidho3, dan_bidho3, long, 8; +ðܴϰŵȣܷ3, dan_offerrem3, dan_offerrem3, long, 12; +ðܴϰżȣܷ3, dan_bidrem3, dan_bidrem3, long, 12; +ðܴϰŵ3, dan_preoffercha3, dan_preoffercha3, long, 12; +ðܴϰż3, dan_prebidcha3, dan_prebidcha3, long, 12; +ðܴϰŵȣ4, dan_offerho4, dan_offerho4, long, 8; +ðܴϰżȣ4, dan_bidho4, dan_bidho4, long, 8; +ðܴϰŵȣܷ4, dan_offerrem4, dan_offerrem4, long, 12; +ðܴϰżȣܷ4, dan_bidrem4, dan_bidrem4, long, 12; +ðܴϰŵ4, dan_preoffercha4, dan_preoffercha4, long, 12; +ðܴϰż4, dan_prebidcha4, dan_prebidcha4, long, 12; +ðܴϰŵȣ5, dan_offerho5, dan_offerho5, long, 8; +ðܴϰżȣ5, dan_bidho5, dan_bidho5, long, 8; +ðܴϰŵȣܷ5, dan_offerrem5, dan_offerrem5, long, 12; +ðܴϰżȣܷ5, dan_bidrem5, dan_bidrem5, long, 12; +ðܴϰŵ5, dan_preoffercha5, dan_preoffercha5, long, 12; +ðܴϰż5, dan_prebidcha5, dan_prebidcha5, long, 12; +ðܴϰѸŵȣܷ, dan_totofferrem, dan_totofferrem, long, 12; +ðܴϰѸżȣܷ, dan_totbidrem, dan_totbidrem, long, 12; +ðܴϰŵȣѴ,dan_preoffercha,dan_preoffercha, long, 12; +ðܴϰżȣѴ,dan_prebidcha, dan_prebidcha, long, 12; +ðܴϰüᰡ, dan_yeprice, dan_yeprice, long, 8; +ðܴϰü, dan_yevolume, dan_yevolume, long, 12; +ðܴϰ񱸺,dan_preysign, dan_preysign, char, 1; +ðܴϰ, dan_preychange, dan_preychange, long, 8; +ðܴϰϰ񱸺,dan_jnilysign, dan_jnilysign, char, 1; +ðܴϰϰ, dan_jnilychange, dan_jnilychange, long, 8; + ڵ, shcode, shcode, char, 6; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/DH1_1.res b/sample_python/Res/DH1_1.res new file mode 100644 index 0000000..f4a8c7e --- /dev/null +++ b/sample_python/Res/DH1_1.res @@ -0,0 +1,56 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIðܴϰȣܷ(DH1), DH1, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰȣð, dan_hotime, dan_hotime, char, 6; +ðܴϰ屸, dan_hstatus, dan_hstatus, char, 2; +ðܴϰŵȣ1, dan_offerho1, dan_offerho1, long, 8; +ðܴϰżȣ1, dan_bidho1, dan_bidho1, long, 8; +ðܴϰŵȣܷ1, dan_offerrem1, dan_offerrem1, long, 12; +ðܴϰżȣܷ1, dan_bidrem1, dan_bidrem1, long, 12; +ðܴϰŵ1, dan_preoffercha1, dan_preoffercha1, long, 12; +ðܴϰż1, dan_prebidcha1, dan_prebidcha1, long, 12; +ðܴϰŵȣ2, dan_offerho2, dan_offerho2, long, 8; +ðܴϰżȣ2, dan_bidho2, dan_bidho2, long, 8; +ðܴϰŵȣܷ2, dan_offerrem2, dan_offerrem2, long, 12; +ðܴϰżȣܷ2, dan_bidrem2, dan_bidrem2, long, 12; +ðܴϰŵ2, dan_preoffercha2, dan_preoffercha2, long, 12; +ðܴϰż2, dan_prebidcha2, dan_prebidcha2, long, 12; +ðܴϰŵȣ3, dan_offerho3, dan_offerho3, long, 8; +ðܴϰżȣ3, dan_bidho3, dan_bidho3, long, 8; +ðܴϰŵȣܷ3, dan_offerrem3, dan_offerrem3, long, 12; +ðܴϰżȣܷ3, dan_bidrem3, dan_bidrem3, long, 12; +ðܴϰŵ3, dan_preoffercha3, dan_preoffercha3, long, 12; +ðܴϰż3, dan_prebidcha3, dan_prebidcha3, long, 12; +ðܴϰŵȣ4, dan_offerho4, dan_offerho4, long, 8; +ðܴϰżȣ4, dan_bidho4, dan_bidho4, long, 8; +ðܴϰŵȣܷ4, dan_offerrem4, dan_offerrem4, long, 12; +ðܴϰżȣܷ4, dan_bidrem4, dan_bidrem4, long, 12; +ðܴϰŵ4, dan_preoffercha4, dan_preoffercha4, long, 12; +ðܴϰż4, dan_prebidcha4, dan_prebidcha4, long, 12; +ðܴϰŵȣ5, dan_offerho5, dan_offerho5, long, 8; +ðܴϰżȣ5, dan_bidho5, dan_bidho5, long, 8; +ðܴϰŵȣܷ5, dan_offerrem5, dan_offerrem5, long, 12; +ðܴϰżȣܷ5, dan_bidrem5, dan_bidrem5, long, 12; +ðܴϰŵ5, dan_preoffercha5, dan_preoffercha5, long, 12; +ðܴϰż5, dan_prebidcha5, dan_prebidcha5, long, 12; +ðܴϰѸŵȣܷ, dan_totofferrem, dan_totofferrem, long, 12; +ðܴϰѸżȣܷ, dan_totbidrem, dan_totbidrem, long, 12; +ðܴϰŵȣѴ,dan_preoffercha,dan_preoffercha, long, 12; +ðܴϰżȣѴ,dan_prebidcha, dan_prebidcha, long, 12; +ðܴϰüᰡ, dan_yeprice, dan_yeprice, long, 8; +ðܴϰü, dan_yevolume, dan_yevolume, long, 12; +ðܴϰ񱸺,dan_preysign, dan_preysign, char, 1; +ðܴϰ, dan_preychange, dan_preychange, long, 8; +ðܴϰϰ񱸺,dan_jnilysign, dan_jnilysign, char, 1; +ðܴϰϰ, dan_jnilychange, dan_jnilychange, long, 8; + ڵ, shcode, shcode, char, 6; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/DHA.res b/sample_python/Res/DHA.res new file mode 100644 index 0000000..c190271 --- /dev/null +++ b/sample_python/Res/DHA.res @@ -0,0 +1,56 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQðܴϰȣܷ(DHA), DHA, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰȣð, dan_hotime, dan_hotime, char, 6; +ðܴϰ屸, dan_hstatus, dan_hstatus, char, 2; +ðܴϰŵȣ1, dan_offerho1, dan_offerho1, long, 8; +ðܴϰżȣ1, dan_bidho1, dan_bidho1, long, 8; +ðܴϰŵȣܷ1, dan_offerrem1, dan_offerrem1, long, 12; +ðܴϰżȣܷ1, dan_bidrem1, dan_bidrem1, long, 12; +ðܴϰŵ1, dan_preoffercha1, dan_preoffercha1, long, 12; +ðܴϰż1, dan_prebidcha1, dan_prebidcha1, long, 12; +ðܴϰŵȣ2, dan_offerho2, dan_offerho2, long, 8; +ðܴϰżȣ2, dan_bidho2, dan_bidho2, long, 8; +ðܴϰŵȣܷ2, dan_offerrem2, dan_offerrem2, long, 12; +ðܴϰżȣܷ2, dan_bidrem2, dan_bidrem2, long, 12; +ðܴϰŵ2, dan_preoffercha2, dan_preoffercha2, long, 12; +ðܴϰż2, dan_prebidcha2, dan_prebidcha2, long, 12; +ðܴϰŵȣ3, dan_offerho3, dan_offerho3, long, 8; +ðܴϰżȣ3, dan_bidho3, dan_bidho3, long, 8; +ðܴϰŵȣܷ3, dan_offerrem3, dan_offerrem3, long, 12; +ðܴϰżȣܷ3, dan_bidrem3, dan_bidrem3, long, 12; +ðܴϰŵ3, dan_preoffercha3, dan_preoffercha3, long, 12; +ðܴϰż3, dan_prebidcha3, dan_prebidcha3, long, 12; +ðܴϰŵȣ4, dan_offerho4, dan_offerho4, long, 8; +ðܴϰżȣ4, dan_bidho4, dan_bidho4, long, 8; +ðܴϰŵȣܷ4, dan_offerrem4, dan_offerrem4, long, 12; +ðܴϰżȣܷ4, dan_bidrem4, dan_bidrem4, long, 12; +ðܴϰŵ4, dan_preoffercha4, dan_preoffercha4, long, 12; +ðܴϰż4, dan_prebidcha4, dan_prebidcha4, long, 12; +ðܴϰŵȣ5, dan_offerho5, dan_offerho5, long, 8; +ðܴϰżȣ5, dan_bidho5, dan_bidho5, long, 8; +ðܴϰŵȣܷ5, dan_offerrem5, dan_offerrem5, long, 12; +ðܴϰżȣܷ5, dan_bidrem5, dan_bidrem5, long, 12; +ðܴϰŵ5, dan_preoffercha5, dan_preoffercha5, long, 12; +ðܴϰż5, dan_prebidcha5, dan_prebidcha5, long, 12; +ðܴϰѸŵȣܷ, dan_totofferrem, dan_totofferrem, long, 12; +ðܴϰѸżȣܷ, dan_totbidrem, dan_totbidrem, long, 12; +ðܴϰŵȣѴ,dan_preoffercha,dan_preoffercha, long, 12; +ðܴϰżȣѴ,dan_prebidcha, dan_prebidcha, long, 12; +ðܴϰüᰡ, dan_yeprice, dan_yeprice, long, 8; +ðܴϰü, dan_yevolume, dan_yevolume, long, 12; +ðܴϰ񱸺,dan_preysign, dan_preysign, char, 1; +ðܴϰ, dan_preychange, dan_preychange, long, 8; +ðܴϰϰ񱸺,dan_jnilysign, dan_jnilysign, char, 1; +ðܴϰϰ, dan_jnilychange, dan_jnilychange, long, 8; + ڵ, shcode, shcode, char, 6; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/DHA_1.res b/sample_python/Res/DHA_1.res new file mode 100644 index 0000000..c190271 --- /dev/null +++ b/sample_python/Res/DHA_1.res @@ -0,0 +1,56 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQðܴϰȣܷ(DHA), DHA, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰȣð, dan_hotime, dan_hotime, char, 6; +ðܴϰ屸, dan_hstatus, dan_hstatus, char, 2; +ðܴϰŵȣ1, dan_offerho1, dan_offerho1, long, 8; +ðܴϰżȣ1, dan_bidho1, dan_bidho1, long, 8; +ðܴϰŵȣܷ1, dan_offerrem1, dan_offerrem1, long, 12; +ðܴϰżȣܷ1, dan_bidrem1, dan_bidrem1, long, 12; +ðܴϰŵ1, dan_preoffercha1, dan_preoffercha1, long, 12; +ðܴϰż1, dan_prebidcha1, dan_prebidcha1, long, 12; +ðܴϰŵȣ2, dan_offerho2, dan_offerho2, long, 8; +ðܴϰżȣ2, dan_bidho2, dan_bidho2, long, 8; +ðܴϰŵȣܷ2, dan_offerrem2, dan_offerrem2, long, 12; +ðܴϰżȣܷ2, dan_bidrem2, dan_bidrem2, long, 12; +ðܴϰŵ2, dan_preoffercha2, dan_preoffercha2, long, 12; +ðܴϰż2, dan_prebidcha2, dan_prebidcha2, long, 12; +ðܴϰŵȣ3, dan_offerho3, dan_offerho3, long, 8; +ðܴϰżȣ3, dan_bidho3, dan_bidho3, long, 8; +ðܴϰŵȣܷ3, dan_offerrem3, dan_offerrem3, long, 12; +ðܴϰżȣܷ3, dan_bidrem3, dan_bidrem3, long, 12; +ðܴϰŵ3, dan_preoffercha3, dan_preoffercha3, long, 12; +ðܴϰż3, dan_prebidcha3, dan_prebidcha3, long, 12; +ðܴϰŵȣ4, dan_offerho4, dan_offerho4, long, 8; +ðܴϰżȣ4, dan_bidho4, dan_bidho4, long, 8; +ðܴϰŵȣܷ4, dan_offerrem4, dan_offerrem4, long, 12; +ðܴϰżȣܷ4, dan_bidrem4, dan_bidrem4, long, 12; +ðܴϰŵ4, dan_preoffercha4, dan_preoffercha4, long, 12; +ðܴϰż4, dan_prebidcha4, dan_prebidcha4, long, 12; +ðܴϰŵȣ5, dan_offerho5, dan_offerho5, long, 8; +ðܴϰżȣ5, dan_bidho5, dan_bidho5, long, 8; +ðܴϰŵȣܷ5, dan_offerrem5, dan_offerrem5, long, 12; +ðܴϰżȣܷ5, dan_bidrem5, dan_bidrem5, long, 12; +ðܴϰŵ5, dan_preoffercha5, dan_preoffercha5, long, 12; +ðܴϰż5, dan_prebidcha5, dan_prebidcha5, long, 12; +ðܴϰѸŵȣܷ, dan_totofferrem, dan_totofferrem, long, 12; +ðܴϰѸżȣܷ, dan_totbidrem, dan_totbidrem, long, 12; +ðܴϰŵȣѴ,dan_preoffercha,dan_preoffercha, long, 12; +ðܴϰżȣѴ,dan_prebidcha, dan_prebidcha, long, 12; +ðܴϰüᰡ, dan_yeprice, dan_yeprice, long, 8; +ðܴϰü, dan_yevolume, dan_yevolume, long, 12; +ðܴϰ񱸺,dan_preysign, dan_preysign, char, 1; +ðܴϰ, dan_preychange, dan_preychange, long, 8; +ðܴϰϰ񱸺,dan_jnilysign, dan_jnilysign, char, 1; +ðܴϰϰ, dan_jnilychange, dan_jnilychange, long, 8; + ڵ, shcode, shcode, char, 6; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/DK3.res b/sample_python/Res/DK3.res new file mode 100644 index 0000000..2f19760 --- /dev/null +++ b/sample_python/Res/DK3.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQðܴϰü(DK3), DK3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰüð, dan_chetime, dan_chetime, char, 6; +ðܴϰϴ񱸺, dan_sign, dan_sign, char, 1; +ðܴϰϴ, dan_change, dan_change, long, 8; +ðܴϰ, dan_drate, dan_drate, float, 6.2; +ðܴϰ簡, dan_price, dan_price, long, 8; +ðܴϰðð, dan_opentime, dan_opentime, char, 6; +ðܴϰð, dan_open, dan_open, long, 8; +ðܴϰð, dan_hightime, dan_hightime, char, 6; +ðܴϰ, dan_high, dan_high, long, 8; +ðܴϰð, dan_lowtime, dan_lowtime, char, 6; +ðܴϰ, dan_low, dan_low, long, 8; +ðܴϰüᱸ, dan_cgubun, dan_cgubun, char, 1; +ðܴϰüᷮ, dan_cvolume, dan_cvolume, long, 8; +ðܴϰŷ, dan_volume, dan_volume, long, 12; +ðܴϰŷ, dan_value, dan_value, long, 12; +ðܴϰŵüᷮ, dan_mdvolume, dan_mdvolume, long, 12; +ðܴϰŵüǼ, dan_mdchecnt, dan_mdchecnt, long, 8; +ðܴϰżüᷮ, dan_msvolume, dan_msvolume, long, 12; +ðܴϰżüǼ, dan_mschecnt, dan_mschecnt, long, 8; +ðܴϰŷ, dan_prevolume, dan_prevolume, long, 8; +ðܴϰü, dan_precvolume, dan_precvolume, long, 8; +ðܴϰüᰭ, dan_cpower, dan_cpower, float, 9.2; +ðܴϰ, dan_status, dan_status, char, 2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/DK3_1.res b/sample_python/Res/DK3_1.res new file mode 100644 index 0000000..2f19760 --- /dev/null +++ b/sample_python/Res/DK3_1.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQðܴϰü(DK3), DK3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰüð, dan_chetime, dan_chetime, char, 6; +ðܴϰϴ񱸺, dan_sign, dan_sign, char, 1; +ðܴϰϴ, dan_change, dan_change, long, 8; +ðܴϰ, dan_drate, dan_drate, float, 6.2; +ðܴϰ簡, dan_price, dan_price, long, 8; +ðܴϰðð, dan_opentime, dan_opentime, char, 6; +ðܴϰð, dan_open, dan_open, long, 8; +ðܴϰð, dan_hightime, dan_hightime, char, 6; +ðܴϰ, dan_high, dan_high, long, 8; +ðܴϰð, dan_lowtime, dan_lowtime, char, 6; +ðܴϰ, dan_low, dan_low, long, 8; +ðܴϰüᱸ, dan_cgubun, dan_cgubun, char, 1; +ðܴϰüᷮ, dan_cvolume, dan_cvolume, long, 8; +ðܴϰŷ, dan_volume, dan_volume, long, 12; +ðܴϰŷ, dan_value, dan_value, long, 12; +ðܴϰŵüᷮ, dan_mdvolume, dan_mdvolume, long, 12; +ðܴϰŵüǼ, dan_mdchecnt, dan_mdchecnt, long, 8; +ðܴϰżüᷮ, dan_msvolume, dan_msvolume, long, 12; +ðܴϰżüǼ, dan_mschecnt, dan_mschecnt, long, 8; +ðܴϰŷ, dan_prevolume, dan_prevolume, long, 8; +ðܴϰü, dan_precvolume, dan_precvolume, long, 8; +ðܴϰüᰭ, dan_cpower, dan_cpower, float, 9.2; +ðܴϰ, dan_status, dan_status, char, 2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/DS3.res b/sample_python/Res/DS3.res new file mode 100644 index 0000000..adc9b50 --- /dev/null +++ b/sample_python/Res/DS3.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIðܴϰü(DS3), DS3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰüð, dan_chetime, dan_chetime, char, 6; +ðܴϰϴ񱸺, dan_sign, dan_sign, char, 1; +ðܴϰϴ, dan_change, dan_change, long, 8; +ðܴϰ, dan_drate, dan_drate, float, 6.2; +ðܴϰ簡, dan_price, dan_price, long, 8; +ðܴϰðð, dan_opentime, dan_opentime, char, 6; +ðܴϰð, dan_open, dan_open, long, 8; +ðܴϰð, dan_hightime, dan_hightime, char, 6; +ðܴϰ, dan_high, dan_high, long, 8; +ðܴϰð, dan_lowtime, dan_lowtime, char, 6; +ðܴϰ, dan_low, dan_low, long, 8; +ðܴϰüᱸ, dan_cgubun, dan_cgubun, char, 1; +ðܴϰüᷮ, dan_cvolume, dan_cvolume, long, 8; +ðܴϰŷ, dan_volume, dan_volume, long, 12; +ðܴϰŷ, dan_value, dan_value, long, 12; +ðܴϰŵüᷮ, dan_mdvolume, dan_mdvolume, long, 12; +ðܴϰŵüǼ, dan_mdchecnt, dan_mdchecnt, long, 8; +ðܴϰżüᷮ, dan_msvolume, dan_msvolume, long, 12; +ðܴϰżüǼ, dan_mschecnt, dan_mschecnt, long, 8; +ðܴϰŷ, dan_prevolume, dan_prevolume, long, 8; +ðܴϰü, dan_precvolume, dan_precvolume, long, 8; +ðܴϰüᰭ, dan_cpower, dan_cpower, float, 9.2; +ðܴϰ, dan_status, dan_status, char, 2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/DS3_1.res b/sample_python/Res/DS3_1.res new file mode 100644 index 0000000..adc9b50 --- /dev/null +++ b/sample_python/Res/DS3_1.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIðܴϰü(DS3), DS3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin +ðܴϰüð, dan_chetime, dan_chetime, char, 6; +ðܴϰϴ񱸺, dan_sign, dan_sign, char, 1; +ðܴϰϴ, dan_change, dan_change, long, 8; +ðܴϰ, dan_drate, dan_drate, float, 6.2; +ðܴϰ簡, dan_price, dan_price, long, 8; +ðܴϰðð, dan_opentime, dan_opentime, char, 6; +ðܴϰð, dan_open, dan_open, long, 8; +ðܴϰð, dan_hightime, dan_hightime, char, 6; +ðܴϰ, dan_high, dan_high, long, 8; +ðܴϰð, dan_lowtime, dan_lowtime, char, 6; +ðܴϰ, dan_low, dan_low, long, 8; +ðܴϰüᱸ, dan_cgubun, dan_cgubun, char, 1; +ðܴϰüᷮ, dan_cvolume, dan_cvolume, long, 8; +ðܴϰŷ, dan_volume, dan_volume, long, 12; +ðܴϰŷ, dan_value, dan_value, long, 12; +ðܴϰŵüᷮ, dan_mdvolume, dan_mdvolume, long, 12; +ðܴϰŵüǼ, dan_mdchecnt, dan_mdchecnt, long, 8; +ðܴϰżüᷮ, dan_msvolume, dan_msvolume, long, 12; +ðܴϰżüǼ, dan_mschecnt, dan_mschecnt, long, 8; +ðܴϰŷ, dan_prevolume, dan_prevolume, long, 8; +ðܴϰü, dan_precvolume, dan_precvolume, long, 8; +ðܴϰüᰭ, dan_cpower, dan_cpower, float, 9.2; +ðܴϰ, dan_status, dan_status, char, 2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/DVI.res b/sample_python/Res/DVI.res new file mode 100644 index 0000000..3792c79 --- /dev/null +++ b/sample_python/Res/DVI.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ðܴϰVIߵ(DVI), DVI, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ(KEY), shcode, shcode, char, 6; + end + OutBlock,,output; + begin + (0: 1:ߵ 2:ߵ 3:&) , vi_gubun , vi_gubun , char, 1; + VIߵذ , svi_recprice, svi_recprice, long, 8; + VIߵذ , dvi_recprice, dvi_recprice, long, 8; + VIߵ , vi_trgprice , vi_trgprice , long, 8; + ڵ(KEY) , shcode , shcode , char, 6; + ڵ(̻) , ref_shcode, ref_shcode, char, 6; + ð , time, time, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/DVI_1.res b/sample_python/Res/DVI_1.res new file mode 100644 index 0000000..3792c79 --- /dev/null +++ b/sample_python/Res/DVI_1.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ðܴϰVIߵ(DVI), DVI, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ(KEY), shcode, shcode, char, 6; + end + OutBlock,,output; + begin + (0: 1:ߵ 2:ߵ 3:&) , vi_gubun , vi_gubun , char, 1; + VIߵذ , svi_recprice, svi_recprice, long, 8; + VIߵذ , dvi_recprice, dvi_recprice, long, 8; + VIߵ , vi_trgprice , vi_trgprice , long, 8; + ڵ(KEY) , shcode , shcode , char, 6; + ڵ(̻) , ref_shcode, ref_shcode, char, 6; + ð , time, time, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/EC0.res b/sample_python/Res/EC0.res new file mode 100644 index 0000000..3b16655 --- /dev/null +++ b/sample_python/Res/EC0.res @@ -0,0 +1,42 @@ +BEGIN_FUNCTION_MAP +.Feed, EUREXKP200ɼǼü(EC0), EC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð(24ð), chetime, chetime, char, 6; + üð(36ð), chetime1, chetime1, char, 6; + 񱸺, sign, sign, char, 1; + , change, change, float, 6.2; + ص, drate, drate, float, 6.2; + 簡, price, price, float, 6.2; + ð, open, open, float, 6.2; + , high, high, float, 6.2; + , low, low, float, 6.2; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ(), value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ(),mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ(),mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + ŵȣ1, offerho1, offerho1, float, 6.2; + żȣ1, bidho1, bidho1, float, 6.2; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, float, 6.2; + KOSPI, eqva, eqva, float, 7.2; + ̷а, theoryprice, theoryprice, float, 6.2; + 纯, impv, impv, float, 6.2; + ̰, openyakcha, openyakcha, long, 8; + ðġ, timevalue, timevalue, float, 6.2; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/EC0_1.res b/sample_python/Res/EC0_1.res new file mode 100644 index 0000000..3b16655 --- /dev/null +++ b/sample_python/Res/EC0_1.res @@ -0,0 +1,42 @@ +BEGIN_FUNCTION_MAP +.Feed, EUREXKP200ɼǼü(EC0), EC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð(24ð), chetime, chetime, char, 6; + üð(36ð), chetime1, chetime1, char, 6; + 񱸺, sign, sign, char, 1; + , change, change, float, 6.2; + ص, drate, drate, float, 6.2; + 簡, price, price, float, 6.2; + ð, open, open, float, 6.2; + , high, high, float, 6.2; + , low, low, float, 6.2; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ(), value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ(),mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ(),mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + ŵȣ1, offerho1, offerho1, float, 6.2; + żȣ1, bidho1, bidho1, float, 6.2; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, float, 6.2; + KOSPI, eqva, eqva, float, 7.2; + ̷а, theoryprice, theoryprice, float, 6.2; + 纯, impv, impv, float, 6.2; + ̰, openyakcha, openyakcha, long, 8; + ðġ, timevalue, timevalue, float, 6.2; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/EH0.res b/sample_python/Res/EH0.res new file mode 100644 index 0000000..59390e8 --- /dev/null +++ b/sample_python/Res/EH0.res @@ -0,0 +1,50 @@ +BEGIN_FUNCTION_MAP +.Feed, EUREXKP200ɼǼȣ(EH0), EH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + ȣð(24ð), hotime, hotime, char, 6; + ȣð(36ð), hotime1, hotime1, char, 6; + ŵȣ1, offerho1, offerho1, double, 6.2; + żȣ1, bidho1, bidho1, double, 6.2; + ŵȣ1, offerrem1, offerrem1, long, 7; + żȣ1, bidrem1, bidrem1, long, 7; + ŵȣǼ1(), offercnt1, offercnt1, long, 5; + żȣǼ1(), bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, double, 6.2; + żȣ2, bidho2, bidho2, double, 6.2; + ŵȣ2, offerrem2, offerrem2, long, 7; + żȣ2, bidrem2, bidrem2, long, 7; + ŵȣǼ2(), offercnt2, offercnt2, long, 5; + żȣǼ2(), bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, double, 6.2; + żȣ3, bidho3, bidho3, double, 6.2; + ŵȣ3, offerrem3, offerrem3, long, 7; + żȣ3, bidrem3, bidrem3, long, 7; + ŵȣǼ3(), offercnt3, offercnt3, long, 5; + żȣǼ3(), bidcnt3, bidcnt3, long, 5; + ŵȣ4(), offerho4, offerho4, double, 6.2; + żȣ4(), bidho4, bidho4, double, 6.2; + ŵȣ4(), offerrem4, offerrem4, long, 7; + żȣ4(), bidrem4, bidrem4, long, 7; + ŵȣǼ4(), offercnt4, offercnt4, long, 5; + żȣǼ4(), bidcnt4, bidcnt4, long, 5; + ŵȣ5(), offerho5, offerho5, double, 6.2; + żȣ5(), bidho5, bidho5, double, 6.2; + ŵȣ5(), offerrem5, offerrem5, long, 7; + żȣ5(), bidrem5, bidrem5, long, 7; + ŵȣǼ5(), offercnt5, offercnt5, long, 5; + żȣǼ5(), bidcnt5, bidcnt5, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 7; + żȣѼ, totbidrem, totbidrem, long, 7; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ڵ, optcode, optcode, char, 8; + ϰȣ, danhochk, danhochk, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/EH0_1.res b/sample_python/Res/EH0_1.res new file mode 100644 index 0000000..59390e8 --- /dev/null +++ b/sample_python/Res/EH0_1.res @@ -0,0 +1,50 @@ +BEGIN_FUNCTION_MAP +.Feed, EUREXKP200ɼǼȣ(EH0), EH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + ȣð(24ð), hotime, hotime, char, 6; + ȣð(36ð), hotime1, hotime1, char, 6; + ŵȣ1, offerho1, offerho1, double, 6.2; + żȣ1, bidho1, bidho1, double, 6.2; + ŵȣ1, offerrem1, offerrem1, long, 7; + żȣ1, bidrem1, bidrem1, long, 7; + ŵȣǼ1(), offercnt1, offercnt1, long, 5; + żȣǼ1(), bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, double, 6.2; + żȣ2, bidho2, bidho2, double, 6.2; + ŵȣ2, offerrem2, offerrem2, long, 7; + żȣ2, bidrem2, bidrem2, long, 7; + ŵȣǼ2(), offercnt2, offercnt2, long, 5; + żȣǼ2(), bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, double, 6.2; + żȣ3, bidho3, bidho3, double, 6.2; + ŵȣ3, offerrem3, offerrem3, long, 7; + żȣ3, bidrem3, bidrem3, long, 7; + ŵȣǼ3(), offercnt3, offercnt3, long, 5; + żȣǼ3(), bidcnt3, bidcnt3, long, 5; + ŵȣ4(), offerho4, offerho4, double, 6.2; + żȣ4(), bidho4, bidho4, double, 6.2; + ŵȣ4(), offerrem4, offerrem4, long, 7; + żȣ4(), bidrem4, bidrem4, long, 7; + ŵȣǼ4(), offercnt4, offercnt4, long, 5; + żȣǼ4(), bidcnt4, bidcnt4, long, 5; + ŵȣ5(), offerho5, offerho5, double, 6.2; + żȣ5(), bidho5, bidho5, double, 6.2; + ŵȣ5(), offerrem5, offerrem5, long, 7; + żȣ5(), bidrem5, bidrem5, long, 7; + ŵȣǼ5(), offercnt5, offercnt5, long, 5; + żȣǼ5(), bidcnt5, bidcnt5, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 7; + żȣѼ, totbidrem, totbidrem, long, 7; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ڵ, optcode, optcode, char, 8; + ϰȣ, danhochk, danhochk, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/ESN.res b/sample_python/Res/ESN.res new file mode 100644 index 0000000..bc220de --- /dev/null +++ b/sample_python/Res/ESN.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWǥΰ(ESN), ESN, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ð, time, time, char, 6; + ̷а, theoryprice, theoryprice, float, 10.2; + Ÿ, delt, delt, float, 7.6; + , gama, gama, float, 7.6; + Ÿ, ceta, ceta, float, 12.6; + , vega, vega, float, 12.6; + ο, rhox, rhox, float, 12.6; + 纯, impv, impv, float, 5.2; + E., egearing, egearing, float, 8.2; + ڵ, shcode, shcode, char, 6; + ELW簡, elwclose, elwclose, long, 8; + ELWϴ񱸺, sign, sign, char, 1; + ELWϴ, change, change, long, 8; + , date, date, char, 8; + ƽȯ, tickvalue, tickvalue, float, 10.2; + LP纯, lp_impv, lp_impv, float, 5.2; + end + END_DATA_MAP +END_FUNCTION_MAP +ESN \ No newline at end of file diff --git a/sample_python/Res/ESN_1.res b/sample_python/Res/ESN_1.res new file mode 100644 index 0000000..bc220de --- /dev/null +++ b/sample_python/Res/ESN_1.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWǥΰ(ESN), ESN, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ð, time, time, char, 6; + ̷а, theoryprice, theoryprice, float, 10.2; + Ÿ, delt, delt, float, 7.6; + , gama, gama, float, 7.6; + Ÿ, ceta, ceta, float, 12.6; + , vega, vega, float, 12.6; + ο, rhox, rhox, float, 12.6; + 纯, impv, impv, float, 5.2; + E., egearing, egearing, float, 8.2; + ڵ, shcode, shcode, char, 6; + ELW簡, elwclose, elwclose, long, 8; + ELWϴ񱸺, sign, sign, char, 1; + ELWϴ, change, change, long, 8; + , date, date, char, 8; + ƽȯ, tickvalue, tickvalue, float, 10.2; + LP纯, lp_impv, lp_impv, float, 5.2; + end + END_DATA_MAP +END_FUNCTION_MAP +ESN \ No newline at end of file diff --git a/sample_python/Res/EU0.res b/sample_python/Res/EU0.res new file mode 100644 index 0000000..7666896 --- /dev/null +++ b/sample_python/Res/EU0.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, EUX, EU0, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, OrderID, OrderID, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 4; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/EU0_1.res b/sample_python/Res/EU0_1.res new file mode 100644 index 0000000..7666896 --- /dev/null +++ b/sample_python/Res/EU0_1.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, EUX, EU0, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, OrderID, OrderID, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 4; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/EU1.res b/sample_python/Res/EU1.res new file mode 100644 index 0000000..426475b --- /dev/null +++ b/sample_python/Res/EU1.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, EUXü, EU1, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, OrderID, OrderID, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 4; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/EU1_1.res b/sample_python/Res/EU1_1.res new file mode 100644 index 0000000..426475b --- /dev/null +++ b/sample_python/Res/EU1_1.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, EUXü, EU1, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, OrderID, OrderID, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 4; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/EU2.res b/sample_python/Res/EU2.res new file mode 100644 index 0000000..b31a36c --- /dev/null +++ b/sample_python/Res/EU2.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, EUXȮ, EU2, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, OrderID, OrderID, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 4; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/EU2_1.res b/sample_python/Res/EU2_1.res new file mode 100644 index 0000000..b31a36c --- /dev/null +++ b/sample_python/Res/EU2_1.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, EUXȮ, EU2, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, OrderID, OrderID, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 4; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/FC0.res b/sample_python/Res/FC0.res new file mode 100644 index 0000000..ad82903 --- /dev/null +++ b/sample_python/Res/FC0.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ü(C0), FC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, float, 6.2; + , drate, drate, float, 6.2; + 簡, price, price, float, 6.2; + ð, open, open, float, 6.2; + , high, high, float, 6.2; + , low, low, float, 6.2; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + ŵȣ1, offerho1, offerho1, float, 6.2; + żȣ1, bidho1, bidho1, float, 6.2; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, float, 6.2; + ̷а, theoryprice, theoryprice, float, 6.2; + , kasis, kasis, float, 6.2; + BASIS, sbasis, sbasis, float, 6.2; + ̷BASIS, ibasis, ibasis, float, 6.2; + ̰, openyakcha, openyakcha, long, 8; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/FC0_1.res b/sample_python/Res/FC0_1.res new file mode 100644 index 0000000..ad82903 --- /dev/null +++ b/sample_python/Res/FC0_1.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ü(C0), FC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, float, 6.2; + , drate, drate, float, 6.2; + 簡, price, price, float, 6.2; + ð, open, open, float, 6.2; + , high, high, float, 6.2; + , low, low, float, 6.2; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + ŵȣ1, offerho1, offerho1, float, 6.2; + żȣ1, bidho1, bidho1, float, 6.2; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, float, 6.2; + ̷а, theoryprice, theoryprice, float, 6.2; + , kasis, kasis, float, 6.2; + BASIS, sbasis, sbasis, float, 6.2; + ̷BASIS, ibasis, ibasis, float, 6.2; + ̰, openyakcha, openyakcha, long, 8; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/FD0.res b/sample_python/Res/FD0.res new file mode 100644 index 0000000..5d689f8 --- /dev/null +++ b/sample_python/Res/FD0.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ǽðѰ(D0), FD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, float, 8.2; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, float, 8.2; + ڵ , futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/FD0_1.res b/sample_python/Res/FD0_1.res new file mode 100644 index 0000000..5d689f8 --- /dev/null +++ b/sample_python/Res/FD0_1.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ǽðѰ(D0), FD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, float, 8.2; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, float, 8.2; + ڵ , futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/FH0.res b/sample_python/Res/FH0.res new file mode 100644 index 0000000..0178f9a --- /dev/null +++ b/sample_python/Res/FH0.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ȣ(H0), FH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, double, 6.2; + żȣ1, bidho1, bidho1, double, 6.2; + ŵȣ1, offerrem1, offerrem1, long, 6; + żȣ1, bidrem1, bidrem1, long, 6; + ŵȣǼ1, offercnt1, offercnt1, long, 5; + żȣǼ1, bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, double, 6.2; + żȣ2, bidho2, bidho2, double, 6.2; + ŵȣ2, offerrem2, offerrem2, long, 6; + żȣ2, bidrem2, bidrem2, long, 6; + ŵȣǼ2, offercnt2, offercnt2, long, 5; + żȣǼ2, bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, double, 6.2; + żȣ3, bidho3, bidho3, double, 6.2; + ŵȣ3, offerrem3, offerrem3, long, 6; + żȣ3, bidrem3, bidrem3, long, 6; + ŵȣǼ3, offercnt3, offercnt3, long, 5; + żȣǼ3, bidcnt3, bidcnt3, long, 5; + ŵȣ4, offerho4, offerho4, double, 6.2; + żȣ4, bidho4, bidho4, double, 6.2; + ŵȣ4, offerrem4, offerrem4, long, 6; + żȣ4, bidrem4, bidrem4, long, 6; + ŵȣǼ4, offercnt4, offercnt4, long, 5; + żȣǼ4, bidcnt4, bidcnt4, long, 5; + ŵȣ5, offerho5, offerho5, double, 6.2; + żȣ5, bidho5, bidho5, double, 6.2; + ŵȣ5, offerrem5, offerrem5, long, 6; + żȣ5, bidrem5, bidrem5, long, 6; + ŵȣǼ5, offercnt5, offercnt5, long, 5; + żȣǼ5, bidcnt5, bidcnt5, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 6; + żȣѼ, totbidrem, totbidrem, long, 6; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ڵ, futcode, futcode, char, 8; + ϰȣ, danhochk, danhochk, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP +FH0 \ No newline at end of file diff --git a/sample_python/Res/FH0_1.res b/sample_python/Res/FH0_1.res new file mode 100644 index 0000000..0178f9a --- /dev/null +++ b/sample_python/Res/FH0_1.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ȣ(H0), FH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, double, 6.2; + żȣ1, bidho1, bidho1, double, 6.2; + ŵȣ1, offerrem1, offerrem1, long, 6; + żȣ1, bidrem1, bidrem1, long, 6; + ŵȣǼ1, offercnt1, offercnt1, long, 5; + żȣǼ1, bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, double, 6.2; + żȣ2, bidho2, bidho2, double, 6.2; + ŵȣ2, offerrem2, offerrem2, long, 6; + żȣ2, bidrem2, bidrem2, long, 6; + ŵȣǼ2, offercnt2, offercnt2, long, 5; + żȣǼ2, bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, double, 6.2; + żȣ3, bidho3, bidho3, double, 6.2; + ŵȣ3, offerrem3, offerrem3, long, 6; + żȣ3, bidrem3, bidrem3, long, 6; + ŵȣǼ3, offercnt3, offercnt3, long, 5; + żȣǼ3, bidcnt3, bidcnt3, long, 5; + ŵȣ4, offerho4, offerho4, double, 6.2; + żȣ4, bidho4, bidho4, double, 6.2; + ŵȣ4, offerrem4, offerrem4, long, 6; + żȣ4, bidrem4, bidrem4, long, 6; + ŵȣǼ4, offercnt4, offercnt4, long, 5; + żȣǼ4, bidcnt4, bidcnt4, long, 5; + ŵȣ5, offerho5, offerho5, double, 6.2; + żȣ5, bidho5, bidho5, double, 6.2; + ŵȣ5, offerrem5, offerrem5, long, 6; + żȣ5, bidrem5, bidrem5, long, 6; + ŵȣǼ5, offercnt5, offercnt5, long, 5; + żȣǼ5, bidcnt5, bidcnt5, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 6; + żȣѼ, totbidrem, totbidrem, long, 6; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ڵ, futcode, futcode, char, 8; + ϰȣ, danhochk, danhochk, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP +FH0 \ No newline at end of file diff --git a/sample_python/Res/FOCCQ33600.res b/sample_python/Res/FOCCQ33600.res new file mode 100644 index 0000000..cc67e22 --- /dev/null +++ b/sample_python/Res/FOCCQ33600.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,ֽİ Ⱓͷ ,FOCCQ33600,SERVICE=FOCCQ33600,headtype=B,CREATOR=,CREDATE=2012/03/15 11:06:33; + BEGIN_DATA_MAP + FOCCQ33600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + Ⱓ, TermTp, TermTp, char, 1; + end + FOCCQ33600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + Ⱓ, TermTp, TermTp, char, 1; + end + FOCCQ33600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + Ÿžݾ, BnsctrAmt, BnsctrAmt, long, 16; + Աݱݾ, MnyinAmt, MnyinAmt, long, 16; + ݱݾ, MnyoutAmt, MnyoutAmt, long, 16; + ڿܱݾ, InvstAvrbalPramt, InvstAvrbalPramt, long, 16; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ڼͷ, InvstErnrat, InvstErnrat, double, 9.2; + end + FOCCQ33600OutBlock3,OutLst(*EMPTY*),output,occurs; + begin + , BaseDt, BaseDt, char, 8; + 򰡱ݾ, FdEvalAmt, FdEvalAmt, long, 19; + ⸻򰡱ݾ, EotEvalAmt, EotEvalAmt, long, 19; + ڿܱݾ, InvstAvrbalPramt, InvstAvrbalPramt, long, 16; + Ÿžݾ, BnsctrAmt, BnsctrAmt, long, 16; + Աݰ, MnyinSecinAmt, MnyinSecinAmt, long, 16; + ݰ, MnyoutSecoutAmt, MnyoutSecoutAmt, long, 16; + 򰡼ͱݾ, EvalPnlAmt, EvalPnlAmt, long, 16; + Ⱓͷ, TermErnrat, TermErnrat, double, 11.3; + , Idx, Idx, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/FOCCQ33600_1.res b/sample_python/Res/FOCCQ33600_1.res new file mode 100644 index 0000000..cc67e22 --- /dev/null +++ b/sample_python/Res/FOCCQ33600_1.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,ֽİ Ⱓͷ ,FOCCQ33600,SERVICE=FOCCQ33600,headtype=B,CREATOR=,CREDATE=2012/03/15 11:06:33; + BEGIN_DATA_MAP + FOCCQ33600InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + Ⱓ, TermTp, TermTp, char, 1; + end + FOCCQ33600OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + Ⱓ, TermTp, TermTp, char, 1; + end + FOCCQ33600OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + Ÿžݾ, BnsctrAmt, BnsctrAmt, long, 16; + Աݱݾ, MnyinAmt, MnyinAmt, long, 16; + ݱݾ, MnyoutAmt, MnyoutAmt, long, 16; + ڿܱݾ, InvstAvrbalPramt, InvstAvrbalPramt, long, 16; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ڼͷ, InvstErnrat, InvstErnrat, double, 9.2; + end + FOCCQ33600OutBlock3,OutLst(*EMPTY*),output,occurs; + begin + , BaseDt, BaseDt, char, 8; + 򰡱ݾ, FdEvalAmt, FdEvalAmt, long, 19; + ⸻򰡱ݾ, EotEvalAmt, EotEvalAmt, long, 19; + ڿܱݾ, InvstAvrbalPramt, InvstAvrbalPramt, long, 16; + Ÿžݾ, BnsctrAmt, BnsctrAmt, long, 16; + Աݰ, MnyinSecinAmt, MnyinSecinAmt, long, 16; + ݰ, MnyoutSecoutAmt, MnyoutSecoutAmt, long, 16; + 򰡼ͱݾ, EvalPnlAmt, EvalPnlAmt, long, 16; + Ⱓͷ, TermErnrat, TermErnrat, double, 11.3; + , Idx, Idx, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/FOCCQ33700.res b/sample_python/Res/FOCCQ33700.res new file mode 100644 index 0000000..21f8b43 --- /dev/null +++ b/sample_python/Res/FOCCQ33700.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ Ⱓ ͷ Ȳ,FOCCQ33700,SERVICE=FOCCQ33700,headtype=B,CREATOR=̼,CREDATE=2013/01/08 10:45:28; + BEGIN_DATA_MAP + FOCCQ33700InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + رݾױ, BaseAmtTp, BaseAmtTp, char, 1; + ȸⰣ, QryTermTp, QryTermTp, char, 1; + ͻⱸڵ, PnlCalcTpCode, PnlCalcTpCode, char, 1; + end + FOCCQ33700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + رݾױ, BaseAmtTp, BaseAmtTp, char, 1; + ȸⰣ, QryTermTp, QryTermTp, char, 1; + ͻⱸڵ, PnlCalcTpCode, PnlCalcTpCode, char, 1; + end + FOCCQ33700OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + ɼǾݾ, FnoCtrctAmt, FnoCtrctAmt, long, 16; + ڿܱݾ, InvstPramtAvrbalAmt, InvstPramtAvrbalAmt, long, 16; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + ɼǸŸżͱݾ, OptBsnPnlAmt, OptBsnPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ͷ, ErnRat, ErnRat, double, 12.6; + end + FOCCQ33700OutBlock3,OutList(*EMPTY*),output,occurs; + begin + ŷ, TrdDt, TrdDt, char, 8; + ʿŹڻݾ, FdDpsastAmt, FdDpsastAmt, long, 16; + ⸻Źڻݾ, EotDpsastAmt, EotDpsastAmt, long, 16; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + ڿܱݾ, InvstAvrbalPramt, InvstAvrbalPramt, long, 16; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ͷ, Ernrat, Ernrat, double, 12.6; + ɼǾݾ, FnoCtrctAmt, FnoCtrctAmt, long, 16; + ȸ, Trnrat, Trnrat, double, 12.6; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + ɼǸŸżͱݾ, OptBsnPnlAmt, OptBsnPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/FOCCQ33700_1.res b/sample_python/Res/FOCCQ33700_1.res new file mode 100644 index 0000000..21f8b43 --- /dev/null +++ b/sample_python/Res/FOCCQ33700_1.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ Ⱓ ͷ Ȳ,FOCCQ33700,SERVICE=FOCCQ33700,headtype=B,CREATOR=̼,CREDATE=2013/01/08 10:45:28; + BEGIN_DATA_MAP + FOCCQ33700InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + رݾױ, BaseAmtTp, BaseAmtTp, char, 1; + ȸⰣ, QryTermTp, QryTermTp, char, 1; + ͻⱸڵ, PnlCalcTpCode, PnlCalcTpCode, char, 1; + end + FOCCQ33700OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¹ȣ, AcntNo, AcntNo, char, 20; + йȣ, Pwd, Pwd, char, 8; + ȸ, QrySrtDt, QrySrtDt, char, 8; + ȸ, QryEndDt, QryEndDt, char, 8; + ȸ, QryTp, QryTp, char, 1; + رݾױ, BaseAmtTp, BaseAmtTp, char, 1; + ȸⰣ, QryTermTp, QryTermTp, char, 1; + ͻⱸڵ, PnlCalcTpCode, PnlCalcTpCode, char, 1; + end + FOCCQ33700OutBlock2,Out(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + ¸, AcntNm, AcntNm, char, 40; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + ɼǾݾ, FnoCtrctAmt, FnoCtrctAmt, long, 16; + ڿܱݾ, InvstPramtAvrbalAmt, InvstPramtAvrbalAmt, long, 16; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + ɼǸŸżͱݾ, OptBsnPnlAmt, OptBsnPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ͷ, ErnRat, ErnRat, double, 12.6; + end + FOCCQ33700OutBlock3,OutList(*EMPTY*),output,occurs; + begin + ŷ, TrdDt, TrdDt, char, 8; + ʿŹڻݾ, FdDpsastAmt, FdDpsastAmt, long, 16; + ⸻Źڻݾ, EotDpsastAmt, EotDpsastAmt, long, 16; + Աݾ, InAmt, InAmt, long, 16; + ݾ, OutAmt, OutAmt, long, 16; + ڿܱݾ, InvstAvrbalPramt, InvstAvrbalPramt, long, 16; + ڼͱݾ, InvstPlAmt, InvstPlAmt, long, 16; + ͷ, Ernrat, Ernrat, double, 12.6; + ɼǾݾ, FnoCtrctAmt, FnoCtrctAmt, long, 16; + ȸ, Trnrat, Trnrat, double, 12.6; + , FutsAdjstDfamt, FutsAdjstDfamt, long, 16; + ɼǸŸżͱݾ, OptBsnPnlAmt, OptBsnPnlAmt, long, 16; + ɼ򰡼ͱݾ, OptEvalPnlAmt, OptEvalPnlAmt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/FX0.res b/sample_python/Res/FX0.res new file mode 100644 index 0000000..1db9d8c --- /dev/null +++ b/sample_python/Res/FX0.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200Ȯ(X0), FX0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + Ѵܰ , upstep , upstep , char, 2; + Ѵܰ , dnstep , dnstep , char, 2; + Ѱ , uplmtprice , uplmtprice , float, 6.2; + Ѱ , dnlmtprice , dnlmtprice , float, 6.2; + ڵ , futcode , futcode , char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/FX0_1.res b/sample_python/Res/FX0_1.res new file mode 100644 index 0000000..1db9d8c --- /dev/null +++ b/sample_python/Res/FX0_1.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200Ȯ(X0), FX0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + Ѵܰ , upstep , upstep , char, 2; + Ѵܰ , dnstep , dnstep , char, 2; + Ѱ , uplmtprice , uplmtprice , float, 6.2; + Ѱ , dnlmtprice , dnlmtprice , float, 6.2; + ڵ , futcode , futcode , char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/H01.res b/sample_python/Res/H01.res new file mode 100644 index 0000000..4fd845a --- /dev/null +++ b/sample_python/Res/H01.res @@ -0,0 +1,57 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹ, H01, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + Ϸùȣ, seq, seq, long, 11; + trcode, trcode, trcode, char, 11; + Ī׷ȣ, megrpno, megrpno, char, 2; + ID, boardid, boardid, char, 2; + ȸȣ, memberno, memberno, char, 5; + ȣ, bpno, bpno, char, 5; + ֹȣ, ordno, ordno, char, 10; + ֹȣ, ordordno, orgordno, char, 10; + ڵ, expcode, expcode, char, 12; + ŵ, dosugb, dosugb, char, 1; + ұ, mocagb, mocagb, char, 1; + ¹ȣ1, accno1, accno1, char, 12; + ȣ, qty2, qty2, long, 10; + ȣ, price, price, float, 11.2; + ֹ, ordgb, ordgb, char, 1; + ȣ, hogagb, hogagb, char, 1; + ȣ, sihogagb, sihogagb, char, 11; + ڻֽŰID, treaid, tradid, char, 5; + ڻָŸŹ, treacode, treacode, char, 1; + ŵڵ, askcode, askcode, char, 2; + ſ뱸ڵ, creditcode, creditcode, char, 2; + Źڱⱸ, jakigb, jakigb, char, 2; + Źȣ, trustnum, trustnum, char, 5; + α׷, ptgb, ptgb, char, 2; + ֱǰ¹ȣ,substocnum,substonum, char, 12; + ±ڵ, accgb, accgb, char, 2; + űڵ, accmarggb, accmarggb, char, 2; + ڵ, nationcode, nationcode, char, 3; + ڱ, investgb, investgb, char, 4; + ܱڵ, forecode, forecode, char, 2; + ֹü, medcode, medcode, char, 1; + ֹĺڹȣ, ordid, ordid, char, 12; + MACּ, macid, macid, char, 12; + ȣ, orddate, orddate, char, 8; + ȸֹð, rcvtime, rcvtime, char, 9; + mem_filler, mem_filler, mem_filler, char, 7; + mem_accno, mem_accno, mem_accno, char, 11; + mem_filler1, mem_filler, mem_filler1,char, 42; + Īð, ordacpttm, ordacpttm, char, 9; + Ҽ, qty, qty, long, 10; + ڵұ, autogb, autogb, char, 1; + źλ, rejcode, rejcode, char, 4; + α׷ȣŰ, prgordde, prgordde, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/H01_1.res b/sample_python/Res/H01_1.res new file mode 100644 index 0000000..4fd845a --- /dev/null +++ b/sample_python/Res/H01_1.res @@ -0,0 +1,57 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹ, H01, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + Ϸùȣ, seq, seq, long, 11; + trcode, trcode, trcode, char, 11; + Ī׷ȣ, megrpno, megrpno, char, 2; + ID, boardid, boardid, char, 2; + ȸȣ, memberno, memberno, char, 5; + ȣ, bpno, bpno, char, 5; + ֹȣ, ordno, ordno, char, 10; + ֹȣ, ordordno, orgordno, char, 10; + ڵ, expcode, expcode, char, 12; + ŵ, dosugb, dosugb, char, 1; + ұ, mocagb, mocagb, char, 1; + ¹ȣ1, accno1, accno1, char, 12; + ȣ, qty2, qty2, long, 10; + ȣ, price, price, float, 11.2; + ֹ, ordgb, ordgb, char, 1; + ȣ, hogagb, hogagb, char, 1; + ȣ, sihogagb, sihogagb, char, 11; + ڻֽŰID, treaid, tradid, char, 5; + ڻָŸŹ, treacode, treacode, char, 1; + ŵڵ, askcode, askcode, char, 2; + ſ뱸ڵ, creditcode, creditcode, char, 2; + Źڱⱸ, jakigb, jakigb, char, 2; + Źȣ, trustnum, trustnum, char, 5; + α׷, ptgb, ptgb, char, 2; + ֱǰ¹ȣ,substocnum,substonum, char, 12; + ±ڵ, accgb, accgb, char, 2; + űڵ, accmarggb, accmarggb, char, 2; + ڵ, nationcode, nationcode, char, 3; + ڱ, investgb, investgb, char, 4; + ܱڵ, forecode, forecode, char, 2; + ֹü, medcode, medcode, char, 1; + ֹĺڹȣ, ordid, ordid, char, 12; + MACּ, macid, macid, char, 12; + ȣ, orddate, orddate, char, 8; + ȸֹð, rcvtime, rcvtime, char, 9; + mem_filler, mem_filler, mem_filler, char, 7; + mem_accno, mem_accno, mem_accno, char, 11; + mem_filler1, mem_filler, mem_filler1,char, 42; + Īð, ordacpttm, ordacpttm, char, 9; + Ҽ, qty, qty, long, 10; + ڵұ, autogb, autogb, char, 1; + źλ, rejcode, rejcode, char, 4; + α׷ȣŰ, prgordde, prgordde, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/H1_.res b/sample_python/Res/H1_.res new file mode 100644 index 0000000..e6f03f1 --- /dev/null +++ b/sample_python/Res/H1_.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIȣܷ(H1), H1_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + ڵ, shcode, shcode, char, 6; + 뱸, alloc_gubun, alloc_gubun, char, 1; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/H1__1.res b/sample_python/Res/H1__1.res new file mode 100644 index 0000000..e6f03f1 --- /dev/null +++ b/sample_python/Res/H1__1.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIȣܷ(H1), H1_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + ڵ, shcode, shcode, char, 6; + 뱸, alloc_gubun, alloc_gubun, char, 1; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/H2_.res b/sample_python/Res/H2_.res new file mode 100644 index 0000000..b587480 --- /dev/null +++ b/sample_python/Res/H2_.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIðȣܷ(H2), H2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ðܸŵܷ, tmofferrem, tmofferrem, long, 12; + ðܸżܷ, tmbidrem, tmbidrem, long, 12; + ðܸŵ, pretmoffercha, pretmoffercha, long, 12; + ðܸż, pretmbidcha, pretmbidcha, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/H2__1.res b/sample_python/Res/H2__1.res new file mode 100644 index 0000000..b587480 --- /dev/null +++ b/sample_python/Res/H2__1.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIðȣܷ(H2), H2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ðܸŵܷ, tmofferrem, tmofferrem, long, 12; + ðܸżܷ, tmbidrem, tmbidrem, long, 12; + ðܸŵ, pretmoffercha, pretmoffercha, long, 12; + ðܸż, pretmbidcha, pretmbidcha, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/HA_.res b/sample_python/Res/HA_.res new file mode 100644 index 0000000..7aaebce --- /dev/null +++ b/sample_python/Res/HA_.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQȣܷ(HA), HA_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + ڵ, shcode, shcode, char, 6; + 뱸, alloc_gubun, alloc_gubun, char, 1; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/HA__1.res b/sample_python/Res/HA__1.res new file mode 100644 index 0000000..7aaebce --- /dev/null +++ b/sample_python/Res/HA__1.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQȣܷ(HA), HA_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + ڵ, shcode, shcode, char, 6; + 뱸, alloc_gubun, alloc_gubun, char, 1; + ŷ, volume, volume, long, 12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/HB_.res b/sample_python/Res/HB_.res new file mode 100644 index 0000000..cad0410 --- /dev/null +++ b/sample_python/Res/HB_.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQðȣܷ(HB), HB_, attr, key=6, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ðܸŵܷ, tmofferrem, tmofferrem, long, 12; + ðܸżܷ, tmbidrem, tmbidrem, long, 12; +ðܸŵ, pretmoffercha, pretmoffercha, long, 12; +ðܸż, pretmbidcha, pretmbidcha, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/HB__1.res b/sample_python/Res/HB__1.res new file mode 100644 index 0000000..cad0410 --- /dev/null +++ b/sample_python/Res/HB__1.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQðȣܷ(HB), HB_, attr, key=6, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ðܸŵܷ, tmofferrem, tmofferrem, long, 12; + ðܸżܷ, tmbidrem, tmbidrem, long, 12; +ðܸŵ, pretmoffercha, pretmoffercha, long, 12; +ðܸż, pretmbidcha, pretmbidcha, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/I5_.res b/sample_python/Res/I5_.res new file mode 100644 index 0000000..87a5e37 --- /dev/null +++ b/sample_python/Res/I5_.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP +.Feed, ڽETFǽðNAV(I5), I5_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ð, time, time, char, 8; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + ŷ, volume, volume, float, 12; + NAV, navdiff, navdiff, float, 9.2; + NAV, nav, nav, float, 9.2; + ϴ, navchange, navchange, float, 9.2; + , crate, crate, float, 9.2; + , grate, grate, float, 9.2; + , jisu, jisu, float, 8.2; + ϴ, jichange, jichange, float, 8.2; + ϴ, jirate, jirate, float, 8.2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/I5__1.res b/sample_python/Res/I5__1.res new file mode 100644 index 0000000..87a5e37 --- /dev/null +++ b/sample_python/Res/I5__1.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP +.Feed, ڽETFǽðNAV(I5), I5_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ð, time, time, char, 8; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + ŷ, volume, volume, float, 12; + NAV, navdiff, navdiff, float, 9.2; + NAV, nav, nav, float, 9.2; + ϴ, navchange, navchange, float, 9.2; + , crate, crate, float, 9.2; + , grate, grate, float, 9.2; + , jisu, jisu, float, 8.2; + ϴ, jichange, jichange, float, 8.2; + ϴ, jirate, jirate, float, 8.2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/IJ_.res b/sample_python/Res/IJ_.res new file mode 100644 index 0000000..5703d13 --- /dev/null +++ b/sample_python/Res/IJ_.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP +.Feed, (IJ), IJ_, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + ð, time, time, char, 6; + , jisu, jisu, float, 8.2; + ϴ񱸺, sign, sign, char, 1; + Ϻ, change, change, float, 8.2; + , drate, drate, float, 6.2; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 8; + ŷ, value, value, long, 8; + , upjo, upjo, long, 4; + , highjo, highjo, long, 4; + , unchgjo, unchgjo, long, 4; + ϶, lowjo, lowjo, long, 4; + , downjo, downjo, long, 4; + , upjrate, upjrate, float, 6.2; + ð, openjisu, openjisu, float, 8.2; + ðð, opentime, opentime, char, 6; + , highjisu, highjisu, float, 8.2; + ð, hightime, hightime, char, 6; + , lowjisu, lowjisu, float, 8.2; + ð, lowtime, lowtime, char, 6; + μż, frgsvolume, frgsvolume, long, 8; + ż, orgsvolume, orgsvolume, long, 8; + μżݾ, frgsvalue, frgsvalue, long, 10; + żݾ, orgsvalue, orgsvalue, long, 10; + ڵ, upcode, upcode, char, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/IJ__1.res b/sample_python/Res/IJ__1.res new file mode 100644 index 0000000..5703d13 --- /dev/null +++ b/sample_python/Res/IJ__1.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP +.Feed, (IJ), IJ_, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + ð, time, time, char, 6; + , jisu, jisu, float, 8.2; + ϴ񱸺, sign, sign, char, 1; + Ϻ, change, change, float, 8.2; + , drate, drate, float, 6.2; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 8; + ŷ, value, value, long, 8; + , upjo, upjo, long, 4; + , highjo, highjo, long, 4; + , unchgjo, unchgjo, long, 4; + ϶, lowjo, lowjo, long, 4; + , downjo, downjo, long, 4; + , upjrate, upjrate, float, 6.2; + ð, openjisu, openjisu, float, 8.2; + ðð, opentime, opentime, char, 6; + , highjisu, highjisu, float, 8.2; + ð, hightime, hightime, char, 6; + , lowjisu, lowjisu, float, 8.2; + ð, lowtime, lowtime, char, 6; + μż, frgsvolume, frgsvolume, long, 8; + ż, orgsvolume, orgsvolume, long, 8; + μżݾ, frgsvalue, frgsvalue, long, 10; + żݾ, orgsvalue, orgsvalue, long, 10; + ڵ, upcode, upcode, char, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/JC0.res b/sample_python/Res/JC0.res new file mode 100644 index 0000000..d874aad --- /dev/null +++ b/sample_python/Res/JC0.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļü(JC0), JC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ڵ, futcode, futcode, char, 8; + üð, chetime, chetime, char, 6; + ȣ, sign, sign, char, 1; + ϴ, change, change, long, 10; + , drate, drate, double, 6.2; + 簡, price, price, long, 10; + ð, open, open, long, 10; + , high, high, long, 10; + , low, low, long, 10; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 15; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, double, 9.2; + ŵȣ1, offerho1, offerho1, long, 10; + żȣ1, bidho1, bidho1, long, 10; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, double, 6.2; + ̷а, theoryprice, theoryprice, long, 8; + , kasis, kasis, double, 6.3; + BASIS, sbasis, sbasis, long, 6; + ̷BASIS, ibasis, ibasis, long, 6; + ̰, openyakcha, openyakcha, long, 8; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڻ簡, basprice, basprice, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +JC0 \ No newline at end of file diff --git a/sample_python/Res/JC0_1.res b/sample_python/Res/JC0_1.res new file mode 100644 index 0000000..d874aad --- /dev/null +++ b/sample_python/Res/JC0_1.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļü(JC0), JC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ڵ, futcode, futcode, char, 8; + üð, chetime, chetime, char, 6; + ȣ, sign, sign, char, 1; + ϴ, change, change, long, 10; + , drate, drate, double, 6.2; + 簡, price, price, long, 10; + ð, open, open, long, 10; + , high, high, long, 10; + , low, low, long, 10; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 15; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, double, 9.2; + ŵȣ1, offerho1, offerho1, long, 10; + żȣ1, bidho1, bidho1, long, 10; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, double, 6.2; + ̷а, theoryprice, theoryprice, long, 8; + , kasis, kasis, double, 6.3; + BASIS, sbasis, sbasis, long, 6; + ̷BASIS, ibasis, ibasis, long, 6; + ̰, openyakcha, openyakcha, long, 8; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڻ簡, basprice, basprice, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +JC0 \ No newline at end of file diff --git a/sample_python/Res/JD0.res b/sample_python/Res/JD0.res new file mode 100644 index 0000000..b5638fc --- /dev/null +++ b/sample_python/Res/JD0.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļǽðѰ(JD0), JD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, long, 10; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, long, 10; + ڵ , futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/JD0_1.res b/sample_python/Res/JD0_1.res new file mode 100644 index 0000000..b5638fc --- /dev/null +++ b/sample_python/Res/JD0_1.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļǽðѰ(JD0), JD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, long, 10; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, long, 10; + ڵ , futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/JH0.res b/sample_python/Res/JH0.res new file mode 100644 index 0000000..7fce153 --- /dev/null +++ b/sample_python/Res/JH0.res @@ -0,0 +1,80 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļȣ(JH0), JH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ڵ, futcode, futcode, char, 8; + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 10; + żȣ1, bidho1, bidho1, long, 10; + ŵȣ1, offerrem1, offerrem1, long, 7; + żȣ1, bidrem1, bidrem1, long, 7; + ŵȣǼ1, offercnt1, offercnt1, long, 5; + żȣǼ1, bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, long, 10; + żȣ2, bidho2, bidho2, long, 10; + ŵȣ2, offerrem2, offerrem2, long, 7; + żȣ2, bidrem2, bidrem2, long, 7; + ŵȣǼ2, offercnt2, offercnt2, long, 5; + żȣǼ2, bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, long, 10; + żȣ3, bidho3, bidho3, long, 10; + ŵȣ3, offerrem3, offerrem3, long, 7; + żȣ3, bidrem3, bidrem3, long, 7; + ŵȣǼ3, offercnt3, offercnt3, long, 5; + żȣǼ3, bidcnt3, bidcnt3, long, 5; + ŵȣ4, offerho4, offerho4, long, 10; + żȣ4, bidho4, bidho4, long, 10; + ŵȣ4, offerrem4, offerrem4, long, 7; + żȣ4, bidrem4, bidrem4, long, 7; + ŵȣǼ4, offercnt4, offercnt4, long, 5; + żȣǼ4, bidcnt4, bidcnt4, long, 5; + ŵȣ5, offerho5, offerho5, long, 10; + żȣ5, bidho5, bidho5, long, 10; + ŵȣ5, offerrem5, offerrem5, long, 7; + żȣ5, bidrem5, bidrem5, long, 7; + ŵȣǼ5, offercnt5, offercnt5, long, 5; + żȣǼ5, bidcnt5, bidcnt5, long, 5; + ŵȣ6, offerho6, offerho6, long, 10; + żȣ6, bidho6, bidho6, long, 10; + ŵȣ6, offerrem6, offerrem6, long, 7; + żȣ6, bidrem6, bidrem6, long, 7; + ŵȣǼ6, offercnt6, offercnt6, long, 5; + żȣǼ6, bidcnt6, bidcnt6, long, 5; + ŵȣ7, offerho7, offerho7, long, 10; + żȣ7, bidho7, bidho7, long, 10; + ŵȣ7, offerrem7, offerrem7, long, 7; + żȣ7, bidrem7, bidrem7, long, 7; + ŵȣǼ7, offercnt7, offercnt7, long, 5; + żȣǼ7, bidcnt7, bidcnt7, long, 5; + ŵȣ8, offerho8, offerho8, long, 10; + żȣ8, bidho8, bidho8, long, 10; + ŵȣ8, offerrem8, offerrem8, long, 7; + żȣ8, bidrem8, bidrem8, long, 7; + ŵȣǼ8, offercnt8, offercnt8, long, 5; + żȣǼ8, bidcnt8, bidcnt8, long, 5; + ŵȣ9, offerho9, offerho9, long, 10; + żȣ9, bidho9, bidho9, long, 10; + ŵȣ9, offerrem9, offerrem9, long, 7; + żȣ9, bidrem9, bidrem9, long, 7; + ŵȣǼ9, offercnt9, offercnt9, long, 5; + żȣǼ9, bidcnt9, bidcnt9, long, 5; + ŵȣ10, offerho10, offerho10, long, 10; + żȣ10, bidho10, bidho10, long, 10; + ŵȣ10, offerrem10, offerrem10, long, 7; + żȣ10, bidrem10, bidrem10, long, 7; + ŵȣǼ10, offercnt10, offercnt10, long, 5; + żȣǼ10, bidcnt10, bidcnt10, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 8; + żȣѼ, totbidrem, totbidrem, long, 8; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ϰȣ, danhochk, danhochk, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/JH0_1.res b/sample_python/Res/JH0_1.res new file mode 100644 index 0000000..7fce153 --- /dev/null +++ b/sample_python/Res/JH0_1.res @@ -0,0 +1,80 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļȣ(JH0), JH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + ڵ, futcode, futcode, char, 8; + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 10; + żȣ1, bidho1, bidho1, long, 10; + ŵȣ1, offerrem1, offerrem1, long, 7; + żȣ1, bidrem1, bidrem1, long, 7; + ŵȣǼ1, offercnt1, offercnt1, long, 5; + żȣǼ1, bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, long, 10; + żȣ2, bidho2, bidho2, long, 10; + ŵȣ2, offerrem2, offerrem2, long, 7; + żȣ2, bidrem2, bidrem2, long, 7; + ŵȣǼ2, offercnt2, offercnt2, long, 5; + żȣǼ2, bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, long, 10; + żȣ3, bidho3, bidho3, long, 10; + ŵȣ3, offerrem3, offerrem3, long, 7; + żȣ3, bidrem3, bidrem3, long, 7; + ŵȣǼ3, offercnt3, offercnt3, long, 5; + żȣǼ3, bidcnt3, bidcnt3, long, 5; + ŵȣ4, offerho4, offerho4, long, 10; + żȣ4, bidho4, bidho4, long, 10; + ŵȣ4, offerrem4, offerrem4, long, 7; + żȣ4, bidrem4, bidrem4, long, 7; + ŵȣǼ4, offercnt4, offercnt4, long, 5; + żȣǼ4, bidcnt4, bidcnt4, long, 5; + ŵȣ5, offerho5, offerho5, long, 10; + żȣ5, bidho5, bidho5, long, 10; + ŵȣ5, offerrem5, offerrem5, long, 7; + żȣ5, bidrem5, bidrem5, long, 7; + ŵȣǼ5, offercnt5, offercnt5, long, 5; + żȣǼ5, bidcnt5, bidcnt5, long, 5; + ŵȣ6, offerho6, offerho6, long, 10; + żȣ6, bidho6, bidho6, long, 10; + ŵȣ6, offerrem6, offerrem6, long, 7; + żȣ6, bidrem6, bidrem6, long, 7; + ŵȣǼ6, offercnt6, offercnt6, long, 5; + żȣǼ6, bidcnt6, bidcnt6, long, 5; + ŵȣ7, offerho7, offerho7, long, 10; + żȣ7, bidho7, bidho7, long, 10; + ŵȣ7, offerrem7, offerrem7, long, 7; + żȣ7, bidrem7, bidrem7, long, 7; + ŵȣǼ7, offercnt7, offercnt7, long, 5; + żȣǼ7, bidcnt7, bidcnt7, long, 5; + ŵȣ8, offerho8, offerho8, long, 10; + żȣ8, bidho8, bidho8, long, 10; + ŵȣ8, offerrem8, offerrem8, long, 7; + żȣ8, bidrem8, bidrem8, long, 7; + ŵȣǼ8, offercnt8, offercnt8, long, 5; + żȣǼ8, bidcnt8, bidcnt8, long, 5; + ŵȣ9, offerho9, offerho9, long, 10; + żȣ9, bidho9, bidho9, long, 10; + ŵȣ9, offerrem9, offerrem9, long, 7; + żȣ9, bidrem9, bidrem9, long, 7; + ŵȣǼ9, offercnt9, offercnt9, long, 5; + żȣǼ9, bidcnt9, bidcnt9, long, 5; + ŵȣ10, offerho10, offerho10, long, 10; + żȣ10, bidho10, bidho10, long, 10; + ŵȣ10, offerrem10, offerrem10, long, 7; + żȣ10, bidrem10, bidrem10, long, 7; + ŵȣǼ10, offercnt10, offercnt10, long, 5; + żȣǼ10, bidcnt10, bidcnt10, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 8; + żȣѼ, totbidrem, totbidrem, long, 8; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ϰȣ, danhochk, danhochk, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/JIF.res b/sample_python/Res/JIF.res new file mode 100644 index 0000000..a675058 --- /dev/null +++ b/sample_python/Res/JIF.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, (JIF), JIF, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + 屸, jangubun, jangubun, char, 1; + end + OutBlock,,output; + begin + 屸, jangubun, jangubun, char, 1; + , jstatus, jstatus, char, 2; + end + END_DATA_MAP +END_FUNCTION_MAP +JIF \ No newline at end of file diff --git a/sample_python/Res/JIF_1.res b/sample_python/Res/JIF_1.res new file mode 100644 index 0000000..a675058 --- /dev/null +++ b/sample_python/Res/JIF_1.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, (JIF), JIF, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + 屸, jangubun, jangubun, char, 1; + end + OutBlock,,output; + begin + 屸, jangubun, jangubun, char, 1; + , jstatus, jstatus, char, 2; + end + END_DATA_MAP +END_FUNCTION_MAP +JIF \ No newline at end of file diff --git a/sample_python/Res/JX0.res b/sample_python/Res/JX0.res new file mode 100644 index 0000000..05748b7 --- /dev/null +++ b/sample_python/Res/JX0.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļȮ(JX0), JX0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + Ѵܰ , upstep , upstep , char, 2; + Ѵܰ , dnstep , dnstep , char, 2; + Ѱ , uplmtprice , uplmtprice , long, 10; + Ѱ , dnlmtprice , dnlmtprice , long, 10; + ڵ , futcode , futcode , char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/JX0_1.res b/sample_python/Res/JX0_1.res new file mode 100644 index 0000000..05748b7 --- /dev/null +++ b/sample_python/Res/JX0_1.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļȮ(JX0), JX0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + Ѵܰ , upstep , upstep , char, 2; + Ѵܰ , dnstep , dnstep , char, 2; + Ѱ , uplmtprice , uplmtprice , long, 10; + Ѱ , dnlmtprice , dnlmtprice , long, 10; + ڵ , futcode , futcode , char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/K1_.res b/sample_python/Res/K1_.res new file mode 100644 index 0000000..d1461d3 --- /dev/null +++ b/sample_python/Res/K1_.res @@ -0,0 +1,93 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIŷ(K1), K1_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵǻڵ1 , offerno1, offerno1, char, 3; + żǻڵ1 , bidno1, bidno1, char, 3; + ŵȸ1 , offertrad1, offertrad1, char, 6; + żȸ1 , bidtrad1, bidtrad1, char, 6; + ŵŷ1, tradmdvol1, tradmdvol1, long, 10; + żŷ1, tradmsvol1, tradmsvol1, long, 10; + ŵŷ1, tradmdrate1, tradmdrate1, float, 6.2; + ŵŷ1, tradmsrate1, tradmsrate1, float, 6.2; + ŵŷ1, tradmdcha1, tradmdcha1, long, 10; + żŷ1, tradmscha1, tradmscha1, long, 10; + ŵǻڵ2 , offerno2, offerno2, char, 3; + żǻڵ2 , bidno2, bidno2, char, 3; + ŵȸ2 , offertrad2, offertrad2, char, 6; + żȸ2 , bidtrad2, bidtrad2, char, 6; + ŵŷ2, tradmdvol2, tradmdvol2, long, 10; + żŷ2, tradmsvol2, tradmsvol2, long, 10; + ŵŷ2, tradmdrate2, tradmdrate2, float, 6.2; + żŷ2, tradmsrate2, tradmsrate2, float, 6.2; + ŵŷ2, tradmdcha2, tradmdcha2, long, 10; + żŷ2, tradmscha2, tradmscha2, long, 10; + ŵǻڵ3 , offerno3, offerno3, char, 3; + żǻڵ3 , bidno3, bidno3, char, 3; + ŵȸ3 , offertrad3, offertrad3, char, 6; + żȸ3 , bidtrad3, bidtrad3, char, 6; + ŵŷ3, tradmdvol3, tradmdvol3, long, 10; + żŷ3, tradmsvol3, tradmsvol3, long, 10; + ŵŷ3, tradmdrate3, tradmdrate3, float, 6.2; + żŷ3, tradmsrate3, tradmsrate3, float, 6.2; + ŵŷ3, tradmdcha3, tradmdcha3, long, 10; + żŷ3, tradmscha3, tradmscha3, long, 10; + ŵǻڵ4 , offerno4, offerno4, char, 3; + żǻڵ4 , bidno4, bidno4, char, 3; + ŵȸ4 , offertrad4, offertrad4, char, 6; + żȸ4 , bidtrad4, bidtrad4, char, 6; + ŵŷ4, tradmdvol4, tradmdvol4, long, 10; + żŷ4, tradmsvol4, tradmsvol4, long, 10; + ŵŷ4, tradmdrate4, tradmdrate4, float, 6.2; + żŷ4, tradmsrate4, tradmsrate4, float, 6.2; + ŵŷ4, tradmdcha4, tradmdcha4, long, 10; + żŷ4, tradmscha4, tradmscha4, long, 10; + ŵǻڵ5 , offerno5, offerno5, char, 3; + żǻڵ5 , bidno5, bidno5, char, 3; + ŵȸ5 , offertrad5, offertrad5, char, 6; + żȸ5 , bidtrad5, bidtrad5, char, 6; + ŵŷ5, tradmdvol5, tradmdvol5, long, 10; + żŷ5, tradmsvol5, tradmsvol5, long, 10; + ŵŷ5, tradmdrate5, tradmdrate5, float, 6.2; + żŷ5, tradmsrate5, tradmsrate5, float, 6.2; + ŵŷ5, tradmdcha5, tradmdcha5, long, 10; + żŷ5, tradmscha5, tradmscha5, long, 10; + ܱǻŵհ, ftradmdvol, ftradmdvol, char, 10; + ܱǻżհ, ftradmsvol, ftradmsvol, char, 10; +ܱǻŵŷ, ftradmdrate, ftradmdrate, float, 6.2; +ܱǻżŷ, ftradmsrate, ftradmsrate, float, 6.2; +ܱǻŵŷ, ftradmdcha, ftradmdcha, char, 10; +ܱǻżŷ, ftradmscha, ftradmscha, char, 10; + ڵ, shcode, shcode, char, 6; + ŵŷ1, tradmdval1, tradmdval1, long, 15; + żŷ1, tradmsval1, tradmsval1, long, 15; + ŵմܰ1, tradmdavg1, tradmdavg1, long, 7; + żմܰ1, tradmsavg1, tradmsavg1, long, 7; + ŵŷ2, tradmdval2, tradmdval2, long, 15; + żŷ2, tradmsval2, tradmsval2, long, 15; + ŵմܰ2, tradmdavg2, tradmdavg2, long, 7; + żմܰ2, tradmsavg2, tradmsavg2, long, 7; + ŵŷ3, tradmdval3, tradmdval3, long, 15; + żŷ3, tradmsval3, tradmsval3, long, 15; + ŵմܰ3, tradmdavg3, tradmdavg3, long, 7; + żմܰ3, tradmsavg3, tradmsavg3, long, 7; + ŵŷ4, tradmdval4, tradmdval4, long, 15; + żŷ4, tradmsval4, tradmsval4, long, 15; + ŵմܰ4, tradmdavg4, tradmdavg4, long, 7; + żմܰ4, tradmsavg4, tradmsavg4, long, 7; + ŵŷ5, tradmdval5, tradmdval5, long, 15; + żŷ5, tradmsval5, tradmsval5, long, 15; + ŵմܰ5, tradmdavg5, tradmdavg5, long, 7; + żմܰ5, tradmsavg5, tradmsavg5, long, 7; +ܱǻŵŷ, ftradmdval, ftradmdval, long, 15; +ܱǻżŷ, ftradmsval, ftradmsval, long, 15; +ܱǻŵմܰ, ftradmdavg, ftradmdavg, long, 7; +ܱǻżմܰ, ftradmsavg, ftradmsavg, long, 7; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/K1__1.res b/sample_python/Res/K1__1.res new file mode 100644 index 0000000..d1461d3 --- /dev/null +++ b/sample_python/Res/K1__1.res @@ -0,0 +1,93 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIŷ(K1), K1_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵǻڵ1 , offerno1, offerno1, char, 3; + żǻڵ1 , bidno1, bidno1, char, 3; + ŵȸ1 , offertrad1, offertrad1, char, 6; + żȸ1 , bidtrad1, bidtrad1, char, 6; + ŵŷ1, tradmdvol1, tradmdvol1, long, 10; + żŷ1, tradmsvol1, tradmsvol1, long, 10; + ŵŷ1, tradmdrate1, tradmdrate1, float, 6.2; + ŵŷ1, tradmsrate1, tradmsrate1, float, 6.2; + ŵŷ1, tradmdcha1, tradmdcha1, long, 10; + żŷ1, tradmscha1, tradmscha1, long, 10; + ŵǻڵ2 , offerno2, offerno2, char, 3; + żǻڵ2 , bidno2, bidno2, char, 3; + ŵȸ2 , offertrad2, offertrad2, char, 6; + żȸ2 , bidtrad2, bidtrad2, char, 6; + ŵŷ2, tradmdvol2, tradmdvol2, long, 10; + żŷ2, tradmsvol2, tradmsvol2, long, 10; + ŵŷ2, tradmdrate2, tradmdrate2, float, 6.2; + żŷ2, tradmsrate2, tradmsrate2, float, 6.2; + ŵŷ2, tradmdcha2, tradmdcha2, long, 10; + żŷ2, tradmscha2, tradmscha2, long, 10; + ŵǻڵ3 , offerno3, offerno3, char, 3; + żǻڵ3 , bidno3, bidno3, char, 3; + ŵȸ3 , offertrad3, offertrad3, char, 6; + żȸ3 , bidtrad3, bidtrad3, char, 6; + ŵŷ3, tradmdvol3, tradmdvol3, long, 10; + żŷ3, tradmsvol3, tradmsvol3, long, 10; + ŵŷ3, tradmdrate3, tradmdrate3, float, 6.2; + żŷ3, tradmsrate3, tradmsrate3, float, 6.2; + ŵŷ3, tradmdcha3, tradmdcha3, long, 10; + żŷ3, tradmscha3, tradmscha3, long, 10; + ŵǻڵ4 , offerno4, offerno4, char, 3; + żǻڵ4 , bidno4, bidno4, char, 3; + ŵȸ4 , offertrad4, offertrad4, char, 6; + żȸ4 , bidtrad4, bidtrad4, char, 6; + ŵŷ4, tradmdvol4, tradmdvol4, long, 10; + żŷ4, tradmsvol4, tradmsvol4, long, 10; + ŵŷ4, tradmdrate4, tradmdrate4, float, 6.2; + żŷ4, tradmsrate4, tradmsrate4, float, 6.2; + ŵŷ4, tradmdcha4, tradmdcha4, long, 10; + żŷ4, tradmscha4, tradmscha4, long, 10; + ŵǻڵ5 , offerno5, offerno5, char, 3; + żǻڵ5 , bidno5, bidno5, char, 3; + ŵȸ5 , offertrad5, offertrad5, char, 6; + żȸ5 , bidtrad5, bidtrad5, char, 6; + ŵŷ5, tradmdvol5, tradmdvol5, long, 10; + żŷ5, tradmsvol5, tradmsvol5, long, 10; + ŵŷ5, tradmdrate5, tradmdrate5, float, 6.2; + żŷ5, tradmsrate5, tradmsrate5, float, 6.2; + ŵŷ5, tradmdcha5, tradmdcha5, long, 10; + żŷ5, tradmscha5, tradmscha5, long, 10; + ܱǻŵհ, ftradmdvol, ftradmdvol, char, 10; + ܱǻżհ, ftradmsvol, ftradmsvol, char, 10; +ܱǻŵŷ, ftradmdrate, ftradmdrate, float, 6.2; +ܱǻżŷ, ftradmsrate, ftradmsrate, float, 6.2; +ܱǻŵŷ, ftradmdcha, ftradmdcha, char, 10; +ܱǻżŷ, ftradmscha, ftradmscha, char, 10; + ڵ, shcode, shcode, char, 6; + ŵŷ1, tradmdval1, tradmdval1, long, 15; + żŷ1, tradmsval1, tradmsval1, long, 15; + ŵմܰ1, tradmdavg1, tradmdavg1, long, 7; + żմܰ1, tradmsavg1, tradmsavg1, long, 7; + ŵŷ2, tradmdval2, tradmdval2, long, 15; + żŷ2, tradmsval2, tradmsval2, long, 15; + ŵմܰ2, tradmdavg2, tradmdavg2, long, 7; + żմܰ2, tradmsavg2, tradmsavg2, long, 7; + ŵŷ3, tradmdval3, tradmdval3, long, 15; + żŷ3, tradmsval3, tradmsval3, long, 15; + ŵմܰ3, tradmdavg3, tradmdavg3, long, 7; + żմܰ3, tradmsavg3, tradmsavg3, long, 7; + ŵŷ4, tradmdval4, tradmdval4, long, 15; + żŷ4, tradmsval4, tradmsval4, long, 15; + ŵմܰ4, tradmdavg4, tradmdavg4, long, 7; + żմܰ4, tradmsavg4, tradmsavg4, long, 7; + ŵŷ5, tradmdval5, tradmdval5, long, 15; + żŷ5, tradmsval5, tradmsval5, long, 15; + ŵմܰ5, tradmdavg5, tradmdavg5, long, 7; + żմܰ5, tradmsavg5, tradmsavg5, long, 7; +ܱǻŵŷ, ftradmdval, ftradmdval, long, 15; +ܱǻżŷ, ftradmsval, ftradmsval, long, 15; +ܱǻŵմܰ, ftradmdavg, ftradmdavg, long, 7; +ܱǻżմܰ, ftradmsavg, ftradmsavg, long, 7; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/K3_.res b/sample_python/Res/K3_.res new file mode 100644 index 0000000..b830393 --- /dev/null +++ b/sample_python/Res/K3_.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQü(K3), K3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + հ, w_avrg, w_avrg, long, 8; + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + , status, status, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/K3__1.res b/sample_python/Res/K3__1.res new file mode 100644 index 0000000..b830393 --- /dev/null +++ b/sample_python/Res/K3__1.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQü(K3), K3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + հ, w_avrg, w_avrg, long, 8; + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + , status, status, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/KH_.res b/sample_python/Res/KH_.res new file mode 100644 index 0000000..0d59ba7 --- /dev/null +++ b/sample_python/Res/KH_.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQα׷Ÿ(KH), KH_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, long, 1; + ϴ, change, change, long, 8; + ŷ, volume, volume, long, 10; + , drate, drate, float, 6.2; + + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 12; + ͸żȣ ܷ, cshrem, cshrem, long, 12; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 12; + ͸żȣ ܷ, bshrem, bshrem, long, 12; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 12; + ͸żȣ , cshvolume, cshvolume, long, 12; + ͸ŵȣ , bdhvolume, bdhvolume, long, 12; + ͸żȣ , bshvolume, bshvolume, long, 12; + + üŵŹü, dwcvolume, dwcvolume, long, 12; + üżŹü, swcvolume, swcvolume, long, 12; + üŵڱü, djcvolume, djcvolume, long, 12; + üżڱü, sjcvolume, sjcvolume, long, 12; + + üŵü, tdvolume, tdvolume, long, 12; + üżü, tsvolume, tsvolume, long, 12; + üż , tvol, tvol, long, 12; + + üŵŹüݾ, dwcvalue, dwcvalue, long, 15; + üżŹüݾ, swcvalue, swcvalue, long, 15; + üŵڱüݾ, djcvalue, djcvalue, long, 15; + üżڱüݾ, sjcvalue, sjcvalue, long, 15; + + üŵüݾ, tdvalue, tdvalue, long, 15; + üżüݾ, tsvalue, tsvalue, long, 15; + üż ݾ, tval, tval, long, 15; + + ŵ ü, pdgvolume, pdgvolume, long, 12; + ż ü, psgvolume, psgvolume, long, 12; + + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/KH__1.res b/sample_python/Res/KH__1.res new file mode 100644 index 0000000..0d59ba7 --- /dev/null +++ b/sample_python/Res/KH__1.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQα׷Ÿ(KH), KH_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, long, 1; + ϴ, change, change, long, 8; + ŷ, volume, volume, long, 10; + , drate, drate, float, 6.2; + + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 12; + ͸żȣ ܷ, cshrem, cshrem, long, 12; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 12; + ͸żȣ ܷ, bshrem, bshrem, long, 12; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 12; + ͸żȣ , cshvolume, cshvolume, long, 12; + ͸ŵȣ , bdhvolume, bdhvolume, long, 12; + ͸żȣ , bshvolume, bshvolume, long, 12; + + üŵŹü, dwcvolume, dwcvolume, long, 12; + üżŹü, swcvolume, swcvolume, long, 12; + üŵڱü, djcvolume, djcvolume, long, 12; + üżڱü, sjcvolume, sjcvolume, long, 12; + + üŵü, tdvolume, tdvolume, long, 12; + üżü, tsvolume, tsvolume, long, 12; + üż , tvol, tvol, long, 12; + + üŵŹüݾ, dwcvalue, dwcvalue, long, 15; + üżŹüݾ, swcvalue, swcvalue, long, 15; + üŵڱüݾ, djcvalue, djcvalue, long, 15; + üżڱüݾ, sjcvalue, sjcvalue, long, 15; + + üŵüݾ, tdvalue, tdvalue, long, 15; + üżüݾ, tsvalue, tsvalue, long, 15; + üż ݾ, tval, tval, long, 15; + + ŵ ü, pdgvolume, pdgvolume, long, 12; + ż ü, psgvolume, psgvolume, long, 12; + + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/KM_.res b/sample_python/Res/KM_.res new file mode 100644 index 0000000..1d2f725 --- /dev/null +++ b/sample_python/Res/KM_.res @@ -0,0 +1,119 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQα׷Ÿü(KM), KM_, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + а, gubun, gubun, char, 1; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 6; + ͸żȣ ܷ, cshrem, cshrem, long, 6; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 6; + ͸żȣ ܷ, bshrem, bshrem, long, 6; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 6; + ͸żȣ , cshvolume, cshvolume, long, 6; + ͸ŵȣ , bdhvolume, bdhvolume, long, 6; + ͸żȣ , bshvolume, bshvolume, long, 6; + + ͸ŵŹü, cdwvolume, cdwvolume, long, 6; + ͸ŵڱü, cdjvolume, cdjvolume, long, 6; + ͸żŹü, cswvolume, cswvolume, long, 6; + ͸żڱü, csjvolume, csjvolume, long, 6; + Źż , cwvol, cwvol, long, 6; + ڱż , cjvol, cjvol, long, 6; + + ͸ŵŹü, bdwvolume, bdwvolume, long, 6; + ͸ŵڱü, bdjvolume, bdjvolume, long, 6; + ͸żŹü, bswvolume, bswvolume, long, 6; + ͸żڱü, bsjvolume, bsjvolume, long, 6; + Źż , bwvol, bwvol, long, 6; + ڱż , bjvol, bjvol, long, 6; + + üŵŹü, dwvolume, dwvolume, long, 6; + üżŹü, swvolume, swvolume, long, 6; + üŹż , wvol, wvol, long, 6; + üŵڱü, djvolume, djvolume, long, 6; + üżڱü, sjvolume, sjvolume, long, 6; + üڱż , jvol, jvol, long, 6; + + ͸ŵŹüݾ, cdwvalue, cdwvalue, long, 8; + ͸ŵڱüݾ, cdjvalue, cdjvalue, long, 8; + ͸żŹüݾ, cswvalue, cswvalue, long, 8; + ͸żڱüݾ, csjvalue, csjvalue, long, 8; + Źż ݾ, cwval, cwval, long, 8; + ڱż ݾ, cjval, cjval, long, 8; + + ͸ŵŹüݾ, bdwvalue, bdwvalue, long, 8; + ͸ŵڱüݾ, bdjvalue, bdjvalue, long, 8; + ͸żŹüݾ, bswvalue, bswvalue, long, 8; + ͸żڱüݾ, bsjvalue, bsjvalue, long, 8; + Źż ݾ, bwval, bwval, long, 8; + ڱż ݾ, bjval, bjval, long, 8; + + üŵŹüݾ, dwvalue, dwvalue, long, 8; + üżŹüݾ, swvalue, swvalue, long, 8; + üŹż ݾ, wval, wval, long, 8; + üŵڱüݾ, djvalue, djvalue, long, 8; + üżڱüݾ, sjvalue, sjvalue, long, 8; + üڱż ݾ, jval, jval, long, 8; + + KOSDAQ50 , k50jisu, k50jisu, float, 6.2; + KOSDAQ50 ϴ񱸺, k50sign, k50sign, char, 1; + KOSDAQ50 ϴ, change, change, float, 6.2; + KOSDAQ50 ̽ý, k50basis, k50basis, float, 4.2; + + ͸ŵüհ, cdvolume, cdvolume, long, 6; + ͸żüհ, csvolume, csvolume, long, 6; + ͼż հ, cvol, cvol, long, 6; + + ͸ŵüհ, bdvolume, bdvolume, long, 6; + ͸żüհ, bsvolume, bsvolume, long, 6; + ͼż հ, bvol, bvol, long, 6; + + üŵüհ, tdvolume, tdvolume, long, 6; + üżüհ, tsvolume, tsvolume, long, 6; + üż հ, tvol, tvol, long, 6; + + ͸ŵüݾհ, cdvalue, cdvalue, long, 8; + ͸żüݾհ, csvalue, csvalue, long, 8; + ͼż ݾհ, cval, cval, long, 8; + + ͸ŵüݾհ, bdvalue, bdvalue, long, 8; + ͸żüݾհ, bsvalue, bsvalue, long, 8; + ͼż ݾհ, bval, bval, long, 8; + + üŵüݾհ, tdvalue, tdvalue, long, 8; + üżüݾհ, tsvalue, tsvalue, long, 8; + üż ݾհ, tval, tval, long, 8; + + ͸ŵü, p_cdvolcha, p_cdvolcha, long, 6; + ͸żü, p_csvolcha, p_csvolcha, long, 6; + ͼż , p_cvolcha, p_cvolcha, long, 6; + + ͸ŵü, p_bdvolcha, p_bdvolcha, long, 6; + ͸żü, p_bsvolcha, p_bsvolcha, long, 6; + ͼż , p_bvolcha, p_bvolcha, long, 6; + + üŵü, p_tdvolcha, p_tdvolcha, long, 6; + üżü, p_tsvolcha, p_tsvolcha, long, 6; + üż , p_tvolcha, p_tvolcha, long, 6; + + ͸ŵüݾ, p_cdvalcha, p_cdvalcha, long, 8; + ͸żüݾ, p_csvalcha, p_csvalcha, long, 8; + ͼż ݾ, p_cvalcha, p_cvalcha, long, 8; + + ͸ŵüݾ, p_bdvalcha, p_bdvalcha, long, 8; + ͸żüݾ, p_bsvalcha, p_bsvalcha, long, 8; + ͼż ݾ, p_bvalcha, p_bvalcha, long, 8; + + üŵüݾ, p_tdvalcha, p_tdvalcha, long, 8; + üżüݾ, p_tsvalcha, p_tsvalcha, long, 8; + üż ݾ, p_tvalcha, p_tvalcha, long, 8; + + а, gubun, gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/KM__1.res b/sample_python/Res/KM__1.res new file mode 100644 index 0000000..1d2f725 --- /dev/null +++ b/sample_python/Res/KM__1.res @@ -0,0 +1,119 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQα׷Ÿü(KM), KM_, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + а, gubun, gubun, char, 1; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 6; + ͸żȣ ܷ, cshrem, cshrem, long, 6; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 6; + ͸żȣ ܷ, bshrem, bshrem, long, 6; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 6; + ͸żȣ , cshvolume, cshvolume, long, 6; + ͸ŵȣ , bdhvolume, bdhvolume, long, 6; + ͸żȣ , bshvolume, bshvolume, long, 6; + + ͸ŵŹü, cdwvolume, cdwvolume, long, 6; + ͸ŵڱü, cdjvolume, cdjvolume, long, 6; + ͸żŹü, cswvolume, cswvolume, long, 6; + ͸żڱü, csjvolume, csjvolume, long, 6; + Źż , cwvol, cwvol, long, 6; + ڱż , cjvol, cjvol, long, 6; + + ͸ŵŹü, bdwvolume, bdwvolume, long, 6; + ͸ŵڱü, bdjvolume, bdjvolume, long, 6; + ͸żŹü, bswvolume, bswvolume, long, 6; + ͸żڱü, bsjvolume, bsjvolume, long, 6; + Źż , bwvol, bwvol, long, 6; + ڱż , bjvol, bjvol, long, 6; + + üŵŹü, dwvolume, dwvolume, long, 6; + üżŹü, swvolume, swvolume, long, 6; + üŹż , wvol, wvol, long, 6; + üŵڱü, djvolume, djvolume, long, 6; + üżڱü, sjvolume, sjvolume, long, 6; + üڱż , jvol, jvol, long, 6; + + ͸ŵŹüݾ, cdwvalue, cdwvalue, long, 8; + ͸ŵڱüݾ, cdjvalue, cdjvalue, long, 8; + ͸żŹüݾ, cswvalue, cswvalue, long, 8; + ͸żڱüݾ, csjvalue, csjvalue, long, 8; + Źż ݾ, cwval, cwval, long, 8; + ڱż ݾ, cjval, cjval, long, 8; + + ͸ŵŹüݾ, bdwvalue, bdwvalue, long, 8; + ͸ŵڱüݾ, bdjvalue, bdjvalue, long, 8; + ͸żŹüݾ, bswvalue, bswvalue, long, 8; + ͸żڱüݾ, bsjvalue, bsjvalue, long, 8; + Źż ݾ, bwval, bwval, long, 8; + ڱż ݾ, bjval, bjval, long, 8; + + üŵŹüݾ, dwvalue, dwvalue, long, 8; + üżŹüݾ, swvalue, swvalue, long, 8; + üŹż ݾ, wval, wval, long, 8; + üŵڱüݾ, djvalue, djvalue, long, 8; + üżڱüݾ, sjvalue, sjvalue, long, 8; + üڱż ݾ, jval, jval, long, 8; + + KOSDAQ50 , k50jisu, k50jisu, float, 6.2; + KOSDAQ50 ϴ񱸺, k50sign, k50sign, char, 1; + KOSDAQ50 ϴ, change, change, float, 6.2; + KOSDAQ50 ̽ý, k50basis, k50basis, float, 4.2; + + ͸ŵüհ, cdvolume, cdvolume, long, 6; + ͸żüհ, csvolume, csvolume, long, 6; + ͼż հ, cvol, cvol, long, 6; + + ͸ŵüհ, bdvolume, bdvolume, long, 6; + ͸żüհ, bsvolume, bsvolume, long, 6; + ͼż հ, bvol, bvol, long, 6; + + üŵüհ, tdvolume, tdvolume, long, 6; + üżüհ, tsvolume, tsvolume, long, 6; + üż հ, tvol, tvol, long, 6; + + ͸ŵüݾհ, cdvalue, cdvalue, long, 8; + ͸żüݾհ, csvalue, csvalue, long, 8; + ͼż ݾհ, cval, cval, long, 8; + + ͸ŵüݾհ, bdvalue, bdvalue, long, 8; + ͸żüݾհ, bsvalue, bsvalue, long, 8; + ͼż ݾհ, bval, bval, long, 8; + + üŵüݾհ, tdvalue, tdvalue, long, 8; + üżüݾհ, tsvalue, tsvalue, long, 8; + üż ݾհ, tval, tval, long, 8; + + ͸ŵü, p_cdvolcha, p_cdvolcha, long, 6; + ͸żü, p_csvolcha, p_csvolcha, long, 6; + ͼż , p_cvolcha, p_cvolcha, long, 6; + + ͸ŵü, p_bdvolcha, p_bdvolcha, long, 6; + ͸żü, p_bsvolcha, p_bsvolcha, long, 6; + ͼż , p_bvolcha, p_bvolcha, long, 6; + + üŵü, p_tdvolcha, p_tdvolcha, long, 6; + üżü, p_tsvolcha, p_tsvolcha, long, 6; + üż , p_tvolcha, p_tvolcha, long, 6; + + ͸ŵüݾ, p_cdvalcha, p_cdvalcha, long, 8; + ͸żüݾ, p_csvalcha, p_csvalcha, long, 8; + ͼż ݾ, p_cvalcha, p_cvalcha, long, 8; + + ͸ŵüݾ, p_bdvalcha, p_bdvalcha, long, 8; + ͸żüݾ, p_bsvalcha, p_bsvalcha, long, 8; + ͼż ݾ, p_bvalcha, p_bvalcha, long, 8; + + üŵüݾ, p_tdvalcha, p_tdvalcha, long, 8; + üżüݾ, p_tsvalcha, p_tsvalcha, long, 8; + üż ݾ, p_tvalcha, p_tvalcha, long, 8; + + а, gubun, gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/KS_.res b/sample_python/Res/KS_.res new file mode 100644 index 0000000..e75ed30 --- /dev/null +++ b/sample_python/Res/KS_.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQ켱ȣ(KS), KS_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/KS__1.res b/sample_python/Res/KS__1.res new file mode 100644 index 0000000..e75ed30 --- /dev/null +++ b/sample_python/Res/KS__1.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQ켱ȣ(KS), KS_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/MK2.res b/sample_python/Res/MK2.res new file mode 100644 index 0000000..ffab240 --- /dev/null +++ b/sample_python/Res/MK2.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, US(MK2), MK2, attr, key=16, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ɺڵ, symbol, symbol, char, 16; + end + OutBlock,,output; + begin + , date, date, char, 8; + ð, time, time, char, 6; + ѱ, kodate, kodate, char, 8; + ѱð, kotime, kotime, char, 6; + ð, open, open, float, 9.2; + , high, high, float, 9.2; + , low, low, float, 9.2; + 簡, price, price, float, 9.2; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, float, 9.2; + , uprate, uprate, float, 9.2; + żȣ, bidho, bidho, float, 9.2; + żܷ, bidrem, bidrem, long, 9; + ŵȣ, offerho, offerho, float, 9.2; + ŵܷ, offerrem, offerrem, long, 9; + ŷ, volume, volume, float, 12.0; + ɹ, xsymbol, xsymbol, char, 16; + üŷ, cvolume, cvolume, float, 8.0; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/MK2_1.res b/sample_python/Res/MK2_1.res new file mode 100644 index 0000000..ffab240 --- /dev/null +++ b/sample_python/Res/MK2_1.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, US(MK2), MK2, attr, key=16, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ɺڵ, symbol, symbol, char, 16; + end + OutBlock,,output; + begin + , date, date, char, 8; + ð, time, time, char, 6; + ѱ, kodate, kodate, char, 8; + ѱð, kotime, kotime, char, 6; + ð, open, open, float, 9.2; + , high, high, float, 9.2; + , low, low, float, 9.2; + 簡, price, price, float, 9.2; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, float, 9.2; + , uprate, uprate, float, 9.2; + żȣ, bidho, bidho, float, 9.2; + żܷ, bidrem, bidrem, long, 9; + ŵȣ, offerho, offerho, float, 9.2; + ŵܷ, offerrem, offerrem, long, 9; + ŷ, volume, volume, float, 12.0; + ɹ, xsymbol, xsymbol, char, 16; + üŷ, cvolume, cvolume, float, 8.0; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/MMDAQ91200.res b/sample_python/Res/MMDAQ91200.res new file mode 100644 index 0000000..95439e4 --- /dev/null +++ b/sample_python/Res/MMDAQ91200.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP + .Func,Ļǰűȸ,MMDAQ91200,SERVICE=MMDAQ91200,headtype=B,CREATOR=ڰ,CREDATE=2022/04/18 11:39:57; + BEGIN_DATA_MAP + MMDAQ91200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ߺзڵ, IsuMdclssCode, IsuMdclssCode, char, 2; + end + MMDAQ91200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ߺзڵ, IsuMdclssCode, IsuMdclssCode, char, 2; + end + MMDAQ91200OutBlock2,Out(*EMPTY*),output,occurs; + begin + Һзڵ, IsuSmclssCode, IsuSmclssCode, char, 3; + ߺзڵ, IsuMdclssCode, IsuMdclssCode, char, 2; + ߺз, IsuLrgMdclssNm, IsuLrgMdclssNm, char, 40; + ߼Һз, IsuLrgMidSmclssNm, IsuLrgMidSmclssNm, char, 40; + ѱ, ShtnHanglIsuNm, ShtnHanglIsuNm, char, 40; + Źű, CsgnMgnrt, CsgnMgnrt, double, 26.9; + ű, MaintMgnrt, MaintMgnrt, double, 26.9; + ű, MnyMgnrt, MnyMgnrt, double, 26.9; + ܿϼ, RmndDays, RmndDays, long, 6; + 1ֹű, OnePrcntrOrdMgn, OnePrcntrOrdMgn, long, 17; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/MMDAQ91200_1.res b/sample_python/Res/MMDAQ91200_1.res new file mode 100644 index 0000000..95439e4 --- /dev/null +++ b/sample_python/Res/MMDAQ91200_1.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP + .Func,Ļǰűȸ,MMDAQ91200,SERVICE=MMDAQ91200,headtype=B,CREATOR=ڰ,CREDATE=2022/04/18 11:39:57; + BEGIN_DATA_MAP + MMDAQ91200InBlock1,In(*EMPTY*),input; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ߺзڵ, IsuMdclssCode, IsuMdclssCode, char, 2; + end + MMDAQ91200OutBlock1,In(*EMPTY*),output; + begin + ڵ尹, RecCnt, RecCnt, long, 5 + зڵ, IsuLgclssCode, IsuLgclssCode, char, 2; + ߺзڵ, IsuMdclssCode, IsuMdclssCode, char, 2; + end + MMDAQ91200OutBlock2,Out(*EMPTY*),output,occurs; + begin + Һзڵ, IsuSmclssCode, IsuSmclssCode, char, 3; + ߺзڵ, IsuMdclssCode, IsuMdclssCode, char, 2; + ߺз, IsuLrgMdclssNm, IsuLrgMdclssNm, char, 40; + ߼Һз, IsuLrgMidSmclssNm, IsuLrgMidSmclssNm, char, 40; + ѱ, ShtnHanglIsuNm, ShtnHanglIsuNm, char, 40; + Źű, CsgnMgnrt, CsgnMgnrt, double, 26.9; + ű, MaintMgnrt, MaintMgnrt, double, 26.9; + ű, MnyMgnrt, MnyMgnrt, double, 26.9; + ܿϼ, RmndDays, RmndDays, long, 6; + 1ֹű, OnePrcntrOrdMgn, OnePrcntrOrdMgn, long, 17; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/NWS.res b/sample_python/Res/NWS.res new file mode 100644 index 0000000..d6d43aa --- /dev/null +++ b/sample_python/Res/NWS.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ǽð Ŷ(NWS), NWS, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, nwcode, nwcode, char, 6; + end + OutBlock,,output; + begin + ¥, date, date, char, 8; + ð, time, time, char, 6; + , id, id, char, 2; + Ű, realkey, realkey, char, 24; + , title, title, char, 300; + ڵ, code, code, char, 240; + BODY, bodysize, bodysize, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/NWS_1.res b/sample_python/Res/NWS_1.res new file mode 100644 index 0000000..d6d43aa --- /dev/null +++ b/sample_python/Res/NWS_1.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ǽð Ŷ(NWS), NWS, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, nwcode, nwcode, char, 6; + end + OutBlock,,output; + begin + ¥, date, date, char, 8; + ð, time, time, char, 6; + , id, id, char, 2; + Ű, realkey, realkey, char, 24; + , title, title, char, 300; + ڵ, code, code, char, 240; + BODY, bodysize, bodysize, long, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/O01.res b/sample_python/Res/O01.res new file mode 100644 index 0000000..cc0e0ce --- /dev/null +++ b/sample_python/Res/O01.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, , O01, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, userId, userId, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 3; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/O01_1.res b/sample_python/Res/O01_1.res new file mode 100644 index 0000000..cc0e0ce --- /dev/null +++ b/sample_python/Res/O01_1.res @@ -0,0 +1,130 @@ +BEGIN_FUNCTION_MAP +.Feed, , O01, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + trڵ, trcode1, trcode1, char, 4; + ȸȣ, firmno, firmno, char, 3; + ¹ȣ, acntno, acntno, char, 11; + ¹ȣ, acntno1, acntno1, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, brnno, brnno, char, 3; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹȣ, ordno1, ordno1, char, 3; + ֹȣ, ordno, ordno, long, 7; + ֹȣ, orgordno1, orgordno1, char, 3; + ֹȣ, orgordno, orgordno, long, 7; + ֹȣ, prntordno, prntordno, char, 3; + ֹȣ, prntordno1, prntordno1, long, 7; + ȣ, isuno, isuno, char, 12; + ɼȣ, fnoIsuno, fnoIsuno, char, 8; + ɼ, fnoIsunm, fnoIsunm, char, 40; + ǰзڵ, pdgrpcode, pdgrpcode, char, 2; + ɼ, fnoIsuptntp, fnoIsuptntp, char, 1; + Ÿű, bnstp, bnstp, char, 1; + ұ, mrctp, mrctp, char, 1; + ֹ, ordqty, ordqty, long, 16; + ȣڵ, hogatype, hogatype, char, 2; + ŷڵ, mmgb, mmgb, char, 2; + ֹ, ordprc, ordprc, double, 13.2; + ü, unercqty, unercqty, long, 16; + Ÿü, commdacode, commdacode, char, 2; + ջڵ, peeamtcode, peeamtcode, char, 2; + , mgempno, mgempno, char, 9; + ɼǰŷݾ, fnotrdunitamt, fnotrdunitamt, double, 19.8; + óð, trxtime, trxtime, char, 9; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, char, 10; + Ʈ ȣ, ptflno, ptflno, char, 10; + ٽϹȣ, bskno, bskno, char, 10; + Ʈġȣ, trchno, trchno, char, 10; + ۹ȣ, Itemno, Itemno, char, 10; + ֹId, userId, userId, char, 16; + ùȣ, opdrtnno, opdrtnno, char, 12; + ڵ, rjtcode, rjtcode, char, 3; + Ȯμ, mrccnfqty, mrccnfqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹҼ, orgordmrcqty, orgordmrcqty, long, 16; + ð(üð), ctrcttime, ctrcttime, char, 8; + ȣ, ctrctno, ctrctno, char, 10; + üᰡ, execprc, execprc, double, 13.2; + ü, execqty, execqty, long, 16; + űü, newqty, newqty, long, 16; + ûü, qdtqty, qdtqty, long, 16; + , lastqty, lastqty, long, 16; + üü, lallexecqty, lallexecqty, long, 16; + üüݾ, allexecamt, allexecamt, long, 16; + ܰ򰡱, fnobalevaltp, fnobalevaltp, char, 1; + Ÿżͱݾ, bnsplamt, bnsplamt, long, 16; + ɼȣ1, fnoIsuno1, fnoIsuno1, char, 8; + Ÿű1, bnstp1, bnstp1, char, 1; + üᰡ1, execprc1, execprc1, double, 13.2; + űü1, newqty1, newqty1, long, 16; + ûü1, qdtqty1, qdtqty1, long, 16; + üüݾ1, allexecamt1, allexecamt1, long, 16; + ɼȣ2, fnoIsuno2, fnoIsuno2, char, 8; + Ÿű2, bnstp2, bnstp2, char, 1; + üᰡ2, execprc2, execprc2, double, 13.2; + űü2, newqty2, newqty2, long, 16; + ûü2, lqdtqty2, lqdtqty2, long, 16; + üüݾ2, allexecamt2, allexecamt2, long, 16; + , dps, dps, long, 16; + ݾ, ftsubtdsgnamt, ftsubtdsgnamt, long, 16; + ű, mgn, mgn, long, 16; + ű, mnymgn, mnymgn, long, 16; + ֹɱݾ, ordableamt, ordableamt, long, 16; + ֹݾ, mnyordableamt, mnyordableamt, long, 16; + ܰ ȣ1, fnoIsuno_1, fnoIsuno_1, char, 8; + ܰ Ÿű1, bnstp_1, bnstp_1, char, 1; + ̰1, unsttqty_1, unsttqty_1, long, 16; + ֹɼ1, lqdtableqty_1, lqdtableqty_1, long, 16; + հ1, avrprc_1, avrprc_1, double, 13.2; + ܰ ȣ2, fnoIsuno_2, fnoIsuno_2, char, 8; + ܰ Ÿű2, bnstp_2, bnstp_2, char, 1; + ̰2, unsttqty_2, unsttqty_2, long, 16; + ֹɼ2, lqdtableqty_2, lqdtableqty_2, long, 16; + հ2, avrprc_2, avrprc_2, double, 13.2; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/OC0.res b/sample_python/Res/OC0.res new file mode 100644 index 0000000..fe1ec5b --- /dev/null +++ b/sample_python/Res/OC0.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼü(C0), OC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, float, 6.2; + , drate, drate, float, 6.2; + 簡, price, price, float, 6.2; + ð, open, open, float, 6.2; + , high, high, float, 6.2; + , low, low, float, 6.2; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + ŵȣ1, offerho1, offerho1, float, 6.2; + żȣ1, bidho1, bidho1, float, 6.2; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, float, 6.2; + KOSPI, eqva, eqva, float, 7.2; + ̷а, theoryprice, theoryprice, float, 6.2; + 纯, impv, impv, float, 6.2; + ̰, openyakcha, openyakcha, long, 8; + ðġ, timevalue, timevalue, float, 6.2; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/OC0_1.res b/sample_python/Res/OC0_1.res new file mode 100644 index 0000000..fe1ec5b --- /dev/null +++ b/sample_python/Res/OC0_1.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼü(C0), OC0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, float, 6.2; + , drate, drate, float, 6.2; + 簡, price, price, float, 6.2; + ð, open, open, float, 6.2; + , high, high, float, 6.2; + , low, low, float, 6.2; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 6; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + ŵȣ1, offerho1, offerho1, float, 6.2; + żȣ1, bidho1, bidho1, float, 6.2; + ̰, openyak, openyak, long, 8; + KOSPI200, k200jisu, k200jisu, float, 6.2; + KOSPI, eqva, eqva, float, 7.2; + ̷а, theoryprice, theoryprice, float, 6.2; + 纯, impv, impv, float, 6.2; + ̰, openyakcha, openyakcha, long, 8; + ðġ, timevalue, timevalue, float, 6.2; + , jgubun, jgubun, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/OD0.res b/sample_python/Res/OD0.res new file mode 100644 index 0000000..29e321b --- /dev/null +++ b/sample_python/Res/OD0.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼǽǽðѰ(D0), OD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, float, 8.2; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, float, 8.2; + ڵ , opttcode, opttcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/OD0_1.res b/sample_python/Res/OD0_1.res new file mode 100644 index 0000000..29e321b --- /dev/null +++ b/sample_python/Res/OD0_1.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼǽǽðѰ(D0), OD0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + ӸŸſ , gubun, gubun, char, 1; + ǽðѿ , dy_gubun, dy_gubun, char, 1; + ǽðѰ , dy_uplmtprice, dy_uplmtprice, float, 8.2; + ǽðѰ , dy_dnlmtprice, dy_dnlmtprice, float, 8.2; + ڵ , opttcode, opttcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/OH0.res b/sample_python/Res/OH0.res new file mode 100644 index 0000000..a3f1af4 --- /dev/null +++ b/sample_python/Res/OH0.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼȣ(H0), OH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, double, 6.2; + żȣ1, bidho1, bidho1, double, 6.2; + ŵȣ1, offerrem1, offerrem1, long, 7; + żȣ1, bidrem1, bidrem1, long, 7; + ŵȣǼ1, offercnt1, offercnt1, long, 5; + żȣǼ1, bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, double, 6.2; + żȣ2, bidho2, bidho2, double, 6.2; + ŵȣ2, offerrem2, offerrem2, long, 7; + żȣ2, bidrem2, bidrem2, long, 7; + ŵȣǼ2, offercnt2, offercnt2, long, 5; + żȣǼ2, bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, double, 6.2; + żȣ3, bidho3, bidho3, double, 6.2; + ŵȣ3, offerrem3, offerrem3, long, 7; + żȣ3, bidrem3, bidrem3, long, 7; + ŵȣǼ3, offercnt3, offercnt3, long, 5; + żȣǼ3, bidcnt3, bidcnt3, long, 5; + ŵȣ4, offerho4, offerho4, double, 6.2; + żȣ4, bidho4, bidho4, double, 6.2; + ŵȣ4, offerrem4, offerrem4, long, 7; + żȣ4, bidrem4, bidrem4, long, 7; + ŵȣǼ4, offercnt4, offercnt4, long, 5; + żȣǼ4, bidcnt4, bidcnt4, long, 5; + ŵȣ5, offerho5, offerho5, double, 6.2; + żȣ5, bidho5, bidho5, double, 6.2; + ŵȣ5, offerrem5, offerrem5, long, 7; + żȣ5, bidrem5, bidrem5, long, 7; + ŵȣǼ5, offercnt5, offercnt5, long, 5; + żȣǼ5, bidcnt5, bidcnt5, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 7; + żȣѼ, totbidrem, totbidrem, long, 7; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ڵ, optcode, optcode, char, 8; + ϰȣ, danhochk, danhochk, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP +OH0 \ No newline at end of file diff --git a/sample_python/Res/OH0_1.res b/sample_python/Res/OH0_1.res new file mode 100644 index 0000000..a3f1af4 --- /dev/null +++ b/sample_python/Res/OH0_1.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼȣ(H0), OH0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, double, 6.2; + żȣ1, bidho1, bidho1, double, 6.2; + ŵȣ1, offerrem1, offerrem1, long, 7; + żȣ1, bidrem1, bidrem1, long, 7; + ŵȣǼ1, offercnt1, offercnt1, long, 5; + żȣǼ1, bidcnt1, bidcnt1, long, 5; + ŵȣ2, offerho2, offerho2, double, 6.2; + żȣ2, bidho2, bidho2, double, 6.2; + ŵȣ2, offerrem2, offerrem2, long, 7; + żȣ2, bidrem2, bidrem2, long, 7; + ŵȣǼ2, offercnt2, offercnt2, long, 5; + żȣǼ2, bidcnt2, bidcnt2, long, 5; + ŵȣ3, offerho3, offerho3, double, 6.2; + żȣ3, bidho3, bidho3, double, 6.2; + ŵȣ3, offerrem3, offerrem3, long, 7; + żȣ3, bidrem3, bidrem3, long, 7; + ŵȣǼ3, offercnt3, offercnt3, long, 5; + żȣǼ3, bidcnt3, bidcnt3, long, 5; + ŵȣ4, offerho4, offerho4, double, 6.2; + żȣ4, bidho4, bidho4, double, 6.2; + ŵȣ4, offerrem4, offerrem4, long, 7; + żȣ4, bidrem4, bidrem4, long, 7; + ŵȣǼ4, offercnt4, offercnt4, long, 5; + żȣǼ4, bidcnt4, bidcnt4, long, 5; + ŵȣ5, offerho5, offerho5, double, 6.2; + żȣ5, bidho5, bidho5, double, 6.2; + ŵȣ5, offerrem5, offerrem5, long, 7; + żȣ5, bidrem5, bidrem5, long, 7; + ŵȣǼ5, offercnt5, offercnt5, long, 5; + żȣǼ5, bidcnt5, bidcnt5, long, 5; + ŵȣѼ, totofferrem, totofferrem, long, 7; + żȣѼ, totbidrem, totbidrem, long, 7; + ŵȣѰǼ, totoffercnt, totoffercnt, long, 5; + żȣѰǼ, totbidcnt, totbidcnt, long, 5; + ڵ, optcode, optcode, char, 8; + ϰȣ, danhochk, danhochk, char, 1; + 뱸, alloc_gubun, alloc_gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP +OH0 \ No newline at end of file diff --git a/sample_python/Res/OK_.res b/sample_python/Res/OK_.res new file mode 100644 index 0000000..140a10c --- /dev/null +++ b/sample_python/Res/OK_.res @@ -0,0 +1,93 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQŷ(OK), OK_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵǻڵ1 , offerno1, offerno1, char, 3; + żǻڵ1 , bidno1, bidno1, char, 3; + ŵȸ1 , offertrad1, offertrad1, char, 6; + żȸ1 , bidtrad1, bidtrad1, char, 6; + ŵŷ1, tradmdvol1, tradmdvol1, long, 10; + żŷ1, tradmsvol1, tradmsvol1, long, 10; + ŵŷ1, tradmdrate1, tradmdrate1, float, 6.2; + ŵŷ1, tradmsrate1, tradmsrate1, float, 6.2; + ŵŷ1, tradmdcha1, tradmdcha1, long, 10; + żŷ1, tradmscha1, tradmscha1, long, 10; + ŵǻڵ2 , offerno2, offerno2, char, 3; + żǻڵ2 , bidno2, bidno2, char, 3; + ŵȸ2 , offertrad2, offertrad2, char, 6; + żȸ2 , bidtrad2, bidtrad2, char, 6; + ŵŷ2, tradmdvol2, tradmdvol2, long, 10; + żŷ2, tradmsvol2, tradmsvol2, long, 10; + ŵŷ2, tradmdrate2, tradmdrate2, float, 6.2; + żŷ2, tradmsrate2, tradmsrate2, float, 6.2; + ŵŷ2, tradmdcha2, tradmdcha2, long, 10; + żŷ2, tradmscha2, tradmscha2, long, 10; + ŵǻڵ3 , offerno3, offerno3, char, 3; + żǻڵ3 , bidno3, bidno3, char, 3; + ŵȸ3 , offertrad3, offertrad3, char, 6; + żȸ3 , bidtrad3, bidtrad3, char, 6; + ŵŷ3, tradmdvol3, tradmdvol3, long, 10; + żŷ3, tradmsvol3, tradmsvol3, long, 10; + ŵŷ3, tradmdrate3, tradmdrate3, float, 6.2; + żŷ3, tradmsrate3, tradmsrate3, float, 6.2; + ŵŷ3, tradmdcha3, tradmdcha3, long, 10; + żŷ3, tradmscha3, tradmscha3, long, 10; + ŵǻڵ4 , offerno4, offerno4, char, 3; + żǻڵ4 , bidno4, bidno4, char, 3; + ŵȸ4 , offertrad4, offertrad4, char, 6; + żȸ4 , bidtrad4, bidtrad4, char, 6; + ŵŷ4, tradmdvol4, tradmdvol4, long, 10; + żŷ4, tradmsvol4, tradmsvol4, long, 10; + ŵŷ4, tradmdrate4, tradmdrate4, float, 6.2; + żŷ4, tradmsrate4, tradmsrate4, float, 6.2; + ŵŷ4, tradmdcha4, tradmdcha4, long, 10; + żŷ4, tradmscha4, tradmscha4, long, 10; + ŵǻڵ5 , offerno5, offerno5, char, 3; + żǻڵ5 , bidno5, bidno5, char, 3; + ŵȸ5 , offertrad5, offertrad5, char, 6; + żȸ5 , bidtrad5, bidtrad5, char, 6; + ŵŷ5, tradmdvol5, tradmdvol5, long, 10; + żŷ5, tradmsvol5, tradmsvol5, long, 10; + ŵŷ5, tradmdrate5, tradmdrate5, float, 6.2; + żŷ5, tradmsrate5, tradmsrate5, float, 6.2; + ŵŷ5, tradmdcha5, tradmdcha5, long, 10; + żŷ5, tradmscha5, tradmscha5, long, 10; + ܱǻŵհ, ftradmdvol, ftradmdvol, char, 10; + ܱǻżհ, ftradmsvol, ftradmsvol, char, 10; +ܱǻŵŷ, ftradmdrate, ftradmdrate, float, 6.2; +ܱǻżŷ, ftradmsrate, ftradmsrate, float, 6.2; +ܱǻŵŷ, ftradmdcha, ftradmdcha, char, 10; +ܱǻżŷ, ftradmscha, ftradmscha, char, 10; + ڵ, shcode, shcode, char, 6; + ŵŷ1, tradmdval1, tradmdval1, long, 15; + żŷ1, tradmsval1, tradmsval1, long, 15; + ŵմܰ1, tradmdavg1, tradmdavg1, long, 7; + żմܰ1, tradmsavg1, tradmsavg1, long, 7; + ŵŷ2, tradmdval2, tradmdval2, long, 15; + żŷ2, tradmsval2, tradmsval2, long, 15; + ŵմܰ2, tradmdavg2, tradmdavg2, long, 7; + żմܰ2, tradmsavg2, tradmsavg2, long, 7; + ŵŷ3, tradmdval3, tradmdval3, long, 15; + żŷ3, tradmsval3, tradmsval3, long, 15; + ŵմܰ3, tradmdavg3, tradmdavg3, long, 7; + żմܰ3, tradmsavg3, tradmsavg3, long, 7; + ŵŷ4, tradmdval4, tradmdval4, long, 15; + żŷ4, tradmsval4, tradmsval4, long, 15; + ŵմܰ4, tradmdavg4, tradmdavg4, long, 7; + żմܰ4, tradmsavg4, tradmsavg4, long, 7; + ŵŷ5, tradmdval5, tradmdval5, long, 15; + żŷ5, tradmsval5, tradmsval5, long, 15; + ŵմܰ5, tradmdavg5, tradmdavg5, long, 7; + żմܰ5, tradmsavg5, tradmsavg5, long, 7; +ܱǻŵŷ, ftradmdval, ftradmdval, long, 15; +ܱǻżŷ, ftradmsval, ftradmsval, long, 15; +ܱǻŵմܰ, ftradmdavg, ftradmdavg, long, 7; +ܱǻżմܰ, ftradmsavg, ftradmsavg, long, 7; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/OK__1.res b/sample_python/Res/OK__1.res new file mode 100644 index 0000000..140a10c --- /dev/null +++ b/sample_python/Res/OK__1.res @@ -0,0 +1,93 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQŷ(OK), OK_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵǻڵ1 , offerno1, offerno1, char, 3; + żǻڵ1 , bidno1, bidno1, char, 3; + ŵȸ1 , offertrad1, offertrad1, char, 6; + żȸ1 , bidtrad1, bidtrad1, char, 6; + ŵŷ1, tradmdvol1, tradmdvol1, long, 10; + żŷ1, tradmsvol1, tradmsvol1, long, 10; + ŵŷ1, tradmdrate1, tradmdrate1, float, 6.2; + ŵŷ1, tradmsrate1, tradmsrate1, float, 6.2; + ŵŷ1, tradmdcha1, tradmdcha1, long, 10; + żŷ1, tradmscha1, tradmscha1, long, 10; + ŵǻڵ2 , offerno2, offerno2, char, 3; + żǻڵ2 , bidno2, bidno2, char, 3; + ŵȸ2 , offertrad2, offertrad2, char, 6; + żȸ2 , bidtrad2, bidtrad2, char, 6; + ŵŷ2, tradmdvol2, tradmdvol2, long, 10; + żŷ2, tradmsvol2, tradmsvol2, long, 10; + ŵŷ2, tradmdrate2, tradmdrate2, float, 6.2; + żŷ2, tradmsrate2, tradmsrate2, float, 6.2; + ŵŷ2, tradmdcha2, tradmdcha2, long, 10; + żŷ2, tradmscha2, tradmscha2, long, 10; + ŵǻڵ3 , offerno3, offerno3, char, 3; + żǻڵ3 , bidno3, bidno3, char, 3; + ŵȸ3 , offertrad3, offertrad3, char, 6; + żȸ3 , bidtrad3, bidtrad3, char, 6; + ŵŷ3, tradmdvol3, tradmdvol3, long, 10; + żŷ3, tradmsvol3, tradmsvol3, long, 10; + ŵŷ3, tradmdrate3, tradmdrate3, float, 6.2; + żŷ3, tradmsrate3, tradmsrate3, float, 6.2; + ŵŷ3, tradmdcha3, tradmdcha3, long, 10; + żŷ3, tradmscha3, tradmscha3, long, 10; + ŵǻڵ4 , offerno4, offerno4, char, 3; + żǻڵ4 , bidno4, bidno4, char, 3; + ŵȸ4 , offertrad4, offertrad4, char, 6; + żȸ4 , bidtrad4, bidtrad4, char, 6; + ŵŷ4, tradmdvol4, tradmdvol4, long, 10; + żŷ4, tradmsvol4, tradmsvol4, long, 10; + ŵŷ4, tradmdrate4, tradmdrate4, float, 6.2; + żŷ4, tradmsrate4, tradmsrate4, float, 6.2; + ŵŷ4, tradmdcha4, tradmdcha4, long, 10; + żŷ4, tradmscha4, tradmscha4, long, 10; + ŵǻڵ5 , offerno5, offerno5, char, 3; + żǻڵ5 , bidno5, bidno5, char, 3; + ŵȸ5 , offertrad5, offertrad5, char, 6; + żȸ5 , bidtrad5, bidtrad5, char, 6; + ŵŷ5, tradmdvol5, tradmdvol5, long, 10; + żŷ5, tradmsvol5, tradmsvol5, long, 10; + ŵŷ5, tradmdrate5, tradmdrate5, float, 6.2; + żŷ5, tradmsrate5, tradmsrate5, float, 6.2; + ŵŷ5, tradmdcha5, tradmdcha5, long, 10; + żŷ5, tradmscha5, tradmscha5, long, 10; + ܱǻŵհ, ftradmdvol, ftradmdvol, char, 10; + ܱǻżհ, ftradmsvol, ftradmsvol, char, 10; +ܱǻŵŷ, ftradmdrate, ftradmdrate, float, 6.2; +ܱǻżŷ, ftradmsrate, ftradmsrate, float, 6.2; +ܱǻŵŷ, ftradmdcha, ftradmdcha, char, 10; +ܱǻżŷ, ftradmscha, ftradmscha, char, 10; + ڵ, shcode, shcode, char, 6; + ŵŷ1, tradmdval1, tradmdval1, long, 15; + żŷ1, tradmsval1, tradmsval1, long, 15; + ŵմܰ1, tradmdavg1, tradmdavg1, long, 7; + żմܰ1, tradmsavg1, tradmsavg1, long, 7; + ŵŷ2, tradmdval2, tradmdval2, long, 15; + żŷ2, tradmsval2, tradmsval2, long, 15; + ŵմܰ2, tradmdavg2, tradmdavg2, long, 7; + żմܰ2, tradmsavg2, tradmsavg2, long, 7; + ŵŷ3, tradmdval3, tradmdval3, long, 15; + żŷ3, tradmsval3, tradmsval3, long, 15; + ŵմܰ3, tradmdavg3, tradmdavg3, long, 7; + żմܰ3, tradmsavg3, tradmsavg3, long, 7; + ŵŷ4, tradmdval4, tradmdval4, long, 15; + żŷ4, tradmsval4, tradmsval4, long, 15; + ŵմܰ4, tradmdavg4, tradmdavg4, long, 7; + żմܰ4, tradmsavg4, tradmsavg4, long, 7; + ŵŷ5, tradmdval5, tradmdval5, long, 15; + żŷ5, tradmsval5, tradmsval5, long, 15; + ŵմܰ5, tradmdavg5, tradmdavg5, long, 7; + żմܰ5, tradmsavg5, tradmsavg5, long, 7; +ܱǻŵŷ, ftradmdval, ftradmdval, long, 15; +ܱǻżŷ, ftradmsval, ftradmsval, long, 15; +ܱǻŵմܰ, ftradmdavg, ftradmdavg, long, 7; +ܱǻżմܰ, ftradmsavg, ftradmsavg, long, 7; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/OMG.res b/sample_python/Res/OMG.res new file mode 100644 index 0000000..91e39c6 --- /dev/null +++ b/sample_python/Res/OMG.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼǹΰ(MG), OMG, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ɼڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + 簡, actprice, actprice, float, 6.2; + KOSPI200, k200jisu, k200jisu, float, 6.2; + , fut200jisu, fut200jisu, float, 6.2; + 簡, price, price, float, 6.2; + ǥ纯, capimpv, capimpv, float, 6.2; + 纯, impv, impv, float, 6.2; + Ÿ(), delt, delt, float, 7.4; + (), gama, gama, float, 7.4; + Ÿ(), ceta, ceta, float, 7.4; + (), vega, vega, float, 7.4; + ο(), rhox, rhox, float, 7.4; + ̷а(), theoryprice, theoryprice, float, 6.2; + ϰ纯, bimpv, bimpv, float, 6.2; + ŵ纯, offerimpv, offerimpv, float, 6.2; + ż纯, bidimpv, bidimpv, float, 6.2; + ɼڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +OMG \ No newline at end of file diff --git a/sample_python/Res/OMG_1.res b/sample_python/Res/OMG_1.res new file mode 100644 index 0000000..91e39c6 --- /dev/null +++ b/sample_python/Res/OMG_1.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼǹΰ(MG), OMG, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ɼڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + 簡, actprice, actprice, float, 6.2; + KOSPI200, k200jisu, k200jisu, float, 6.2; + , fut200jisu, fut200jisu, float, 6.2; + 簡, price, price, float, 6.2; + ǥ纯, capimpv, capimpv, float, 6.2; + 纯, impv, impv, float, 6.2; + Ÿ(), delt, delt, float, 7.4; + (), gama, gama, float, 7.4; + Ÿ(), ceta, ceta, float, 7.4; + (), vega, vega, float, 7.4; + ο(), rhox, rhox, float, 7.4; + ̷а(), theoryprice, theoryprice, float, 6.2; + ϰ纯, bimpv, bimpv, float, 6.2; + ŵ纯, offerimpv, offerimpv, float, 6.2; + ż纯, bidimpv, bidimpv, float, 6.2; + ɼڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +OMG \ No newline at end of file diff --git a/sample_python/Res/OVC.res b/sample_python/Res/OVC.res new file mode 100644 index 0000000..4a00809 --- /dev/null +++ b/sample_python/Res/OVC.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼ 簡ü(OVC), OVC, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 8; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 8; + ü() , ovsdate , ovsdate , char , 8; + ü(ѱ) , kordate , kordate , char , 8; + üð() , trdtm , trdtm , char , 6; + üð(ѱ) , kortm , kortm , char , 6; + üᰡ , curpr , curpr , double , 15.9; + ϴ , ydiffpr , ydiffpr , double , 15.9; + ϴȣ , ydiffSign , ydiffSign , char , 1; + ð , open , open , double , 15.9; + , high , high , double , 15.9; + , low , low , double , 15.9; + , chgrate , chgrate , float , 6.2; + Ǻü , trdq , trdq , long , 10; + ü , totq , totq , char , 15; + üᱸ , cgubun , cgubun , char , 1; + ŵü , mdvolume , mdvolume , char , 15; + żü , msvolume , msvolume , char , 15; + 帶 , ovsmkend , ovsmkend , char , 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/OVC_1.res b/sample_python/Res/OVC_1.res new file mode 100644 index 0000000..4a00809 --- /dev/null +++ b/sample_python/Res/OVC_1.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼ 簡ü(OVC), OVC, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 8; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 8; + ü() , ovsdate , ovsdate , char , 8; + ü(ѱ) , kordate , kordate , char , 8; + üð() , trdtm , trdtm , char , 6; + üð(ѱ) , kortm , kortm , char , 6; + üᰡ , curpr , curpr , double , 15.9; + ϴ , ydiffpr , ydiffpr , double , 15.9; + ϴȣ , ydiffSign , ydiffSign , char , 1; + ð , open , open , double , 15.9; + , high , high , double , 15.9; + , low , low , double , 15.9; + , chgrate , chgrate , float , 6.2; + Ǻü , trdq , trdq , long , 10; + ü , totq , totq , char , 15; + üᱸ , cgubun , cgubun , char , 1; + ŵü , mdvolume , mdvolume , char , 15; + żü , msvolume , msvolume , char , 15; + 帶 , ovsmkend , ovsmkend , char , 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/OVH.res b/sample_python/Res/OVH.res new file mode 100644 index 0000000..3510ef5 --- /dev/null +++ b/sample_python/Res/OVH.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼ ȣ(OVH), OVH, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 8; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 8 ; + ȣð , hotime , hotime , char , 6 ; + + ŵȣ 1 , offerho1 , offerho1 , double , 15.9; + żȣ 1 , bidho1 , bidho1 , double , 15.9; + ŵȣ ܷ 1 , offerrem1 , offerrem1 , long , 10; + żȣ ܷ 1 , bidrem1 , bidrem1 , long , 10; + ŵȣ Ǽ 1 , offerno1 , offerno1 , long , 10; + żȣ Ǽ 1 , bidno1 , bidno1 , long , 10; + + ŵȣ 2 , offerho2 , offerho2 , double , 15.9; + żȣ 2 , bidho2 , bidho2 , double , 15.9; + ŵȣ ܷ 2 , offerrem2 , offerrem2 , long , 10; + żȣ ܷ 2 , bidrem2 , bidrem2 , long , 10; + ŵȣ Ǽ 2 , offerno2 , offerno2 , long , 10; + żȣ Ǽ 2 , bidno2 , bidno2 , long , 10; + + ŵȣ 3 , offerho3 , offerho3 , double , 15.9; + żȣ 3 , bidho3 , bidho3 , double , 15.9; + ŵȣ ܷ 3 , offerrem3 , offerrem3 , long , 10; + żȣ ܷ 3 , bidrem3 , bidrem3 , long , 10; + ŵȣ Ǽ 3 , offerno3 , offerno3 , long , 10; + żȣ Ǽ 3 , bidno3 , bidno3 , long , 10; + + ŵȣ 4 , offerho4 , offerho4 , double , 15.9; + żȣ 4 , bidho4 , bidho4 , double , 15.9; + ŵȣ ܷ 4 , offerrem4 , offerrem4 , long , 10; + żȣ ܷ 4 , bidrem4 , bidrem4 , long , 10; + ŵȣ Ǽ 4 , offerno4 , offerno4 , long , 10; + żȣ Ǽ 4 , bidno4 , bidno4 , long , 10; + + ŵȣ 5 , offerho5 , offerho5 , double , 15.9; + żȣ 5 , bidho5 , bidho5 , double , 15.9; + ŵȣ ܷ 5 , offerrem5 , offerrem5 , long , 10; + żȣ ܷ 5 , bidrem5 , bidrem5 , long , 10; + ŵȣ Ǽ 5 , offerno5 , offerno5 , long , 10; + żȣ Ǽ 5 , bidno5 , bidno5 , long , 10; + + ŵȣѰǼ , totoffercnt , totoffercnt , long , 10; + żȣѰǼ , totbidcnt , totbidcnt , long , 10; + ŵȣѼ , totofferrem , totofferrem , long , 10; + żȣѼ , totbidrem , totbidrem , long , 10; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/OVH_1.res b/sample_python/Res/OVH_1.res new file mode 100644 index 0000000..3510ef5 --- /dev/null +++ b/sample_python/Res/OVH_1.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼ ȣ(OVH), OVH, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 8; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 8 ; + ȣð , hotime , hotime , char , 6 ; + + ŵȣ 1 , offerho1 , offerho1 , double , 15.9; + żȣ 1 , bidho1 , bidho1 , double , 15.9; + ŵȣ ܷ 1 , offerrem1 , offerrem1 , long , 10; + żȣ ܷ 1 , bidrem1 , bidrem1 , long , 10; + ŵȣ Ǽ 1 , offerno1 , offerno1 , long , 10; + żȣ Ǽ 1 , bidno1 , bidno1 , long , 10; + + ŵȣ 2 , offerho2 , offerho2 , double , 15.9; + żȣ 2 , bidho2 , bidho2 , double , 15.9; + ŵȣ ܷ 2 , offerrem2 , offerrem2 , long , 10; + żȣ ܷ 2 , bidrem2 , bidrem2 , long , 10; + ŵȣ Ǽ 2 , offerno2 , offerno2 , long , 10; + żȣ Ǽ 2 , bidno2 , bidno2 , long , 10; + + ŵȣ 3 , offerho3 , offerho3 , double , 15.9; + żȣ 3 , bidho3 , bidho3 , double , 15.9; + ŵȣ ܷ 3 , offerrem3 , offerrem3 , long , 10; + żȣ ܷ 3 , bidrem3 , bidrem3 , long , 10; + ŵȣ Ǽ 3 , offerno3 , offerno3 , long , 10; + żȣ Ǽ 3 , bidno3 , bidno3 , long , 10; + + ŵȣ 4 , offerho4 , offerho4 , double , 15.9; + żȣ 4 , bidho4 , bidho4 , double , 15.9; + ŵȣ ܷ 4 , offerrem4 , offerrem4 , long , 10; + żȣ ܷ 4 , bidrem4 , bidrem4 , long , 10; + ŵȣ Ǽ 4 , offerno4 , offerno4 , long , 10; + żȣ Ǽ 4 , bidno4 , bidno4 , long , 10; + + ŵȣ 5 , offerho5 , offerho5 , double , 15.9; + żȣ 5 , bidho5 , bidho5 , double , 15.9; + ŵȣ ܷ 5 , offerrem5 , offerrem5 , long , 10; + żȣ ܷ 5 , bidrem5 , bidrem5 , long , 10; + ŵȣ Ǽ 5 , offerno5 , offerno5 , long , 10; + żȣ Ǽ 5 , bidno5 , bidno5 , long , 10; + + ŵȣѰǼ , totoffercnt , totoffercnt , long , 10; + żȣѰǼ , totbidcnt , totbidcnt , long , 10; + ŵȣѼ , totofferrem , totofferrem , long , 10; + żȣѼ , totbidrem , totbidrem , long , 10; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/OX0.res b/sample_python/Res/OX0.res new file mode 100644 index 0000000..4524052 --- /dev/null +++ b/sample_python/Res/OX0.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼǰȮ(X0), OX0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + Ѵܰ , upstep , upstep , char, 2; + Ѵܰ , dnstep , dnstep , char, 2; + Ѱ , uplmtprice , uplmtprice , float, 6.2; + Ѱ , dnlmtprice , dnlmtprice , float, 6.2; + ڵ , opttcode , opttcode , char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/OX0_1.res b/sample_python/Res/OX0_1.res new file mode 100644 index 0000000..4524052 --- /dev/null +++ b/sample_python/Res/OX0_1.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI200ɼǰȮ(X0), OX0, attr, key=8, group=1 ; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + Ѵܰ , upstep , upstep , char, 2; + Ѵܰ , dnstep , dnstep , char, 2; + Ѱ , uplmtprice , uplmtprice , float, 6.2; + Ѱ , dnlmtprice , dnlmtprice , float, 6.2; + ڵ , opttcode , opttcode , char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/PH_.res b/sample_python/Res/PH_.res new file mode 100644 index 0000000..7793ec5 --- /dev/null +++ b/sample_python/Res/PH_.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIα׷Ÿ(PH), PH_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, long, 1; + ϴ, change, change, long, 8; + ŷ, volume, volume, long, 10; + , drate, drate, float, 6.2; + + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 12; + ͸żȣ ܷ, cshrem, cshrem, long, 12; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 12; + ͸żȣ ܷ, bshrem, bshrem, long, 12; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 12; + ͸żȣ , cshvolume, cshvolume, long, 12; + ͸ŵȣ , bdhvolume, bdhvolume, long, 12; + ͸żȣ , bshvolume, bshvolume, long, 12; + + üŵŹü, dwcvolume, dwcvolume, long, 12; + üżŹü, swcvolume, swcvolume, long, 12; + üŵڱü, djcvolume, djcvolume, long, 12; + üżڱü, sjcvolume, sjcvolume, long, 12; + + üŵü, tdvolume, tdvolume, long, 12; + üżü, tsvolume, tsvolume, long, 12; + üż , tvol, tvol, long, 12; + + üŵŹüݾ, dwcvalue, dwcvalue, long, 15; + üżŹüݾ, swcvalue, swcvalue, long, 15; + üŵڱüݾ, djcvalue, djcvalue, long, 15; + üżڱüݾ, sjcvalue, sjcvalue, long, 15; + + üŵüݾ, tdvalue, tdvalue, long, 15; + üżüݾ, tsvalue, tsvalue, long, 15; + üż ݾ, tval, tval, long, 15; + + ŵ ü, pdgvolume, pdgvolume, long, 12; + ż ü, psgvolume, psgvolume, long, 12; + + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/PH__1.res b/sample_python/Res/PH__1.res new file mode 100644 index 0000000..7793ec5 --- /dev/null +++ b/sample_python/Res/PH__1.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIα׷Ÿ(PH), PH_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, long, 1; + ϴ, change, change, long, 8; + ŷ, volume, volume, long, 10; + , drate, drate, float, 6.2; + + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 12; + ͸żȣ ܷ, cshrem, cshrem, long, 12; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 12; + ͸żȣ ܷ, bshrem, bshrem, long, 12; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 12; + ͸żȣ , cshvolume, cshvolume, long, 12; + ͸ŵȣ , bdhvolume, bdhvolume, long, 12; + ͸żȣ , bshvolume, bshvolume, long, 12; + + üŵŹü, dwcvolume, dwcvolume, long, 12; + üżŹü, swcvolume, swcvolume, long, 12; + üŵڱü, djcvolume, djcvolume, long, 12; + üżڱü, sjcvolume, sjcvolume, long, 12; + + üŵü, tdvolume, tdvolume, long, 12; + üżü, tsvolume, tsvolume, long, 12; + üż , tvol, tvol, long, 12; + + üŵŹüݾ, dwcvalue, dwcvalue, long, 15; + üżŹüݾ, swcvalue, swcvalue, long, 15; + üŵڱüݾ, djcvalue, djcvalue, long, 15; + üżڱüݾ, sjcvalue, sjcvalue, long, 15; + + üŵüݾ, tdvalue, tdvalue, long, 15; + üżüݾ, tsvalue, tsvalue, long, 15; + üż ݾ, tval, tval, long, 15; + + ŵ ü, pdgvolume, pdgvolume, long, 12; + ż ü, psgvolume, psgvolume, long, 12; + + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/PM_.res b/sample_python/Res/PM_.res new file mode 100644 index 0000000..f424529 --- /dev/null +++ b/sample_python/Res/PM_.res @@ -0,0 +1,119 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIα׷Ÿü(PM), PM_, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + а, gubun, gubun, char, 1; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 6; + ͸żȣ ܷ, cshrem, cshrem, long, 6; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 6; + ͸żȣ ܷ, bshrem, bshrem, long, 6; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 6; + ͸żȣ , cshvolume, cshvolume, long, 6; + ͸ŵȣ , bdhvolume, bdhvolume, long, 6; + ͸żȣ , bshvolume, bshvolume, long, 6; + + ͸ŵŹü, cdwvolume, cdwvolume, long, 6; + ͸ŵڱü, cdjvolume, cdjvolume, long, 6; + ͸żŹü, cswvolume, cswvolume, long, 6; + ͸żڱü, csjvolume, csjvolume, long, 6; + Źż , cwvol, cwvol, long, 6; + ڱż , cjvol, cjvol, long, 6; + + ͸ŵŹü, bdwvolume, bdwvolume, long, 6; + ͸ŵڱü, bdjvolume, bdjvolume, long, 6; + ͸żŹü, bswvolume, bswvolume, long, 6; + ͸żڱü, bsjvolume, bsjvolume, long, 6; + Źż , bwvol, bwvol, long, 6; + ڱż , bjvol, bjvol, long, 6; + + üŵŹü, dwvolume, dwvolume, long, 6; + üżŹü, swvolume, swvolume, long, 6; + üŹż , wvol, wvol, long, 6; + üŵڱü, djvolume, djvolume, long, 6; + üżڱü, sjvolume, sjvolume, long, 6; + üڱż , jvol, jvol, long, 6; + + ͸ŵŹüݾ, cdwvalue, cdwvalue, long, 8; + ͸ŵڱüݾ, cdjvalue, cdjvalue, long, 8; + ͸żŹüݾ, cswvalue, cswvalue, long, 8; + ͸żڱüݾ, csjvalue, csjvalue, long, 8; + Źż ݾ, cwval, cwval, long, 8; + ڱż ݾ, cjval, cjval, long, 8; + + ͸ŵŹüݾ, bdwvalue, bdwvalue, long, 8; + ͸ŵڱüݾ, bdjvalue, bdjvalue, long, 8; + ͸żŹüݾ, bswvalue, bswvalue, long, 8; + ͸żڱüݾ, bsjvalue, bsjvalue, long, 8; + Źż ݾ, bwval, bwval, long, 8; + ڱż ݾ, bjval, bjval, long, 8; + + üŵŹüݾ, dwvalue, dwvalue, long, 8; + üżŹüݾ, swvalue, swvalue, long, 8; + üŹż ݾ, wval, wval, long, 8; + üŵڱüݾ, djvalue, djvalue, long, 8; + üżڱüݾ, sjvalue, sjvalue, long, 8; + üڱż ݾ, jval, jval, long, 8; + + KOSPI200 , k200jisu, k200jisu, float, 6.2; + KOSPI200 ϴ񱸺, k200sign, k200sign, char, 1; + KOSPI200 ϴ, change, change, float, 6.2; + KOSPI200 ̽ý, k200basis, k200basis, float, 4.2; + + ͸ŵüհ, cdvolume, cdvolume, long, 6; + ͸żüհ, csvolume, csvolume, long, 6; + ͼż հ, cvol, cvol, long, 6; + + ͸ŵüհ, bdvolume, bdvolume, long, 6; + ͸żüհ, bsvolume, bsvolume, long, 6; + ͼż հ, bvol, bvol, long, 6; + + üŵüհ, tdvolume, tdvolume, long, 6; + üżüհ, tsvolume, tsvolume, long, 6; + üż հ, tvol, tvol, long, 6; + + ͸ŵüݾհ, cdvalue, cdvalue, long, 8; + ͸żüݾհ, csvalue, csvalue, long, 8; + ͼż ݾհ, cval, cval, long, 8; + + ͸ŵüݾհ, bdvalue, bdvalue, long, 8; + ͸żüݾհ, bsvalue, bsvalue, long, 8; + ͼż ݾհ, bval, bval, long, 8; + + üŵüݾհ, tdvalue, tdvalue, long, 8; + üżüݾհ, tsvalue, tsvalue, long, 8; + üż ݾհ, tval, tval, long, 8; + + ͸ŵü, p_cdvolcha, p_cdvolcha, long, 6; + ͸żü, p_csvolcha, p_csvolcha, long, 6; + ͼż , p_cvolcha, p_cvolcha, long, 6; + + ͸ŵü, p_bdvolcha, p_bdvolcha, long, 6; + ͸żü, p_bsvolcha, p_bsvolcha, long, 6; + ͼż , p_bvolcha, p_bvolcha, long, 6; + + üŵü, p_tdvolcha, p_tdvolcha, long, 6; + üżü, p_tsvolcha, p_tsvolcha, long, 6; + üż , p_tvolcha, p_tvolcha, long, 6; + + ͸ŵüݾ, p_cdvalcha, p_cdvalcha, long, 8; + ͸żüݾ, p_csvalcha, p_csvalcha, long, 8; + ͼż ݾ, p_cvalcha, p_cvalcha, long, 8; + + ͸ŵüݾ, p_bdvalcha, p_bdvalcha, long, 8; + ͸żüݾ, p_bsvalcha, p_bsvalcha, long, 8; + ͼż ݾ, p_bvalcha, p_bvalcha, long, 8; + + üŵüݾ, p_tdvalcha, p_tdvalcha, long, 8; + üżüݾ, p_tsvalcha, p_tsvalcha, long, 8; + üż ݾ, p_tvalcha, p_tvalcha, long, 8; + + а, gubun, gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/PM__1.res b/sample_python/Res/PM__1.res new file mode 100644 index 0000000..f424529 --- /dev/null +++ b/sample_python/Res/PM__1.res @@ -0,0 +1,119 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIα׷Ÿü(PM), PM_, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + а, gubun, gubun, char, 1; + end + OutBlock,,output; + begin + Žð, time, time, char, 6; + ͸ŵȣ ܷ, cdhrem, cdhrem, long, 6; + ͸żȣ ܷ, cshrem, cshrem, long, 6; + ͸ŵȣ ܷ, bdhrem, bdhrem, long, 6; + ͸żȣ ܷ, bshrem, bshrem, long, 6; + + ͸ŵȣ , cdhvolume, cdhvolume, long, 6; + ͸żȣ , cshvolume, cshvolume, long, 6; + ͸ŵȣ , bdhvolume, bdhvolume, long, 6; + ͸żȣ , bshvolume, bshvolume, long, 6; + + ͸ŵŹü, cdwvolume, cdwvolume, long, 6; + ͸ŵڱü, cdjvolume, cdjvolume, long, 6; + ͸żŹü, cswvolume, cswvolume, long, 6; + ͸żڱü, csjvolume, csjvolume, long, 6; + Źż , cwvol, cwvol, long, 6; + ڱż , cjvol, cjvol, long, 6; + + ͸ŵŹü, bdwvolume, bdwvolume, long, 6; + ͸ŵڱü, bdjvolume, bdjvolume, long, 6; + ͸żŹü, bswvolume, bswvolume, long, 6; + ͸żڱü, bsjvolume, bsjvolume, long, 6; + Źż , bwvol, bwvol, long, 6; + ڱż , bjvol, bjvol, long, 6; + + üŵŹü, dwvolume, dwvolume, long, 6; + üżŹü, swvolume, swvolume, long, 6; + üŹż , wvol, wvol, long, 6; + üŵڱü, djvolume, djvolume, long, 6; + üżڱü, sjvolume, sjvolume, long, 6; + üڱż , jvol, jvol, long, 6; + + ͸ŵŹüݾ, cdwvalue, cdwvalue, long, 8; + ͸ŵڱüݾ, cdjvalue, cdjvalue, long, 8; + ͸żŹüݾ, cswvalue, cswvalue, long, 8; + ͸żڱüݾ, csjvalue, csjvalue, long, 8; + Źż ݾ, cwval, cwval, long, 8; + ڱż ݾ, cjval, cjval, long, 8; + + ͸ŵŹüݾ, bdwvalue, bdwvalue, long, 8; + ͸ŵڱüݾ, bdjvalue, bdjvalue, long, 8; + ͸żŹüݾ, bswvalue, bswvalue, long, 8; + ͸żڱüݾ, bsjvalue, bsjvalue, long, 8; + Źż ݾ, bwval, bwval, long, 8; + ڱż ݾ, bjval, bjval, long, 8; + + üŵŹüݾ, dwvalue, dwvalue, long, 8; + üżŹüݾ, swvalue, swvalue, long, 8; + üŹż ݾ, wval, wval, long, 8; + üŵڱüݾ, djvalue, djvalue, long, 8; + üżڱüݾ, sjvalue, sjvalue, long, 8; + üڱż ݾ, jval, jval, long, 8; + + KOSPI200 , k200jisu, k200jisu, float, 6.2; + KOSPI200 ϴ񱸺, k200sign, k200sign, char, 1; + KOSPI200 ϴ, change, change, float, 6.2; + KOSPI200 ̽ý, k200basis, k200basis, float, 4.2; + + ͸ŵüհ, cdvolume, cdvolume, long, 6; + ͸żüհ, csvolume, csvolume, long, 6; + ͼż հ, cvol, cvol, long, 6; + + ͸ŵüհ, bdvolume, bdvolume, long, 6; + ͸żüհ, bsvolume, bsvolume, long, 6; + ͼż հ, bvol, bvol, long, 6; + + üŵüհ, tdvolume, tdvolume, long, 6; + üżüհ, tsvolume, tsvolume, long, 6; + üż հ, tvol, tvol, long, 6; + + ͸ŵüݾհ, cdvalue, cdvalue, long, 8; + ͸żüݾհ, csvalue, csvalue, long, 8; + ͼż ݾհ, cval, cval, long, 8; + + ͸ŵüݾհ, bdvalue, bdvalue, long, 8; + ͸żüݾհ, bsvalue, bsvalue, long, 8; + ͼż ݾհ, bval, bval, long, 8; + + üŵüݾհ, tdvalue, tdvalue, long, 8; + üżüݾհ, tsvalue, tsvalue, long, 8; + üż ݾհ, tval, tval, long, 8; + + ͸ŵü, p_cdvolcha, p_cdvolcha, long, 6; + ͸żü, p_csvolcha, p_csvolcha, long, 6; + ͼż , p_cvolcha, p_cvolcha, long, 6; + + ͸ŵü, p_bdvolcha, p_bdvolcha, long, 6; + ͸żü, p_bsvolcha, p_bsvolcha, long, 6; + ͼż , p_bvolcha, p_bvolcha, long, 6; + + üŵü, p_tdvolcha, p_tdvolcha, long, 6; + üżü, p_tsvolcha, p_tsvolcha, long, 6; + üż , p_tvolcha, p_tvolcha, long, 6; + + ͸ŵüݾ, p_cdvalcha, p_cdvalcha, long, 8; + ͸żüݾ, p_csvalcha, p_csvalcha, long, 8; + ͼż ݾ, p_cvalcha, p_cvalcha, long, 8; + + ͸ŵüݾ, p_bdvalcha, p_bdvalcha, long, 8; + ͸żüݾ, p_bsvalcha, p_bsvalcha, long, 8; + ͼż ݾ, p_bvalcha, p_bvalcha, long, 8; + + üŵüݾ, p_tdvalcha, p_tdvalcha, long, 8; + üżüݾ, p_tsvalcha, p_tsvalcha, long, 8; + üż ݾ, p_tvalcha, p_tvalcha, long, 8; + + а, gubun, gubun, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/S2_.res b/sample_python/Res/S2_.res new file mode 100644 index 0000000..65c4be6 --- /dev/null +++ b/sample_python/Res/S2_.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI켱ȣ(S2), S2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/S2__1.res b/sample_python/Res/S2__1.res new file mode 100644 index 0000000..65c4be6 --- /dev/null +++ b/sample_python/Res/S2__1.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI켱ȣ(S2), S2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/S3_.res b/sample_python/Res/S3_.res new file mode 100644 index 0000000..4043fad --- /dev/null +++ b/sample_python/Res/S3_.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIü(S3), S3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + հ, w_avrg, w_avrg, long, 8; + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + , status, status, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/S3__1.res b/sample_python/Res/S3__1.res new file mode 100644 index 0000000..4043fad --- /dev/null +++ b/sample_python/Res/S3__1.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIü(S3), S3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + հ, w_avrg, w_avrg, long, 8; + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + , status, status, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/S4_.res b/sample_python/Res/S4_.res new file mode 100644 index 0000000..109f17f --- /dev/null +++ b/sample_python/Res/S4_.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI⼼(S4), S4_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/S4__1.res b/sample_python/Res/S4__1.res new file mode 100644 index 0000000..109f17f --- /dev/null +++ b/sample_python/Res/S4__1.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPI⼼(S4), S4_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SC0.res b/sample_python/Res/SC0.res new file mode 100644 index 0000000..5942248 --- /dev/null +++ b/sample_python/Res/SC0.res @@ -0,0 +1,124 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽ, SC0, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüᱸ, ordchegb, ordchegb, char, 2; + 屸, marketgb, marketgb, char, 2; + ֹ, ordgb, ordgb, char, 2; + ֹȣ, orgordno, orgordno, long, 10; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + йȣ, passwd, passwd, char, 8; + ȣ, expcode, expcode, char, 12; + ȣ, shtcode, shtcode, char, 9; + , hname, hname, char, 40; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprice, ordprice, long, 13; + ֹ, hogagb, hogagb, char, 1; + ȣڵ, etfhogagb, etfhogagb, char, 2; + α׷ȣ, pgmtype, pgmtype, long, 2; + ŵȣ, gmhogagb, gmhogagb, long, 1; + ŵɿ, gmhogayn, gmhogayn, long, 1; + ſ뱸, singb, singb, char, 3; + , loandt, loandt, char, 8; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ڵ, strtgcode, strtgcode, char, 6; + ׷ID, groupid, groupid, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, prtno, prtno, long, 10; + ٽϹȣ, basketno, basketno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ƾ۹ȣ, itemno, itemno, long, 10; + Ա, brwmgmyn, brwmgmyn, long, 1; + ȸȣ, mbrno, mbrno, long, 3; + ó, procgb, procgb, char, 1; + ȣ, admbrchno, admbrchno, char, 3; + ¹ȣ, futaccno, futaccno, char, 20; + ǰ, futmarketgb, futmarketgb, char, 1; + Ÿü, tongsingb, tongsingb, char, 2; + ڱ, lpgb, lpgb, char, 1; + DUMMY, dummy, dummy, char, 20; + ֹȣ, ordno, ordno, long, 10; + ֹð, ordtm, ordtm, char, 9; + ֹȣ, prntordno, prntordno, long, 10; + ȣ, mgempno, mgempno, char, 9; + ֹü, orgordundrqty, orgordundrqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, ordordcancelqty, ordordcancelqty, long, 16; + ȸ۽Źȣ, nmcpysndno, nmcpysndno, long, 10; + ֹݾ, ordamt, ordamt, long, 16; + Ÿű, bnstp, bnstp, char, 1; + ֹȣ, spareordno, spareordno, long, 10; + ݴŸϷùȣ, cvrgseqno, cvrgseqno, long, 10; + ֹȣ, rsvordno, rsvordno, long, 10; + ֹϷùȣ, mtordseqno, mtordseqno, long, 10; + ֹ, spareordqty, spareordqty, long, 16; + ֹȣ, orduserid, orduserid, char, 16; + ǹֹ, spotordqty, spotordqty, long, 16; + ֹ, ordruseqty, ordruseqty, long, 16; + ֹݾ, mnyordamt, mnyordamt, long, 16; + ֹݾ, ordsubstamt, ordsubstamt, long, 16; + ֹݾ, ruseordamt, ruseordamt, long, 16; + ֹݾ, ordcmsnamt, ordcmsnamt, long, 16; + ſ㺸, crdtuseamt, crdtuseamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(D2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsamt, pchsamt, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SC0_1.res b/sample_python/Res/SC0_1.res new file mode 100644 index 0000000..5942248 --- /dev/null +++ b/sample_python/Res/SC0_1.res @@ -0,0 +1,124 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽ, SC0, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüᱸ, ordchegb, ordchegb, char, 2; + 屸, marketgb, marketgb, char, 2; + ֹ, ordgb, ordgb, char, 2; + ֹȣ, orgordno, orgordno, long, 10; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + йȣ, passwd, passwd, char, 8; + ȣ, expcode, expcode, char, 12; + ȣ, shtcode, shtcode, char, 9; + , hname, hname, char, 40; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprice, ordprice, long, 13; + ֹ, hogagb, hogagb, char, 1; + ȣڵ, etfhogagb, etfhogagb, char, 2; + α׷ȣ, pgmtype, pgmtype, long, 2; + ŵȣ, gmhogagb, gmhogagb, long, 1; + ŵɿ, gmhogayn, gmhogayn, long, 1; + ſ뱸, singb, singb, char, 3; + , loandt, loandt, char, 8; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ڵ, strtgcode, strtgcode, char, 6; + ׷ID, groupid, groupid, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, prtno, prtno, long, 10; + ٽϹȣ, basketno, basketno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ƾ۹ȣ, itemno, itemno, long, 10; + Ա, brwmgmyn, brwmgmyn, long, 1; + ȸȣ, mbrno, mbrno, long, 3; + ó, procgb, procgb, char, 1; + ȣ, admbrchno, admbrchno, char, 3; + ¹ȣ, futaccno, futaccno, char, 20; + ǰ, futmarketgb, futmarketgb, char, 1; + Ÿü, tongsingb, tongsingb, char, 2; + ڱ, lpgb, lpgb, char, 1; + DUMMY, dummy, dummy, char, 20; + ֹȣ, ordno, ordno, long, 10; + ֹð, ordtm, ordtm, char, 9; + ֹȣ, prntordno, prntordno, long, 10; + ȣ, mgempno, mgempno, char, 9; + ֹü, orgordundrqty, orgordundrqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, ordordcancelqty, ordordcancelqty, long, 16; + ȸ۽Źȣ, nmcpysndno, nmcpysndno, long, 10; + ֹݾ, ordamt, ordamt, long, 16; + Ÿű, bnstp, bnstp, char, 1; + ֹȣ, spareordno, spareordno, long, 10; + ݴŸϷùȣ, cvrgseqno, cvrgseqno, long, 10; + ֹȣ, rsvordno, rsvordno, long, 10; + ֹϷùȣ, mtordseqno, mtordseqno, long, 10; + ֹ, spareordqty, spareordqty, long, 16; + ֹȣ, orduserid, orduserid, char, 16; + ǹֹ, spotordqty, spotordqty, long, 16; + ֹ, ordruseqty, ordruseqty, long, 16; + ֹݾ, mnyordamt, mnyordamt, long, 16; + ֹݾ, ordsubstamt, ordsubstamt, long, 16; + ֹݾ, ruseordamt, ruseordamt, long, 16; + ֹݾ, ordcmsnamt, ordcmsnamt, long, 16; + ſ㺸, crdtuseamt, crdtuseamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(D2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsamt, pchsamt, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SC1.res b/sample_python/Res/SC1.res new file mode 100644 index 0000000..b31ccd3 --- /dev/null +++ b/sample_python/Res/SC1.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽü, SC1, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SC1_1.res b/sample_python/Res/SC1_1.res new file mode 100644 index 0000000..b31ccd3 --- /dev/null +++ b/sample_python/Res/SC1_1.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽü, SC1, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SC2.res b/sample_python/Res/SC2.res new file mode 100644 index 0000000..35ebc30 --- /dev/null +++ b/sample_python/Res/SC2.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽ, SC2, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SC2_1.res b/sample_python/Res/SC2_1.res new file mode 100644 index 0000000..35ebc30 --- /dev/null +++ b/sample_python/Res/SC2_1.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽ, SC2, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SC3.res b/sample_python/Res/SC3.res new file mode 100644 index 0000000..0762977 --- /dev/null +++ b/sample_python/Res/SC3.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽ, SC3, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SC3_1.res b/sample_python/Res/SC3_1.res new file mode 100644 index 0000000..0762977 --- /dev/null +++ b/sample_python/Res/SC3_1.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽ, SC3, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SC4.res b/sample_python/Res/SC4.res new file mode 100644 index 0000000..651969b --- /dev/null +++ b/sample_python/Res/SC4.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽź, SC4, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SC4_1.res b/sample_python/Res/SC4_1.res new file mode 100644 index 0000000..651969b --- /dev/null +++ b/sample_python/Res/SC4_1.res @@ -0,0 +1,141 @@ +BEGIN_FUNCTION_MAP +.Feed, ֹֽź, SC4, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + ¹ȣ, accno, accno, char, 11; + ID, user, user, char, 8; + , len, len, long, 6; + , gubun, gubun, char, 1; + ౸, compress, compress, char, 1; + ȣ, encrypt, encrypt, char, 1; + , offset, offset, long, 3; + TRCODE, trcode, trcode, char, 8; + ̿ȣ, comid, compid, char, 3; + ID, userid, userid, char, 16; + Ӹü, media, media, char, 2; + I/FϷùȣ, ifid, ifid, char, 3; + Ϸùȣ, seq, seq, char, 9; + TRID, trid, trid, char, 16; + IP, pubip, pubip, char, 12; + 缳IP, prvip, prvip, char, 12; + óȣ, pcbpno, pcbpno, char, 3; + ȣ, bpno, bpno, char, 3; + ܸȣ, termno, termno, char, 8; + , lang, lang, char, 1; + APóð, proctm, proctm, long, 9; + ޼ڵ, msgcode, msgcode, char, 4; + ޼±, outgu, outgu, char, 1; + û, compreq, compreq, char, 1; + Ű, funckey, funckey, char, 4; + ûڵ尳, reqcnt, reqcnt, long, 4; + 񿵿, filler, filler, char, 6; + ӱ, cont, cont, char, 1; + Ű, contkey, contkey, char, 18; + ý۱, varlen, varlen, long, 2; + ش, varhdlen, varhdlen, long, 2; + ޽, varmsglen, varmsglen, long, 2; + ȸ߿, trsrc, trsrc, char, 1; + I/F̺ƮID, eventid, eventid, char, 4; + I/F, ifinfo, ifinfo, char, 4; + 񿵿, filler1, filler1, char, 41; + ֹüڵ, ordxctptncode, ordxctptncode, char, 2; + ֹڵ, ordmktcode, ordmktcode, char, 2; + ֹڵ, ordptncode, ordptncode, char, 2; + ȣ, mgmtbrnno, mgmtbrnno, char, 3; + ¹ȣ, accno1, accno1, char, 11; + ¹ȣ, accno2, accno2, char, 9; + ¸, acntnm, acntnm, char, 40; + ȣ, Isuno, Isuno, char, 12; + , Isunm, Isunm, char, 40; + ֹȣ, ordno, ordno, long, 10; + ֹȣ, orgordno, orgordno, long, 10; + üȣ, execno, execno, long, 10; + ֹ, ordqty, ordqty, long, 16; + ֹ, ordprc, ordprc, long, 13; + ü, execqty, execqty, long, 16; + üᰡ, execprc, execprc, long, 13; + Ȯμ, mdfycnfqty, mdfycnfqty, long, 16; + Ȯΰ, mdfycnfprc, mdfycnfprc, long, 16; + Ȯμ, canccnfqty, canccnfqty, long, 16; + źμ, rjtqty, rjtqty, long, 16; + ֹóڵ, ordtrxptncode, ordtrxptncode, long, 4; + ֹϷùȣ, mtiordseqno, mtiordseqno, long, 10; + ֹ, ordcndi, ordcndi, char, 1; + ȣڵ, ordprcptncode, ordprcptncode, char, 2; + ü, nsavtrdqty, nsavtrdqty, long, 16; + ȣ, shtnIsuno, shtnIsuno, char, 9; + ùȣ, opdrtnno, opdrtnno, char, 12; + ݴŸֹ, cvrgordtp, cvrgordtp, char, 1; + ü(ֹ), unercqty, unercqty, long, 16; + ֹü, orgordunercqty, orgordunercqty, long, 16; + ֹ, orgordmdfyqty, orgordmdfyqty, long, 16; + ֹҼ, orgordcancqty, orgordcancqty, long, 16; + ֹüᰡ, ordavrexecprc, ordavrexecprc, long, 13; + ֹݾ, ordamt, ordamt, long, 16; + ǥȣ, stdIsuno, stdIsuno, char, 12; + ǥȣ, bfstdIsuno, bfstdIsuno, char, 12; + Ÿű, bnstp, bnstp, char, 1; + ֹŷڵ, ordtrdptncode, ordtrdptncode, char, 2; + ſŷڵ, mgntrncode, mgntrncode, char, 3; + ջڵ, adduptp, adduptp, char, 2; + Ÿüڵ, commdacode, commdacode, char, 2; + , Loandt, Loandt, char, 8; + ȸ/ȸȣ, mbrnmbrno, mbrnmbrno, long, 3; + ֹ¹ȣ, ordacntno, ordacntno, char, 20; + ȣ, agrgbrnno, agrgbrnno, char, 3; + ȣ, mgempno, mgempno, char, 9; + ȣ, futsLnkbrnno, futsLnkbrnno, char, 3; + ¹ȣ, futsLnkacntno, futsLnkacntno, char, 20; + 屸, futsmkttp, futsmkttp, char, 1; + Ͻڵ, regmktcode, regmktcode, char, 2; + űݷ, mnymgnrat, mnymgnrat, long, 7; + űݷ, substmgnrat, substmgnrat, long, 9; + üݾ, mnyexecamt, mnyexecamt, long, 16; + üݾ, ubstexecamt, ubstexecamt, long, 16; + üݾ, cmsnamtexecamt, cmsnamtexecamt, long, 16; + ſ㺸üݾ, crdtpldgexecamt, crdtpldgexecamt, long, 16; + ſüݾ, crdtexecamt, crdtexecamt, long, 16; + üݾ, prdayruseexecval, prdayruseexecval, long, 16; + üݾ, crdayruseexecval, crdayruseexecval, long, 16; + ǹü, spotexecqty, spotexecqty, long, 16; + ŵü, stslexecqty, stslexecqty, long, 16; + ڵ, strtgcode, strtgcode, char, 6; + ׷Id, grpId, grpId, char, 20; + ֹȸ, ordseqno, ordseqno, long, 10; + Ʈȣ, ptflno, ptflno, long, 10; + ٽϹȣ, bskno, bskno, long, 10; + Ʈġȣ, trchno, trchno, long, 10; + ۹ȣ, itemno, itemno, long, 10; + ֹId, orduserId, orduserId, char, 16; + ԰, brwmgmtYn, brwmgmtYn, long, 1; + ܱΰȣ, frgrunqno, frgrunqno, char, 6; + ŷ¡, trtzxLevytp, trtzxLevytp, char, 1; + ڱ, lptp, lptp, char, 1; + üð, exectime, exectime, char, 9; + ŷҼüð, rcptexectime, rcptexectime, char, 9; + ܿݾ, rmndLoanamt, rmndLoanamt, long, 16; + ܰ, secbalqty, secbalqty, long, 16; + ǹɼ, spotordableqty, spotordableqty, long, 16; + 밡ɼ(ŵ), ordableruseqty, ordableruseqty, long, 16; + , flctqty, flctqty, long, 16; + ܰ(d2), secbalqtyd2, secbalqtyd2, long, 16; + ŵֹɼ, sellableqty, sellableqty, long, 16; + üŵֹ, unercsellordqty, unercsellordqty, long, 16; + ո԰, avrpchsprc, avrpchsprc, long, 13; + Աݾ, pchsant, pchsant, long, 16; + , deposit, deposit, long, 16; + , substamt, substamt, long, 16; + Źű, csgnmnymgn, csgnmnymgn, long, 16; + Źűݴ, csgnsubstmgn, csgnsubstmgn, long, 16; + ſ㺸, crdtpldgruseamt, crdtpldgruseamt, long, 16; + ֹ, ordablemny, ordablemny, long, 16; + ֹɴ, ordablesubstamt, ordablesubstamt, long, 16; + 밡ɱݾ, ruseableamt, ruseableamt, long, 16; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SHC.res b/sample_python/Res/SHC.res new file mode 100644 index 0000000..6b26a96 --- /dev/null +++ b/sample_python/Res/SHC.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP +.Feed, /Ѱ(SHC), SHC, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + /Ѱ, updnlmtprice, updnlmtprice, long, 8; + /Ѱ, updnlmtdrate, updnlmtdrate, float, 6.2; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + Ѱ/Ѱϼ, updnlmtdaycnt, updnlmtdaycnt, long, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SHC_1.res b/sample_python/Res/SHC_1.res new file mode 100644 index 0000000..6b26a96 --- /dev/null +++ b/sample_python/Res/SHC_1.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP +.Feed, /Ѱ(SHC), SHC, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + /Ѱ, updnlmtprice, updnlmtprice, long, 8; + /Ѱ, updnlmtdrate, updnlmtdrate, float, 6.2; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + Ѱ/Ѱϼ, updnlmtdaycnt, updnlmtdaycnt, long, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SHD.res b/sample_python/Res/SHD.res new file mode 100644 index 0000000..76065b5 --- /dev/null +++ b/sample_python/Res/SHD.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, /ѰŻ(SHD), SHD, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + /Ѱ, updnlmtprice, updnlmtprice, long, 8; + /Ѱ, updnlmtdrate, updnlmtdrate, float, 6.2; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SHD_1.res b/sample_python/Res/SHD_1.res new file mode 100644 index 0000000..76065b5 --- /dev/null +++ b/sample_python/Res/SHD_1.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, /ѰŻ(SHD), SHD, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + /Ѱ, updnlmtprice, updnlmtprice, long, 8; + /Ѱ, updnlmtdrate, updnlmtdrate, float, 6.2; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SHI.res b/sample_python/Res/SHI.res new file mode 100644 index 0000000..6d0d0c8 --- /dev/null +++ b/sample_python/Res/SHI.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP +.Feed, /Ѱ(SHI), SHI, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + ŵȣѼ, totofferrem, totofferrem, long, 12; + żȣѼ, totbidrem, totbidrem, long, 12; +Ѱ/ѰԽð, updnlmtstime, updnlmtstime, char, 6; + Ѱ/Ѱϼ, updnlmtdaycnt, updnlmtdaycnt, long, 3; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SHI_1.res b/sample_python/Res/SHI_1.res new file mode 100644 index 0000000..6d0d0c8 --- /dev/null +++ b/sample_python/Res/SHI_1.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP +.Feed, /Ѱ(SHI), SHI, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + ŵȣѼ, totofferrem, totofferrem, long, 12; + żȣѼ, totbidrem, totbidrem, long, 12; +Ѱ/ѰԽð, updnlmtstime, updnlmtstime, char, 6; + Ѱ/Ѱϼ, updnlmtdaycnt, updnlmtdaycnt, long, 3; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SHO.res b/sample_python/Res/SHO.res new file mode 100644 index 0000000..e31456e --- /dev/null +++ b/sample_python/Res/SHO.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP +.Feed, /ѰŻ(SHO), SHO, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + /Ѱ, updnlmtprice, updnlmtprice, long, 8; + /Ѱ, updnlmtchange, updnlmtchange, long, 8; + /Ѱ, updnlmtdrate, updnlmtdrate, float, 6.2; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/SHO_1.res b/sample_python/Res/SHO_1.res new file mode 100644 index 0000000..e31456e --- /dev/null +++ b/sample_python/Res/SHO_1.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP +.Feed, /ѰŻ(SHO), SHO, attr, key=1, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + /ѱ, updnlmtgubun, updnlmtgubun, char, 1; + end + OutBlock,,output; + begin + ŷ/ڽڱ, sijanggubun, sijanggubun, char, 1; + , hname, hname, char, 20; + 簡, price, price, long, 8; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + ŷ, volume, volume, long, 12; + ŷ, volincrate, volincrate, float, 12.2; + /Ѱ, updnlmtprice, updnlmtprice, long, 8; + /Ѱ, updnlmtchange, updnlmtchange, long, 8; + /Ѱ, updnlmtdrate, updnlmtdrate, float, 6.2; + ϰŷ, jnilvolume, jnilvolume, long, 12; + ڵ, shcode, shcode, char, 6; + , gwangubun, gwangubun, char, 1; + ̻޵, undergubun, undergubun, char, 1; + DZ, tgubun, tgubun, char, 1; + 켱ֱ, wgubun, wgubun, char, 1; + ҼDZ, dishonest, dishonest, char, 1; + űݷ, jkrate, jkrate, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/TC1.res b/sample_python/Res/TC1.res new file mode 100644 index 0000000..147a808 --- /dev/null +++ b/sample_python/Res/TC1.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿֹܼ, TC1, block, key=7, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + KEY, key, key, char, 11; + ID, user, user, char, 8; + + ID, svc_id, svc_id, char, 4; + ֹ, ordr_dt, ordr_dt, char, 8; + ȣ, brn_cd, brn_cd, char, 3; + ֹȣ, ordr_no, ordr_no, long, 10; + ֹȣ, orgn_ordr_no, orgn_ordr_no, long, 10; + ֹȣ, mthr_ordr_no, mthr_ordr_no, long, 10; + ¹ȣ, ac_no, ac_no, char, 11; + ڵ, is_cd, is_cd, char, 30; + ŵż, s_b_ccd, s_b_ccd, char, 1; + , ordr_ccd, ordr_ccd, char, 1; + ֹڵ, ordr_typ_cd, ordr_typ_cd, char, 1; + ֹⰣڵ, ordr_typ_prd_ccd, ordr_typ_prd_ccd, char, 2; + ֹ, ordr_aplc_strt_dt, ordr_aplc_strt_dt, char, 8; + ֹ, ordr_aplc_end_dt, ordr_aplc_end_dt, char, 8; + ֹ, ordr_prc, ordr_prc, double, 18.11; + ֹǰ, cndt_ordr_prc, cndt_ordr_prc, double, 18.11; + ֹ, ordr_q, ordr_q, long, 12; + ֹð, ordr_tm, ordr_tm, char, 9; + ID, userid, userid, char, 8; + , xrc_rsv_tcp_code, xrc_rsv_tcp_code, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/TC1_1.res b/sample_python/Res/TC1_1.res new file mode 100644 index 0000000..147a808 --- /dev/null +++ b/sample_python/Res/TC1_1.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿֹܼ, TC1, block, key=7, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + KEY, key, key, char, 11; + ID, user, user, char, 8; + + ID, svc_id, svc_id, char, 4; + ֹ, ordr_dt, ordr_dt, char, 8; + ȣ, brn_cd, brn_cd, char, 3; + ֹȣ, ordr_no, ordr_no, long, 10; + ֹȣ, orgn_ordr_no, orgn_ordr_no, long, 10; + ֹȣ, mthr_ordr_no, mthr_ordr_no, long, 10; + ¹ȣ, ac_no, ac_no, char, 11; + ڵ, is_cd, is_cd, char, 30; + ŵż, s_b_ccd, s_b_ccd, char, 1; + , ordr_ccd, ordr_ccd, char, 1; + ֹڵ, ordr_typ_cd, ordr_typ_cd, char, 1; + ֹⰣڵ, ordr_typ_prd_ccd, ordr_typ_prd_ccd, char, 2; + ֹ, ordr_aplc_strt_dt, ordr_aplc_strt_dt, char, 8; + ֹ, ordr_aplc_end_dt, ordr_aplc_end_dt, char, 8; + ֹ, ordr_prc, ordr_prc, double, 18.11; + ֹǰ, cndt_ordr_prc, cndt_ordr_prc, double, 18.11; + ֹ, ordr_q, ordr_q, long, 12; + ֹð, ordr_tm, ordr_tm, char, 9; + ID, userid, userid, char, 8; + , xrc_rsv_tcp_code, xrc_rsv_tcp_code, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/TC2.res b/sample_python/Res/TC2.res new file mode 100644 index 0000000..e30e1d9 --- /dev/null +++ b/sample_python/Res/TC2.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼ, TC2, block, key=7, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + KEY, key, key, char, 11; + ID, user, user, char, 8; + + ID, svc_id, svc_id, char, 4; + ֹ, ordr_dt, ordr_dt, char, 8; + ȣ, brn_cd, brn_cd, char, 3; + ֹȣ, ordr_no, ordr_no, long, 10; + ֹȣ, orgn_ordr_no, orgn_ordr_no, long, 10; + ֹȣ, mthr_ordr_no, mthr_ordr_no, long, 10; + ¹ȣ, ac_no, ac_no, char, 11; + ڵ, is_cd, is_cd, char, 30; + ŵż, s_b_ccd, s_b_ccd, char, 1; + , ordr_ccd, ordr_ccd, char, 1; + ֹڵ, ordr_typ_cd, ordr_typ_cd, char, 1; + ֹⰣڵ, ordr_typ_prd_ccd, ordr_typ_prd_ccd, char, 2; + ֹ, ordr_aplc_strt_dt, ordr_aplc_strt_dt, char, 8; + ֹ, ordr_aplc_end_dt, ordr_aplc_end_dt, char, 8; + ֹ, ordr_prc, ordr_prc, double, 18.11; + ֹǰ, cndt_ordr_prc, cndt_ordr_prc, double, 18.11; + ֹ, ordr_q, ordr_q, long, 12; + ֹð, ordr_tm, ordr_tm, char, 9; + ȣȮμ, cnfr_q, cnfr_q, long, 12; + ȣźλڵ, rfsl_cd, rfsl_cd, char, 4; + ȣźλڵ, text, text, char, 80; + ID, user_id, user_id, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/TC2_1.res b/sample_python/Res/TC2_1.res new file mode 100644 index 0000000..e30e1d9 --- /dev/null +++ b/sample_python/Res/TC2_1.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼ, TC2, block, key=7, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + KEY, key, key, char, 11; + ID, user, user, char, 8; + + ID, svc_id, svc_id, char, 4; + ֹ, ordr_dt, ordr_dt, char, 8; + ȣ, brn_cd, brn_cd, char, 3; + ֹȣ, ordr_no, ordr_no, long, 10; + ֹȣ, orgn_ordr_no, orgn_ordr_no, long, 10; + ֹȣ, mthr_ordr_no, mthr_ordr_no, long, 10; + ¹ȣ, ac_no, ac_no, char, 11; + ڵ, is_cd, is_cd, char, 30; + ŵż, s_b_ccd, s_b_ccd, char, 1; + , ordr_ccd, ordr_ccd, char, 1; + ֹڵ, ordr_typ_cd, ordr_typ_cd, char, 1; + ֹⰣڵ, ordr_typ_prd_ccd, ordr_typ_prd_ccd, char, 2; + ֹ, ordr_aplc_strt_dt, ordr_aplc_strt_dt, char, 8; + ֹ, ordr_aplc_end_dt, ordr_aplc_end_dt, char, 8; + ֹ, ordr_prc, ordr_prc, double, 18.11; + ֹǰ, cndt_ordr_prc, cndt_ordr_prc, double, 18.11; + ֹ, ordr_q, ordr_q, long, 12; + ֹð, ordr_tm, ordr_tm, char, 9; + ȣȮμ, cnfr_q, cnfr_q, long, 12; + ȣźλڵ, rfsl_cd, rfsl_cd, char, 4; + ȣźλڵ, text, text, char, 80; + ID, user_id, user_id, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/TC3.res b/sample_python/Res/TC3.res new file mode 100644 index 0000000..cd3c542 --- /dev/null +++ b/sample_python/Res/TC3.res @@ -0,0 +1,44 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼü, TC3, block, key=7, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + KEY, key, key, char, 11; + ID, user, user, char, 8; + + ID, svc_id, svc_id, char, 4; + ֹ, ordr_dt, ordr_dt, char, 8; + ȣ, brn_cd, brn_cd, char, 3; + ֹȣ, ordr_no, ordr_no, long, 10; + ֹȣ, orgn_ordr_no, orgn_ordr_no, long, 10; + ֹȣ, mthr_ordr_no, mthr_ordr_no, long, 10; + ¹ȣ, ac_no, ac_no, char, 11; + ڵ, is_cd, is_cd, char, 30; + ŵż, s_b_ccd, s_b_ccd, char, 1; + , ordr_ccd, ordr_ccd, char, 1; + ü, ccls_q, ccls_q, long, 15; + üᰡ, ccls_prc, ccls_prc, double, 18.11; + üȣ, ccls_no, ccls_no, char, 10; + üð, ccls_tm, ccls_tm, char, 9; + մܰ, avg_byng_uprc, avg_byng_uprc, double, 18.11; + Աݾ, byug_amt, byug_amt, double, 25.8; + û, clr_pl_amt, clr_pl_amt, double, 19.2; + Ź, ent_fee, ent_fee, double, 19.2; + ܰ, fcm_fee, fcm_fee, long, 19; + ID, userid, userid, char, 8; + 簡, now_prc, now_prc, double, 18.11; + ȭڵ, crncy_cd, crncy_cd, char, 3; + , mtrt_dt, mtrt_dt, char, 8; + ֹǰڵ, ord_prdt_tp_code, ord_prdt_tp_code, char, 1; + ֹǰڵ, exec_prdt_tp_code, exec_prdt_tp_code, char, 1; + 񿩺, sprd_base_isu_yn, sprd_base_isu_yn, char, 1; + FILLER1, filler1, filler1, char, 8; + FILLER2, filler2, filler2, char, 30; + ڵ, sprd_is_cd, sprd_is_cd, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/TC3_1.res b/sample_python/Res/TC3_1.res new file mode 100644 index 0000000..cd3c542 --- /dev/null +++ b/sample_python/Res/TC3_1.res @@ -0,0 +1,44 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܼü, TC3, block, key=7, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + end + OutBlock,,output; + begin + Ϸùȣ, lineseq, lineseq, long, 10; + KEY, key, key, char, 11; + ID, user, user, char, 8; + + ID, svc_id, svc_id, char, 4; + ֹ, ordr_dt, ordr_dt, char, 8; + ȣ, brn_cd, brn_cd, char, 3; + ֹȣ, ordr_no, ordr_no, long, 10; + ֹȣ, orgn_ordr_no, orgn_ordr_no, long, 10; + ֹȣ, mthr_ordr_no, mthr_ordr_no, long, 10; + ¹ȣ, ac_no, ac_no, char, 11; + ڵ, is_cd, is_cd, char, 30; + ŵż, s_b_ccd, s_b_ccd, char, 1; + , ordr_ccd, ordr_ccd, char, 1; + ü, ccls_q, ccls_q, long, 15; + üᰡ, ccls_prc, ccls_prc, double, 18.11; + üȣ, ccls_no, ccls_no, char, 10; + üð, ccls_tm, ccls_tm, char, 9; + մܰ, avg_byng_uprc, avg_byng_uprc, double, 18.11; + Աݾ, byug_amt, byug_amt, double, 25.8; + û, clr_pl_amt, clr_pl_amt, double, 19.2; + Ź, ent_fee, ent_fee, double, 19.2; + ܰ, fcm_fee, fcm_fee, long, 19; + ID, userid, userid, char, 8; + 簡, now_prc, now_prc, double, 18.11; + ȭڵ, crncy_cd, crncy_cd, char, 3; + , mtrt_dt, mtrt_dt, char, 8; + ֹǰڵ, ord_prdt_tp_code, ord_prdt_tp_code, char, 1; + ֹǰڵ, exec_prdt_tp_code, exec_prdt_tp_code, char, 1; + 񿩺, sprd_base_isu_yn, sprd_base_isu_yn, char, 1; + FILLER1, filler1, filler1, char, 8; + FILLER2, filler2, filler2, char, 30; + ڵ, sprd_is_cd, sprd_is_cd, char, 30; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/VI_.res b/sample_python/Res/VI_.res new file mode 100644 index 0000000..961674b --- /dev/null +++ b/sample_python/Res/VI_.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, VIߵ(VI_), VI_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ(KEY), shcode, shcode, char, 6; + end + OutBlock,,output; + begin + (0: 1:ߵ 2:ߵ 3:&) , vi_gubun , vi_gubun , char, 1; + VIߵذ , svi_recprice, svi_recprice, long, 8; + VIߵذ , dvi_recprice, dvi_recprice, long, 8; + VIߵ , vi_trgprice , vi_trgprice , long, 8; + ڵ(KEY) , shcode , shcode , char, 6; + ڵ , ref_shcode, ref_shcode, char, 6; + ð , time, time, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/VI__1.res b/sample_python/Res/VI__1.res new file mode 100644 index 0000000..961674b --- /dev/null +++ b/sample_python/Res/VI__1.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, VIߵ(VI_), VI_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ(KEY), shcode, shcode, char, 6; + end + OutBlock,,output; + begin + (0: 1:ߵ 2:ߵ 3:&) , vi_gubun , vi_gubun , char, 1; + VIߵذ , svi_recprice, svi_recprice, long, 8; + VIߵذ , dvi_recprice, dvi_recprice, long, 8; + VIߵ , vi_trgprice , vi_trgprice , long, 8; + ڵ(KEY) , shcode , shcode , char, 6; + ڵ , ref_shcode, ref_shcode, char, 6; + ð , time, time, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/WOC.res b/sample_python/Res/WOC.res new file mode 100644 index 0000000..2783489 --- /dev/null +++ b/sample_python/Res/WOC.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܿɼ 簡ü(WOC), WOC, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 16; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 16; + ü() , ovsdate , ovsdate , char , 8; + ü(ѱ) , kordate , kordate , char , 8; + üð() , trdtm , trdtm , char , 6; + üð(ѱ) , kortm , kortm , char , 6; + üᰡ , curpr , curpr , double , 15.9; + ϴ , ydiffpr , ydiffpr , double , 15.9; + ϴȣ , ydiffSign , ydiffSign , char , 1; + ð , open , open , double , 15.9; + , high , high , double , 15.9; + , low , low , double , 15.9; + , chgrate , chgrate , float , 6.2; + Ǻü , trdq , trdq , long , 10; + ü , totq , totq , char , 15; + üᱸ , cgubun , cgubun , char , 1; + ŵü , mdvolume , mdvolume , char , 15; + żü , msvolume , msvolume , char , 15; + 帶 , ovsmkend , ovsmkend , char , 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/WOC_1.res b/sample_python/Res/WOC_1.res new file mode 100644 index 0000000..2783489 --- /dev/null +++ b/sample_python/Res/WOC_1.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܿɼ 簡ü(WOC), WOC, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 16; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 16; + ü() , ovsdate , ovsdate , char , 8; + ü(ѱ) , kordate , kordate , char , 8; + üð() , trdtm , trdtm , char , 6; + üð(ѱ) , kortm , kortm , char , 6; + üᰡ , curpr , curpr , double , 15.9; + ϴ , ydiffpr , ydiffpr , double , 15.9; + ϴȣ , ydiffSign , ydiffSign , char , 1; + ð , open , open , double , 15.9; + , high , high , double , 15.9; + , low , low , double , 15.9; + , chgrate , chgrate , float , 6.2; + Ǻü , trdq , trdq , long , 10; + ü , totq , totq , char , 15; + üᱸ , cgubun , cgubun , char , 1; + ŵü , mdvolume , mdvolume , char , 15; + żü , msvolume , msvolume , char , 15; + 帶 , ovsmkend , ovsmkend , char , 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/WOH.res b/sample_python/Res/WOH.res new file mode 100644 index 0000000..e18ff8d --- /dev/null +++ b/sample_python/Res/WOH.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܿɼ ȣ(WOH), WOH, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 16; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 16 ; + ȣð , hotime , hotime , char , 6 ; + + ŵȣ 1 , offerho1 , offerho1 , double , 15.9; + żȣ 1 , bidho1 , bidho1 , double , 15.9; + ŵȣ ܷ 1 , offerrem1 , offerrem1 , long , 10; + żȣ ܷ 1 , bidrem1 , bidrem1 , long , 10; + ŵȣ Ǽ 1 , offerno1 , offerno1 , long , 10; + żȣ Ǽ 1 , bidno1 , bidno1 , long , 10; + + ŵȣ 2 , offerho2 , offerho2 , double , 15.9; + żȣ 2 , bidho2 , bidho2 , double , 15.9; + ŵȣ ܷ 2 , offerrem2 , offerrem2 , long , 10; + żȣ ܷ 2 , bidrem2 , bidrem2 , long , 10; + ŵȣ Ǽ 2 , offerno2 , offerno2 , long , 10; + żȣ Ǽ 2 , bidno2 , bidno2 , long , 10; + + ŵȣ 3 , offerho3 , offerho3 , double , 15.9; + żȣ 3 , bidho3 , bidho3 , double , 15.9; + ŵȣ ܷ 3 , offerrem3 , offerrem3 , long , 10; + żȣ ܷ 3 , bidrem3 , bidrem3 , long , 10; + ŵȣ Ǽ 3 , offerno3 , offerno3 , long , 10; + żȣ Ǽ 3 , bidno3 , bidno3 , long , 10; + + ŵȣ 4 , offerho4 , offerho4 , double , 15.9; + żȣ 4 , bidho4 , bidho4 , double , 15.9; + ŵȣ ܷ 4 , offerrem4 , offerrem4 , long , 10; + żȣ ܷ 4 , bidrem4 , bidrem4 , long , 10; + ŵȣ Ǽ 4 , offerno4 , offerno4 , long , 10; + żȣ Ǽ 4 , bidno4 , bidno4 , long , 10; + + ŵȣ 5 , offerho5 , offerho5 , double , 15.9; + żȣ 5 , bidho5 , bidho5 , double , 15.9; + ŵȣ ܷ 5 , offerrem5 , offerrem5 , long , 10; + żȣ ܷ 5 , bidrem5 , bidrem5 , long , 10; + ŵȣ Ǽ 5 , offerno5 , offerno5 , long , 10; + żȣ Ǽ 5 , bidno5 , bidno5 , long , 10; + + ŵȣѰǼ , totoffercnt , totoffercnt , long , 10; + żȣѰǼ , totbidcnt , totbidcnt , long , 10; + ŵȣѼ , totofferrem , totofferrem , long , 10; + żȣѼ , totbidrem , totbidrem , long , 10; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/WOH_1.res b/sample_python/Res/WOH_1.res new file mode 100644 index 0000000..e18ff8d --- /dev/null +++ b/sample_python/Res/WOH_1.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP +.Feed, ؿܿɼ ȣ(WOH), WOH, attr, svr=OVS, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, symbol, symbol, char, 16; + end + OutBlock,,output; + begin + ڵ , symbol , symbol , char , 16 ; + ȣð , hotime , hotime , char , 6 ; + + ŵȣ 1 , offerho1 , offerho1 , double , 15.9; + żȣ 1 , bidho1 , bidho1 , double , 15.9; + ŵȣ ܷ 1 , offerrem1 , offerrem1 , long , 10; + żȣ ܷ 1 , bidrem1 , bidrem1 , long , 10; + ŵȣ Ǽ 1 , offerno1 , offerno1 , long , 10; + żȣ Ǽ 1 , bidno1 , bidno1 , long , 10; + + ŵȣ 2 , offerho2 , offerho2 , double , 15.9; + żȣ 2 , bidho2 , bidho2 , double , 15.9; + ŵȣ ܷ 2 , offerrem2 , offerrem2 , long , 10; + żȣ ܷ 2 , bidrem2 , bidrem2 , long , 10; + ŵȣ Ǽ 2 , offerno2 , offerno2 , long , 10; + żȣ Ǽ 2 , bidno2 , bidno2 , long , 10; + + ŵȣ 3 , offerho3 , offerho3 , double , 15.9; + żȣ 3 , bidho3 , bidho3 , double , 15.9; + ŵȣ ܷ 3 , offerrem3 , offerrem3 , long , 10; + żȣ ܷ 3 , bidrem3 , bidrem3 , long , 10; + ŵȣ Ǽ 3 , offerno3 , offerno3 , long , 10; + żȣ Ǽ 3 , bidno3 , bidno3 , long , 10; + + ŵȣ 4 , offerho4 , offerho4 , double , 15.9; + żȣ 4 , bidho4 , bidho4 , double , 15.9; + ŵȣ ܷ 4 , offerrem4 , offerrem4 , long , 10; + żȣ ܷ 4 , bidrem4 , bidrem4 , long , 10; + ŵȣ Ǽ 4 , offerno4 , offerno4 , long , 10; + żȣ Ǽ 4 , bidno4 , bidno4 , long , 10; + + ŵȣ 5 , offerho5 , offerho5 , double , 15.9; + żȣ 5 , bidho5 , bidho5 , double , 15.9; + ŵȣ ܷ 5 , offerrem5 , offerrem5 , long , 10; + żȣ ܷ 5 , bidrem5 , bidrem5 , long , 10; + ŵȣ Ǽ 5 , offerno5 , offerno5 , long , 10; + żȣ Ǽ 5 , bidno5 , bidno5 , long , 10; + + ŵȣѰǼ , totoffercnt , totoffercnt , long , 10; + żȣѰǼ , totbidcnt , totbidcnt , long , 10; + ŵȣѼ , totofferrem , totofferrem , long , 10; + żȣѼ , totbidrem , totbidrem , long , 10; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/YC3.res b/sample_python/Res/YC3.res new file mode 100644 index 0000000..2bafabd --- /dev/null +++ b/sample_python/Res/YC3.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ǰü(YC3), YC3, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, float, 9.2; + ü, yevolume, yevolume, long, 6; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, float, 9.2; +üᰡ, jnilydrate, jnilydrate, float, 9.2; + ڵ, shcode, shcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/YC3_1.res b/sample_python/Res/YC3_1.res new file mode 100644 index 0000000..2bafabd --- /dev/null +++ b/sample_python/Res/YC3_1.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ǰü(YC3), YC3, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, float, 9.2; + ü, yevolume, yevolume, long, 6; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, float, 9.2; +üᰡ, jnilydrate, jnilydrate, float, 9.2; + ڵ, shcode, shcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/YFC.res b/sample_python/Res/YFC.res new file mode 100644 index 0000000..cb69a08 --- /dev/null +++ b/sample_python/Res/YFC.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ü(YFC), YFC, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, float, 6.2; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, float, 6.2; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ڵ, futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +YFC \ No newline at end of file diff --git a/sample_python/Res/YFC_1.res b/sample_python/Res/YFC_1.res new file mode 100644 index 0000000..cb69a08 --- /dev/null +++ b/sample_python/Res/YFC_1.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ü(YFC), YFC, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, float, 6.2; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, float, 6.2; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ڵ, futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +YFC \ No newline at end of file diff --git a/sample_python/Res/YJC.res b/sample_python/Res/YJC.res new file mode 100644 index 0000000..2be386a --- /dev/null +++ b/sample_python/Res/YJC.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļü(YJC), YJC, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, long, 10; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 10; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ڵ, futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/YJC_1.res b/sample_python/Res/YJC_1.res new file mode 100644 index 0000000..2be386a --- /dev/null +++ b/sample_python/Res/YJC_1.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, ֽļü(YJC), YJC, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, futcode, futcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, long, 10; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 10; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ڵ, futcode, futcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/YJ_.res b/sample_python/Res/YJ_.res new file mode 100644 index 0000000..9a24a54 --- /dev/null +++ b/sample_python/Res/YJ_.res @@ -0,0 +1,21 @@ +BEGIN_FUNCTION_MAP +.Feed, (YJ), YJ_, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + ð, time, time, char, 6; + , jisu, jisu, float, 8.2; + ϴ񱸺, sign, sign, char, 1; + Ϻ, change, change, float, 8.2; + , drate, drate, float, 6.2; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 8; + ŷ, value, value, long, 8; + ڵ, upcode, upcode, char, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/YJ__1.res b/sample_python/Res/YJ__1.res new file mode 100644 index 0000000..9a24a54 --- /dev/null +++ b/sample_python/Res/YJ__1.res @@ -0,0 +1,21 @@ +BEGIN_FUNCTION_MAP +.Feed, (YJ), YJ_, attr, key=3, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, upcode, upcode, char, 3; + end + OutBlock,,output; + begin + ð, time, time, char, 6; + , jisu, jisu, float, 8.2; + ϴ񱸺, sign, sign, char, 1; + Ϻ, change, change, float, 8.2; + , drate, drate, float, 6.2; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 8; + ŷ, value, value, long, 8; + ڵ, upcode, upcode, char, 3; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/YK3.res b/sample_python/Res/YK3.res new file mode 100644 index 0000000..13ff699 --- /dev/null +++ b/sample_python/Res/YK3.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQü(YK3), YK3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + üᰡ, yeprice, yeprice, long, 8; + ü, yevolume, yevolume, long, 12; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 8; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ŵȣ, yofferho0, yofferho0, long, 8; + żȣ, ybidho0, ybidho0, long, 8; + ŵȣ, yofferrem0, yofferrem0, long, 12; + żȣ, ybidrem0, ybidrem0, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/YK3_1.res b/sample_python/Res/YK3_1.res new file mode 100644 index 0000000..13ff699 --- /dev/null +++ b/sample_python/Res/YK3_1.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSDAQü(YK3), YK3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + üᰡ, yeprice, yeprice, long, 8; + ü, yevolume, yevolume, long, 12; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 8; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ŵȣ, yofferho0, yofferho0, long, 8; + żȣ, ybidho0, ybidho0, long, 8; + ŵȣ, yofferrem0, yofferrem0, long, 12; + żȣ, ybidrem0, ybidrem0, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/YOC.res b/sample_python/Res/YOC.res new file mode 100644 index 0000000..04783d1 --- /dev/null +++ b/sample_python/Res/YOC.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ɼǿü(YOC), YOC, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, float, 6.2; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, float, 6.2; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +YOC \ No newline at end of file diff --git a/sample_python/Res/YOC_1.res b/sample_python/Res/YOC_1.res new file mode 100644 index 0000000..04783d1 --- /dev/null +++ b/sample_python/Res/YOC_1.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP +.Feed, ɼǿü(YOC), YOC, attr, key=8, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, optcode, optcode, char, 8; + end + OutBlock,,output; + begin + üð, ychetime, ychetime, char, 6; + üᰡ, yeprice, yeprice, float, 6.2; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, float, 6.2; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ڵ, optcode, optcode, char, 8; + end + END_DATA_MAP +END_FUNCTION_MAP +YOC \ No newline at end of file diff --git a/sample_python/Res/YS3.res b/sample_python/Res/YS3.res new file mode 100644 index 0000000..880424a --- /dev/null +++ b/sample_python/Res/YS3.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIü(YS3), YS3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + üᰡ, yeprice, yeprice, long, 8; + ü, yevolume, yevolume, long, 12; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 8; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ŵȣ, yofferho0, yofferho0, long, 8; + żȣ, ybidho0, ybidho0, long, 8; + ŵȣ, yofferrem0, yofferrem0, long, 12; + żȣ, ybidrem0, ybidrem0, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/YS3_1.res b/sample_python/Res/YS3_1.res new file mode 100644 index 0000000..880424a --- /dev/null +++ b/sample_python/Res/YS3_1.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, KOSPIü(YS3), YS3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + üᰡ, yeprice, yeprice, long, 8; + ü, yevolume, yevolume, long, 12; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 8; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ŵȣ, yofferho0, yofferho0, long, 8; + żȣ, ybidho0, ybidho0, long, 8; + ŵȣ, yofferrem0, yofferrem0, long, 12; + żȣ, ybidrem0, ybidrem0, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/Ys3_4ELW.res b/sample_python/Res/Ys3_4ELW.res new file mode 100644 index 0000000..e5d4d36 --- /dev/null +++ b/sample_python/Res/Ys3_4ELW.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWü(Ys3), Ys3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + üᰡ, yeprice, yeprice, long, 8; + ü, yevolume, yevolume, long, 12; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 8; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ŵȣ, yofferho0, yofferho0, long, 8; + żȣ, ybidho0, ybidho0, long, 8; + ŵȣ, yofferrem0, yofferrem0, long, 12; + żȣ, ybidrem0, ybidrem0, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/Ys3_4ELW_1.res b/sample_python/Res/Ys3_4ELW_1.res new file mode 100644 index 0000000..e5d4d36 --- /dev/null +++ b/sample_python/Res/Ys3_4ELW_1.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWü(Ys3), Ys3, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + üᰡ, yeprice, yeprice, long, 8; + ü, yevolume, yevolume, long, 12; +üᰡ񱸺, jnilysign, jnilysign, char, 1; +üᰡ, jnilchange, preychange, long, 8; +üᰡ, jnilydrate, jnilydrate, float, 6.2; + ŵȣ, yofferho0, yofferho0, long, 8; + żȣ, ybidho0, ybidho0, long, 8; + ŵȣ, yofferrem0, yofferrem0, long, 12; + żȣ, ybidrem0, ybidrem0, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/h2_4ELW.res b/sample_python/Res/h2_4ELW.res new file mode 100644 index 0000000..887fd5d --- /dev/null +++ b/sample_python/Res/h2_4ELW.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWðȣܷ(h2), h2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ðܸŵܷ, tmofferrem, tmofferrem, long, 12; + ðܸżܷ, tmbidrem, tmbidrem, long, 12; +ðܸŵ, pretmoffercha, pretmoffercha, long, 12; +ðܸż, pretmbidcha, pretmbidcha, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/h2_4ELW_2.res b/sample_python/Res/h2_4ELW_2.res new file mode 100644 index 0000000..887fd5d --- /dev/null +++ b/sample_python/Res/h2_4ELW_2.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWðȣܷ(h2), h2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ðܸŵܷ, tmofferrem, tmofferrem, long, 12; + ðܸżܷ, tmbidrem, tmbidrem, long, 12; +ðܸŵ, pretmoffercha, pretmoffercha, long, 12; +ðܸż, pretmbidcha, pretmbidcha, long, 12; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/h3_4ELW.res b/sample_python/Res/h3_4ELW.res new file mode 100644 index 0000000..613d772 --- /dev/null +++ b/sample_python/Res/h3_4ELW.res @@ -0,0 +1,78 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWȣܷ(h3), h3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + LPŵȣ1, lp_offerho1, lp_offerho1, long, 9; + LPżȣ1, lp_bidho1, lp_bidho1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + LPŵȣ2, lp_offerho2, lp_offerho2, long, 9; + LPżȣ2, lp_bidho2, lp_bidho2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + LPŵȣ3, lp_offerho3, lp_offerho3, long, 9; + LPżȣ3, lp_bidho3, lp_bidho3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + LPŵȣ4, lp_offerho4, lp_offerho4, long, 9; + LPżȣ4, lp_bidho4, lp_bidho4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + LPŵȣ5, lp_offerho5, lp_offerho5, long, 9; + LPżȣ5, lp_bidho5, lp_bidho5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + LPŵȣ6, lp_offerho6, lp_offerho6, long, 9; + LPżȣ6, lp_bidho6, lp_bidho6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + LPŵȣ7, lp_offerho7, lp_offerho7, long, 9; + LPżȣ7, lp_bidho7, lp_bidho7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + LPŵȣ8, lp_offerho8, lp_offerho8, long, 9; + LPżȣ8, lp_bidho8, lp_bidho8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + LPŵȣ9, lp_offerho9, lp_offerho9, long, 9; + LPżȣ9, lp_bidho9, lp_bidho9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + LPŵȣ10, lp_offerho10, lp_offerho10, long, 9; + LPżȣ10, lp_bidho10, lp_bidho10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + , spread, spread, float, 6.2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/h3_4ELW_2.res b/sample_python/Res/h3_4ELW_2.res new file mode 100644 index 0000000..613d772 --- /dev/null +++ b/sample_python/Res/h3_4ELW_2.res @@ -0,0 +1,78 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWȣܷ(h3), h3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ȣð, hotime, hotime, char, 6; + ŵȣ1, offerho1, offerho1, long, 7; + żȣ1, bidho1, bidho1, long, 7; + ŵȣܷ1, offerrem1, offerrem1, long, 9; + żȣܷ1, bidrem1, bidrem1, long, 9; + LPŵȣ1, lp_offerho1, lp_offerho1, long, 9; + LPżȣ1, lp_bidho1, lp_bidho1, long, 9; + ŵȣ2, offerho2, offerho2, long, 7; + żȣ2, bidho2, bidho2, long, 7; + ŵȣܷ2, offerrem2, offerrem2, long, 9; + żȣܷ2, bidrem2, bidrem2, long, 9; + LPŵȣ2, lp_offerho2, lp_offerho2, long, 9; + LPżȣ2, lp_bidho2, lp_bidho2, long, 9; + ŵȣ3, offerho3, offerho3, long, 7; + żȣ3, bidho3, bidho3, long, 7; + ŵȣܷ3, offerrem3, offerrem3, long, 9; + żȣܷ3, bidrem3, bidrem3, long, 9; + LPŵȣ3, lp_offerho3, lp_offerho3, long, 9; + LPżȣ3, lp_bidho3, lp_bidho3, long, 9; + ŵȣ4, offerho4, offerho4, long, 7; + żȣ4, bidho4, bidho4, long, 7; + ŵȣܷ4, offerrem4, offerrem4, long, 9; + żȣܷ4, bidrem4, bidrem4, long, 9; + LPŵȣ4, lp_offerho4, lp_offerho4, long, 9; + LPżȣ4, lp_bidho4, lp_bidho4, long, 9; + ŵȣ5, offerho5, offerho5, long, 7; + żȣ5, bidho5, bidho5, long, 7; + ŵȣܷ5, offerrem5, offerrem5, long, 9; + żȣܷ5, bidrem5, bidrem5, long, 9; + LPŵȣ5, lp_offerho5, lp_offerho5, long, 9; + LPżȣ5, lp_bidho5, lp_bidho5, long, 9; + ŵȣ6, offerho6, offerho6, long, 7; + żȣ6, bidho6, bidho6, long, 7; + ŵȣܷ6, offerrem6, offerrem6, long, 9; + żȣܷ6, bidrem6, bidrem6, long, 9; + LPŵȣ6, lp_offerho6, lp_offerho6, long, 9; + LPżȣ6, lp_bidho6, lp_bidho6, long, 9; + ŵȣ7, offerho7, offerho7, long, 7; + żȣ7, bidho7, bidho7, long, 7; + ŵȣܷ7, offerrem7, offerrem7, long, 9; + żȣܷ7, bidrem7, bidrem7, long, 9; + LPŵȣ7, lp_offerho7, lp_offerho7, long, 9; + LPżȣ7, lp_bidho7, lp_bidho7, long, 9; + ŵȣ8, offerho8, offerho8, long, 7; + żȣ8, bidho8, bidho8, long, 7; + ŵȣܷ8, offerrem8, offerrem8, long, 9; + żȣܷ8, bidrem8, bidrem8, long, 9; + LPŵȣ8, lp_offerho8, lp_offerho8, long, 9; + LPżȣ8, lp_bidho8, lp_bidho8, long, 9; + ŵȣ9, offerho9, offerho9, long, 7; + żȣ9, bidho9, bidho9, long, 7; + ŵȣܷ9, offerrem9, offerrem9, long, 9; + żȣܷ9, bidrem9, bidrem9, long, 9; + LPŵȣ9, lp_offerho9, lp_offerho9, long, 9; + LPżȣ9, lp_bidho9, lp_bidho9, long, 9; + ŵȣ10, offerho10, offerho10, long, 7; + żȣ10, bidho10, bidho10, long, 7; + ŵȣܷ10, offerrem10, offerrem10, long, 9; + żȣܷ10, bidrem10, bidrem10, long, 9; + LPŵȣ10, lp_offerho10, lp_offerho10, long, 9; + LPżȣ10, lp_bidho10, lp_bidho10, long, 9; + Ѹŵȣܷ, totofferrem, totofferrem, long, 9; + Ѹżȣܷ, totbidrem, totbidrem, long, 9; + ȣ, donsigubun, donsigubun, char, 1; + , spread, spread, float, 6.2; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/k1_4ELW.res b/sample_python/Res/k1_4ELW.res new file mode 100644 index 0000000..8bfb53f --- /dev/null +++ b/sample_python/Res/k1_4ELW.res @@ -0,0 +1,69 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWŷ(k1), k1_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵǻڵ1 , offerno1, offerno1, char, 3; + żǻڵ1 , bidno1, bidno1, char, 3; + ŵȸ1 , offertrad1, offertrad1, char, 6; + żȸ1 , bidtrad1, bidtrad1, char, 6; + ŵŷ1, tradmdvol1, tradmdvol1, long, 10; + żŷ1, tradmsvol1, tradmsvol1, long, 10; + ŵŷ1, tradmdrate1, tradmdrate1, float, 6.2; + ŵŷ1, tradmsrate1, tradmsrate1, float, 6.2; + ŵŷ1, tradmdcha1, tradmdcha1, long, 10; + żŷ1, tradmscha1, tradmscha1, long, 10; + ŵǻڵ2 , offerno2, offerno2, char, 3; + żǻڵ2 , bidno2, bidno2, char, 3; + ŵȸ2 , offertrad2, offertrad2, char, 6; + żȸ2 , bidtrad2, bidtrad2, char, 6; + ŵŷ2, tradmdvol2, tradmdvol2, long, 10; + żŷ2, tradmsvol2, tradmsvol2, long, 10; + ŵŷ2, tradmdrate2, tradmdrate2, float, 6.2; + żŷ2, tradmsrate2, tradmsrate2, float, 6.2; + ŵŷ2, tradmdcha2, tradmdcha2, long, 10; + żŷ2, tradmscha2, tradmscha2, long, 10; + ŵǻڵ3 , offerno3, offerno3, char, 3; + żǻڵ3 , bidno3, bidno3, char, 3; + ŵȸ3 , offertrad3, offertrad3, char, 6; + żȸ3 , bidtrad3, bidtrad3, char, 6; + ŵŷ3, tradmdvol3, tradmdvol3, long, 10; + żŷ3, tradmsvol3, tradmsvol3, long, 10; + ŵŷ3, tradmdrate3, tradmdrate3, float, 6.2; + żŷ3, tradmsrate3, tradmsrate3, float, 6.2; + ŵŷ3, tradmdcha3, tradmdcha3, long, 10; + żŷ3, tradmscha3, tradmscha3, long, 10; + ŵǻڵ4 , offerno4, offerno4, char, 3; + żǻڵ4 , bidno4, bidno4, char, 3; + ŵȸ4 , offertrad4, offertrad4, char, 6; + żȸ4 , bidtrad4, bidtrad4, char, 6; + ŵŷ4, tradmdvol4, tradmdvol4, long, 10; + żŷ4, tradmsvol4, tradmsvol4, long, 10; + ŵŷ4, tradmdrate4, tradmdrate4, float, 6.2; + żŷ4, tradmsrate4, tradmsrate4, float, 6.2; + ŵŷ4, tradmdcha4, tradmdcha4, long, 10; + żŷ4, tradmscha4, tradmscha4, long, 10; + ŵǻڵ5 , offerno5, offerno5, char, 3; + żǻڵ5 , bidno5, bidno5, char, 3; + ŵȸ5 , offertrad5, offertrad5, char, 6; + żȸ5 , bidtrad5, bidtrad5, char, 6; + ŵŷ5, tradmdvol5, tradmdvol5, long, 10; + żŷ5, tradmsvol5, tradmsvol5, long, 10; + ŵŷ5, tradmdrate5, tradmdrate5, float, 6.2; + żŷ5, tradmsrate5, tradmsrate5, float, 6.2; + ŵŷ5, tradmdcha5, tradmdcha5, long, 10; + żŷ5, tradmscha5, tradmscha5, long, 10; + ܱǻŵհ, ftradmdvol, ftradmdvol, char, 10; + ܱǻżհ, ftradmsvol, ftradmsvol, char, 10; +ܱǻŵŷ, ftradmdrate, ftradmdrate, float, 6.2; +ܱǻżŷ, ftradmsrate, ftradmsrate, float, 6.2; +ܱǻŵŷ, ftradmdcha, ftradmdcha, char, 10; +ܱǻżŷ, ftradmscha, ftradmscha, char, 10; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/k1_4ELW_2.res b/sample_python/Res/k1_4ELW_2.res new file mode 100644 index 0000000..8bfb53f --- /dev/null +++ b/sample_python/Res/k1_4ELW_2.res @@ -0,0 +1,69 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWŷ(k1), k1_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵǻڵ1 , offerno1, offerno1, char, 3; + żǻڵ1 , bidno1, bidno1, char, 3; + ŵȸ1 , offertrad1, offertrad1, char, 6; + żȸ1 , bidtrad1, bidtrad1, char, 6; + ŵŷ1, tradmdvol1, tradmdvol1, long, 10; + żŷ1, tradmsvol1, tradmsvol1, long, 10; + ŵŷ1, tradmdrate1, tradmdrate1, float, 6.2; + ŵŷ1, tradmsrate1, tradmsrate1, float, 6.2; + ŵŷ1, tradmdcha1, tradmdcha1, long, 10; + żŷ1, tradmscha1, tradmscha1, long, 10; + ŵǻڵ2 , offerno2, offerno2, char, 3; + żǻڵ2 , bidno2, bidno2, char, 3; + ŵȸ2 , offertrad2, offertrad2, char, 6; + żȸ2 , bidtrad2, bidtrad2, char, 6; + ŵŷ2, tradmdvol2, tradmdvol2, long, 10; + żŷ2, tradmsvol2, tradmsvol2, long, 10; + ŵŷ2, tradmdrate2, tradmdrate2, float, 6.2; + żŷ2, tradmsrate2, tradmsrate2, float, 6.2; + ŵŷ2, tradmdcha2, tradmdcha2, long, 10; + żŷ2, tradmscha2, tradmscha2, long, 10; + ŵǻڵ3 , offerno3, offerno3, char, 3; + żǻڵ3 , bidno3, bidno3, char, 3; + ŵȸ3 , offertrad3, offertrad3, char, 6; + żȸ3 , bidtrad3, bidtrad3, char, 6; + ŵŷ3, tradmdvol3, tradmdvol3, long, 10; + żŷ3, tradmsvol3, tradmsvol3, long, 10; + ŵŷ3, tradmdrate3, tradmdrate3, float, 6.2; + żŷ3, tradmsrate3, tradmsrate3, float, 6.2; + ŵŷ3, tradmdcha3, tradmdcha3, long, 10; + żŷ3, tradmscha3, tradmscha3, long, 10; + ŵǻڵ4 , offerno4, offerno4, char, 3; + żǻڵ4 , bidno4, bidno4, char, 3; + ŵȸ4 , offertrad4, offertrad4, char, 6; + żȸ4 , bidtrad4, bidtrad4, char, 6; + ŵŷ4, tradmdvol4, tradmdvol4, long, 10; + żŷ4, tradmsvol4, tradmsvol4, long, 10; + ŵŷ4, tradmdrate4, tradmdrate4, float, 6.2; + żŷ4, tradmsrate4, tradmsrate4, float, 6.2; + ŵŷ4, tradmdcha4, tradmdcha4, long, 10; + żŷ4, tradmscha4, tradmscha4, long, 10; + ŵǻڵ5 , offerno5, offerno5, char, 3; + żǻڵ5 , bidno5, bidno5, char, 3; + ŵȸ5 , offertrad5, offertrad5, char, 6; + żȸ5 , bidtrad5, bidtrad5, char, 6; + ŵŷ5, tradmdvol5, tradmdvol5, long, 10; + żŷ5, tradmsvol5, tradmsvol5, long, 10; + ŵŷ5, tradmdrate5, tradmdrate5, float, 6.2; + żŷ5, tradmsrate5, tradmsrate5, float, 6.2; + ŵŷ5, tradmdcha5, tradmdcha5, long, 10; + żŷ5, tradmscha5, tradmscha5, long, 10; + ܱǻŵհ, ftradmdvol, ftradmdvol, char, 10; + ܱǻżհ, ftradmsvol, ftradmsvol, char, 10; +ܱǻŵŷ, ftradmdrate, ftradmdrate, float, 6.2; +ܱǻżŷ, ftradmsrate, ftradmsrate, float, 6.2; +ܱǻŵŷ, ftradmdcha, ftradmdcha, char, 10; +ܱǻżŷ, ftradmscha, ftradmscha, char, 10; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/o3101.res b/sample_python/Res/o3101.res new file mode 100644 index 0000000..8dd1fcc --- /dev/null +++ b/sample_python/Res/o3101.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼȸ(o3101)-API,o3101,attr,block,headtype=A; + BEGIN_DATA_MAP + o3101InBlock,⺻Է,input; + begin + Է±(),gubun,gubun,char,1; + end + o3101OutBlock,-,output,occurs; + begin + ڵ,Symbol,Symbol,char,8; + ,SymbolNm,SymbolNm,char,50; + ġ(ѱ),ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + ǰڵ,GdsCd,GdsCd,char,3; + (),LstngYr,LstngYr,char,4; + (),LstngM,LstngM,char,1; + 갡,EcPrc,EcPrc,double,15.9; + ŷ۽ð,DlStrtTm,DlStrtTm,char,6; + ŷð,DlEndTm,DlEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3101_2.res b/sample_python/Res/o3101_2.res new file mode 100644 index 0000000..8dd1fcc --- /dev/null +++ b/sample_python/Res/o3101_2.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼȸ(o3101)-API,o3101,attr,block,headtype=A; + BEGIN_DATA_MAP + o3101InBlock,⺻Է,input; + begin + Է±(),gubun,gubun,char,1; + end + o3101OutBlock,-,output,occurs; + begin + ڵ,Symbol,Symbol,char,8; + ,SymbolNm,SymbolNm,char,50; + ġ(ѱ),ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + ǰڵ,GdsCd,GdsCd,char,3; + (),LstngYr,LstngYr,char,4; + (),LstngM,LstngM,char,1; + 갡,EcPrc,EcPrc,double,15.9; + ŷ۽ð,DlStrtTm,DlStrtTm,char,6; + ŷð,DlEndTm,DlEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3103.res b/sample_python/Res/o3103.res new file mode 100644 index 0000000..94a2689 --- /dev/null +++ b/sample_python/Res/o3103.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼƮ()(o3103)-API,o3103,attr,block,headtype=A; + BEGIN_DATA_MAP + o3103InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + Nֱ,ncnt,ncnt,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3103OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + ,timediff,timediff,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3103OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3103_2.res b/sample_python/Res/o3103_2.res new file mode 100644 index 0000000..94a2689 --- /dev/null +++ b/sample_python/Res/o3103_2.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼƮ()(o3103)-API,o3103,attr,block,headtype=A; + BEGIN_DATA_MAP + o3103InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + Nֱ,ncnt,ncnt,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3103OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + ,timediff,timediff,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3103OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3104.res b/sample_python/Res/o3104.res new file mode 100644 index 0000000..2a5eabb --- /dev/null +++ b/sample_python/Res/o3104.res @@ -0,0 +1,25 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼϺüȸ(o3104)-API,o3104,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3104InBlock,⺻Է,input; + begin + ȸ,gubun,gubun,char,1; + ڵ,shcode,shcode,char,8; + ȸ,date,date,char,8; + end + o3104OutBlock1,1,output,occurs; + begin + ,chedate,chedate,char,8; + 簡,price,price,double,15.9; + 񱸺,sign,sign,char,1; + ,change,change,double,15.9; + ,diff,diff,float,6.2; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + üᱸ,cgubun,cgubun,char,1; + ŷ,volume,volume,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3104_2.res b/sample_python/Res/o3104_2.res new file mode 100644 index 0000000..2a5eabb --- /dev/null +++ b/sample_python/Res/o3104_2.res @@ -0,0 +1,25 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼϺüȸ(o3104)-API,o3104,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3104InBlock,⺻Է,input; + begin + ȸ,gubun,gubun,char,1; + ڵ,shcode,shcode,char,8; + ȸ,date,date,char,8; + end + o3104OutBlock1,1,output,occurs; + begin + ,chedate,chedate,char,8; + 簡,price,price,double,15.9; + 񱸺,sign,sign,char,1; + ,change,change,double,15.9; + ,diff,diff,float,6.2; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + üᱸ,cgubun,cgubun,char,1; + ŷ,volume,volume,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3105.res b/sample_python/Res/o3105.res new file mode 100644 index 0000000..624db23 --- /dev/null +++ b/sample_python/Res/o3105.res @@ -0,0 +1,71 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ簡()ȸ(o3105)-API,o3105,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3105InBlock,⺻Է,input; + begin + ڵ,symbol,symbol,char,8; + end + o3105OutBlock,,output; + begin + ڵ,Symbol,Symbol,char,8; + ,SymbolNm,SymbolNm,char,50; + ġ,ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + 걸ڵ,EcCd,EcCd,char,1; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + 尳,LstngMCnt,LstngMCnt,long,2; + ǰڵ,GdsCd,GdsCd,char,3; + 屸ڵ,MrktCd,MrktCd,char,3; + Eminiڵ,EminiCd,EminiCd,char,1; + ,LstngYr,LstngYr,char,4; + ,LstngM,LstngM,char,1; + ,SeqNo,SeqNo,long,5; + ,LstngDt,LstngDt,char,8; + ŷ,MtrtDt,MtrtDt,char,8; + ŷ,FnlDlDt,FnlDlDt,char,8; + ε,FstTrsfrDt,FstTrsfrDt,char,8; + 갡,EcPrc,EcPrc,double,15.9; + ŷ(ѱ),DlDt,DlDt,char,8; + ŷ۽ð(ѱ),DlStrtTm,DlStrtTm,char,6; + ŷð(ѱ),DlEndTm,DlEndTm,char,6; + ŷ(),OvsStrDay,OvsStrDay,char,8; + ŷ۽ð(),OvsStrTm,OvsStrTm,char,6; + ŷ(),OvsEndDay,OvsEndDay,char,8; + ŷð(),OvsEndTm,OvsEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + ,TimeDiff,TimeDiff,long,5; + ü,OvsDate,OvsDate,char,8; + ѱü,KorDate,KorDate,char,8; + üð,TrdTm,TrdTm,char,6; + ѱüð,RcvTm,RcvTm,char,6; + üᰡ,TrdP,TrdP,double,15.9; + ü,TrdQ,TrdQ,long,10; + ŷ,TotQ,TotQ,long,15; + üŷ,TrdAmt,TrdAmt,double,15.2; + ŷ,TotAmt,TotAmt,double,15.2; + ð,OpenP,OpenP,double,15.9; + ,HighP,HighP,double,15.9; + ,LowP,LowP,double,15.9; + ,CloseP,CloseP,double,15.9; + ϴ,YdiffP,YdiffP,double,15.9; + ϴ񱸺,YdiffSign,YdiffSign,char,1; + üᱸ,Cgubun,Cgubun,char,1; + ,Diff,Diff,double,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3105_2.res b/sample_python/Res/o3105_2.res new file mode 100644 index 0000000..624db23 --- /dev/null +++ b/sample_python/Res/o3105_2.res @@ -0,0 +1,71 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ簡()ȸ(o3105)-API,o3105,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3105InBlock,⺻Է,input; + begin + ڵ,symbol,symbol,char,8; + end + o3105OutBlock,,output; + begin + ڵ,Symbol,Symbol,char,8; + ,SymbolNm,SymbolNm,char,50; + ġ,ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + 걸ڵ,EcCd,EcCd,char,1; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + 尳,LstngMCnt,LstngMCnt,long,2; + ǰڵ,GdsCd,GdsCd,char,3; + 屸ڵ,MrktCd,MrktCd,char,3; + Eminiڵ,EminiCd,EminiCd,char,1; + ,LstngYr,LstngYr,char,4; + ,LstngM,LstngM,char,1; + ,SeqNo,SeqNo,long,5; + ,LstngDt,LstngDt,char,8; + ŷ,MtrtDt,MtrtDt,char,8; + ŷ,FnlDlDt,FnlDlDt,char,8; + ε,FstTrsfrDt,FstTrsfrDt,char,8; + 갡,EcPrc,EcPrc,double,15.9; + ŷ(ѱ),DlDt,DlDt,char,8; + ŷ۽ð(ѱ),DlStrtTm,DlStrtTm,char,6; + ŷð(ѱ),DlEndTm,DlEndTm,char,6; + ŷ(),OvsStrDay,OvsStrDay,char,8; + ŷ۽ð(),OvsStrTm,OvsStrTm,char,6; + ŷ(),OvsEndDay,OvsEndDay,char,8; + ŷð(),OvsEndTm,OvsEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + ,TimeDiff,TimeDiff,long,5; + ü,OvsDate,OvsDate,char,8; + ѱü,KorDate,KorDate,char,8; + üð,TrdTm,TrdTm,char,6; + ѱüð,RcvTm,RcvTm,char,6; + üᰡ,TrdP,TrdP,double,15.9; + ü,TrdQ,TrdQ,long,10; + ŷ,TotQ,TotQ,long,15; + üŷ,TrdAmt,TrdAmt,double,15.2; + ŷ,TotAmt,TotAmt,double,15.2; + ð,OpenP,OpenP,double,15.9; + ,HighP,HighP,double,15.9; + ,LowP,LowP,double,15.9; + ,CloseP,CloseP,double,15.9; + ϴ,YdiffP,YdiffP,double,15.9; + ϴ񱸺,YdiffSign,YdiffSign,char,1; + üᱸ,Cgubun,Cgubun,char,1; + ,Diff,Diff,double,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3106.res b/sample_python/Res/o3106.res new file mode 100644 index 0000000..2d80240 --- /dev/null +++ b/sample_python/Res/o3106.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ簡ȣȸ(o3106)-API,o3106,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3106InBlock,⺻Է,input; + begin + ڵ,symbol,symbol,char,8; + end + o3106OutBlock,,output; + begin + ڵ,symbol,symbol,char,8; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ȣŽð,hotime,hotime,char,6; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣ2,offerho2,offerho2,double,15.9; + żȣ2,bidho2,bidho2,double,15.9; + ŵȣǼ2,offercnt2,offercnt2,long,10; + żȣǼ2,bidcnt2,bidcnt2,long,10; + ŵȣ2,offerrem2,offerrem2,long,10; + żȣ2,bidrem2,bidrem2,long,10; + ŵȣ3,offerho3,offerho3,double,15.9; + żȣ3,bidho3,bidho3,double,15.9; + ŵȣǼ3,offercnt3,offercnt3,long,10; + żȣǼ3,bidcnt3,bidcnt3,long,10; + ŵȣ3,offerrem3,offerrem3,long,10; + żȣ3,bidrem3,bidrem3,long,10; + ŵȣ4,offerho4,offerho4,double,15.9; + żȣ4,bidho4,bidho4,double,15.9; + ŵȣǼ4,offercnt4,offercnt4,long,10; + żȣǼ4,bidcnt4,bidcnt4,long,10; + ŵȣ4,offerrem4,offerrem4,long,10; + żȣ4,bidrem4,bidrem4,long,10; + ŵȣ5,offerho5,offerho5,double,15.9; + żȣ5,bidho5,bidho5,double,15.9; + ŵȣǼ5,offercnt5,offercnt5,long,10; + żȣǼ5,bidcnt5,bidcnt5,long,10; + ŵȣ5,offerrem5,offerrem5,long,10; + żȣ5,bidrem5,bidrem5,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3106_2.res b/sample_python/Res/o3106_2.res new file mode 100644 index 0000000..2d80240 --- /dev/null +++ b/sample_python/Res/o3106_2.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼ簡ȣȸ(o3106)-API,o3106,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3106InBlock,⺻Է,input; + begin + ڵ,symbol,symbol,char,8; + end + o3106OutBlock,,output; + begin + ڵ,symbol,symbol,char,8; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ȣŽð,hotime,hotime,char,6; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣ2,offerho2,offerho2,double,15.9; + żȣ2,bidho2,bidho2,double,15.9; + ŵȣǼ2,offercnt2,offercnt2,long,10; + żȣǼ2,bidcnt2,bidcnt2,long,10; + ŵȣ2,offerrem2,offerrem2,long,10; + żȣ2,bidrem2,bidrem2,long,10; + ŵȣ3,offerho3,offerho3,double,15.9; + żȣ3,bidho3,bidho3,double,15.9; + ŵȣǼ3,offercnt3,offercnt3,long,10; + żȣǼ3,bidcnt3,bidcnt3,long,10; + ŵȣ3,offerrem3,offerrem3,long,10; + żȣ3,bidrem3,bidrem3,long,10; + ŵȣ4,offerho4,offerho4,double,15.9; + żȣ4,bidho4,bidho4,double,15.9; + ŵȣǼ4,offercnt4,offercnt4,long,10; + żȣǼ4,bidcnt4,bidcnt4,long,10; + ŵȣ4,offerrem4,offerrem4,long,10; + żȣ4,bidrem4,bidrem4,long,10; + ŵȣ5,offerho5,offerho5,double,15.9; + żȣ5,bidho5,bidho5,double,15.9; + ŵȣǼ5,offercnt5,offercnt5,long,10; + żȣǼ5,bidcnt5,bidcnt5,long,10; + ŵȣ5,offerrem5,offerrem5,long,10; + żȣ5,bidrem5,bidrem5,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3107.res b/sample_python/Res/o3107.res new file mode 100644 index 0000000..786d847 --- /dev/null +++ b/sample_python/Res/o3107.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼȸ(o3107)-API,o3107,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3107InBlock,⺻Է,input,occurs; + begin + ɺ,symbol,symbol,char,8; + end + o3107OutBlock,,output,occurs; + begin + ڵ,symbol,symbol,char,8; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3107_2.res b/sample_python/Res/o3107_2.res new file mode 100644 index 0000000..786d847 --- /dev/null +++ b/sample_python/Res/o3107_2.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼȸ(o3107)-API,o3107,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3107InBlock,⺻Է,input,occurs; + begin + ɺ,symbol,symbol,char,8; + end + o3107OutBlock,,output,occurs; + begin + ڵ,symbol,symbol,char,8; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3108.res b/sample_python/Res/o3108.res new file mode 100644 index 0000000..24cc5e1 --- /dev/null +++ b/sample_python/Res/o3108.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼƮ(ֿ)(o3108)-API,o3108,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3108InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,16; + ֱⱸ,gubun,gubun,char,1; + ûǼ,qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + end + o3108OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + Ͻð,jisiga,jisiga,double,15.9; + ϰ,jihigh,jihigh,double,15.9; + ,jilow,jilow,double,15.9; + ,jiclose,jiclose,double,15.9; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,double,15.9; + ϰ,dihigh,dihigh,double,15.9; + ,dilow,dilow,double,15.9; + ,diclose,diclose,double,15.9; + ۽ð,mk_stime,mk_stime,char,6; + 帶ð,mk_etime,mk_etime,char,6; + ,cts_date,cts_date,char,8; + ڵīƮ,rec_count,rec_count,long,7; + end + o3108OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3108_2.res b/sample_python/Res/o3108_2.res new file mode 100644 index 0000000..24cc5e1 --- /dev/null +++ b/sample_python/Res/o3108_2.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼƮ(ֿ)(o3108)-API,o3108,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3108InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,16; + ֱⱸ,gubun,gubun,char,1; + ûǼ,qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + end + o3108OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + Ͻð,jisiga,jisiga,double,15.9; + ϰ,jihigh,jihigh,double,15.9; + ,jilow,jilow,double,15.9; + ,jiclose,jiclose,double,15.9; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,double,15.9; + ϰ,dihigh,dihigh,double,15.9; + ,dilow,dilow,double,15.9; + ,diclose,diclose,double,15.9; + ۽ð,mk_stime,mk_stime,char,6; + 帶ð,mk_etime,mk_etime,char,6; + ,cts_date,cts_date,char,8; + ڵīƮ,rec_count,rec_count,long,7; + end + o3108OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3116.res b/sample_python/Res/o3116.res new file mode 100644 index 0000000..add8827 --- /dev/null +++ b/sample_python/Res/o3116.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼð뺰(Tick)ü(o3116)-API,o3116,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3116InBlock,⺻Է,input; + begin + ȸ(0:1:),gubun,gubun,char,1; + ڵ,shcode,shcode,char,8; + ȸ,readcnt,readcnt,long,4; + CTS,cts_seq,cts_seq,long,8; + end + o3116OutBlock,,output; + begin + CTS,cts_seq,cts_seq,long,8; + end + o3116OutBlock1,1,output,occurs; + begin + ,ovsdate,ovsdate,char,8; + ð,ovstime,ovstime,char,6; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ü,cvolume,cvolume,long,10; + ŷ,volume,volume,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3116_2.res b/sample_python/Res/o3116_2.res new file mode 100644 index 0000000..add8827 --- /dev/null +++ b/sample_python/Res/o3116_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼð뺰(Tick)ü(o3116)-API,o3116,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3116InBlock,⺻Է,input; + begin + ȸ(0:1:),gubun,gubun,char,1; + ڵ,shcode,shcode,char,8; + ȸ,readcnt,readcnt,long,4; + CTS,cts_seq,cts_seq,long,8; + end + o3116OutBlock,,output; + begin + CTS,cts_seq,cts_seq,long,8; + end + o3116OutBlock1,1,output,occurs; + begin + ,ovsdate,ovsdate,char,8; + ð,ovstime,ovstime,char,6; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ü,cvolume,cvolume,long,10; + ŷ,volume,volume,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3117.res b/sample_python/Res/o3117.res new file mode 100644 index 0000000..9e7b642 --- /dev/null +++ b/sample_python/Res/o3117.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼƮNTick(o3117)-API,o3117,attr,block,headtype=A; + BEGIN_DATA_MAP + o3117InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3117OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + ڵīƮ,rec_count,rec_count,long,7; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3117OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3117_2.res b/sample_python/Res/o3117_2.res new file mode 100644 index 0000000..9e7b642 --- /dev/null +++ b/sample_python/Res/o3117_2.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼƮNTick(o3117)-API,o3117,attr,block,headtype=A; + BEGIN_DATA_MAP + o3117InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3117OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + ڵīƮ,rec_count,rec_count,long,7; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3117OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3121.res b/sample_python/Res/o3121.res new file mode 100644 index 0000000..14121ba --- /dev/null +++ b/sample_python/Res/o3121.res @@ -0,0 +1,48 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼǸȸ(o3121)-API,o3121,attr,block,headtype=A; + BEGIN_DATA_MAP + o3121InBlock,⺻Է,input; + begin + 屸,MktGb,MktGb,char,1; + ɼDZʻǰڵ,BscGdsCd,BscGdsCd,char,10; + end + o3121OutBlock,-,output,occurs; + begin + ڵ,Symbol,Symbol,char,16; + ,SymbolNm,SymbolNm,char,50; + ġ(ѱ),ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + ǰڵ,GdsCd,GdsCd,char,3; + (),LstngYr,LstngYr,char,4; + (),LstngM,LstngM,char,1; + 갡,EcPrc,EcPrc,double,15.9; + ŷ۽ð,DlStrtTm,DlStrtTm,char,6; + ŷð,DlEndTm,DlEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + ɼ簡,XrcPrc,XrcPrc,char,15; + ڻذ,FdasBasePrc,FdasBasePrc,char,15; + ɼDz,OptTpCode,OptTpCode,char,1; + Ǹ籸ڵ,RgtXrcPtnCode,RgtXrcPtnCode,char,1; + ATM,Moneyness,Moneyness,char,1; + ؿĻڻڵ,LastSettPtnCode,LastSettPtnCode,char,30; + ؿܿɼּȣ,OptMinOrcPrc,OptMinOrcPrc,char,15; + ؿܿɼּұȣ,OptMinBaseOrcPrc,OptMinBaseOrcPrc,char,15; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3121_2.res b/sample_python/Res/o3121_2.res new file mode 100644 index 0000000..14121ba --- /dev/null +++ b/sample_python/Res/o3121_2.res @@ -0,0 +1,48 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼǸȸ(o3121)-API,o3121,attr,block,headtype=A; + BEGIN_DATA_MAP + o3121InBlock,⺻Է,input; + begin + 屸,MktGb,MktGb,char,1; + ɼDZʻǰڵ,BscGdsCd,BscGdsCd,char,10; + end + o3121OutBlock,-,output,occurs; + begin + ڵ,Symbol,Symbol,char,16; + ,SymbolNm,SymbolNm,char,50; + ġ(ѱ),ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + ǰڵ,GdsCd,GdsCd,char,3; + (),LstngYr,LstngYr,char,4; + (),LstngM,LstngM,char,1; + 갡,EcPrc,EcPrc,double,15.9; + ŷ۽ð,DlStrtTm,DlStrtTm,char,6; + ŷð,DlEndTm,DlEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + ɼ簡,XrcPrc,XrcPrc,char,15; + ڻذ,FdasBasePrc,FdasBasePrc,char,15; + ɼDz,OptTpCode,OptTpCode,char,1; + Ǹ籸ڵ,RgtXrcPtnCode,RgtXrcPtnCode,char,1; + ATM,Moneyness,Moneyness,char,1; + ؿĻڻڵ,LastSettPtnCode,LastSettPtnCode,char,30; + ؿܿɼּȣ,OptMinOrcPrc,OptMinOrcPrc,char,15; + ؿܿɼּұȣ,OptMinBaseOrcPrc,OptMinBaseOrcPrc,char,15; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3123.res b/sample_python/Res/o3123.res new file mode 100644 index 0000000..a9fde09 --- /dev/null +++ b/sample_python/Res/o3123.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮ()(o3123)-API,o3123,attr,block,headtype=A; + BEGIN_DATA_MAP + o3123InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + Nֱ,ncnt,ncnt,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3123OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + ,timediff,timediff,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3123OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3123_2.res b/sample_python/Res/o3123_2.res new file mode 100644 index 0000000..a9fde09 --- /dev/null +++ b/sample_python/Res/o3123_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮ()(o3123)-API,o3123,attr,block,headtype=A; + BEGIN_DATA_MAP + o3123InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + Nֱ,ncnt,ncnt,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3123OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + ,timediff,timediff,long,4; + ȸǼ,readcnt,readcnt,long,4; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,6; + end + o3123OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3125.res b/sample_python/Res/o3125.res new file mode 100644 index 0000000..08a7dd1 --- /dev/null +++ b/sample_python/Res/o3125.res @@ -0,0 +1,74 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼ簡()ȸ(o3125)-API,o3125,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3125InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,symbol,symbol,char,16; + end + o3125OutBlock,,output; + begin + ڵ,Symbol,Symbol,char,16; + ,SymbolNm,SymbolNm,char,50; + ġ,ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + 걸ڵ,EcCd,EcCd,char,1; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + 尳,LstngMCnt,LstngMCnt,long,2; + ǰڵ,GdsCd,GdsCd,char,3; + 屸ڵ,MrktCd,MrktCd,char,3; + Eminiڵ,EminiCd,EminiCd,char,1; + ,LstngYr,LstngYr,char,4; + ,LstngM,LstngM,char,1; + ,SeqNo,SeqNo,long,5; + ,LstngDt,LstngDt,char,8; + ŷ,MtrtDt,MtrtDt,char,8; + ŷ,FnlDlDt,FnlDlDt,char,8; + ε,FstTrsfrDt,FstTrsfrDt,char,8; + 갡,EcPrc,EcPrc,double,15.9; + ŷ(ѱ),DlDt,DlDt,char,8; + ŷ۽ð(ѱ),DlStrtTm,DlStrtTm,char,6; + ŷð(ѱ),DlEndTm,DlEndTm,char,6; + ŷ(),OvsStrDay,OvsStrDay,char,8; + ŷ۽ð(),OvsStrTm,OvsStrTm,char,6; + ŷ(),OvsEndDay,OvsEndDay,char,8; + ŷð(),OvsEndTm,OvsEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + ,TimeDiff,TimeDiff,long,5; + ü,OvsDate,OvsDate,char,8; + ѱü,KorDate,KorDate,char,8; + üð,TrdTm,TrdTm,char,6; + ѱüð,RcvTm,RcvTm,char,6; + üᰡ,TrdP,TrdP,double,15.9; + ü,TrdQ,TrdQ,long,10; + ŷ,TotQ,TotQ,long,15; + üŷ,TrdAmt,TrdAmt,double,15.2; + ŷ,TotAmt,TotAmt,double,15.2; + ð,OpenP,OpenP,double,15.9; + ,HighP,HighP,double,15.9; + ,LowP,LowP,double,15.9; + ,CloseP,CloseP,double,15.9; + ϴ,YdiffP,YdiffP,double,15.9; + ϴ񱸺,YdiffSign,YdiffSign,char,1; + üᱸ,Cgubun,Cgubun,char,1; + ,Diff,Diff,double,6.2; + ּȣ,MinOrcPrc,MinOrcPrc,double,15.9; + ּұȣ,MinBaseOrcPrc,MinBaseOrcPrc,double,15.9; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3125_2.res b/sample_python/Res/o3125_2.res new file mode 100644 index 0000000..08a7dd1 --- /dev/null +++ b/sample_python/Res/o3125_2.res @@ -0,0 +1,74 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼ簡()ȸ(o3125)-API,o3125,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3125InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,symbol,symbol,char,16; + end + o3125OutBlock,,output; + begin + ڵ,Symbol,Symbol,char,16; + ,SymbolNm,SymbolNm,char,50; + ġ,ApplDate,ApplDate,char,8; + ʻǰڵ,BscGdsCd,BscGdsCd,char,10; + ʻǰ,BscGdsNm,BscGdsNm,char,40; + ŷڵ,ExchCd,ExchCd,char,10; + ŷҸ,ExchNm,ExchNm,char,40; + 걸ڵ,EcCd,EcCd,char,1; + ȭڵ,CrncyCd,CrncyCd,char,3; + ڵ,NotaCd,NotaCd,char,3; + ȣ,UntPrc,UntPrc,double,15.9; + ּҰݺݾ,MnChgAmt,MnChgAmt,double,15.9; + ,RgltFctr,RgltFctr,double,15.10; + ݾ,CtrtPrAmt,CtrtPrAmt,double,15.2; + 尳,LstngMCnt,LstngMCnt,long,2; + ǰڵ,GdsCd,GdsCd,char,3; + 屸ڵ,MrktCd,MrktCd,char,3; + Eminiڵ,EminiCd,EminiCd,char,1; + ,LstngYr,LstngYr,char,4; + ,LstngM,LstngM,char,1; + ,SeqNo,SeqNo,long,5; + ,LstngDt,LstngDt,char,8; + ŷ,MtrtDt,MtrtDt,char,8; + ŷ,FnlDlDt,FnlDlDt,char,8; + ε,FstTrsfrDt,FstTrsfrDt,char,8; + 갡,EcPrc,EcPrc,double,15.9; + ŷ(ѱ),DlDt,DlDt,char,8; + ŷ۽ð(ѱ),DlStrtTm,DlStrtTm,char,6; + ŷð(ѱ),DlEndTm,DlEndTm,char,6; + ŷ(),OvsStrDay,OvsStrDay,char,8; + ŷ۽ð(),OvsStrTm,OvsStrTm,char,6; + ŷ(),OvsEndDay,OvsEndDay,char,8; + ŷð(),OvsEndTm,OvsEndTm,char,6; + ŷɱڵ,DlPsblCd,DlPsblCd,char,1; + ű¡ڵ,MgnCltCd,MgnCltCd,char,1; + ű,OpngMgn,OpngMgn,double,15.2; + ű,MntncMgn,MntncMgn,double,15.2; + ű,OpngMgnR,OpngMgnR,double,7.3; + ű,MntncMgnR,MntncMgnR,double,7.3; + ȿҼڸ,DotGb,DotGb,long,2; + ,TimeDiff,TimeDiff,long,5; + ü,OvsDate,OvsDate,char,8; + ѱü,KorDate,KorDate,char,8; + üð,TrdTm,TrdTm,char,6; + ѱüð,RcvTm,RcvTm,char,6; + üᰡ,TrdP,TrdP,double,15.9; + ü,TrdQ,TrdQ,long,10; + ŷ,TotQ,TotQ,long,15; + üŷ,TrdAmt,TrdAmt,double,15.2; + ŷ,TotAmt,TotAmt,double,15.2; + ð,OpenP,OpenP,double,15.9; + ,HighP,HighP,double,15.9; + ,LowP,LowP,double,15.9; + ,CloseP,CloseP,double,15.9; + ϴ,YdiffP,YdiffP,double,15.9; + ϴ񱸺,YdiffSign,YdiffSign,char,1; + üᱸ,Cgubun,Cgubun,char,1; + ,Diff,Diff,double,6.2; + ּȣ,MinOrcPrc,MinOrcPrc,double,15.9; + ּұȣ,MinBaseOrcPrc,MinBaseOrcPrc,double,15.9; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3126.res b/sample_python/Res/o3126.res new file mode 100644 index 0000000..620976c --- /dev/null +++ b/sample_python/Res/o3126.res @@ -0,0 +1,60 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼ簡ȣȸ(o3126)-API,o3126,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3126InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,symbol,symbol,char,16; + end + o3126OutBlock,,output; + begin + ڵ,symbol,symbol,char,16; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ȣŽð,hotime,hotime,char,6; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣ2,offerho2,offerho2,double,15.9; + żȣ2,bidho2,bidho2,double,15.9; + ŵȣǼ2,offercnt2,offercnt2,long,10; + żȣǼ2,bidcnt2,bidcnt2,long,10; + ŵȣ2,offerrem2,offerrem2,long,10; + żȣ2,bidrem2,bidrem2,long,10; + ŵȣ3,offerho3,offerho3,double,15.9; + żȣ3,bidho3,bidho3,double,15.9; + ŵȣǼ3,offercnt3,offercnt3,long,10; + żȣǼ3,bidcnt3,bidcnt3,long,10; + ŵȣ3,offerrem3,offerrem3,long,10; + żȣ3,bidrem3,bidrem3,long,10; + ŵȣ4,offerho4,offerho4,double,15.9; + żȣ4,bidho4,bidho4,double,15.9; + ŵȣǼ4,offercnt4,offercnt4,long,10; + żȣǼ4,bidcnt4,bidcnt4,long,10; + ŵȣ4,offerrem4,offerrem4,long,10; + żȣ4,bidrem4,bidrem4,long,10; + ŵȣ5,offerho5,offerho5,double,15.9; + żȣ5,bidho5,bidho5,double,15.9; + ŵȣǼ5,offercnt5,offercnt5,long,10; + żȣǼ5,bidcnt5,bidcnt5,long,10; + ŵȣ5,offerrem5,offerrem5,long,10; + żȣ5,bidrem5,bidrem5,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3126_2.res b/sample_python/Res/o3126_2.res new file mode 100644 index 0000000..620976c --- /dev/null +++ b/sample_python/Res/o3126_2.res @@ -0,0 +1,60 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼ簡ȣȸ(o3126)-API,o3126,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3126InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,symbol,symbol,char,16; + end + o3126OutBlock,,output; + begin + ڵ,symbol,symbol,char,16; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ȣŽð,hotime,hotime,char,6; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣ2,offerho2,offerho2,double,15.9; + żȣ2,bidho2,bidho2,double,15.9; + ŵȣǼ2,offercnt2,offercnt2,long,10; + żȣǼ2,bidcnt2,bidcnt2,long,10; + ŵȣ2,offerrem2,offerrem2,long,10; + żȣ2,bidrem2,bidrem2,long,10; + ŵȣ3,offerho3,offerho3,double,15.9; + żȣ3,bidho3,bidho3,double,15.9; + ŵȣǼ3,offercnt3,offercnt3,long,10; + żȣǼ3,bidcnt3,bidcnt3,long,10; + ŵȣ3,offerrem3,offerrem3,long,10; + żȣ3,bidrem3,bidrem3,long,10; + ŵȣ4,offerho4,offerho4,double,15.9; + żȣ4,bidho4,bidho4,double,15.9; + ŵȣǼ4,offercnt4,offercnt4,long,10; + żȣǼ4,bidcnt4,bidcnt4,long,10; + ŵȣ4,offerrem4,offerrem4,long,10; + żȣ4,bidrem4,bidrem4,long,10; + ŵȣ5,offerho5,offerho5,double,15.9; + żȣ5,bidho5,bidho5,double,15.9; + ŵȣǼ5,offercnt5,offercnt5,long,10; + żȣǼ5,bidcnt5,bidcnt5,long,10; + ŵȣ5,offerrem5,offerrem5,long,10; + żȣ5,bidrem5,bidrem5,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3127.res b/sample_python/Res/o3127.res new file mode 100644 index 0000000..506cee3 --- /dev/null +++ b/sample_python/Res/o3127.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼǰȸ(o3127)-API,o3127,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3127InBlock,⺻Է,input; + begin + Ǽ,nrec,nrec,long,4; + end + o3127InBlock1,⺻Է1,input,occurs; + begin + 屸,mktgb,mktgb,char,1; + ɺ,symbol,symbol,char,16; + end + o3127OutBlock,,output,occurs; + begin + ڵ,symbol,symbol,char,16; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3127_2.res b/sample_python/Res/o3127_2.res new file mode 100644 index 0000000..506cee3 --- /dev/null +++ b/sample_python/Res/o3127_2.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼǰȸ(o3127)-API,o3127,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3127InBlock,⺻Է,input; + begin + Ǽ,nrec,nrec,long,4; + end + o3127InBlock1,⺻Է1,input,occurs; + begin + 屸,mktgb,mktgb,char,1; + ɺ,symbol,symbol,char,16; + end + o3127OutBlock,,output,occurs; + begin + ڵ,symbol,symbol,char,16; + ,symbolname,symbolname,char,50; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ŷ,volume,volume,long,10; + ,jnilclose,jnilclose,double,15.9; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ŵȣ1,offerho1,offerho1,double,15.9; + żȣ1,bidho1,bidho1,double,15.9; + ŵȣǼ1,offercnt1,offercnt1,long,10; + żȣǼ1,bidcnt1,bidcnt1,long,10; + ŵȣ1,offerrem1,offerrem1,long,10; + żȣ1,bidrem1,bidrem1,long,10; + ŵȣǼ,offercnt,offercnt,long,10; + żȣǼ,bidcnt,bidcnt,long,10; + ŵȣ,offer,offer,long,10; + żȣ,bid,bid,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3128.res b/sample_python/Res/o3128.res new file mode 100644 index 0000000..2c74d6d --- /dev/null +++ b/sample_python/Res/o3128.res @@ -0,0 +1,42 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮֿ(o3128)-API,o3128,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3128InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ֱⱸ,gubun,gubun,char,1; + ûǼ,qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + end + o3128OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + Ͻð,jisiga,jisiga,double,15.9; + ϰ,jihigh,jihigh,double,15.9; + ,jilow,jilow,double,15.9; + ,jiclose,jiclose,double,15.9; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,double,15.9; + ϰ,dihigh,dihigh,double,15.9; + ,dilow,dilow,double,15.9; + ,diclose,diclose,double,15.9; + ۽ð,mk_stime,mk_stime,char,6; + 帶ð,mk_etime,mk_etime,char,6; + ,cts_date,cts_date,char,8; + ڵīƮ,rec_count,rec_count,long,7; + end + o3128OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3128_2.res b/sample_python/Res/o3128_2.res new file mode 100644 index 0000000..2c74d6d --- /dev/null +++ b/sample_python/Res/o3128_2.res @@ -0,0 +1,42 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮֿ(o3128)-API,o3128,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3128InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ֱⱸ,gubun,gubun,char,1; + ûǼ,qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + end + o3128OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + Ͻð,jisiga,jisiga,double,15.9; + ϰ,jihigh,jihigh,double,15.9; + ,jilow,jilow,double,15.9; + ,jiclose,jiclose,double,15.9; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,double,15.9; + ϰ,dihigh,dihigh,double,15.9; + ,dilow,dilow,double,15.9; + ,diclose,diclose,double,15.9; + ۽ð,mk_stime,mk_stime,char,6; + 帶ð,mk_etime,mk_etime,char,6; + ,cts_date,cts_date,char,8; + ڵīƮ,rec_count,rec_count,long,7; + end + o3128OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3136.res b/sample_python/Res/o3136.res new file mode 100644 index 0000000..afcf2d1 --- /dev/null +++ b/sample_python/Res/o3136.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼǽð뺰(Tick)ü(o3136)-API,o3136,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3136InBlock,⺻Է,input; + begin + ȸ(0:1:),gubun,gubun,char,1; + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ȸ,readcnt,readcnt,long,4; + CTS,cts_seq,cts_seq,long,8; + end + o3136OutBlock,,output; + begin + CTS,cts_seq,cts_seq,long,8; + end + o3136OutBlock1,1,output,occurs; + begin + ,ovsdate,ovsdate,char,8; + ð,ovstime,ovstime,char,6; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ü,cvolume,cvolume,long,10; + ŷ,volume,volume,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3136_2.res b/sample_python/Res/o3136_2.res new file mode 100644 index 0000000..afcf2d1 --- /dev/null +++ b/sample_python/Res/o3136_2.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼǽð뺰(Tick)ü(o3136)-API,o3136,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3136InBlock,⺻Է,input; + begin + ȸ(0:1:),gubun,gubun,char,1; + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ȸ,readcnt,readcnt,long,4; + CTS,cts_seq,cts_seq,long,8; + end + o3136OutBlock,,output; + begin + CTS,cts_seq,cts_seq,long,8; + end + o3136OutBlock1,1,output,occurs; + begin + ,ovsdate,ovsdate,char,8; + ð,ovstime,ovstime,char,6; + 簡,price,price,double,15.9; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,15.9; + ,diff,diff,double,6.2; + ü,cvolume,cvolume,long,10; + ŷ,volume,volume,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3137.res b/sample_python/Res/o3137.res new file mode 100644 index 0000000..efc6643 --- /dev/null +++ b/sample_python/Res/o3137.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮNTick(o3137)-API,o3137,attr,block,headtype=A; + BEGIN_DATA_MAP + o3137InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3137OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + ڵīƮ,rec_count,rec_count,long,7; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3137OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3137_2.res b/sample_python/Res/o3137_2.res new file mode 100644 index 0000000..efc6643 --- /dev/null +++ b/sample_python/Res/o3137_2.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮNTick(o3137)-API,o3137,attr,block,headtype=A; + BEGIN_DATA_MAP + o3137InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3137OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + ڵīƮ,rec_count,rec_count,long,7; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3137OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.9; + ,high,high,double,15.9; + ,low,low,double,15.9; + ,close,close,double,15.9; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3139.res b/sample_python/Res/o3139.res new file mode 100644 index 0000000..791c780 --- /dev/null +++ b/sample_python/Res/o3139.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮNTick()(o3139)-API,o3139,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3139InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3139OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + ڵīƮ,rec_count,rec_count,long,7; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + TickǼ,last_count,last_count,long,4; + end + o3139OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.8; + ,high,high,double,15.8; + ,low,low,double,15.8; + ,close,close,double,15.8; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/o3139_2.res b/sample_python/Res/o3139_2.res new file mode 100644 index 0000000..791c780 --- /dev/null +++ b/sample_python/Res/o3139_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܼɼƮNTick()(o3139)-API,o3139,attr,block,svr=OVS,headtype=A; + BEGIN_DATA_MAP + o3139InBlock,⺻Է,input; + begin + 屸,mktgb,mktgb,char,1; + ڵ,shcode,shcode,char,16; + ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + end + o3139OutBlock,,output; + begin + ڵ,shcode,shcode,char,16; + ڵīƮ,rec_count,rec_count,long,7; + ӽð,cts_seq,cts_seq,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,2; + TickǼ,last_count,last_count,long,4; + end + o3139OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,double,15.8; + ,high,high,double,15.8; + ,low,low,double,15.8; + ,close,close,double,15.8; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/s2_4ELW.res b/sample_python/Res/s2_4ELW.res new file mode 100644 index 0000000..49fe30c --- /dev/null +++ b/sample_python/Res/s2_4ELW.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, ELW켱ȣ(s2), s2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/s2_4ELW_2.res b/sample_python/Res/s2_4ELW_2.res new file mode 100644 index 0000000..49fe30c --- /dev/null +++ b/sample_python/Res/s2_4ELW_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP +.Feed, ELW켱ȣ(s2), s2_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/s3_4ELW.res b/sample_python/Res/s3_4ELW.res new file mode 100644 index 0000000..02be176 --- /dev/null +++ b/sample_python/Res/s3_4ELW.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWü(s3), s3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + հ, w_avrg, w_avrg, long, 8; + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + , status, status, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ̾, premium, premium, float, 8.2; + ATM, moneyness, moneyness, char, 1; + ڵ, shcode, shcode, char, 6; + LP, lpvolume, lpvolume, long, 15; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/s3_4ELW_2.res b/sample_python/Res/s3_4ELW_2.res new file mode 100644 index 0000000..02be176 --- /dev/null +++ b/sample_python/Res/s3_4ELW_2.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP +.Feed, ELWü(s3), s3_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + üð, chetime, chetime, char, 6; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + üᱸ, cgubun, cgubun, char, 1; + üᷮ, cvolume, cvolume, long, 8; + ŷ, volume, volume, long, 12; + ŷ, value, value, long, 12; + ŵüᷮ, mdvolume, mdvolume, long, 12; + ŵüǼ, mdchecnt, mdchecnt, long, 8; + żüᷮ, msvolume, msvolume, long, 12; + żüǼ, mschecnt, mschecnt, long, 8; + üᰭ, cpower, cpower, float, 9.2; + հ, w_avrg, w_avrg, long, 8; + ŵȣ, offerho, offerho, long, 8; + żȣ, bidho, bidho, long, 8; + , status, status, char, 2; + ϵðŷ, jnilvolume, jnilvolume, long, 12; + ̾, premium, premium, float, 8.2; + ATM, moneyness, moneyness, char, 1; + ڵ, shcode, shcode, char, 6; + LP, lpvolume, lpvolume, long, 15; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/s4_ELW.res b/sample_python/Res/s4_ELW.res new file mode 100644 index 0000000..e732887 --- /dev/null +++ b/sample_python/Res/s4_ELW.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, ELW⼼(s4), s4_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/s4_ELW_2.res b/sample_python/Res/s4_ELW_2.res new file mode 100644 index 0000000..e732887 --- /dev/null +++ b/sample_python/Res/s4_ELW_2.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP +.Feed, ELW⼼(s4), s4_, attr, key=6, group=1; + BEGIN_DATA_MAP + InBlock,Է,input; + begin + ڵ, shcode, shcode, char, 6; + end + OutBlock,,output; + begin + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 8; + , drate, drate, float, 6.2; + 簡, price, price, long, 8; + ðð, opentime, opentime, char, 6; + ð, open, open, long, 8; + ð, hightime, hightime, char, 6; + , high, high, long, 8; + ð, lowtime, lowtime, char, 6; + , low, low, long, 8; + ڵ, shcode, shcode, char, 6; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/t0150.res b/sample_python/Res/t0150.res new file mode 100644 index 0000000..8535ba4 --- /dev/null +++ b/sample_python/Res/t0150.res @@ -0,0 +1,53 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĴϸŸ/(t0150),t0150,tuxcode=t0150, headtype=C; + BEGIN_DATA_MAP + t0150InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0150OutBlock,,output; + begin + ŵ,mdqty,mdqty,long,9; + ŵݾ,mdamt,mdamt,long,18; + ŵ,mdfee,mdfee,long,18; + ŵŷ,mdtax,mdtax,long,18; + ŵƯ,mdargtax,mdargtax,long,18; + ŵ,tmdtax,tmdtax,long,18; + ŵݾ,mdadjamt,mdadjamt,long,18; + ż,msqty,msqty,long,9; + żݾ,msamt,msamt,long,18; + ż,msfee,msfee,long,18; + ż,tmstax,tmstax,long,18; + żݾ,msadjamt,msadjamt,long,18; + հ,tqty,tqty,long,9; + հݾ,tamt,tamt,long,18; + հ,tfee,tfee,long,18; + հŷ,tottax,tottax,long,18; + հƯ,targtax,targtax,long,18; + հ,ttax,ttax,long,18; + հݾ,tadjamt,tadjamt,long,18; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0150OutBlock1,1,output,occurs; + begin + Ÿű,medosu,medosu,char,10; + ȣ,expcode,expcode,char,12; + ,qty,qty,long,9; + ܰ,price,price,long,9; + ݾ,amt,amt,long,18; + ,fee,fee,long,18; + ŷ,tax,tax,long,18; + Ư,argtax,argtax,long,18; + ݾ,adjamt,adjamt,long,18; + ü,middiv,middiv,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t0150_2.res b/sample_python/Res/t0150_2.res new file mode 100644 index 0000000..8535ba4 --- /dev/null +++ b/sample_python/Res/t0150_2.res @@ -0,0 +1,53 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĴϸŸ/(t0150),t0150,tuxcode=t0150, headtype=C; + BEGIN_DATA_MAP + t0150InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0150OutBlock,,output; + begin + ŵ,mdqty,mdqty,long,9; + ŵݾ,mdamt,mdamt,long,18; + ŵ,mdfee,mdfee,long,18; + ŵŷ,mdtax,mdtax,long,18; + ŵƯ,mdargtax,mdargtax,long,18; + ŵ,tmdtax,tmdtax,long,18; + ŵݾ,mdadjamt,mdadjamt,long,18; + ż,msqty,msqty,long,9; + żݾ,msamt,msamt,long,18; + ż,msfee,msfee,long,18; + ż,tmstax,tmstax,long,18; + żݾ,msadjamt,msadjamt,long,18; + հ,tqty,tqty,long,9; + հݾ,tamt,tamt,long,18; + հ,tfee,tfee,long,18; + հŷ,tottax,tottax,long,18; + հƯ,targtax,targtax,long,18; + հ,ttax,ttax,long,18; + հݾ,tadjamt,tadjamt,long,18; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0150OutBlock1,1,output,occurs; + begin + Ÿű,medosu,medosu,char,10; + ȣ,expcode,expcode,char,12; + ,qty,qty,long,9; + ܰ,price,price,long,9; + ݾ,amt,amt,long,18; + ,fee,fee,long,18; + ŷ,tax,tax,long,18; + Ư,argtax,argtax,long,18; + ݾ,adjamt,adjamt,long,18; + ü,middiv,middiv,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t0151.res b/sample_python/Res/t0151.res new file mode 100644 index 0000000..caf7794 --- /dev/null +++ b/sample_python/Res/t0151.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĴϸŸ/()(t0151),t0151,tuxcode=t0151, headtype=C; + BEGIN_DATA_MAP + t0151InBlock,⺻Է,input; + begin + ,date,date,char,8; + ¹ȣ,accno,accno,char,11; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0151OutBlock,,output; + begin + ŵ,mdqty,mdqty,long,9; + ŵݾ,mdamt,mdamt,long,18; + ŵ,mdfee,mdfee,long,18; + ŵŷ,mdtax,mdtax,long,18; + ŵƯ,mdargtax,mdargtax,long,18; + ŵ,tmdtax,tmdtax,long,18; + ŵݾ,mdadjamt,mdadjamt,long,18; + ż,msqty,msqty,long,9; + żݾ,msamt,msamt,long,18; + ż,msfee,msfee,long,18; + ż,tmstax,tmstax,long,18; + żݾ,msadjamt,msadjamt,long,18; + հ,tqty,tqty,long,9; + հݾ,tamt,tamt,long,18; + հ,tfee,tfee,long,18; + հŷ,tottax,tottax,long,18; + հƯ,targtax,targtax,long,18; + հ,ttax,ttax,long,18; + հݾ,tadjamt,tadjamt,long,18; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0151OutBlock1,1,output,occurs; + begin + Ÿű,medosu,medosu,char,10; + ȣ,expcode,expcode,char,12; + ,qty,qty,long,9; + ܰ,price,price,long,9; + ݾ,amt,amt,long,18; + ,fee,fee,long,18; + ŷ,tax,tax,long,18; + Ư,argtax,argtax,long,18; + ݾ,adjamt,adjamt,long,18; + ü,middiv,middiv,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t0151_2.res b/sample_python/Res/t0151_2.res new file mode 100644 index 0000000..caf7794 --- /dev/null +++ b/sample_python/Res/t0151_2.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĴϸŸ/()(t0151),t0151,tuxcode=t0151, headtype=C; + BEGIN_DATA_MAP + t0151InBlock,⺻Է,input; + begin + ,date,date,char,8; + ¹ȣ,accno,accno,char,11; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0151OutBlock,,output; + begin + ŵ,mdqty,mdqty,long,9; + ŵݾ,mdamt,mdamt,long,18; + ŵ,mdfee,mdfee,long,18; + ŵŷ,mdtax,mdtax,long,18; + ŵƯ,mdargtax,mdargtax,long,18; + ŵ,tmdtax,tmdtax,long,18; + ŵݾ,mdadjamt,mdadjamt,long,18; + ż,msqty,msqty,long,9; + żݾ,msamt,msamt,long,18; + ż,msfee,msfee,long,18; + ż,tmstax,tmstax,long,18; + żݾ,msadjamt,msadjamt,long,18; + հ,tqty,tqty,long,9; + հݾ,tamt,tamt,long,18; + հ,tfee,tfee,long,18; + հŷ,tottax,tottax,long,18; + հƯ,targtax,targtax,long,18; + հ,ttax,ttax,long,18; + հݾ,tadjamt,tadjamt,long,18; + CTS_Ÿű,cts_medosu,cts_medosu,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,12; + CTS_ܰ,cts_price,cts_price,char,9; + CTS_ü,cts_middiv,cts_middiv,char,2; + end + t0151OutBlock1,1,output,occurs; + begin + Ÿű,medosu,medosu,char,10; + ȣ,expcode,expcode,char,12; + ,qty,qty,long,9; + ܰ,price,price,long,9; + ݾ,amt,amt,long,18; + ,fee,fee,long,18; + ŷ,tax,tax,long,18; + Ư,argtax,argtax,long,18; + ݾ,adjamt,adjamt,long,18; + ü,middiv,middiv,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t0167.res b/sample_python/Res/t0167.res new file mode 100644 index 0000000..dc574e1 --- /dev/null +++ b/sample_python/Res/t0167.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ðȸ(t0167),t0167,block,headtype=A; + BEGIN_DATA_MAP + t0167InBlock,⺻Է,input; + begin + id,id,id,char,8; + end + t0167OutBlock,,output; + begin + (YYYYMMDD),dt,dt,char,8; + ð(HHMMSSssssss),time,time,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t0167_2.res b/sample_python/Res/t0167_2.res new file mode 100644 index 0000000..dc574e1 --- /dev/null +++ b/sample_python/Res/t0167_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ðȸ(t0167),t0167,block,headtype=A; + BEGIN_DATA_MAP + t0167InBlock,⺻Է,input; + begin + id,id,id,char,8; + end + t0167OutBlock,,output; + begin + (YYYYMMDD),dt,dt,char,8; + ð(HHMMSSssssss),time,time,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t0424.res b/sample_python/Res/t0424.res new file mode 100644 index 0000000..67c9888 --- /dev/null +++ b/sample_python/Res/t0424.res @@ -0,0 +1,58 @@ +BEGIN_FUNCTION_MAP + .Func,ֽܰ2(t0424),t0424,attr,tuxcode=t0424,headtype=D; + BEGIN_DATA_MAP + t0424InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + ܰ,prcgb,prcgb,char,1; + üᱸ,chegb,chegb,char,1; + ϰ,dangb,dangb,char,1; + Կ,charge,charge,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,22; + end + t0424OutBlock,,output; + begin + ڻ,sunamt,sunamt,long,18; + ,dtsunik,dtsunik,long,18; + Աݾ,mamt,mamt,long,18; + D2,sunamt1,sunamt1,long,18; + CTS_ȣ,cts_expcode,cts_expcode,char,22; + 򰡱ݾ,tappamt,tappamt,long,18; + 򰡼,tdtsunik,tdtsunik,long,18; + end + t0424OutBlock1,1,output,occurs; + begin + ȣ,expcode,expcode,char,12; + ܰ,jangb,jangb,char,10; + ܰ,janqty,janqty,long,18; + ŵɼ,mdposqt,mdposqt,long,18; + մܰ,pamt,pamt,long,18; + Աݾ,mamt,mamt,long,18; + ݾ,sinamt,sinamt,long,18; + ,lastdt,lastdt,char,8; + ϸżݾ,msat,msat,long,18; + ϸżܰ,mpms,mpms,long,18; + ϸŵݾ,mdat,mdat,long,18; + ϸŵܰ,mpmd,mpmd,long,18; + ϸżݾ,jsat,jsat,long,18; + ϸżܰ,jpms,jpms,long,18; + ϸŵݾ,jdat,jdat,long,18; + ϸŵܰ,jpmd,jpmd,long,18; + ó,sysprocseq,sysprocseq,long,10; + ,loandt,loandt,char,8; + ,hname,hname,char,20; + 屸,marketgb,marketgb,char,1; + 񱸺,jonggb,jonggb,char,1; + ,janrt,janrt,float,10.2; + 簡,price,price,long,8; + 򰡱ݾ,appamt,appamt,long,18; + 򰡼,dtsunik,dtsunik,long,18; + ,sunikrt,sunikrt,float,10.2; + ,fee,fee,long,10; + ,tax,tax,long,10; + ſ,sininter,sininter,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t0424_2.res b/sample_python/Res/t0424_2.res new file mode 100644 index 0000000..67c9888 --- /dev/null +++ b/sample_python/Res/t0424_2.res @@ -0,0 +1,58 @@ +BEGIN_FUNCTION_MAP + .Func,ֽܰ2(t0424),t0424,attr,tuxcode=t0424,headtype=D; + BEGIN_DATA_MAP + t0424InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + ܰ,prcgb,prcgb,char,1; + üᱸ,chegb,chegb,char,1; + ϰ,dangb,dangb,char,1; + Կ,charge,charge,char,1; + CTS_ȣ,cts_expcode,cts_expcode,char,22; + end + t0424OutBlock,,output; + begin + ڻ,sunamt,sunamt,long,18; + ,dtsunik,dtsunik,long,18; + Աݾ,mamt,mamt,long,18; + D2,sunamt1,sunamt1,long,18; + CTS_ȣ,cts_expcode,cts_expcode,char,22; + 򰡱ݾ,tappamt,tappamt,long,18; + 򰡼,tdtsunik,tdtsunik,long,18; + end + t0424OutBlock1,1,output,occurs; + begin + ȣ,expcode,expcode,char,12; + ܰ,jangb,jangb,char,10; + ܰ,janqty,janqty,long,18; + ŵɼ,mdposqt,mdposqt,long,18; + մܰ,pamt,pamt,long,18; + Աݾ,mamt,mamt,long,18; + ݾ,sinamt,sinamt,long,18; + ,lastdt,lastdt,char,8; + ϸżݾ,msat,msat,long,18; + ϸżܰ,mpms,mpms,long,18; + ϸŵݾ,mdat,mdat,long,18; + ϸŵܰ,mpmd,mpmd,long,18; + ϸżݾ,jsat,jsat,long,18; + ϸżܰ,jpms,jpms,long,18; + ϸŵݾ,jdat,jdat,long,18; + ϸŵܰ,jpmd,jpmd,long,18; + ó,sysprocseq,sysprocseq,long,10; + ,loandt,loandt,char,8; + ,hname,hname,char,20; + 屸,marketgb,marketgb,char,1; + 񱸺,jonggb,jonggb,char,1; + ,janrt,janrt,float,10.2; + 簡,price,price,long,8; + 򰡱ݾ,appamt,appamt,long,18; + 򰡼,dtsunik,dtsunik,long,18; + ,sunikrt,sunikrt,float,10.2; + ,fee,fee,long,10; + ,tax,tax,long,10; + ſ,sininter,sininter,long,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t0425.res b/sample_python/Res/t0425.res new file mode 100644 index 0000000..4067124 --- /dev/null +++ b/sample_python/Res/t0425.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func,ֽü/ü(t0425),t0425,attr,tuxcode=t0425,headtype=D; + BEGIN_DATA_MAP + t0425InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + ȣ,expcode,expcode,char,12; + üᱸ,chegb,chegb,char,1; + Ÿű,medosu,medosu,char,1; + ļ,sortgb,sortgb,char,1; + ֹȣ,cts_ordno,cts_ordno,char,10; + end + t0425OutBlock,,output; + begin + ֹ,tqty,tqty,long,18; + ü,tcheqty,tcheqty,long,18; + ѹü,tordrem,tordrem,long,18; + ,cmss,cmss,long,18; + ֹݾ,tamt,tamt,long,18; + Ѹŵüݾ,tmdamt,tmdamt,long,18; + Ѹżüݾ,tmsamt,tmsamt,long,18; + ,tax,tax,long,18; + ֹȣ,cts_ordno,cts_ordno,char,10; + end + t0425OutBlock1,1,output,occurs; + begin + ֹȣ,ordno,ordno,long,10; + ȣ,expcode,expcode,char,12; + ,medosu,medosu,char,10; + ֹ,qty,qty,long,9; + ֹ,price,price,long,9; + ü,cheqty,cheqty,long,9; + üᰡ,cheprice,cheprice,long,9; + üܷ,ordrem,ordrem,long,9; + Ȯμ,cfmqty,cfmqty,long,9; + ,status,status,char,10; + ֹȣ,orgordno,orgordno,long,10; + ,ordgb,ordgb,char,20; + ֹð,ordtime,ordtime,char,8; + ֹü,ordermtd,ordermtd,char,10; + ó,sysprocseq,sysprocseq,long,10; + ȣ,hogagb,hogagb,char,2; + 簡,price1,price1,long,8; + ֹ,orggb,orggb,char,2; + ſ뱸,singb,singb,char,2; + ,loandt,loandt,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t0425_2.res b/sample_python/Res/t0425_2.res new file mode 100644 index 0000000..4067124 --- /dev/null +++ b/sample_python/Res/t0425_2.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func,ֽü/ü(t0425),t0425,attr,tuxcode=t0425,headtype=D; + BEGIN_DATA_MAP + t0425InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + ȣ,expcode,expcode,char,12; + üᱸ,chegb,chegb,char,1; + Ÿű,medosu,medosu,char,1; + ļ,sortgb,sortgb,char,1; + ֹȣ,cts_ordno,cts_ordno,char,10; + end + t0425OutBlock,,output; + begin + ֹ,tqty,tqty,long,18; + ü,tcheqty,tcheqty,long,18; + ѹü,tordrem,tordrem,long,18; + ,cmss,cmss,long,18; + ֹݾ,tamt,tamt,long,18; + Ѹŵüݾ,tmdamt,tmdamt,long,18; + Ѹżüݾ,tmsamt,tmsamt,long,18; + ,tax,tax,long,18; + ֹȣ,cts_ordno,cts_ordno,char,10; + end + t0425OutBlock1,1,output,occurs; + begin + ֹȣ,ordno,ordno,long,10; + ȣ,expcode,expcode,char,12; + ,medosu,medosu,char,10; + ֹ,qty,qty,long,9; + ֹ,price,price,long,9; + ü,cheqty,cheqty,long,9; + üᰡ,cheprice,cheprice,long,9; + üܷ,ordrem,ordrem,long,9; + Ȯμ,cfmqty,cfmqty,long,9; + ,status,status,char,10; + ֹȣ,orgordno,orgordno,long,10; + ,ordgb,ordgb,char,20; + ֹð,ordtime,ordtime,char,8; + ֹü,ordermtd,ordermtd,char,10; + ó,sysprocseq,sysprocseq,long,10; + ȣ,hogagb,hogagb,char,2; + 簡,price1,price1,long,8; + ֹ,orggb,orggb,char,2; + ſ뱸,singb,singb,char,2; + ,loandt,loandt,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t0434.res b/sample_python/Res/t0434.res new file mode 100644 index 0000000..c04c4e3 --- /dev/null +++ b/sample_python/Res/t0434.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼü/ü(t0434),t0434,tuxcode=t0434,headtype=D; + BEGIN_DATA_MAP + t0434InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + ȣ,expcode,expcode,char,8; + üᱸ,chegb,chegb,char,1; + ļ,sortgb,sortgb,char,1; + CTS_ֹȣ,cts_ordno,cts_ordno,char,7; + end + t0434OutBlock,,output; + begin + CTS_ֹȣ,cts_ordno,cts_ordno,char,7; + end + t0434OutBlock1,1,output,occurs; + begin + ֹȣ,ordno,ordno,long,7; + ֹȣ,orgordno,orgordno,long,7; + ,medosu,medosu,char,10; + ,ordgb,ordgb,char,20; + ֹ,qty,qty,long,9; + ֹ,price,price,float,9.2; + ü,cheqty,cheqty,long,9; + üᰡ,cheprice,cheprice,float,9.2; + üܷ,ordrem,ordrem,long,9; + ,status,status,char,10; + ֹð,ordtime,ordtime,char,8; + ֹü,ordermtd,ordermtd,char,10; + ȣ,expcode,expcode,char,8; + ڵ,rtcode,rtcode,char,3; + ó,sysprocseq,sysprocseq,long,10; + ȣŸ,hogatype,hogatype,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t0434_2.res b/sample_python/Res/t0434_2.res new file mode 100644 index 0000000..c04c4e3 --- /dev/null +++ b/sample_python/Res/t0434_2.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼü/ü(t0434),t0434,tuxcode=t0434,headtype=D; + BEGIN_DATA_MAP + t0434InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + ȣ,expcode,expcode,char,8; + üᱸ,chegb,chegb,char,1; + ļ,sortgb,sortgb,char,1; + CTS_ֹȣ,cts_ordno,cts_ordno,char,7; + end + t0434OutBlock,,output; + begin + CTS_ֹȣ,cts_ordno,cts_ordno,char,7; + end + t0434OutBlock1,1,output,occurs; + begin + ֹȣ,ordno,ordno,long,7; + ֹȣ,orgordno,orgordno,long,7; + ,medosu,medosu,char,10; + ,ordgb,ordgb,char,20; + ֹ,qty,qty,long,9; + ֹ,price,price,float,9.2; + ü,cheqty,cheqty,long,9; + üᰡ,cheprice,cheprice,float,9.2; + üܷ,ordrem,ordrem,long,9; + ,status,status,char,10; + ֹð,ordtime,ordtime,char,8; + ֹü,ordermtd,ordermtd,char,10; + ȣ,expcode,expcode,char,8; + ڵ,rtcode,rtcode,char,3; + ó,sysprocseq,sysprocseq,long,10; + ȣŸ,hogatype,hogatype,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t0441.res b/sample_python/Res/t0441.res new file mode 100644 index 0000000..ae8dadd --- /dev/null +++ b/sample_python/Res/t0441.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼܰ(̵)(t0441),t0441,attr,tuxcode=t0441,headtype=D; + BEGIN_DATA_MAP + t0441InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + CTS_ȣ,cts_expcode,cts_expcode,char,8; + CTS_Ÿű,cts_medocd,cts_medocd,char,1; + end + t0441OutBlock,,output; + begin + Ÿżհ,tdtsunik,tdtsunik,long,18; + CTS_ȣ,cts_expcode,cts_expcode,char,8; + CTS_Ÿű,cts_medocd,cts_medocd,char,1; + 򰡱ݾ,tappamt,tappamt,long,18; + 򰡼,tsunik,tsunik,long,18; + end + t0441OutBlock1,1,output,occurs; + begin + ȣ,expcode,expcode,char,8; + ,medosu,medosu,char,4; + ܰ,jqty,jqty,long,10; + û갡ɼ,cqty,cqty,long,10; + մܰ,pamt,pamt,float,10.2; + ѸԱݾ,mamt,mamt,long,18; + Ÿű,medocd,medocd,char,1; + Ÿż,dtsunik,dtsunik,long,18; + ó,sysprocseq,sysprocseq,long,10; + 簡,price,price,float,9.2; + 򰡱ݾ,appamt,appamt,long,18; + 򰡼,dtsunik1,dtsunik1,long,18; + ,sunikrt,sunikrt,float,10.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t0441_2.res b/sample_python/Res/t0441_2.res new file mode 100644 index 0000000..ae8dadd --- /dev/null +++ b/sample_python/Res/t0441_2.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼܰ(̵)(t0441),t0441,attr,tuxcode=t0441,headtype=D; + BEGIN_DATA_MAP + t0441InBlock,⺻Է,input; + begin + ¹ȣ,accno,accno,char,11; + йȣ,passwd,passwd,char,8; + CTS_ȣ,cts_expcode,cts_expcode,char,8; + CTS_Ÿű,cts_medocd,cts_medocd,char,1; + end + t0441OutBlock,,output; + begin + Ÿżհ,tdtsunik,tdtsunik,long,18; + CTS_ȣ,cts_expcode,cts_expcode,char,8; + CTS_Ÿű,cts_medocd,cts_medocd,char,1; + 򰡱ݾ,tappamt,tappamt,long,18; + 򰡼,tsunik,tsunik,long,18; + end + t0441OutBlock1,1,output,occurs; + begin + ȣ,expcode,expcode,char,8; + ,medosu,medosu,char,4; + ܰ,jqty,jqty,long,10; + û갡ɼ,cqty,cqty,long,10; + մܰ,pamt,pamt,float,10.2; + ѸԱݾ,mamt,mamt,long,18; + Ÿű,medocd,medocd,char,1; + Ÿż,dtsunik,dtsunik,long,18; + ó,sysprocseq,sysprocseq,long,10; + 簡,price,price,float,9.2; + 򰡱ݾ,appamt,appamt,long,18; + 򰡼,dtsunik1,dtsunik1,long,18; + ,sunikrt,sunikrt,float,10.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1101.res b/sample_python/Res/t1101.res new file mode 100644 index 0000000..728e566 --- /dev/null +++ b/sample_python/Res/t1101.res @@ -0,0 +1,99 @@ +BEGIN_FUNCTION_MAP + .Func,ֽ簡ȣȸ(t1101),t1101,attr,block,headtype=A; + BEGIN_DATA_MAP + t1101InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1101OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,12; + żȣ1,bidrem1,bidrem1,long,12; + ŵ1,preoffercha1,preoffercha1,long,12; + ż1,prebidcha1,prebidcha1,long,12; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,12; + żȣ2,bidrem2,bidrem2,long,12; + ŵ2,preoffercha2,preoffercha2,long,12; + ż2,prebidcha2,prebidcha2,long,12; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,12; + żȣ3,bidrem3,bidrem3,long,12; + ŵ3,preoffercha3,preoffercha3,long,12; + ż3,prebidcha3,prebidcha3,long,12; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,12; + żȣ4,bidrem4,bidrem4,long,12; + ŵ4,preoffercha4,preoffercha4,long,12; + ż4,prebidcha4,prebidcha4,long,12; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,12; + żȣ5,bidrem5,bidrem5,long,12; + ŵ5,preoffercha5,preoffercha5,long,12; + ż5,prebidcha5,prebidcha5,long,12; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,12; + żȣ6,bidrem6,bidrem6,long,12; + ŵ6,preoffercha6,preoffercha6,long,12; + ż6,prebidcha6,prebidcha6,long,12; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,12; + żȣ7,bidrem7,bidrem7,long,12; + ŵ7,preoffercha7,preoffercha7,long,12; + ż7,prebidcha7,prebidcha7,long,12; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,12; + żȣ8,bidrem8,bidrem8,long,12; + ŵ8,preoffercha8,preoffercha8,long,12; + ż8,prebidcha8,prebidcha8,long,12; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,12; + żȣ9,bidrem9,bidrem9,long,12; + ŵ9,preoffercha9,preoffercha9,long,12; + ż9,prebidcha9,prebidcha9,long,12; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,12; + żȣ10,bidrem10,bidrem10,long,12; + ŵ10,preoffercha10,preoffercha10,long,12; + ż10,prebidcha10,prebidcha10,long,12; + ŵȣ,offer,offer,long,12; + żȣ,bid,bid,long,12; + ŵ,preoffercha,preoffercha,long,12; + ż,prebidcha,prebidcha,long,12; + Žð,hotime,hotime,char,8; + üᰡ,yeprice,yeprice,long,8; + ü,yevolume,yevolume,long,12; + üϱ,yesign,yesign,char,1; + üϴ,yechange,yechange,long,8; + ü,yediff,yediff,float,6.2; + ðܸŵܷ,tmoffer,tmoffer,long,12; + ðܸżܷ,tmbid,tmbid,long,12; + ñ,ho_status,ho_status,char,1; + ڵ,shcode,shcode,char,6; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1101_2.res b/sample_python/Res/t1101_2.res new file mode 100644 index 0000000..728e566 --- /dev/null +++ b/sample_python/Res/t1101_2.res @@ -0,0 +1,99 @@ +BEGIN_FUNCTION_MAP + .Func,ֽ簡ȣȸ(t1101),t1101,attr,block,headtype=A; + BEGIN_DATA_MAP + t1101InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1101OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,12; + żȣ1,bidrem1,bidrem1,long,12; + ŵ1,preoffercha1,preoffercha1,long,12; + ż1,prebidcha1,prebidcha1,long,12; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,12; + żȣ2,bidrem2,bidrem2,long,12; + ŵ2,preoffercha2,preoffercha2,long,12; + ż2,prebidcha2,prebidcha2,long,12; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,12; + żȣ3,bidrem3,bidrem3,long,12; + ŵ3,preoffercha3,preoffercha3,long,12; + ż3,prebidcha3,prebidcha3,long,12; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,12; + żȣ4,bidrem4,bidrem4,long,12; + ŵ4,preoffercha4,preoffercha4,long,12; + ż4,prebidcha4,prebidcha4,long,12; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,12; + żȣ5,bidrem5,bidrem5,long,12; + ŵ5,preoffercha5,preoffercha5,long,12; + ż5,prebidcha5,prebidcha5,long,12; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,12; + żȣ6,bidrem6,bidrem6,long,12; + ŵ6,preoffercha6,preoffercha6,long,12; + ż6,prebidcha6,prebidcha6,long,12; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,12; + żȣ7,bidrem7,bidrem7,long,12; + ŵ7,preoffercha7,preoffercha7,long,12; + ż7,prebidcha7,prebidcha7,long,12; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,12; + żȣ8,bidrem8,bidrem8,long,12; + ŵ8,preoffercha8,preoffercha8,long,12; + ż8,prebidcha8,prebidcha8,long,12; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,12; + żȣ9,bidrem9,bidrem9,long,12; + ŵ9,preoffercha9,preoffercha9,long,12; + ż9,prebidcha9,prebidcha9,long,12; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,12; + żȣ10,bidrem10,bidrem10,long,12; + ŵ10,preoffercha10,preoffercha10,long,12; + ż10,prebidcha10,prebidcha10,long,12; + ŵȣ,offer,offer,long,12; + żȣ,bid,bid,long,12; + ŵ,preoffercha,preoffercha,long,12; + ż,prebidcha,prebidcha,long,12; + Žð,hotime,hotime,char,8; + üᰡ,yeprice,yeprice,long,8; + ü,yevolume,yevolume,long,12; + üϱ,yesign,yesign,char,1; + üϴ,yechange,yechange,long,8; + ü,yediff,yediff,float,6.2; + ðܸŵܷ,tmoffer,tmoffer,long,12; + ðܸżܷ,tmbid,tmbid,long,12; + ñ,ho_status,ho_status,char,1; + ڵ,shcode,shcode,char,6; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1102.res b/sample_python/Res/t1102.res new file mode 100644 index 0000000..69cd0ed --- /dev/null +++ b/sample_python/Res/t1102.res @@ -0,0 +1,173 @@ +BEGIN_FUNCTION_MAP + .Func,ֽ簡(ü)ȸ(t1102),t1102,attr,block,headtype=A; + BEGIN_DATA_MAP + t1102InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1102OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ذ(򰡰),recprice,recprice,long,8; + ,avg,avg,long,8; + Ѱ(ְȣ),uplmtprice,uplmtprice,long,8; + Ѱ(ȣ),dnlmtprice,dnlmtprice,long,8; + ϰŷ,jnilvolume,jnilvolume,long,12; + ŷ,volumediff,volumediff,long,12; + ð,open,open,long,8; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + PER,per,per,float,6.2; + PBRX,pbrx,pbrx,float,6.2; + ֽļ(õ),listing,listing,long,12; + ű,jkrate,jkrate,long,8; + ,memedan,memedan,char,5; + ŵǻڵ1,offernocd1,offernocd1,char,3; + żǻڵ1,bidnocd1,bidnocd1,char,3; + ŵǻ1,offerno1,offerno1,char,6; + żǻ1,bidno1,bidno1,char,6; + Ѹŵ1,dvol1,dvol1,long,8; + Ѹż1,svol1,svol1,long,8; + ŵ1,dcha1,dcha1,long,8; + ż1,scha1,scha1,long,8; + ŵ1,ddiff1,ddiff1,float,6.2; + ż1,sdiff1,sdiff1,float,6.2; + ŵǻڵ2,offernocd2,offernocd2,char,3; + żǻڵ2,bidnocd2,bidnocd2,char,3; + ŵǻ2,offerno2,offerno2,char,6; + żǻ2,bidno2,bidno2,char,6; + Ѹŵ2,dvol2,dvol2,long,8; + Ѹż2,svol2,svol2,long,8; + ŵ2,dcha2,dcha2,long,8; + ż2,scha2,scha2,long,8; + ŵ2,ddiff2,ddiff2,float,6.2; + ż2,sdiff2,sdiff2,float,6.2; + ŵǻڵ3,offernocd3,offernocd3,char,3; + żǻڵ3,bidnocd3,bidnocd3,char,3; + ŵǻ3,offerno3,offerno3,char,6; + żǻ3,bidno3,bidno3,char,6; + Ѹŵ3,dvol3,dvol3,long,8; + Ѹż3,svol3,svol3,long,8; + ŵ3,dcha3,dcha3,long,8; + ż3,scha3,scha3,long,8; + ŵ3,ddiff3,ddiff3,float,6.2; + ż3,sdiff3,sdiff3,float,6.2; + ŵǻڵ4,offernocd4,offernocd4,char,3; + żǻڵ4,bidnocd4,bidnocd4,char,3; + ŵǻ4,offerno4,offerno4,char,6; + żǻ4,bidno4,bidno4,char,6; + Ѹŵ4,dvol4,dvol4,long,8; + Ѹż4,svol4,svol4,long,8; + ŵ4,dcha4,dcha4,long,8; + ż4,scha4,scha4,long,8; + ŵ4,ddiff4,ddiff4,float,6.2; + ż4,sdiff4,sdiff4,float,6.2; + ŵǻڵ5,offernocd5,offernocd5,char,3; + żǻڵ5,bidnocd5,bidnocd5,char,3; + ŵǻ5,offerno5,offerno5,char,6; + żǻ5,bidno5,bidno5,char,6; + Ѹŵ5,dvol5,dvol5,long,8; + Ѹż5,svol5,svol5,long,8; + ŵ5,dcha5,dcha5,long,8; + ż5,scha5,scha5,long,8; + ŵ5,ddiff5,ddiff5,float,6.2; + ż5,sdiff5,sdiff5,float,6.2; + ܱŵհ,fwdvl,fwdvl,long,12; + ܱŵ,ftradmdcha,ftradmdcha,long,12; + ܱŵ,ftradmddiff,ftradmddiff,float,6.2; + ܱżհ,fwsvl,fwsvl,long,12; + ܱż,ftradmscha,ftradmscha,long,12; + ܱż,ftradmsdiff,ftradmsdiff,float,6.2; + ȸ,vol,vol,float,6.2; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + ϵðŷ,jvolume,jvolume,long,12; + ְ,highyear,highyear,long,8; + ְ,highyeardate,highyeardate,char,8; + ,lowyear,lowyear,long,8; + ,lowyeardate,lowyeardate,char,8; + ǥ,target,target,long,8; + ں,capital,capital,long,12; + ֽļ,abscnt,abscnt,long,12; + ׸鰡,parprice,parprice,long,8; + ,gsmm,gsmm,char,2; + 밡,subprice,subprice,long,8; + ðѾ,total,total,long,12; + ,listdate,listdate,char,8; + б,name,name,char,10; + б,bfsales,bfsales,long,12; + б⿵,bfoperatingincome,bfoperatingincome,long,12; + б,bfordinaryincome,bfordinaryincome,long,12; + б,bfnetincome,bfnetincome,long,12; + бEPS,bfeps,bfeps,float,13.2; + б,name2,name2,char,10; + б,bfsales2,bfsales2,long,12; + б⿵,bfoperatingincome2,bfoperatingincome2,long,12; + б,bfordinaryincome2,bfordinaryincome2,long,12; + б,bfnetincome2,bfnetincome2,long,12; + бEPS,bfeps2,bfeps2,float,13.2; + ,salert,salert,float,7.2; + 񿵾,opert,opert,float,7.2; + ,ordrt,ordrt,float,7.2; + ,netrt,netrt,float,7.2; + EPS,epsrt,epsrt,float,7.2; + ,info1,info1,char,10; + /޵,info2,info2,char,10; + /屸,info3,info3,char,10; + /ҼDZ,info4,info4,char,12; + 屸,janginfo,janginfo,char,10; + T.PER,t_per,t_per,float,6.2; + ȭISOڵ,tonghwa,tonghwa,char,3; + Ѹŵ1,dval1,dval1,long,18; + Ѹż1,sval1,sval1,long,18; + Ѹŵ2,dval2,dval2,long,18; + Ѹż2,sval2,sval2,long,18; + Ѹŵ3,dval3,dval3,long,18; + Ѹż3,sval3,sval3,long,18; + Ѹŵ4,dval4,dval4,long,18; + Ѹż4,sval4,sval4,long,18; + Ѹŵ5,dval5,dval5,long,18; + Ѹż5,sval5,sval5,long,18; + Ѹŵܰ1,davg1,davg1,long,8; + Ѹżܰ1,savg1,savg1,long,8; + Ѹŵܰ2,davg2,davg2,long,8; + Ѹżܰ2,savg2,savg2,long,8; + Ѹŵܰ3,davg3,davg3,long,8; + Ѹżܰ3,savg3,savg3,long,8; + Ѹŵܰ4,davg4,davg4,long,8; + Ѹżܰ4,savg4,savg4,long,8; + Ѹŵܰ5,davg5,davg5,long,8; + Ѹżܰ5,savg5,savg5,long,8; + ܱŵ,ftradmdval,ftradmdval,long,18; + ܱż,ftradmsval,ftradmsval,long,18; + ܱŵܰ,ftradmdvag,ftradmdavg,long,8; + ܱżܰ,ftradmsvag,ftradmsavg,long,8; + ȯ,info5,info5,char,8; + μȸ翩,spac_gubun,spac_gubun,char,1; + డ,issueprice,issueprice,long,8; + 뱸ڵ(1:й߻2:׿:̹߻),alloc_gubun,alloc_gubun,char,1; + 뱸,alloc_text,alloc_text,char,8; + ܱ/VIߵ,shterm_text,shterm_text,char,10; + VIѰ,svi_uplmtprice,svi_uplmtprice,long,8; + VIѰ,svi_dnlmtprice,svi_dnlmtprice,long,8; + 񿩺,low_lqdt_gu,low_lqdt_gu,char,1; + ̻޵񿩺,abnormal_rise_gu,abnormal_rise_gu,char,1; + Ұǥ,lend_text,lend_text,char,8; + ETF/ETN,ty_text,ty_text,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1102_2.res b/sample_python/Res/t1102_2.res new file mode 100644 index 0000000..69cd0ed --- /dev/null +++ b/sample_python/Res/t1102_2.res @@ -0,0 +1,173 @@ +BEGIN_FUNCTION_MAP + .Func,ֽ簡(ü)ȸ(t1102),t1102,attr,block,headtype=A; + BEGIN_DATA_MAP + t1102InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1102OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ذ(򰡰),recprice,recprice,long,8; + ,avg,avg,long,8; + Ѱ(ְȣ),uplmtprice,uplmtprice,long,8; + Ѱ(ȣ),dnlmtprice,dnlmtprice,long,8; + ϰŷ,jnilvolume,jnilvolume,long,12; + ŷ,volumediff,volumediff,long,12; + ð,open,open,long,8; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + PER,per,per,float,6.2; + PBRX,pbrx,pbrx,float,6.2; + ֽļ(õ),listing,listing,long,12; + ű,jkrate,jkrate,long,8; + ,memedan,memedan,char,5; + ŵǻڵ1,offernocd1,offernocd1,char,3; + żǻڵ1,bidnocd1,bidnocd1,char,3; + ŵǻ1,offerno1,offerno1,char,6; + żǻ1,bidno1,bidno1,char,6; + Ѹŵ1,dvol1,dvol1,long,8; + Ѹż1,svol1,svol1,long,8; + ŵ1,dcha1,dcha1,long,8; + ż1,scha1,scha1,long,8; + ŵ1,ddiff1,ddiff1,float,6.2; + ż1,sdiff1,sdiff1,float,6.2; + ŵǻڵ2,offernocd2,offernocd2,char,3; + żǻڵ2,bidnocd2,bidnocd2,char,3; + ŵǻ2,offerno2,offerno2,char,6; + żǻ2,bidno2,bidno2,char,6; + Ѹŵ2,dvol2,dvol2,long,8; + Ѹż2,svol2,svol2,long,8; + ŵ2,dcha2,dcha2,long,8; + ż2,scha2,scha2,long,8; + ŵ2,ddiff2,ddiff2,float,6.2; + ż2,sdiff2,sdiff2,float,6.2; + ŵǻڵ3,offernocd3,offernocd3,char,3; + żǻڵ3,bidnocd3,bidnocd3,char,3; + ŵǻ3,offerno3,offerno3,char,6; + żǻ3,bidno3,bidno3,char,6; + Ѹŵ3,dvol3,dvol3,long,8; + Ѹż3,svol3,svol3,long,8; + ŵ3,dcha3,dcha3,long,8; + ż3,scha3,scha3,long,8; + ŵ3,ddiff3,ddiff3,float,6.2; + ż3,sdiff3,sdiff3,float,6.2; + ŵǻڵ4,offernocd4,offernocd4,char,3; + żǻڵ4,bidnocd4,bidnocd4,char,3; + ŵǻ4,offerno4,offerno4,char,6; + żǻ4,bidno4,bidno4,char,6; + Ѹŵ4,dvol4,dvol4,long,8; + Ѹż4,svol4,svol4,long,8; + ŵ4,dcha4,dcha4,long,8; + ż4,scha4,scha4,long,8; + ŵ4,ddiff4,ddiff4,float,6.2; + ż4,sdiff4,sdiff4,float,6.2; + ŵǻڵ5,offernocd5,offernocd5,char,3; + żǻڵ5,bidnocd5,bidnocd5,char,3; + ŵǻ5,offerno5,offerno5,char,6; + żǻ5,bidno5,bidno5,char,6; + Ѹŵ5,dvol5,dvol5,long,8; + Ѹż5,svol5,svol5,long,8; + ŵ5,dcha5,dcha5,long,8; + ż5,scha5,scha5,long,8; + ŵ5,ddiff5,ddiff5,float,6.2; + ż5,sdiff5,sdiff5,float,6.2; + ܱŵհ,fwdvl,fwdvl,long,12; + ܱŵ,ftradmdcha,ftradmdcha,long,12; + ܱŵ,ftradmddiff,ftradmddiff,float,6.2; + ܱżհ,fwsvl,fwsvl,long,12; + ܱż,ftradmscha,ftradmscha,long,12; + ܱż,ftradmsdiff,ftradmsdiff,float,6.2; + ȸ,vol,vol,float,6.2; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + ϵðŷ,jvolume,jvolume,long,12; + ְ,highyear,highyear,long,8; + ְ,highyeardate,highyeardate,char,8; + ,lowyear,lowyear,long,8; + ,lowyeardate,lowyeardate,char,8; + ǥ,target,target,long,8; + ں,capital,capital,long,12; + ֽļ,abscnt,abscnt,long,12; + ׸鰡,parprice,parprice,long,8; + ,gsmm,gsmm,char,2; + 밡,subprice,subprice,long,8; + ðѾ,total,total,long,12; + ,listdate,listdate,char,8; + б,name,name,char,10; + б,bfsales,bfsales,long,12; + б⿵,bfoperatingincome,bfoperatingincome,long,12; + б,bfordinaryincome,bfordinaryincome,long,12; + б,bfnetincome,bfnetincome,long,12; + бEPS,bfeps,bfeps,float,13.2; + б,name2,name2,char,10; + б,bfsales2,bfsales2,long,12; + б⿵,bfoperatingincome2,bfoperatingincome2,long,12; + б,bfordinaryincome2,bfordinaryincome2,long,12; + б,bfnetincome2,bfnetincome2,long,12; + бEPS,bfeps2,bfeps2,float,13.2; + ,salert,salert,float,7.2; + 񿵾,opert,opert,float,7.2; + ,ordrt,ordrt,float,7.2; + ,netrt,netrt,float,7.2; + EPS,epsrt,epsrt,float,7.2; + ,info1,info1,char,10; + /޵,info2,info2,char,10; + /屸,info3,info3,char,10; + /ҼDZ,info4,info4,char,12; + 屸,janginfo,janginfo,char,10; + T.PER,t_per,t_per,float,6.2; + ȭISOڵ,tonghwa,tonghwa,char,3; + Ѹŵ1,dval1,dval1,long,18; + Ѹż1,sval1,sval1,long,18; + Ѹŵ2,dval2,dval2,long,18; + Ѹż2,sval2,sval2,long,18; + Ѹŵ3,dval3,dval3,long,18; + Ѹż3,sval3,sval3,long,18; + Ѹŵ4,dval4,dval4,long,18; + Ѹż4,sval4,sval4,long,18; + Ѹŵ5,dval5,dval5,long,18; + Ѹż5,sval5,sval5,long,18; + Ѹŵܰ1,davg1,davg1,long,8; + Ѹżܰ1,savg1,savg1,long,8; + Ѹŵܰ2,davg2,davg2,long,8; + Ѹżܰ2,savg2,savg2,long,8; + Ѹŵܰ3,davg3,davg3,long,8; + Ѹżܰ3,savg3,savg3,long,8; + Ѹŵܰ4,davg4,davg4,long,8; + Ѹżܰ4,savg4,savg4,long,8; + Ѹŵܰ5,davg5,davg5,long,8; + Ѹżܰ5,savg5,savg5,long,8; + ܱŵ,ftradmdval,ftradmdval,long,18; + ܱż,ftradmsval,ftradmsval,long,18; + ܱŵܰ,ftradmdvag,ftradmdavg,long,8; + ܱżܰ,ftradmsvag,ftradmsavg,long,8; + ȯ,info5,info5,char,8; + μȸ翩,spac_gubun,spac_gubun,char,1; + డ,issueprice,issueprice,long,8; + 뱸ڵ(1:й߻2:׿:̹߻),alloc_gubun,alloc_gubun,char,1; + 뱸,alloc_text,alloc_text,char,8; + ܱ/VIߵ,shterm_text,shterm_text,char,10; + VIѰ,svi_uplmtprice,svi_uplmtprice,long,8; + VIѰ,svi_dnlmtprice,svi_dnlmtprice,long,8; + 񿩺,low_lqdt_gu,low_lqdt_gu,char,1; + ̻޵񿩺,abnormal_rise_gu,abnormal_rise_gu,char,1; + Ұǥ,lend_text,lend_text,char,8; + ETF/ETN,ty_text,ty_text,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1104.res b/sample_python/Res/t1104.res new file mode 100644 index 0000000..e54392d --- /dev/null +++ b/sample_python/Res/t1104.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ֽ簡ü޸(t1104),t1104,block,headtype=A; + BEGIN_DATA_MAP + t1104InBlock,⺻Է,input; + begin + ڵ,code,code,char,6; + Ǽ,nrec,nrec,char,2; + end + t1104InBlock1,⺻Է1,input,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + Ÿ1,dat1,dat1,char,1; + Ÿ2,dat2,dat2,char,8; + end + t1104OutBlock,,output; + begin + °Ǽ,nrec,nrec,char,2; + end + t1104OutBlock1,1,output,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + °,vals,vals,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1104_2.res b/sample_python/Res/t1104_2.res new file mode 100644 index 0000000..e54392d --- /dev/null +++ b/sample_python/Res/t1104_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ֽ簡ü޸(t1104),t1104,block,headtype=A; + BEGIN_DATA_MAP + t1104InBlock,⺻Է,input; + begin + ڵ,code,code,char,6; + Ǽ,nrec,nrec,char,2; + end + t1104InBlock1,⺻Է1,input,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + Ÿ1,dat1,dat1,char,1; + Ÿ2,dat2,dat2,char,8; + end + t1104OutBlock,,output; + begin + °Ǽ,nrec,nrec,char,2; + end + t1104OutBlock1,1,output,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + °,vals,vals,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1105.res b/sample_python/Res/t1105.res new file mode 100644 index 0000000..6c87f15 --- /dev/null +++ b/sample_python/Res/t1105.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ֽǸ/ũȸ(t1105),t1105,attr,block,headtype=A; + BEGIN_DATA_MAP + t1105InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1105OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ǻ,pbot,pbot,long,8; + 1,offer1,offer1,long,8; + 1,supp1,supp1,long,8; + 2,offer2,offer2,long,8; + 2,supp2,supp2,long,8; + ذ,stdprc,stdprc,long,8; + D,offerd,offerd,long,8; + D,suppd,suppd,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1105_2.res b/sample_python/Res/t1105_2.res new file mode 100644 index 0000000..6c87f15 --- /dev/null +++ b/sample_python/Res/t1105_2.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ֽǸ/ũȸ(t1105),t1105,attr,block,headtype=A; + BEGIN_DATA_MAP + t1105InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1105OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ǻ,pbot,pbot,long,8; + 1,offer1,offer1,long,8; + 1,supp1,supp1,long,8; + 2,offer2,offer2,long,8; + 2,supp2,supp2,long,8; + ذ,stdprc,stdprc,long,8; + D,offerd,offerd,long,8; + D,suppd,suppd,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1109.res b/sample_python/Res/t1109.res new file mode 100644 index 0000000..fd50efb --- /dev/null +++ b/sample_python/Res/t1109.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ðüᷮ(t1109),t1109,attr,block,headtype=A; + BEGIN_DATA_MAP + t1109InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ücts,dan_chetime,dan_chetime,char,10; + IDX,idx,idx,long,4; + end + t1109OutBlock,,output; + begin + cts,ctsshcode,ctsshcode,char,6; + ücts,ctschetime,ctschetime,char,10; + IDX,idx,idx,long,4; + end + t1109OutBlock1,1,output,occurs; + begin + ð,dan_chetime,dan_chetime,char,10; + 簡,dan_price,dan_price,long,8; + ϴ񱸺,dan_sign,dan_sign,char,1; + ϴ,dan_change,dan_change,long,8; + ,diff,diff,float,6.2; + üᷮ,dan_cvolume,dan_cvolume,long,8; + üᰭ,chdegree,chdegree,float,9.2; + ŷ,dan_volume,dan_volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1109_2.res b/sample_python/Res/t1109_2.res new file mode 100644 index 0000000..fd50efb --- /dev/null +++ b/sample_python/Res/t1109_2.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ðüᷮ(t1109),t1109,attr,block,headtype=A; + BEGIN_DATA_MAP + t1109InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ücts,dan_chetime,dan_chetime,char,10; + IDX,idx,idx,long,4; + end + t1109OutBlock,,output; + begin + cts,ctsshcode,ctsshcode,char,6; + ücts,ctschetime,ctschetime,char,10; + IDX,idx,idx,long,4; + end + t1109OutBlock1,1,output,occurs; + begin + ð,dan_chetime,dan_chetime,char,10; + 簡,dan_price,dan_price,long,8; + ϴ񱸺,dan_sign,dan_sign,char,1; + ϴ,dan_change,dan_change,long,8; + ,diff,diff,float,6.2; + üᷮ,dan_cvolume,dan_cvolume,long,8; + üᰭ,chdegree,chdegree,float,9.2; + ŷ,dan_volume,dan_volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1301.res b/sample_python/Res/t1301.res new file mode 100644 index 0000000..ca6f487 --- /dev/null +++ b/sample_python/Res/t1301.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĽð뺰üȸ(t1301),t1301,attr,block,headtype=A; + BEGIN_DATA_MAP + t1301InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,starttime,starttime,char,4; + ð,endtime,endtime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t1301OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t1301OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,12; + üᰭ,chdegree,chdegree,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + üᷮ,revolume,revolume,long,12; + üǼ,rechecnt,rechecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1301_2.res b/sample_python/Res/t1301_2.res new file mode 100644 index 0000000..ca6f487 --- /dev/null +++ b/sample_python/Res/t1301_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĽð뺰üȸ(t1301),t1301,attr,block,headtype=A; + BEGIN_DATA_MAP + t1301InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,starttime,starttime,char,4; + ð,endtime,endtime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t1301OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t1301OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,12; + üᰭ,chdegree,chdegree,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + üᷮ,revolume,revolume,long,12; + üǼ,rechecnt,rechecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1302.res b/sample_python/Res/t1302.res new file mode 100644 index 0000000..1ab7fe7 --- /dev/null +++ b/sample_python/Res/t1302.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĺкְȸ(t1302),t1302,attr,block,headtype=A; + BEGIN_DATA_MAP + t1302InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ۾,gubun,gubun,char,1; + ð,time,time,char,6; + Ǽ,cnt,cnt,int,3; + end + t1302OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,6; + end + t1302OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,6; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᰭ,chdegree,chdegree,float,8.2; + ŵü,mdvolume,mdvolume,long,12; + żü,msvolume,msvolume,long,12; + żüᷮ,revolume,revolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żüǼ,mschecnt,mschecnt,long,8; + üǼ,rechecnt,rechecnt,long,8; + ŷ,volume,volume,long,12; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + üᷮ,cvolume,cvolume,long,12; + ŵüǼ(ð),mdchecnttm,mdchecnttm,long,8; + żüǼ(ð),mschecnttm,mschecnttm,long,8; + ŵܷ,totofferrem,totofferrem,long,12; + żܷ,totbidrem,totbidrem,long,12; + ðŵüᷮ,mdvolumetm,mdvolumetm,long,12; + ðżüᷮ,msvolumetm,msvolumetm,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1302_2.res b/sample_python/Res/t1302_2.res new file mode 100644 index 0000000..1ab7fe7 --- /dev/null +++ b/sample_python/Res/t1302_2.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĺкְȸ(t1302),t1302,attr,block,headtype=A; + BEGIN_DATA_MAP + t1302InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ۾,gubun,gubun,char,1; + ð,time,time,char,6; + Ǽ,cnt,cnt,int,3; + end + t1302OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,6; + end + t1302OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,6; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᰭ,chdegree,chdegree,float,8.2; + ŵü,mdvolume,mdvolume,long,12; + żü,msvolume,msvolume,long,12; + żüᷮ,revolume,revolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żüǼ,mschecnt,mschecnt,long,8; + üǼ,rechecnt,rechecnt,long,8; + ŷ,volume,volume,long,12; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + üᷮ,cvolume,cvolume,long,12; + ŵüǼ(ð),mdchecnttm,mdchecnttm,long,8; + żüǼ(ð),mschecnttm,mschecnttm,long,8; + ŵܷ,totofferrem,totofferrem,long,12; + żܷ,totbidrem,totbidrem,long,12; + ðŵüᷮ,mdvolumetm,mdvolumetm,long,12; + ðżüᷮ,msvolumetm,msvolumetm,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1305.res b/sample_python/Res/t1305.res new file mode 100644 index 0000000..e0be949 --- /dev/null +++ b/sample_python/Res/t1305.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓְ(t1305),t1305,attr,block,headtype=A; + BEGIN_DATA_MAP + t1305InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֿ,dwmcode,dwmcode,long,1; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + Ǽ,cnt,cnt,long,4; + end + t1305OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1305OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + üᰭ,chdegree,chdegree,float,6.2; + ,sojinrate,sojinrate,float,6.2; + ȸ,changerate,changerate,float,6.2; + μż,fpvolume,fpvolume,long,12; + ż,covolume,covolume,long,12; + ڵ,shcode,shcode,char,6; + ŷ(:鸸),value,value,long,12; + μż,ppvolume,ppvolume,long,12; + ð񱸺,o_sign,o_sign,char,1; + ð,o_change,o_change,long,8; + ðص,o_diff,o_diff,float,6.2; + 񱸺,h_sign,h_sign,char,1; + ,h_change,h_change,long,8; + ص,h_diff,h_diff,float,6.2; + 񱸺,l_sign,l_sign,char,1; + ,l_change,l_change,long,8; + ص,l_diff,l_diff,float,6.2; + ðѾ(:鸸),marketcap,marketcap,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1305 \ No newline at end of file diff --git a/sample_python/Res/t1305_2.res b/sample_python/Res/t1305_2.res new file mode 100644 index 0000000..e0be949 --- /dev/null +++ b/sample_python/Res/t1305_2.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓְ(t1305),t1305,attr,block,headtype=A; + BEGIN_DATA_MAP + t1305InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֿ,dwmcode,dwmcode,long,1; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + Ǽ,cnt,cnt,long,4; + end + t1305OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1305OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + üᰭ,chdegree,chdegree,float,6.2; + ,sojinrate,sojinrate,float,6.2; + ȸ,changerate,changerate,float,6.2; + μż,fpvolume,fpvolume,long,12; + ż,covolume,covolume,long,12; + ڵ,shcode,shcode,char,6; + ŷ(:鸸),value,value,long,12; + μż,ppvolume,ppvolume,long,12; + ð񱸺,o_sign,o_sign,char,1; + ð,o_change,o_change,long,8; + ðص,o_diff,o_diff,float,6.2; + 񱸺,h_sign,h_sign,char,1; + ,h_change,h_change,long,8; + ص,h_diff,h_diff,float,6.2; + 񱸺,l_sign,l_sign,char,1; + ,l_change,l_change,long,8; + ص,l_diff,l_diff,float,6.2; + ðѾ(:鸸),marketcap,marketcap,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1305 \ No newline at end of file diff --git a/sample_python/Res/t1308.res b/sample_python/Res/t1308.res new file mode 100644 index 0000000..5f109f9 --- /dev/null +++ b/sample_python/Res/t1308.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĽð뺰üȸíƮ(t1308),t1308,attr,block,headtype=A; + BEGIN_DATA_MAP + t1308InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ۽ð,starttime,starttime,char,4; + ð,endtime,endtime,char,4; + а,bun_term,bun_term,char,2; + end + t1308OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,8; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1308_2.res b/sample_python/Res/t1308_2.res new file mode 100644 index 0000000..5f109f9 --- /dev/null +++ b/sample_python/Res/t1308_2.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĽð뺰üȸíƮ(t1308),t1308,attr,block,headtype=A; + BEGIN_DATA_MAP + t1308InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ۽ð,starttime,starttime,char,4; + ð,endtime,endtime,char,4; + а,bun_term,bun_term,char,2; + end + t1308OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,8; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1310.res b/sample_python/Res/t1310.res new file mode 100644 index 0000000..2dbda1e --- /dev/null +++ b/sample_python/Res/t1310.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĴϺƽȸ(t1310),t1310,attr,block,headtype=A; + BEGIN_DATA_MAP + t1310InBlock,⺻Է,input; + begin + ϱ,daygb,daygb,char,1; + ƽ,timegb,timegb,char,1; + ڵ,shcode,shcode,char,6; + ð,endtime,endtime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t1310OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t1310OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,12; + üᰭ,chdegree,chdegree,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + üᷮ,revolume,revolume,long,12; + üǼ,rechecnt,rechecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1310_2.res b/sample_python/Res/t1310_2.res new file mode 100644 index 0000000..2dbda1e --- /dev/null +++ b/sample_python/Res/t1310_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĴϺƽȸ(t1310),t1310,attr,block,headtype=A; + BEGIN_DATA_MAP + t1310InBlock,⺻Է,input; + begin + ϱ,daygb,daygb,char,1; + ƽ,timegb,timegb,char,1; + ڵ,shcode,shcode,char,6; + ð,endtime,endtime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t1310OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t1310OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,12; + üᰭ,chdegree,chdegree,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + üᷮ,revolume,revolume,long,12; + üǼ,rechecnt,rechecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1403.res b/sample_python/Res/t1403.res new file mode 100644 index 0000000..df1b4b9 --- /dev/null +++ b/sample_python/Res/t1403.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,űԻȸ(t1403),t1403,attr,block,headtype=A; + BEGIN_DATA_MAP + t1403InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ۻ,styymm,styymm,char,6; + ,enyymm,enyymm,char,6; + IDX,idx,idx,long,4; + end + t1403OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1403OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,kmprice,kmprice,long,8; + ,date,date,char,8; + ϱذ,recprice,recprice,long,8; + ذ,kmdiff,kmdiff,float,6.2; + ,close,close,long,8; + ϵ,recdiff,recdiff,float,6.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1403_2.res b/sample_python/Res/t1403_2.res new file mode 100644 index 0000000..df1b4b9 --- /dev/null +++ b/sample_python/Res/t1403_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,űԻȸ(t1403),t1403,attr,block,headtype=A; + BEGIN_DATA_MAP + t1403InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ۻ,styymm,styymm,char,6; + ,enyymm,enyymm,char,6; + IDX,idx,idx,long,4; + end + t1403OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1403OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,kmprice,kmprice,long,8; + ,date,date,char,8; + ϱذ,recprice,recprice,long,8; + ذ,kmdiff,kmdiff,float,6.2; + ,close,close,long,8; + ϵ,recdiff,recdiff,float,6.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1404.res b/sample_python/Res/t1404.res new file mode 100644 index 0000000..3b7d597 --- /dev/null +++ b/sample_python/Res/t1404.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,/Ҽ/ȸ(t1404),t1404,attr,block,headtype=A; + BEGIN_DATA_MAP + t1404InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + üũ,jongchk,jongchk,char,1; + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1404OutBlock,,output; + begin + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1404OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,date,date,char,8; + ְ,tprice,tprice,long,8; + ϴ,tchange,tchange,long,8; + ,tdiff,tdiff,float,6.2; + ,reason,reason,char,4; + ڵ,shcode,shcode,char,6; + ,edate,edate,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1404_2.res b/sample_python/Res/t1404_2.res new file mode 100644 index 0000000..3b7d597 --- /dev/null +++ b/sample_python/Res/t1404_2.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,/Ҽ/ȸ(t1404),t1404,attr,block,headtype=A; + BEGIN_DATA_MAP + t1404InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + üũ,jongchk,jongchk,char,1; + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1404OutBlock,,output; + begin + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1404OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,date,date,char,8; + ְ,tprice,tprice,long,8; + ϴ,tchange,tchange,long,8; + ,tdiff,tdiff,float,6.2; + ,reason,reason,char,4; + ڵ,shcode,shcode,char,6; + ,edate,edate,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1405.res b/sample_python/Res/t1405.res new file mode 100644 index 0000000..7907366 --- /dev/null +++ b/sample_python/Res/t1405.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ڰ/Ÿ/Ÿȸ(t1405),t1405,attr,block,headtype=A; + BEGIN_DATA_MAP + t1405InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + üũ,jongchk,jongchk,char,1; + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1405OutBlock,,output; + begin + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1405OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,date,date,char,8; + ,edate,edate,char,8; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1405_2.res b/sample_python/Res/t1405_2.res new file mode 100644 index 0000000..7907366 --- /dev/null +++ b/sample_python/Res/t1405_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ڰ/Ÿ/Ÿȸ(t1405),t1405,attr,block,headtype=A; + BEGIN_DATA_MAP + t1405InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + üũ,jongchk,jongchk,char,1; + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1405OutBlock,,output; + begin + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1405OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,date,date,char,8; + ,edate,edate,char,8; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1410.res b/sample_python/Res/t1410.res new file mode 100644 index 0000000..8d18b79 --- /dev/null +++ b/sample_python/Res/t1410.res @@ -0,0 +1,25 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ(t1410),t1410,attr,block,headtype=A; + BEGIN_DATA_MAP + t1410InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1410OutBlock,,output; + begin + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1410OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1410_2.res b/sample_python/Res/t1410_2.res new file mode 100644 index 0000000..8d18b79 --- /dev/null +++ b/sample_python/Res/t1410_2.res @@ -0,0 +1,25 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ(t1410),t1410,attr,block,headtype=A; + BEGIN_DATA_MAP + t1410InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1410OutBlock,,output; + begin + ڵ_CTS,cts_shcode,cts_shcode,char,6; + end + t1410OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1411.res b/sample_python/Res/t1411.res new file mode 100644 index 0000000..df02ff7 --- /dev/null +++ b/sample_python/Res/t1411.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,űȸ(t1411),t1411,attr,block,headtype=A; + BEGIN_DATA_MAP + t1411InBlock,⺻Է,input; + begin + 屸,gubun,gubun,char,1; + Źſ뱸,jongchk,jongchk,char,1; + ű,jkrate,jkrate,char,1; + ڵ,shcode,shcode,char,6; + IDX,idx,idx,long,4; + end + t1411OutBlock,,output; + begin + Źű,jkrate,jkrate,long,3; + ſű,sjkrate,sjkrate,long,3; + IDX,idx,idx,long,4; + end + t1411OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + Źű,jkrate,jkrate,long,3; + ſű,sjkrate,sjkrate,long,3; + 밡,subprice,subprice,long,8; + ,recprice,recprice,long,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1411_2.res b/sample_python/Res/t1411_2.res new file mode 100644 index 0000000..df02ff7 --- /dev/null +++ b/sample_python/Res/t1411_2.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,űȸ(t1411),t1411,attr,block,headtype=A; + BEGIN_DATA_MAP + t1411InBlock,⺻Է,input; + begin + 屸,gubun,gubun,char,1; + Źſ뱸,jongchk,jongchk,char,1; + ű,jkrate,jkrate,char,1; + ڵ,shcode,shcode,char,6; + IDX,idx,idx,long,4; + end + t1411OutBlock,,output; + begin + Źű,jkrate,jkrate,long,3; + ſű,sjkrate,sjkrate,long,3; + IDX,idx,idx,long,4; + end + t1411OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + Źű,jkrate,jkrate,long,3; + ſű,sjkrate,sjkrate,long,3; + 밡,subprice,subprice,long,8; + ,recprice,recprice,long,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1422.res b/sample_python/Res/t1422.res new file mode 100644 index 0000000..5930f14 --- /dev/null +++ b/sample_python/Res/t1422.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,/(t1422),t1422,attr,block,headtype=A; + BEGIN_DATA_MAP + t1422InBlock,⺻Է,input; + begin + ȸ,qrygb,qrygb,char,1; + ,gubun,gubun,char,1; + ϱ,jnilgubun,jnilgubun,char,1; + ѱ,sign,sign,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + end + t1422OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + IDX,idx,idx,long,4; + end + t1422OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ,last,last,char,6; + ,lmtdaycnt,lmtdaycnt,long,8; + ϰŷ,jnilvolume,jnilvolume,long,12; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1422_2.res b/sample_python/Res/t1422_2.res new file mode 100644 index 0000000..5930f14 --- /dev/null +++ b/sample_python/Res/t1422_2.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,/(t1422),t1422,attr,block,headtype=A; + BEGIN_DATA_MAP + t1422InBlock,⺻Է,input; + begin + ȸ,qrygb,qrygb,char,1; + ,gubun,gubun,char,1; + ϱ,jnilgubun,jnilgubun,char,1; + ѱ,sign,sign,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + end + t1422OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + IDX,idx,idx,long,4; + end + t1422OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ,last,last,char,6; + ,lmtdaycnt,lmtdaycnt,long,8; + ϰŷ,jnilvolume,jnilvolume,long,12; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1427.res b/sample_python/Res/t1427.res new file mode 100644 index 0000000..09948f9 --- /dev/null +++ b/sample_python/Res/t1427.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,/Ѱ(t1427),t1427,attr,block,headtype=A; + BEGIN_DATA_MAP + t1427InBlock,⺻Է,input; + begin + ȸ,qrygb,qrygb,char,1; + ,gubun,gubun,char,1; + Ѱ,signgubun,signgubun,char,1; + ,diff,diff,long,3; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + ϻ,jshex,jshex,char,1; + end + t1427OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + IDX,idx,idx,long,4; + end + t1427OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + Ѱ/Ѱ,lmtprice,lmtprice,long,8; + ,rate,rate,float,12.2; + ڵ,shcode,shcode,char,6; + ϰŷ,jnilvolume,jnilvolume,long,12; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,lmtdaycnt,lmtdaycnt,long,8; + ŷ,value,value,long,12; + ðѾ,total,total,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1427 \ No newline at end of file diff --git a/sample_python/Res/t1427_2.res b/sample_python/Res/t1427_2.res new file mode 100644 index 0000000..09948f9 --- /dev/null +++ b/sample_python/Res/t1427_2.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,/Ѱ(t1427),t1427,attr,block,headtype=A; + BEGIN_DATA_MAP + t1427InBlock,⺻Է,input; + begin + ȸ,qrygb,qrygb,char,1; + ,gubun,gubun,char,1; + Ѱ,signgubun,signgubun,char,1; + ,diff,diff,long,3; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + ϻ,jshex,jshex,char,1; + end + t1427OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + IDX,idx,idx,long,4; + end + t1427OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + Ѱ/Ѱ,lmtprice,lmtprice,long,8; + ,rate,rate,float,12.2; + ڵ,shcode,shcode,char,6; + ϰŷ,jnilvolume,jnilvolume,long,12; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,lmtdaycnt,lmtdaycnt,long,8; + ŷ,value,value,long,12; + ðѾ,total,total,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1427 \ No newline at end of file diff --git a/sample_python/Res/t1441.res b/sample_python/Res/t1441.res new file mode 100644 index 0000000..922e502 --- /dev/null +++ b/sample_python/Res/t1441.res @@ -0,0 +1,44 @@ +BEGIN_FUNCTION_MAP + .Func,(t1441),t1441,attr,block,headtype=A; + BEGIN_DATA_MAP + t1441InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ϶,gubun2,gubun2,char,1; + ,gubun3,gubun3,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1441OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1441OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵܷ,offerrem1,offerrem1,long,12; + ŵȣ,offerho1,offerho1,long,12; + żȣ,bidho1,bidho1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ,updaycnt,updaycnt,long,4; + ϵ,jnildiff,jnildiff,float,6.2; + ڵ,shcode,shcode,char,6; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ,voldiff,voldiff,float,8.2; + ŷ,value,value,long,15; + ðѾ,total,total,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1441_2.res b/sample_python/Res/t1441_2.res new file mode 100644 index 0000000..922e502 --- /dev/null +++ b/sample_python/Res/t1441_2.res @@ -0,0 +1,44 @@ +BEGIN_FUNCTION_MAP + .Func,(t1441),t1441,attr,block,headtype=A; + BEGIN_DATA_MAP + t1441InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ϶,gubun2,gubun2,char,1; + ,gubun3,gubun3,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1441OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1441OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵܷ,offerrem1,offerrem1,long,12; + ŵȣ,offerho1,offerho1,long,12; + żȣ,bidho1,bidho1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ,updaycnt,updaycnt,long,4; + ϵ,jnildiff,jnildiff,float,6.2; + ڵ,shcode,shcode,char,6; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ,voldiff,voldiff,float,8.2; + ŷ,value,value,long,15; + ðѾ,total,total,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1442.res b/sample_python/Res/t1442.res new file mode 100644 index 0000000..0929cf9 --- /dev/null +++ b/sample_python/Res/t1442.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,Ű/(t1442),t1442,attr,block,headtype=A; + BEGIN_DATA_MAP + t1442InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + Ű,type1,type1,char,1; + Ⱓ,type2,type2,char,1; + ,type3,type3,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1442OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1442OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,pastprice,pastprice,long,8; + 񱸺,pastsign,pastsign,char,1; + ,pastchange,pastchange,long,8; + ,pastdiff,pastdiff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1442_2.res b/sample_python/Res/t1442_2.res new file mode 100644 index 0000000..0929cf9 --- /dev/null +++ b/sample_python/Res/t1442_2.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,Ű/(t1442),t1442,attr,block,headtype=A; + BEGIN_DATA_MAP + t1442InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + Ű,type1,type1,char,1; + Ⱓ,type2,type2,char,1; + ,type3,type3,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1442OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1442OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,pastprice,pastprice,long,8; + 񱸺,pastsign,pastsign,char,1; + ,pastchange,pastchange,long,8; + ,pastdiff,pastdiff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1444.res b/sample_python/Res/t1444.res new file mode 100644 index 0000000..e676738 --- /dev/null +++ b/sample_python/Res/t1444.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ðѾ׻(t1444),t1444,attr,block,headtype=A; + BEGIN_DATA_MAP + t1444InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + IDX,idx,idx,long,4; + end + t1444OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1444OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,vol_rate,vol_rate,float,6.2; + ðѾ,total,total,long,12; + ,rate,rate,float,6.2; + κ,for_rate,for_rate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1444_2.res b/sample_python/Res/t1444_2.res new file mode 100644 index 0000000..e676738 --- /dev/null +++ b/sample_python/Res/t1444_2.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ðѾ׻(t1444),t1444,attr,block,headtype=A; + BEGIN_DATA_MAP + t1444InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + IDX,idx,idx,long,4; + end + t1444OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1444OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,vol_rate,vol_rate,float,6.2; + ðѾ,total,total,long,12; + ,rate,rate,float,6.2; + κ,for_rate,for_rate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1449.res b/sample_python/Res/t1449.res new file mode 100644 index 0000000..59d9260 --- /dev/null +++ b/sample_python/Res/t1449.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ݴ뺰Ÿźȸ(t1449),t1449,attr,block,headtype=A; + BEGIN_DATA_MAP + t1449InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ڱ,dategb,dategb,char,1; + end + t1449OutBlock,,output; + begin + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + żüᷮ,msvolume,msvolume,long,12; + ŵüᷮ,mdvolume,mdvolume,long,12; + end + t1449OutBlock1,1,output,occurs; + begin + üᰡ,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,tickdiff,tickdiff,float,6.2; + ü,cvolume,cvolume,long,12; + ,diff,diff,float,6.2; + ŵüᷮ,mdvolume,mdvolume,long,12; + żüᷮ,msvolume,msvolume,long,12; + ż,msdiff,msdiff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1449_2.res b/sample_python/Res/t1449_2.res new file mode 100644 index 0000000..59d9260 --- /dev/null +++ b/sample_python/Res/t1449_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ݴ뺰Ÿźȸ(t1449),t1449,attr,block,headtype=A; + BEGIN_DATA_MAP + t1449InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ڱ,dategb,dategb,char,1; + end + t1449OutBlock,,output; + begin + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + żüᷮ,msvolume,msvolume,long,12; + ŵüᷮ,mdvolume,mdvolume,long,12; + end + t1449OutBlock1,1,output,occurs; + begin + üᰡ,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,tickdiff,tickdiff,float,6.2; + ü,cvolume,cvolume,long,12; + ,diff,diff,float,6.2; + ŵüᷮ,mdvolume,mdvolume,long,12; + żüᷮ,msvolume,msvolume,long,12; + ż,msdiff,msdiff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1452.res b/sample_python/Res/t1452.res new file mode 100644 index 0000000..d214b97 --- /dev/null +++ b/sample_python/Res/t1452.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ŷ(t1452),t1452,attr,block,headtype=A; + BEGIN_DATA_MAP + t1452InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ϱ,jnilgubun,jnilgubun,char,1; + ۵,sdiff,sdiff,long,3; + ,ediff,ediff,long,3; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + end + t1452OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1452OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ȸ,vol,vol,float,6.2; + ϰŷ,jnilvolume,jnilvolume,long,12; + Ϻ,bef_diff,bef_diff,float,10.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1452_2.res b/sample_python/Res/t1452_2.res new file mode 100644 index 0000000..d214b97 --- /dev/null +++ b/sample_python/Res/t1452_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ŷ(t1452),t1452,attr,block,headtype=A; + BEGIN_DATA_MAP + t1452InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ϱ,jnilgubun,jnilgubun,char,1; + ۵,sdiff,sdiff,long,3; + ,ediff,ediff,long,3; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + end + t1452OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1452OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ȸ,vol,vol,float,6.2; + ϰŷ,jnilvolume,jnilvolume,long,12; + Ϻ,bef_diff,bef_diff,float,10.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1463.res b/sample_python/Res/t1463.res new file mode 100644 index 0000000..e33d7be --- /dev/null +++ b/sample_python/Res/t1463.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ŷݻ(t1463),t1463,attr,block,headtype=A; + BEGIN_DATA_MAP + t1463InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ϱ,jnilgubun,jnilgubun,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1463OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1463OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ϰŷ,jnilvalue,jnilvalue,long,12; + Ϻ,bef_diff,bef_diff,float,10.2; + ڵ,shcode,shcode,char,6; + filler,filler,filler,char,1; + ϰŷ,jnilvolume,jnilvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1463_2.res b/sample_python/Res/t1463_2.res new file mode 100644 index 0000000..e33d7be --- /dev/null +++ b/sample_python/Res/t1463_2.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ŷݻ(t1463),t1463,attr,block,headtype=A; + BEGIN_DATA_MAP + t1463InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ϱ,jnilgubun,jnilgubun,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1463OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1463OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ϰŷ,jnilvalue,jnilvalue,long,12; + Ϻ,bef_diff,bef_diff,float,10.2; + ڵ,shcode,shcode,char,6; + filler,filler,filler,char,1; + ϰŷ,jnilvolume,jnilvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1466.res b/sample_python/Res/t1466.res new file mode 100644 index 0000000..4490e33 --- /dev/null +++ b/sample_python/Res/t1466.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ϵðŷ(t1466),t1466,attr,block,headtype=A; + BEGIN_DATA_MAP + t1466InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ϰŷ,type1,type1,char,1; + ŷ޵,type2,type2,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1466OutBlock,,output; + begin + ú,hhmm,hhmm,char,5; + IDX,idx,idx,long,4; + end + t1466OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ϰŷ,stdvolume,stdvolume,long,12; + ϰŷ,volume,volume,long,12; + ŷ޵,voldiff,voldiff,float,8.2; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1466_2.res b/sample_python/Res/t1466_2.res new file mode 100644 index 0000000..4490e33 --- /dev/null +++ b/sample_python/Res/t1466_2.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ϵðŷ(t1466),t1466,attr,block,headtype=A; + BEGIN_DATA_MAP + t1466InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ϰŷ,type1,type1,char,1; + ŷ޵,type2,type2,char,1; + ,jc_num,jc_num,long,12; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + IDX,idx,idx,long,4; + 2,jc_num2,jc_num2,long,12; + end + t1466OutBlock,,output; + begin + ú,hhmm,hhmm,char,5; + IDX,idx,idx,long,4; + end + t1466OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ϰŷ,stdvolume,stdvolume,long,12; + ϰŷ,volume,volume,long,12; + ŷ޵,voldiff,voldiff,float,8.2; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1471.res b/sample_python/Res/t1471.res new file mode 100644 index 0000000..b54afee --- /dev/null +++ b/sample_python/Res/t1471.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰ȣܷ(t1471),t1471,attr,block,headtype=A; + BEGIN_DATA_MAP + t1471InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + б,gubun,gubun,char,2; + ð,time,time,char,6; + ڷᰳ,cnt,cnt,char,3; + end + t1471OutBlock,,output; + begin + ðCTS,time,time,char,6; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + end + t1471OutBlock1,1,output,occurs; + begin + üð,time,time,char,6; + ޵,preoffercha1,preoffercha1,long,12; + ŵ켱ܷ,offerrem1,offerrem1,long,12; + ŵ켱ȣ,offerho1,offerho1,long,8; + ż켱ȣ,bidho1,bidho1,long,8; + ż켱ܷ,bidrem1,bidrem1,long,12; + ż,prebidcha1,prebidcha1,long,12; + Ѹŵ,totofferrem,totofferrem,long,12; + Ѹż,totbidrem,totbidrem,long,12; + ż,totsun,totsun,long,12; + ż,msrate,msrate,float,6.2; + ,close,close,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1471 \ No newline at end of file diff --git a/sample_python/Res/t1471_2.res b/sample_python/Res/t1471_2.res new file mode 100644 index 0000000..b54afee --- /dev/null +++ b/sample_python/Res/t1471_2.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰ȣܷ(t1471),t1471,attr,block,headtype=A; + BEGIN_DATA_MAP + t1471InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + б,gubun,gubun,char,2; + ð,time,time,char,6; + ڷᰳ,cnt,cnt,char,3; + end + t1471OutBlock,,output; + begin + ðCTS,time,time,char,6; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + end + t1471OutBlock1,1,output,occurs; + begin + üð,time,time,char,6; + ޵,preoffercha1,preoffercha1,long,12; + ŵ켱ܷ,offerrem1,offerrem1,long,12; + ŵ켱ȣ,offerho1,offerho1,long,8; + ż켱ȣ,bidho1,bidho1,long,8; + ż켱ܷ,bidrem1,bidrem1,long,12; + ż,prebidcha1,prebidcha1,long,12; + Ѹŵ,totofferrem,totofferrem,long,12; + Ѹż,totbidrem,totbidrem,long,12; + ż,totsun,totsun,long,12; + ż,msrate,msrate,float,6.2; + ,close,close,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1471 \ No newline at end of file diff --git a/sample_python/Res/t1475.res b/sample_python/Res/t1475.res new file mode 100644 index 0000000..8737c83 --- /dev/null +++ b/sample_python/Res/t1475.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,üᰭ(t1475),t1475,attr,block,headtype=A; + BEGIN_DATA_MAP + t1475InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ϶,vptype,vptype,char,1; + Ͱ,datacnt,datacnt,long,4; + ,date,date,long,8; + ؽð,time,time,long,6; + ũī,rankcnt,rankcnt,long,3; + ȸ,gubun,gubun,char,1; + end + t1475OutBlock,,output; + begin + ,date,date,long,8; + ؽð,time,time,long,6; + ũī,rankcnt,rankcnt,long,3; + end + t1475OutBlock1,1,output,occurs; + begin + ,datetime,datetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + VP,todayvp,todayvp,float,8.2; + 5MAVP,ma5vp,ma5vp,float,8.2; + 20MAVP,ma20vp,ma20vp,float,8.2; + 60MAVP,ma60vp,ma60vp,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1475_2.res b/sample_python/Res/t1475_2.res new file mode 100644 index 0000000..8737c83 --- /dev/null +++ b/sample_python/Res/t1475_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,üᰭ(t1475),t1475,attr,block,headtype=A; + BEGIN_DATA_MAP + t1475InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ϶,vptype,vptype,char,1; + Ͱ,datacnt,datacnt,long,4; + ,date,date,long,8; + ؽð,time,time,long,6; + ũī,rankcnt,rankcnt,long,3; + ȸ,gubun,gubun,char,1; + end + t1475OutBlock,,output; + begin + ,date,date,long,8; + ؽð,time,time,long,6; + ũī,rankcnt,rankcnt,long,3; + end + t1475OutBlock1,1,output,occurs; + begin + ,datetime,datetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + VP,todayvp,todayvp,float,8.2; + 5MAVP,ma5vp,ma5vp,float,8.2; + 20MAVP,ma20vp,ma20vp,float,8.2; + 60MAVP,ma60vp,ma60vp,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1481.res b/sample_python/Res/t1481.res new file mode 100644 index 0000000..cc2404c --- /dev/null +++ b/sample_python/Res/t1481.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ðܵ(t1481),t1481,attr,block,headtype=A; + BEGIN_DATA_MAP + t1481InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ϶,gubun2,gubun2,char,1; + üũ,jongchk,jongchk,char,1; + ŷ,volume,volume,char,1; + IDX,idx,idx,long,4; + end + t1481OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1481OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ŵȣ,offerho1,offerho1,long,12; + żȣ,bidho1,bidho1,long,12; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1481_2.res b/sample_python/Res/t1481_2.res new file mode 100644 index 0000000..cc2404c --- /dev/null +++ b/sample_python/Res/t1481_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ðܵ(t1481),t1481,attr,block,headtype=A; + BEGIN_DATA_MAP + t1481InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ϶,gubun2,gubun2,char,1; + üũ,jongchk,jongchk,char,1; + ŷ,volume,volume,char,1; + IDX,idx,idx,long,4; + end + t1481OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1481OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ŵȣ,offerho1,offerho1,long,12; + żȣ,bidho1,bidho1,long,12; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1482.res b/sample_python/Res/t1482.res new file mode 100644 index 0000000..5921c6d --- /dev/null +++ b/sample_python/Res/t1482.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ðܰŷ(t1482),t1482,attr,block,headtype=A; + BEGIN_DATA_MAP + t1482InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ŷ,jongchk,jongchk,char,1; + IDX,idx,idx,long,4; + end + t1482OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1482OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ȸ,vol,vol,float,6.2; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1482_2.res b/sample_python/Res/t1482_2.res new file mode 100644 index 0000000..5921c6d --- /dev/null +++ b/sample_python/Res/t1482_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ðܰŷ(t1482),t1482,attr,block,headtype=A; + BEGIN_DATA_MAP + t1482InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ŷ,jongchk,jongchk,char,1; + IDX,idx,idx,long,4; + end + t1482OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1482OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ȸ,vol,vol,float,6.2; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1485.res b/sample_python/Res/t1485.res new file mode 100644 index 0000000..20bd1eb --- /dev/null +++ b/sample_python/Res/t1485.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,(t1485),t1485,attr,block,headtype=A; + BEGIN_DATA_MAP + t1485InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + ȸ,gubun,gubun,char,1; + end + t1485OutBlock,,output; + begin + ,pricejisu,pricejisu,float,10.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,10.2; + ŷ,volume,volume,long,12; + ,yhighjo,yhighjo,long,4; + ,yupjo,yupjo,long,4; + ,yunchgjo,yunchgjo,long,4; + ϶,ylowjo,ylowjo,long,4; + ,ydownjo,ydownjo,long,4; + ŷ,ytrajo,ytrajo,long,4; + end + t1485OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,6; + ,jisu,jisu,float,10.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,10.2; + üᷮ,volume,volume,long,12; + üᷮ,volcha,volcha,long,12; + ,diff,diff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1485_2.res b/sample_python/Res/t1485_2.res new file mode 100644 index 0000000..20bd1eb --- /dev/null +++ b/sample_python/Res/t1485_2.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,(t1485),t1485,attr,block,headtype=A; + BEGIN_DATA_MAP + t1485InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + ȸ,gubun,gubun,char,1; + end + t1485OutBlock,,output; + begin + ,pricejisu,pricejisu,float,10.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,10.2; + ŷ,volume,volume,long,12; + ,yhighjo,yhighjo,long,4; + ,yupjo,yupjo,long,4; + ,yunchgjo,yunchgjo,long,4; + ϶,ylowjo,ylowjo,long,4; + ,ydownjo,ydownjo,long,4; + ŷ,ytrajo,ytrajo,long,4; + end + t1485OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,6; + ,jisu,jisu,float,10.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,10.2; + üᷮ,volume,volume,long,12; + üᷮ,volcha,volcha,long,12; + ,diff,diff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1486.res b/sample_python/Res/t1486.res new file mode 100644 index 0000000..b7799af --- /dev/null +++ b/sample_python/Res/t1486.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ðüᰡ(t1486),t1486,attr,block,headtype=A; + BEGIN_DATA_MAP + t1486InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ðCTS,cts_time,cts_time,char,10; + ȸǼ,cnt,cnt,int,4; + end + t1486OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t1486OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + üᰡ,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,cvolume,cvolume,long,12; + ŵȣ,offerho1,offerho1,long,8; + żȣ,bidho1,bidho1,long,8; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1486_2.res b/sample_python/Res/t1486_2.res new file mode 100644 index 0000000..b7799af --- /dev/null +++ b/sample_python/Res/t1486_2.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ðüᰡ(t1486),t1486,attr,block,headtype=A; + BEGIN_DATA_MAP + t1486InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ðCTS,cts_time,cts_time,char,10; + ȸǼ,cnt,cnt,int,4; + end + t1486OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t1486OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + üᰡ,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,cvolume,cvolume,long,12; + ŵȣ,offerho1,offerho1,long,8; + żȣ,bidho1,bidho1,long,8; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1488.res b/sample_python/Res/t1488.res new file mode 100644 index 0000000..ff7a71c --- /dev/null +++ b/sample_python/Res/t1488.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,üᰡȸ(t1488),t1488,attr,block,headtype=A; + BEGIN_DATA_MAP + t1488InBlock,⺻Է,input; + begin + ŷұ,gubun,gubun,char,1; + ϶,sign,sign,char,1; + 屸,jgubun,jgubun,char,1; + üũ,jongchk,jongchk,char,12; + IDX,idx,idx,long,4; + ŷ,volume,volume,char,1; + ü۰,yesprice,yesprice,long,8; + üᰡ,yeeprice,yeeprice,long,8; + üᷮ,yevolume,yevolume,long,12; + end + t1488OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1488OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵܷ,offerrem,offerrem,long,12; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + żܷ,bidrem,bidrem,long,12; + ϼ,cnt,cnt,long,4; + ڵ,shcode,shcode,char,6; + ű,jkrate,jkrate,char,3; + ϰŷ,jnilvolume,jnilvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1488_2.res b/sample_python/Res/t1488_2.res new file mode 100644 index 0000000..ff7a71c --- /dev/null +++ b/sample_python/Res/t1488_2.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,üᰡȸ(t1488),t1488,attr,block,headtype=A; + BEGIN_DATA_MAP + t1488InBlock,⺻Է,input; + begin + ŷұ,gubun,gubun,char,1; + ϶,sign,sign,char,1; + 屸,jgubun,jgubun,char,1; + üũ,jongchk,jongchk,char,12; + IDX,idx,idx,long,4; + ŷ,volume,volume,char,1; + ü۰,yesprice,yesprice,long,8; + üᰡ,yeeprice,yeeprice,long,8; + üᷮ,yevolume,yevolume,long,12; + end + t1488OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1488OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵܷ,offerrem,offerrem,long,12; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + żܷ,bidrem,bidrem,long,12; + ϼ,cnt,cnt,long,4; + ڵ,shcode,shcode,char,6; + ű,jkrate,jkrate,char,3; + ϰŷ,jnilvolume,jnilvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1489.res b/sample_python/Res/t1489.res new file mode 100644 index 0000000..9442095 --- /dev/null +++ b/sample_python/Res/t1489.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,üᷮȸ(t1489),t1489,attr,block,headtype=A; + BEGIN_DATA_MAP + t1489InBlock,⺻Է,input; + begin + ŷұ,gubun,gubun,char,1; + 屸,jgubun,jgubun,char,1; + üũ,jongchk,jongchk,char,12; + IDX,idx,idx,long,4; + ü۰,yesprice,yesprice,long,8; + üᰡ,yeeprice,yeeprice,long,8; + üᷮ,yevolume,yevolume,long,12; + end + t1489OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1489OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + ڵ,shcode,shcode,char,6; + ϰŷ,jnilvolume,jnilvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1489_2.res b/sample_python/Res/t1489_2.res new file mode 100644 index 0000000..9442095 --- /dev/null +++ b/sample_python/Res/t1489_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,üᷮȸ(t1489),t1489,attr,block,headtype=A; + BEGIN_DATA_MAP + t1489InBlock,⺻Է,input; + begin + ŷұ,gubun,gubun,char,1; + 屸,jgubun,jgubun,char,1; + üũ,jongchk,jongchk,char,12; + IDX,idx,idx,long,4; + ü۰,yesprice,yesprice,long,8; + üᰡ,yeeprice,yeeprice,long,8; + üᷮ,yevolume,yevolume,long,12; + end + t1489OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1489OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + ڵ,shcode,shcode,char,6; + ϰŷ,jnilvolume,jnilvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1492.res b/sample_python/Res/t1492.res new file mode 100644 index 0000000..dff6826 --- /dev/null +++ b/sample_python/Res/t1492.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,ϰ(t1492),t1492,attr,block,headtype=A; + BEGIN_DATA_MAP + t1492InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ϶,gubun2,gubun2,char,1; + üũ,jongchk,jongchk,char,1; + ŷ,volume,volume,char,1; + IDX,idx,idx,long,4; + end + t1492OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1492OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + üᰡ,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,yevolume,yevolume,long,12; + ŷ,volume,volume,long,12; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ŵȣ,offerho1,offerho1,long,12; + żȣ,bidho1,bidho1,long,12; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1492_2.res b/sample_python/Res/t1492_2.res new file mode 100644 index 0000000..dff6826 --- /dev/null +++ b/sample_python/Res/t1492_2.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,ϰ(t1492),t1492,attr,block,headtype=A; + BEGIN_DATA_MAP + t1492InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ϶,gubun2,gubun2,char,1; + üũ,jongchk,jongchk,char,1; + ŷ,volume,volume,char,1; + IDX,idx,idx,long,4; + end + t1492OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1492OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + üᰡ,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,yevolume,yevolume,long,12; + ŷ,volume,volume,long,12; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ŵȣ,offerho1,offerho1,long,12; + żȣ,bidho1,bidho1,long,12; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1511.res b/sample_python/Res/t1511.res new file mode 100644 index 0000000..7bcf8b1 --- /dev/null +++ b/sample_python/Res/t1511.res @@ -0,0 +1,78 @@ +BEGIN_FUNCTION_MAP + .Func,簡(t1511),t1511,attr,block,headtype=A; + BEGIN_DATA_MAP + t1511InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + end + t1511OutBlock,⺻,output; + begin + ,gubun,gubun,char,1; + ,hname,hname,char,20; + ,pricejisu,pricejisu,float,7.2; + ,jniljisu,jniljisu,float,7.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,7.2; + ,diffjisu,diffjisu,float,6.2; + ϰŷ,jnilvolume,jnilvolume,long,12; + ϰŷ,volume,volume,long,12; + ŷϴ,volumechange,volumechange,long,12; + ŷ,volumerate,volumerate,float,6.2; + ϰŷ,jnilvalue,jnilvalue,long,12; + ϰŷ,value,value,long,12; + ŷϴ,valuechange,valuechange,long,12; + ŷݺ,valuerate,valuerate,float,6.2; + ð,openjisu,openjisu,float,7.2; + ð,opendiff,opendiff,float,6.2; + ðð,opentime,opentime,char,6; + ,highjisu,highjisu,float,7.2; + ,highdiff,highdiff,float,6.2; + ð,hightime,hightime,char,6; + ,lowjisu,lowjisu,float,7.2; + ,lowdiff,lowdiff,float,6.2; + ð,lowtime,lowtime,char,6; + 52ְ,whjisu,whjisu,float,7.2; + 52ְ簡,whchange,whchange,float,7.2; + 52ְ,whjday,whjday,char,8; + 52,wljisu,wljisu,float,7.2; + 52簡,wlchange,wlchange,float,7.2; + 52,wljday,wljday,char,8; + ְ,yhjisu,yhjisu,float,7.2; + ְ簡,yhchange,yhchange,float,7.2; + ְ,yhjday,yhjday,char,8; + ,yljisu,yljisu,float,7.2; + 簡,ylchange,ylchange,float,7.2; + ,yljday,yljday,char,8; + ù°ڵ,firstjcode,firstjcode,char,3; + ù°,firstjname,firstjname,char,20; + ù°,firstjisu,firstjisu,float,7.2; + ù°񱸺,firsign,firsign,char,1; + ù°ϴ,firchange,firchange,float,7.2; + ù°,firdiff,firdiff,float,6.2; + ι°ڵ,secondjcode,secondjcode,char,3; + ι°,secondjname,secondjname,char,20; + ι°,secondjisu,secondjisu,float,7.2; + ι°񱸺,secsign,secsign,char,1; + ι°ϴ,secchange,secchange,float,7.2; + ι°,secdiff,secdiff,float,6.2; + °ڵ,thirdjcode,thirdjcode,char,3; + °,thirdjname,thirdjname,char,20; + °,thirdjisu,thirdjisu,float,7.2; + °񱸺,thrsign,thrsign,char,1; + °ϴ,thrchange,thrchange,float,7.2; + °,thrdiff,thrdiff,float,6.2; + ׹°ڵ,fourthjcode,fourthjcode,char,3; + ׹°,fourthjname,fourthjname,char,20; + ׹°,fourthjisu,fourthjisu,float,7.2; + ׹°񱸺,forsign,forsign,char,1; + ׹°ϴ,forchange,forchange,float,7.2; + ׹°,fordiff,fordiff,float,6.2; + ,highjo,highjo,long,4; + ,upjo,upjo,long,4; + ,unchgjo,unchgjo,long,4; + ϶,lowjo,lowjo,long,4; + ,downjo,downjo,long,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1511_2.res b/sample_python/Res/t1511_2.res new file mode 100644 index 0000000..7bcf8b1 --- /dev/null +++ b/sample_python/Res/t1511_2.res @@ -0,0 +1,78 @@ +BEGIN_FUNCTION_MAP + .Func,簡(t1511),t1511,attr,block,headtype=A; + BEGIN_DATA_MAP + t1511InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + end + t1511OutBlock,⺻,output; + begin + ,gubun,gubun,char,1; + ,hname,hname,char,20; + ,pricejisu,pricejisu,float,7.2; + ,jniljisu,jniljisu,float,7.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,7.2; + ,diffjisu,diffjisu,float,6.2; + ϰŷ,jnilvolume,jnilvolume,long,12; + ϰŷ,volume,volume,long,12; + ŷϴ,volumechange,volumechange,long,12; + ŷ,volumerate,volumerate,float,6.2; + ϰŷ,jnilvalue,jnilvalue,long,12; + ϰŷ,value,value,long,12; + ŷϴ,valuechange,valuechange,long,12; + ŷݺ,valuerate,valuerate,float,6.2; + ð,openjisu,openjisu,float,7.2; + ð,opendiff,opendiff,float,6.2; + ðð,opentime,opentime,char,6; + ,highjisu,highjisu,float,7.2; + ,highdiff,highdiff,float,6.2; + ð,hightime,hightime,char,6; + ,lowjisu,lowjisu,float,7.2; + ,lowdiff,lowdiff,float,6.2; + ð,lowtime,lowtime,char,6; + 52ְ,whjisu,whjisu,float,7.2; + 52ְ簡,whchange,whchange,float,7.2; + 52ְ,whjday,whjday,char,8; + 52,wljisu,wljisu,float,7.2; + 52簡,wlchange,wlchange,float,7.2; + 52,wljday,wljday,char,8; + ְ,yhjisu,yhjisu,float,7.2; + ְ簡,yhchange,yhchange,float,7.2; + ְ,yhjday,yhjday,char,8; + ,yljisu,yljisu,float,7.2; + 簡,ylchange,ylchange,float,7.2; + ,yljday,yljday,char,8; + ù°ڵ,firstjcode,firstjcode,char,3; + ù°,firstjname,firstjname,char,20; + ù°,firstjisu,firstjisu,float,7.2; + ù°񱸺,firsign,firsign,char,1; + ù°ϴ,firchange,firchange,float,7.2; + ù°,firdiff,firdiff,float,6.2; + ι°ڵ,secondjcode,secondjcode,char,3; + ι°,secondjname,secondjname,char,20; + ι°,secondjisu,secondjisu,float,7.2; + ι°񱸺,secsign,secsign,char,1; + ι°ϴ,secchange,secchange,float,7.2; + ι°,secdiff,secdiff,float,6.2; + °ڵ,thirdjcode,thirdjcode,char,3; + °,thirdjname,thirdjname,char,20; + °,thirdjisu,thirdjisu,float,7.2; + °񱸺,thrsign,thrsign,char,1; + °ϴ,thrchange,thrchange,float,7.2; + °,thrdiff,thrdiff,float,6.2; + ׹°ڵ,fourthjcode,fourthjcode,char,3; + ׹°,fourthjname,fourthjname,char,20; + ׹°,fourthjisu,fourthjisu,float,7.2; + ׹°񱸺,forsign,forsign,char,1; + ׹°ϴ,forchange,forchange,float,7.2; + ׹°,fordiff,fordiff,float,6.2; + ,highjo,highjo,long,4; + ,upjo,upjo,long,4; + ,unchgjo,unchgjo,long,4; + ϶,lowjo,lowjo,long,4; + ,downjo,downjo,long,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1514.res b/sample_python/Res/t1514.res new file mode 100644 index 0000000..1d97b91 --- /dev/null +++ b/sample_python/Res/t1514.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓ(t1514),t1514,attr,block,headtype=A; + BEGIN_DATA_MAP + t1514InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + 1,gubun1,gubun1,char,1; + 2,gubun2,gubun2,char,1; + CTS_,cts_date,cts_date,char,8; + ȸǼ,cnt,cnt,int,4; + ߱,rate_gbn,rate_gbn,char,1; + end + t1514OutBlock,⺻,output; + begin + CTS_,cts_date,cts_date,char,8; + end + t1514OutBlock1,⺻1,output,occurs; + begin + ,date,date,char,8; + ,jisu,jisu,float,12.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,7.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,12.2; + ŷ1,value1,value1,long,12; + ,high,high,long,4; + ,unchg,unchg,long,4; + ϶,low,low,long,4; + ,uprate,uprate,float,6.2; + μż,frgsvolume,frgsvolume,long,8; + ð,openjisu,openjisu,float,12.2; + ,highjisu,highjisu,float,12.2; + ,lowjisu,lowjisu,float,12.2; + ŷ2,value2,value2,long,12; + ,up,up,long,4; + ,down,down,long,4; + ,totjo,totjo,long,4; + ż,orgsvolume,orgsvolume,long,8; + ڵ,upcode,upcode,char,3; + ŷ,rate,rate,float,7.2; + ͷ,divrate,divrate,float,7.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1514_2.res b/sample_python/Res/t1514_2.res new file mode 100644 index 0000000..1d97b91 --- /dev/null +++ b/sample_python/Res/t1514_2.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓ(t1514),t1514,attr,block,headtype=A; + BEGIN_DATA_MAP + t1514InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + 1,gubun1,gubun1,char,1; + 2,gubun2,gubun2,char,1; + CTS_,cts_date,cts_date,char,8; + ȸǼ,cnt,cnt,int,4; + ߱,rate_gbn,rate_gbn,char,1; + end + t1514OutBlock,⺻,output; + begin + CTS_,cts_date,cts_date,char,8; + end + t1514OutBlock1,⺻1,output,occurs; + begin + ,date,date,char,8; + ,jisu,jisu,float,12.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,7.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,12.2; + ŷ1,value1,value1,long,12; + ,high,high,long,4; + ,unchg,unchg,long,4; + ϶,low,low,long,4; + ,uprate,uprate,float,6.2; + μż,frgsvolume,frgsvolume,long,8; + ð,openjisu,openjisu,float,12.2; + ,highjisu,highjisu,float,12.2; + ,lowjisu,lowjisu,float,12.2; + ŷ2,value2,value2,long,12; + ,up,up,long,4; + ,down,down,long,4; + ,totjo,totjo,long,4; + ż,orgsvolume,orgsvolume,long,8; + ڵ,upcode,upcode,char,3; + ŷ,rate,rate,float,7.2; + ͷ,divrate,divrate,float,7.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1516.res b/sample_python/Res/t1516.res new file mode 100644 index 0000000..cc1fe26 --- /dev/null +++ b/sample_python/Res/t1516.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ü(t1516),t1516,attr,block,headtype=A; + BEGIN_DATA_MAP + t1516InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + ,gubun,gubun,char,1; + ڵ,shcode,shcode,char,6; + end + t1516OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + ,pricejisu,pricejisu,float,12.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,7.2; + ,jdiff,jdiff,float,6.2; + end + t1516OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,sojinrate,sojinrate,float,6.2; + Ÿ,beta,beta,float,6.5; + PER,perx,perx,float,8.2; + μż,frgsvolume,frgsvolume,long,12; + ż,orgsvolume,orgsvolume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ڵ,shcode,shcode,char,6; + ðѾ,total,total,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1516_2.res b/sample_python/Res/t1516_2.res new file mode 100644 index 0000000..cc1fe26 --- /dev/null +++ b/sample_python/Res/t1516_2.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ü(t1516),t1516,attr,block,headtype=A; + BEGIN_DATA_MAP + t1516InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + ,gubun,gubun,char,1; + ڵ,shcode,shcode,char,6; + end + t1516OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + ,pricejisu,pricejisu,float,12.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,7.2; + ,jdiff,jdiff,float,6.2; + end + t1516OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,sojinrate,sojinrate,float,6.2; + Ÿ,beta,beta,float,6.5; + PER,perx,perx,float,8.2; + μż,frgsvolume,frgsvolume,long,12; + ż,orgsvolume,orgsvolume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ڵ,shcode,shcode,char,6; + ðѾ,total,total,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1531.res b/sample_python/Res/t1531.res new file mode 100644 index 0000000..2ad9936 --- /dev/null +++ b/sample_python/Res/t1531.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP + .Func,׸(t1531),t1531,attr,block,headtype=A; + BEGIN_DATA_MAP + t1531InBlock,⺻Է,input; + begin + ׸,tmname,tmname,char,36; + ׸ڵ,tmcode,tmcode,char,4; + end + t1531OutBlock,,output,occurs; + begin + ׸,tmname,tmname,char,36; + յ,avgdiff,avgdiff,float,6.2; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1531_2.res b/sample_python/Res/t1531_2.res new file mode 100644 index 0000000..2ad9936 --- /dev/null +++ b/sample_python/Res/t1531_2.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP + .Func,׸(t1531),t1531,attr,block,headtype=A; + BEGIN_DATA_MAP + t1531InBlock,⺻Է,input; + begin + ׸,tmname,tmname,char,36; + ׸ڵ,tmcode,tmcode,char,4; + end + t1531OutBlock,,output,occurs; + begin + ׸,tmname,tmname,char,36; + յ,avgdiff,avgdiff,float,6.2; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1532.res b/sample_python/Res/t1532.res new file mode 100644 index 0000000..be71da9 --- /dev/null +++ b/sample_python/Res/t1532.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,׸(t1532),t1532,attr,block,headtype=A; + BEGIN_DATA_MAP + t1532InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1532OutBlock,,output,occurs; + begin + ׸,tmname,tmname,char,36; + յ,avgdiff,avgdiff,float,6.2; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1532_2.res b/sample_python/Res/t1532_2.res new file mode 100644 index 0000000..be71da9 --- /dev/null +++ b/sample_python/Res/t1532_2.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,׸(t1532),t1532,attr,block,headtype=A; + BEGIN_DATA_MAP + t1532InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1532OutBlock,,output,occurs; + begin + ׸,tmname,tmname,char,36; + յ,avgdiff,avgdiff,float,6.2; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1533.res b/sample_python/Res/t1533.res new file mode 100644 index 0000000..c9180f9 --- /dev/null +++ b/sample_python/Res/t1533.res @@ -0,0 +1,27 @@ +BEGIN_FUNCTION_MAP + .Func,Ư׸(t1533),t1533,attr,block,headtype=A; + BEGIN_DATA_MAP + t1533InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ,chgdate,chgdate,long,2; + end + t1533OutBlock,⺻,output; + begin + ,bdate,bdate,char,8; + end + t1533OutBlock1,1,output,occurs; + begin + ׸,tmname,tmname,char,36; + ü,totcnt,totcnt,long,4; + ,upcnt,upcnt,long,4; + ϶,dncnt,dncnt,long,4; + º,uprate,uprate,float,6.2; + ŷ,diff_vol,diff_vol,float,10.2; + յ,avgdiff,avgdiff,float,6.2; + ,chgdiff,chgdiff,float,6.2; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1533_2.res b/sample_python/Res/t1533_2.res new file mode 100644 index 0000000..c9180f9 --- /dev/null +++ b/sample_python/Res/t1533_2.res @@ -0,0 +1,27 @@ +BEGIN_FUNCTION_MAP + .Func,Ư׸(t1533),t1533,attr,block,headtype=A; + BEGIN_DATA_MAP + t1533InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ,chgdate,chgdate,long,2; + end + t1533OutBlock,⺻,output; + begin + ,bdate,bdate,char,8; + end + t1533OutBlock1,1,output,occurs; + begin + ׸,tmname,tmname,char,36; + ü,totcnt,totcnt,long,4; + ,upcnt,upcnt,long,4; + ϶,dncnt,dncnt,long,4; + º,uprate,uprate,float,6.2; + ŷ,diff_vol,diff_vol,float,10.2; + յ,avgdiff,avgdiff,float,6.2; + ,chgdiff,chgdiff,float,6.2; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1537.res b/sample_python/Res/t1537.res new file mode 100644 index 0000000..877436e --- /dev/null +++ b/sample_python/Res/t1537.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,׸񺰽üȸ(t1537),t1537,attr,block,headtype=A; + BEGIN_DATA_MAP + t1537InBlock,⺻Է,input; + begin + ׸ڵ,tmcode,tmcode,char,4; + end + t1537OutBlock,,output; + begin + ,upcnt,upcnt,long,4; + ׸,tmcnt,tmcnt,long,4; + ,uprate,uprate,long,4; + ׸,tmname,tmname,char,36; + end + t1537OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ϵð,jniltime,jniltime,float,9.2; + ڵ,shcode,shcode,char,6; + üᰡ,yeprice,yeprice,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ(:鸸),value,value,long,12; + ðѾ(:鸸),marketcap,marketcap,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1537_2.res b/sample_python/Res/t1537_2.res new file mode 100644 index 0000000..877436e --- /dev/null +++ b/sample_python/Res/t1537_2.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,׸񺰽üȸ(t1537),t1537,attr,block,headtype=A; + BEGIN_DATA_MAP + t1537InBlock,⺻Է,input; + begin + ׸ڵ,tmcode,tmcode,char,4; + end + t1537OutBlock,,output; + begin + ,upcnt,upcnt,long,4; + ׸,tmcnt,tmcnt,long,4; + ,uprate,uprate,long,4; + ׸,tmname,tmname,char,36; + end + t1537OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ϵð,jniltime,jniltime,float,9.2; + ڵ,shcode,shcode,char,6; + üᰡ,yeprice,yeprice,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ(:鸸),value,value,long,12; + ðѾ(:鸸),marketcap,marketcap,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1601.res b/sample_python/Res/t1601.res new file mode 100644 index 0000000..e1a4663 --- /dev/null +++ b/sample_python/Res/t1601.res @@ -0,0 +1,391 @@ +BEGIN_FUNCTION_MAP + .Func,ں(t1601),t1601,attr,block,headtype=A; + BEGIN_DATA_MAP + t1601InBlock,⺻Է,input; + begin + ֽıݾ׼1,gubun1,gubun1,char,1; + ɼDZݾ׼2,gubun2,gubun2,char,1; + ݾ״,gubun3,gubun3,char,1; + ݾ׼4,gubun4,gubun4,char,1; + end + t1601OutBlock1,⺻1,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock2,⺻2,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock3,⺻3,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock4,⺻4,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock5,⺻5,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock6,⺻6,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1601_2.res b/sample_python/Res/t1601_2.res new file mode 100644 index 0000000..e1a4663 --- /dev/null +++ b/sample_python/Res/t1601_2.res @@ -0,0 +1,391 @@ +BEGIN_FUNCTION_MAP + .Func,ں(t1601),t1601,attr,block,headtype=A; + BEGIN_DATA_MAP + t1601InBlock,⺻Է,input; + begin + ֽıݾ׼1,gubun1,gubun1,char,1; + ɼDZݾ׼2,gubun2,gubun2,char,1; + ݾ״,gubun3,gubun3,char,1; + ݾ׼4,gubun4,gubun4,char,1; + end + t1601OutBlock1,⺻1,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock2,⺻2,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock3,⺻3,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock4,⺻4,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock5,⺻5,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1601OutBlock6,⺻6,output; + begin + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1602.res b/sample_python/Res/t1602.res new file mode 100644 index 0000000..4685772 --- /dev/null +++ b/sample_python/Res/t1602.res @@ -0,0 +1,97 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰ڸŸ(t1602),t1602,attr,block,headtype=A; + BEGIN_DATA_MAP + t1602InBlock,⺻Է,input; + begin + 屸,market,market,char,1; + ڵ,upcode,upcode,char,3; + ,gubun1,gubun1,char,1; + Ϻб,gubun2,gubun2,char,1; + CTSTIME,cts_time,cts_time,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ȸǼ,cnt,cnt,int,4; + 񱸺(C:),gubun3,gubun3,char,1; + end + t1602OutBlock,⺻,output; + begin + CTSTIME,cts_time,cts_time,char,8; + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1602OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + μż,sv_08,sv_08,long,12; + ܱμż,sv_17,sv_17,long,12; + ż,sv_18,sv_18,long,12; + Ǽż,sv_01,sv_01,long,12; + żż,sv_03,sv_03,long,12; + ż,sv_04,sv_04,long,12; + ż,sv_02,sv_02,long,12; + ݼż,sv_05,sv_05,long,12; + ݼż,sv_06,sv_06,long,12; + Ÿż,sv_07,sv_07,long,12; + ż,sv_11,sv_11,long,12; + ݵż,sv_00,sv_00,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1602_2.res b/sample_python/Res/t1602_2.res new file mode 100644 index 0000000..4685772 --- /dev/null +++ b/sample_python/Res/t1602_2.res @@ -0,0 +1,97 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰ڸŸ(t1602),t1602,attr,block,headtype=A; + BEGIN_DATA_MAP + t1602InBlock,⺻Է,input; + begin + 屸,market,market,char,1; + ڵ,upcode,upcode,char,3; + ,gubun1,gubun1,char,1; + Ϻб,gubun2,gubun2,char,1; + CTSTIME,cts_time,cts_time,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ȸǼ,cnt,cnt,int,4; + 񱸺(C:),gubun3,gubun3,char,1; + end + t1602OutBlock,⺻,output; + begin + CTSTIME,cts_time,cts_time,char,8; + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t1602OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + μż,sv_08,sv_08,long,12; + ܱμż,sv_17,sv_17,long,12; + ż,sv_18,sv_18,long,12; + Ǽż,sv_01,sv_01,long,12; + żż,sv_03,sv_03,long,12; + ż,sv_04,sv_04,long,12; + ż,sv_02,sv_02,long,12; + ݼż,sv_05,sv_05,long,12; + ݼż,sv_06,sv_06,long,12; + Ÿż,sv_07,sv_07,long,12; + ż,sv_11,sv_11,long,12; + ݵż,sv_00,sv_00,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1603.res b/sample_python/Res/t1603.res new file mode 100644 index 0000000..d31fa5b --- /dev/null +++ b/sample_python/Res/t1603.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰ڸŸ̻(t1603),t1603,attr,block,headtype=A; + BEGIN_DATA_MAP + t1603InBlock,⺻Է,input; + begin + 屸,market,market,char,1; + ڱ,gubun1,gubun1,char,1; + Ϻб,gubun2,gubun2,char,1; + CTSTIME,cts_time,cts_time,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ȸǼ,cnt,cnt,int,3; + ڵ,upcode,upcode,char,3; + end + t1603OutBlock,,output; + begin + CTSIDX,cts_idx,cts_idx,long,4; + CTSTIME,cts_time,cts_time,char,8; + end + t1603OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + ڱ,tjjcode,tjjcode,char,4; + ż,msvolume,msvolume,long,8; + ŵ,mdvolume,mdvolume,long,8; + żݾ,msvalue,msvalue,long,12; + ŵݾ,mdvalue,mdvalue,long,12; + ż,svolume,svolume,long,8; + żݾ,svalue,svalue,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1603_2.res b/sample_python/Res/t1603_2.res new file mode 100644 index 0000000..d31fa5b --- /dev/null +++ b/sample_python/Res/t1603_2.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰ڸŸ̻(t1603),t1603,attr,block,headtype=A; + BEGIN_DATA_MAP + t1603InBlock,⺻Է,input; + begin + 屸,market,market,char,1; + ڱ,gubun1,gubun1,char,1; + Ϻб,gubun2,gubun2,char,1; + CTSTIME,cts_time,cts_time,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ȸǼ,cnt,cnt,int,3; + ڵ,upcode,upcode,char,3; + end + t1603OutBlock,,output; + begin + CTSIDX,cts_idx,cts_idx,long,4; + CTSTIME,cts_time,cts_time,char,8; + end + t1603OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + ڱ,tjjcode,tjjcode,char,4; + ż,msvolume,msvolume,long,8; + ŵ,mdvolume,mdvolume,long,8; + żݾ,msvalue,msvalue,long,12; + ŵݾ,mdvalue,mdvalue,long,12; + ż,svolume,svolume,long,8; + żݾ,svalue,svalue,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1615.res b/sample_python/Res/t1615.res new file mode 100644 index 0000000..77f29ca --- /dev/null +++ b/sample_python/Res/t1615.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ڸŸ1(t1615),t1615,attr,block,headtype=A; + BEGIN_DATA_MAP + t1615InBlock,⺻Է,input; + begin + ֽı,gubun1,gubun1,char,1; + ɼDZ,gubun2,gubun2,char,1; + end + t1615OutBlock,,output; + begin + Źŵ,dwvolume,dwvolume,long,12; + Źŵݾ,dwvalue,dwvalue,long,12; + ڱŵ,djvolume,djvolume,long,12; + ڱŵݾ,djvalue,djvalue,long,12; + հ,sum_volume,sum_volume,long,12; + հݾ,sum_value,sum_value,long,12; + end + t1615OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + ,sv_08,sv_08,long,12; + ܱ,sv_17,sv_17,long,12; + ,sv_18,sv_18,long,12; + ,sv_07,sv_07,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1615_2.res b/sample_python/Res/t1615_2.res new file mode 100644 index 0000000..77f29ca --- /dev/null +++ b/sample_python/Res/t1615_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ڸŸ1(t1615),t1615,attr,block,headtype=A; + BEGIN_DATA_MAP + t1615InBlock,⺻Է,input; + begin + ֽı,gubun1,gubun1,char,1; + ɼDZ,gubun2,gubun2,char,1; + end + t1615OutBlock,,output; + begin + Źŵ,dwvolume,dwvolume,long,12; + Źŵݾ,dwvalue,dwvalue,long,12; + ڱŵ,djvolume,djvolume,long,12; + ڱŵݾ,djvalue,djvalue,long,12; + հ,sum_volume,sum_volume,long,12; + հݾ,sum_value,sum_value,long,12; + end + t1615OutBlock1,1,output,occurs; + begin + ,hname,hname,char,20; + ,sv_08,sv_08,long,12; + ܱ,sv_17,sv_17,long,12; + ,sv_18,sv_18,long,12; + ,sv_07,sv_07,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1617.res b/sample_python/Res/t1617.res new file mode 100644 index 0000000..c80b9e6 --- /dev/null +++ b/sample_python/Res/t1617.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP + .Func,ڸŸ2(t1617),t1617,attr,block,headtype=A; + BEGIN_DATA_MAP + t1617InBlock,⺻Է,input; + begin + 屸(1:ڽ2:ڽ3:4:ݿɼ5:Dzɼ6:ֽļ),gubun1,gubun1,char,1; + ݾױ(1:2:ݾ),gubun2,gubun2,char,1; + ڱ(1:ð뺰2:Ϻ),gubun3,gubun3,char,1; + CTSDATE(Ű-),cts_date,cts_date,char,8; + CTSTIME(Ű-ð),cts_time,cts_time,char,8; + end + t1617OutBlock,⺻,output; + begin + CTSDATE,cts_date,cts_date,char,8; + CTSTIME,cts_time,cts_time,char,8; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + μż,sv_08,sv_08,long,12; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱμż,sv_17,sv_17,long,12; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ż,sv_18,sv_18,long,12; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + Ǽż,sv_01,sv_01,long,12; + end + t1617OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,8; + ,sv_08,sv_08,long,12; + ܱ,sv_17,sv_17,long,12; + ,sv_18,sv_18,long,12; + ,sv_01,sv_01,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1617_2.res b/sample_python/Res/t1617_2.res new file mode 100644 index 0000000..c80b9e6 --- /dev/null +++ b/sample_python/Res/t1617_2.res @@ -0,0 +1,40 @@ +BEGIN_FUNCTION_MAP + .Func,ڸŸ2(t1617),t1617,attr,block,headtype=A; + BEGIN_DATA_MAP + t1617InBlock,⺻Է,input; + begin + 屸(1:ڽ2:ڽ3:4:ݿɼ5:Dzɼ6:ֽļ),gubun1,gubun1,char,1; + ݾױ(1:2:ݾ),gubun2,gubun2,char,1; + ڱ(1:ð뺰2:Ϻ),gubun3,gubun3,char,1; + CTSDATE(Ű-),cts_date,cts_date,char,8; + CTSTIME(Ű-ð),cts_time,cts_time,char,8; + end + t1617OutBlock,⺻,output; + begin + CTSDATE,cts_date,cts_date,char,8; + CTSTIME,cts_time,cts_time,char,8; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + μż,sv_08,sv_08,long,12; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱμż,sv_17,sv_17,long,12; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ż,sv_18,sv_18,long,12; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + Ǽż,sv_01,sv_01,long,12; + end + t1617OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,8; + ,sv_08,sv_08,long,12; + ܱ,sv_17,sv_17,long,12; + ,sv_18,sv_18,long,12; + ,sv_01,sv_01,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1621.res b/sample_python/Res/t1621.res new file mode 100644 index 0000000..4ef3f7e --- /dev/null +++ b/sample_python/Res/t1621.res @@ -0,0 +1,64 @@ +BEGIN_FUNCTION_MAP + .Func,кڸŸŵ(íƮ),t1621,attr,block,headtype=A; + BEGIN_DATA_MAP + t1621InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + N,nmin,nmin,int,2; + ȸǼ,cnt,cnt,int,3; + Ϻ,bgubun,bgubun,char,1; + end + t1621OutBlock,⺻,output; + begin + ڵ,indcode,indcode,char,4; + ܱڵ,forcode,forcode,char,4; + ڵ,syscode,syscode,char,4; + ڵ,stocode,stocode,char,4; + ڵ,invcode,invcode,char,4; + ڵ,bancode,bancode,char,4; + ڵ,inscode,inscode,char,4; + ڵ,fincode,fincode,char,4; + ڵ,moncode,moncode,char,4; + Ÿڵ,etccode,etccode,char,4; + ڵ,natcode,natcode,char,4; + ݵڵ,pefcode,pefcode,char,4; + ڵ,jisucd,jisucd,char,8; + ,jisunm,jisunm,char,20; + end + t1621OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + ڽð,datetime,datetime,char,14; + μżŷ,indmsvol,indmsvol,long,8; + μżŷ,indmsamt,indmsamt,double,12.0; + ܱμżŷ,formsvol,formsvol,long,8; + ܱμżŷ,formsamt,formsamt,double,12.0; + żŷ,sysmsvol,sysmsvol,long,8; + żŷ,sysmsamt,sysmsamt,double,12.0; + Ǽżŷ,stomsvol,stomsvol,long,8; + Ǽżŷ,stomsamt,stomsamt,double,12.0; + żżŷ,invmsvol,invmsvol,long,8; + żżŷ,invmsamt,invmsamt,double,12.0; + żŷ,banmsvol,banmsvol,long,8; + żŷ,banmsamt,banmsamt,double,12.0; + żŷ,insmsvol,insmsvol,long,8; + żŷ,insmsamt,insmsamt,double,12.0; + ݼżŷ,finmsvol,finmsvol,long,8; + ݼżŷ,finmsamt,finmsamt,double,12.0; + ݼżŷ,monmsvol,monmsvol,long,8; + ݼżŷ,monmsamt,monmsamt,double,12.0; + Ÿżŷ,etcmsvol,etcmsvol,long,8; + Ÿżŷ,etcmsamt,etcmsamt,double,12.0; + żŷ,natmsvol,natmsvol,long,8; + żŷ,natmsamt,natmsamt,double,12.0; + ݵżŷ,pefmsvol,pefmsvol,long,8; + ݵżŷ,pefmsamt,pefmsamt,double,12.0; + ,upclose,upclose,float,6.2; + üŷ,upcvolume,upcvolume,long,8; + شŷ,upvolume,upvolume,double,12.0; + ذŷ,upvalue,upvalue,double,12.0; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1621_2.res b/sample_python/Res/t1621_2.res new file mode 100644 index 0000000..4ef3f7e --- /dev/null +++ b/sample_python/Res/t1621_2.res @@ -0,0 +1,64 @@ +BEGIN_FUNCTION_MAP + .Func,кڸŸŵ(íƮ),t1621,attr,block,headtype=A; + BEGIN_DATA_MAP + t1621InBlock,⺻Է,input; + begin + ڵ,upcode,upcode,char,3; + N,nmin,nmin,int,2; + ȸǼ,cnt,cnt,int,3; + Ϻ,bgubun,bgubun,char,1; + end + t1621OutBlock,⺻,output; + begin + ڵ,indcode,indcode,char,4; + ܱڵ,forcode,forcode,char,4; + ڵ,syscode,syscode,char,4; + ڵ,stocode,stocode,char,4; + ڵ,invcode,invcode,char,4; + ڵ,bancode,bancode,char,4; + ڵ,inscode,inscode,char,4; + ڵ,fincode,fincode,char,4; + ڵ,moncode,moncode,char,4; + Ÿڵ,etccode,etccode,char,4; + ڵ,natcode,natcode,char,4; + ݵڵ,pefcode,pefcode,char,4; + ڵ,jisucd,jisucd,char,8; + ,jisunm,jisunm,char,20; + end + t1621OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + ڽð,datetime,datetime,char,14; + μżŷ,indmsvol,indmsvol,long,8; + μżŷ,indmsamt,indmsamt,double,12.0; + ܱμżŷ,formsvol,formsvol,long,8; + ܱμżŷ,formsamt,formsamt,double,12.0; + żŷ,sysmsvol,sysmsvol,long,8; + żŷ,sysmsamt,sysmsamt,double,12.0; + Ǽżŷ,stomsvol,stomsvol,long,8; + Ǽżŷ,stomsamt,stomsamt,double,12.0; + żżŷ,invmsvol,invmsvol,long,8; + żżŷ,invmsamt,invmsamt,double,12.0; + żŷ,banmsvol,banmsvol,long,8; + żŷ,banmsamt,banmsamt,double,12.0; + żŷ,insmsvol,insmsvol,long,8; + żŷ,insmsamt,insmsamt,double,12.0; + ݼżŷ,finmsvol,finmsvol,long,8; + ݼżŷ,finmsamt,finmsamt,double,12.0; + ݼżŷ,monmsvol,monmsvol,long,8; + ݼżŷ,monmsamt,monmsamt,double,12.0; + Ÿżŷ,etcmsvol,etcmsvol,long,8; + Ÿżŷ,etcmsamt,etcmsamt,double,12.0; + żŷ,natmsvol,natmsvol,long,8; + żŷ,natmsamt,natmsamt,double,12.0; + ݵżŷ,pefmsvol,pefmsvol,long,8; + ݵżŷ,pefmsamt,pefmsamt,double,12.0; + ,upclose,upclose,float,6.2; + üŷ,upcvolume,upcvolume,long,8; + شŷ,upvolume,upvolume,double,12.0; + ذŷ,upvalue,upvalue,double,12.0; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1631.res b/sample_python/Res/t1631.res new file mode 100644 index 0000000..7865b5e --- /dev/null +++ b/sample_python/Res/t1631.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿȸ(t1631),t1631,attr,block,headtype=A; + BEGIN_DATA_MAP + t1631InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ڱ,dgubun,dgubun,char,1; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + end + t1631OutBlock,,output; + begin + ŵ͹üܷ,cdhrem,cdhrem,long,8; + ŵ͹üܷ,bdhrem,bdhrem,long,8; + ŵֹ,tcdrem,tcdrem,long,8; + ŵֹ,tbdrem,tbdrem,long,8; + ż͹üܷ,cshrem,cshrem,long,8; + ż͹üܷ,bshrem,bshrem,long,8; + żֹ,tcsrem,tcsrem,long,8; + żֹ,tbsrem,tbsrem,long,8; + end + t1631OutBlock1,1,output,occurs; + begin + ŵ,offervolume,offervolume,long,8; + ŵݾ,offervalue,offervalue,long,12; + ż,bidvolume,bidvolume,long,8; + żݾ,bidvalue,bidvalue,long,12; + ż,volume,volume,long,8; + żݾ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1631_2.res b/sample_python/Res/t1631_2.res new file mode 100644 index 0000000..7865b5e --- /dev/null +++ b/sample_python/Res/t1631_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿȸ(t1631),t1631,attr,block,headtype=A; + BEGIN_DATA_MAP + t1631InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ڱ,dgubun,dgubun,char,1; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + end + t1631OutBlock,,output; + begin + ŵ͹üܷ,cdhrem,cdhrem,long,8; + ŵ͹üܷ,bdhrem,bdhrem,long,8; + ŵֹ,tcdrem,tcdrem,long,8; + ŵֹ,tbdrem,tbdrem,long,8; + ż͹üܷ,cshrem,cshrem,long,8; + ż͹üܷ,bshrem,bshrem,long,8; + żֹ,tcsrem,tcsrem,long,8; + żֹ,tbsrem,tbsrem,long,8; + end + t1631OutBlock1,1,output,occurs; + begin + ŵ,offervolume,offervolume,long,8; + ŵݾ,offervalue,offervalue,long,12; + ż,bidvolume,bidvolume,long,8; + żݾ,bidvalue,bidvalue,long,12; + ż,volume,volume,long,8; + żݾ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1632.res b/sample_python/Res/t1632.res new file mode 100644 index 0000000..d6d314d --- /dev/null +++ b/sample_python/Res/t1632.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰α׷Ÿ(t1632),t1632,attr,block,headtype=A; + BEGIN_DATA_MAP + t1632InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ,gubun2,gubun2,char,1; + ϱ,gubun3,gubun3,char,1; + ,date,date,char,8; + ð,time,time,char,6; + end + t1632OutBlock,,output; + begin + ¥CTS,date,date,char,8; + ðCTS,time,time,char,6; + IDX,idx,idx,long,4; + end + t1632OutBlock1,1,output,occurs; + begin + ð,time,time,char,6; + KP200,k200jisu,k200jisu,float,6.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + BASIS,k200basis,k200basis,float,6.2; + üż,tot3,tot3,long,12; + üż,tot1,tot1,long,12; + üŵ,tot2,tot2,long,12; + ͼż,cha3,cha3,long,12; + ͸ż,cha1,cha1,long,12; + ͸ŵ,cha2,cha2,long,12; + ͼż,bcha3,bcha3,long,12; + ͸ż,bcha1,bcha1,long,12; + ͸ŵ,bcha2,bcha2,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1632_2.res b/sample_python/Res/t1632_2.res new file mode 100644 index 0000000..d6d314d --- /dev/null +++ b/sample_python/Res/t1632_2.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰α׷Ÿ(t1632),t1632,attr,block,headtype=A; + BEGIN_DATA_MAP + t1632InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ,gubun2,gubun2,char,1; + ϱ,gubun3,gubun3,char,1; + ,date,date,char,8; + ð,time,time,char,6; + end + t1632OutBlock,,output; + begin + ¥CTS,date,date,char,8; + ðCTS,time,time,char,6; + IDX,idx,idx,long,4; + end + t1632OutBlock1,1,output,occurs; + begin + ð,time,time,char,6; + KP200,k200jisu,k200jisu,float,6.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + BASIS,k200basis,k200basis,float,6.2; + üż,tot3,tot3,long,12; + üż,tot1,tot1,long,12; + üŵ,tot2,tot2,long,12; + ͼż,cha3,cha3,long,12; + ͸ż,cha1,cha1,long,12; + ͸ŵ,cha2,cha2,long,12; + ͼż,bcha3,bcha3,long,12; + ͸ż,bcha1,bcha1,long,12; + ͸ŵ,bcha2,bcha2,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1633.res b/sample_python/Res/t1633.res new file mode 100644 index 0000000..cdd6120 --- /dev/null +++ b/sample_python/Res/t1633.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓα׷Ÿ(t1633),t1633,attr,block,headtype=A; + BEGIN_DATA_MAP + t1633InBlock,⺻Է,input; + begin + 屸,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ġ,gubun2,gubun2,char,1; + ֿ,gubun3,gubun3,char,1; + from,fdate,fdate,char,8; + to,tdate,tdate,char,8; + ,gubun4,gubun4,char,1; + ¥,date,date,char,8; + end + t1633OutBlock,,output; + begin + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1633OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + KP200,jisu,jisu,float,6.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + üż,tot3,tot3,long,12; + üż,tot1,tot1,long,12; + üŵ,tot2,tot2,long,12; + ͼż,cha3,cha3,long,12; + ͸ż,cha1,cha1,long,12; + ͸ŵ,cha2,cha2,long,12; + ͼż,bcha3,bcha3,long,12; + ͸ż,bcha1,bcha1,long,12; + ͸ŵ,bcha2,bcha2,long,12; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1633_2.res b/sample_python/Res/t1633_2.res new file mode 100644 index 0000000..cdd6120 --- /dev/null +++ b/sample_python/Res/t1633_2.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓα׷Ÿ(t1633),t1633,attr,block,headtype=A; + BEGIN_DATA_MAP + t1633InBlock,⺻Է,input; + begin + 屸,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ġ,gubun2,gubun2,char,1; + ֿ,gubun3,gubun3,char,1; + from,fdate,fdate,char,8; + to,tdate,tdate,char,8; + ,gubun4,gubun4,char,1; + ¥,date,date,char,8; + end + t1633OutBlock,,output; + begin + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1633OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + KP200,jisu,jisu,float,6.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + üż,tot3,tot3,long,12; + üż,tot1,tot1,long,12; + üŵ,tot2,tot2,long,12; + ͼż,cha3,cha3,long,12; + ͸ż,cha1,cha1,long,12; + ͸ŵ,cha2,cha2,long,12; + ͼż,bcha3,bcha3,long,12; + ͸ż,bcha1,bcha1,long,12; + ͸ŵ,bcha2,bcha2,long,12; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1636.res b/sample_python/Res/t1636.res new file mode 100644 index 0000000..6b17f1b --- /dev/null +++ b/sample_python/Res/t1636.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿŵ(t1636),t1636,attr,block,headtype=A; + BEGIN_DATA_MAP + t1636InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ı,gubun2,gubun2,char,1; + ڵ,shcode,shcode,char,6; + IDXCTS,cts_idx,cts_idx,long,4; + end + t1636OutBlock,,output; + begin + IDXCTS,cts_idx,cts_idx,long,4; + end + t1636OutBlock1,1,output,occurs; + begin + ,rank,rank,long,8; + ,hname,hname,char,20; + 簡,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + żݾ,svalue,svalue,long,12; + ŵݾ,offervalue,offervalue,long,12; + żݾ,stksvalue,stksvalue,long,12; + ż,svolume,svolume,long,12; + ŵ,offervolume,offervolume,long,12; + ż,stksvolume,stksvolume,long,12; + ðѾ,sgta,sgta,long,15; + ,rate,rate,float,6.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1636_2.res b/sample_python/Res/t1636_2.res new file mode 100644 index 0000000..6b17f1b --- /dev/null +++ b/sample_python/Res/t1636_2.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿŵ(t1636),t1636,attr,block,headtype=A; + BEGIN_DATA_MAP + t1636InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ı,gubun2,gubun2,char,1; + ڵ,shcode,shcode,char,6; + IDXCTS,cts_idx,cts_idx,long,4; + end + t1636OutBlock,,output; + begin + IDXCTS,cts_idx,cts_idx,long,4; + end + t1636OutBlock1,1,output,occurs; + begin + ,rank,rank,long,8; + ,hname,hname,char,20; + 簡,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + żݾ,svalue,svalue,long,12; + ŵݾ,offervalue,offervalue,long,12; + żݾ,stksvalue,stksvalue,long,12; + ż,svolume,svolume,long,12; + ŵ,offervolume,offervolume,long,12; + ż,stksvolume,stksvolume,long,12; + ðѾ,sgta,sgta,long,15; + ,rate,rate,float,6.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1637.res b/sample_python/Res/t1637.res new file mode 100644 index 0000000..7f23fcf --- /dev/null +++ b/sample_python/Res/t1637.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿ(t1637),t1637,attr,block,headtype=A; + BEGIN_DATA_MAP + t1637InBlock,⺻Է,input; + begin + ݾױ(0:1:ݾ),gubun1,gubun1,char,1; + ðϺ(0:ð1:),gubun2,gubun2,char,1; + ڵ,shcode,shcode,char,6; + ,date,date,char,8; + ð,time,time,char,6; + IDXCTS(9999:Ʈ),cts_idx,cts_idx,long,4; + end + t1637OutBlock,,output; + begin + IDXCTS,cts_idx,cts_idx,long,4; + end + t1637OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + 簡,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + żݾ,svalue,svalue,long,15; + ŵݾ,offervalue,offervalue,long,15; + żݾ,stksvalue,stksvalue,long,15; + ż,svolume,svolume,long,12; + ŵ,offervolume,offervolume,long,12; + ż,stksvolume,stksvolume,long,12; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1637_2.res b/sample_python/Res/t1637_2.res new file mode 100644 index 0000000..7f23fcf --- /dev/null +++ b/sample_python/Res/t1637_2.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿ(t1637),t1637,attr,block,headtype=A; + BEGIN_DATA_MAP + t1637InBlock,⺻Է,input; + begin + ݾױ(0:1:ݾ),gubun1,gubun1,char,1; + ðϺ(0:ð1:),gubun2,gubun2,char,1; + ڵ,shcode,shcode,char,6; + ,date,date,char,8; + ð,time,time,char,6; + IDXCTS(9999:Ʈ),cts_idx,cts_idx,long,4; + end + t1637OutBlock,,output; + begin + IDXCTS,cts_idx,cts_idx,long,4; + end + t1637OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + 簡,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + żݾ,svalue,svalue,long,15; + ŵݾ,offervalue,offervalue,long,15; + żݾ,stksvalue,stksvalue,long,15; + ż,svolume,svolume,long,12; + ŵ,offervolume,offervolume,long,12; + ż,stksvolume,stksvolume,long,12; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1638.res b/sample_python/Res/t1638.res new file mode 100644 index 0000000..e467671 --- /dev/null +++ b/sample_python/Res/t1638.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ܷ/(t1638),t1638,attr,block,headtype=A; + BEGIN_DATA_MAP + t1638InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ڵ,shcode,shcode,char,6; + ,gubun2,gubun2,char,1; + end + t1638OutBlock,,output,occurs; + begin + ,rank,rank,long,4; + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + Ѻ,sigatotrt,sigatotrt,float,6.2; + żܷ,obuyvol,obuyvol,long,12; + żܷ,buyrem,buyrem,long,12; + żü,psgvolume,psgvolume,long,12; + ŵܷ,sellrem,sellrem,long,12; + ŵü,pdgvolume,pdgvolume,long,12; + ðѾ,sigatot,sigatot,long,20; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1638_2.res b/sample_python/Res/t1638_2.res new file mode 100644 index 0000000..e467671 --- /dev/null +++ b/sample_python/Res/t1638_2.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ܷ/(t1638),t1638,attr,block,headtype=A; + BEGIN_DATA_MAP + t1638InBlock,⺻Է,input; + begin + ,gubun1,gubun1,char,1; + ڵ,shcode,shcode,char,6; + ,gubun2,gubun2,char,1; + end + t1638OutBlock,,output,occurs; + begin + ,rank,rank,long,4; + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + Ѻ,sigatotrt,sigatotrt,float,6.2; + żܷ,obuyvol,obuyvol,long,12; + żܷ,buyrem,buyrem,long,12; + żü,psgvolume,psgvolume,long,12; + ŵܷ,sellrem,sellrem,long,12; + ŵü,pdgvolume,pdgvolume,long,12; + ðѾ,sigatot,sigatot,long,20; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1640.res b/sample_python/Res/t1640.res new file mode 100644 index 0000000..ab0e0e3 --- /dev/null +++ b/sample_python/Res/t1640.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿȸ(̴)(t1640),t1640,attr,block,headtype=A; + BEGIN_DATA_MAP + t1640InBlock,⺻Է,input; + begin + ,gubun,gubun,char,2; + end + t1640OutBlock,,output; + begin + ŵ,offervolume,offervolume,long,8; + ż,bidvolume,bidvolume,long,8; + ż,volume,volume,long,8; + ŵ,offerdiff,offerdiff,long,8; + ż,biddiff,biddiff,long,8; + ż,sundiff,sundiff,long,8; + ̽ý,basis,basis,float,6.2; + ŵݾ,offervalue,offervalue,double,12.0; + żݾ,bidvalue,bidvalue,double,12.0; + żݾ,value,value,double,12.0; + ŵݾ,offervaldiff,offervaldiff,double,12.0; + żݾ,bidvaldiff,bidvaldiff,double,12.0; + ż,sunvaldiff,sunvaldiff,double,12.0; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1640_2.res b/sample_python/Res/t1640_2.res new file mode 100644 index 0000000..ab0e0e3 --- /dev/null +++ b/sample_python/Res/t1640_2.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP + .Func,α׷Ÿȸ(̴)(t1640),t1640,attr,block,headtype=A; + BEGIN_DATA_MAP + t1640InBlock,⺻Է,input; + begin + ,gubun,gubun,char,2; + end + t1640OutBlock,,output; + begin + ŵ,offervolume,offervolume,long,8; + ż,bidvolume,bidvolume,long,8; + ż,volume,volume,long,8; + ŵ,offerdiff,offerdiff,long,8; + ż,biddiff,biddiff,long,8; + ż,sundiff,sundiff,long,8; + ̽ý,basis,basis,float,6.2; + ŵݾ,offervalue,offervalue,double,12.0; + żݾ,bidvalue,bidvalue,double,12.0; + żݾ,value,value,double,12.0; + ŵݾ,offervaldiff,offervaldiff,double,12.0; + żݾ,bidvaldiff,bidvaldiff,double,12.0; + ż,sunvaldiff,sunvaldiff,double,12.0; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1662.res b/sample_python/Res/t1662.res new file mode 100644 index 0000000..3d7fd75 --- /dev/null +++ b/sample_python/Res/t1662.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰α׷Ÿ(Ʈ)(t1662),t1662,attr,block,headtype=A; + BEGIN_DATA_MAP + t1662InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ϱ,gubun3,gubun3,char,1; + end + t1662OutBlock,,output,occurs; + begin + ð,time,time,char,6; + KP200,k200jisu,k200jisu,float,6.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + BASIS,k200basis,k200basis,float,6.2; + üż,tot3,tot3,long,12; + üż,tot1,tot1,long,12; + üŵ,tot2,tot2,long,12; + ͼż,cha3,cha3,long,12; + ͸ż,cha1,cha1,long,12; + ͸ŵ,cha2,cha2,long,12; + ͼż,bcha3,bcha3,long,12; + ͸ż,bcha1,bcha1,long,12; + ͸ŵ,bcha2,bcha2,long,12; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1662_2.res b/sample_python/Res/t1662_2.res new file mode 100644 index 0000000..3d7fd75 --- /dev/null +++ b/sample_python/Res/t1662_2.res @@ -0,0 +1,30 @@ +BEGIN_FUNCTION_MAP + .Func,ð뺰α׷Ÿ(Ʈ)(t1662),t1662,attr,block,headtype=A; + BEGIN_DATA_MAP + t1662InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + ݾ׼,gubun1,gubun1,char,1; + ϱ,gubun3,gubun3,char,1; + end + t1662OutBlock,,output,occurs; + begin + ð,time,time,char,6; + KP200,k200jisu,k200jisu,float,6.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + BASIS,k200basis,k200basis,float,6.2; + üż,tot3,tot3,long,12; + üż,tot1,tot1,long,12; + üŵ,tot2,tot2,long,12; + ͼż,cha3,cha3,long,12; + ͸ż,cha1,cha1,long,12; + ͸ŵ,cha2,cha2,long,12; + ͼż,bcha3,bcha3,long,12; + ͸ż,bcha1,bcha1,long,12; + ͸ŵ,bcha2,bcha2,long,12; + ŷ,volume,volume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1664.res b/sample_python/Res/t1664.res new file mode 100644 index 0000000..39fb56a --- /dev/null +++ b/sample_python/Res/t1664.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP + .Func,ڸŸ(íƮ),t1664,attr,block,headtype=A; + BEGIN_DATA_MAP + t1664InBlock,⺻Է,input; + begin + 屸,mgubun,mgubun,char,1; + ݾ׼,vagubun,vagubun,char,1; + ðϺ,bdgubun,bdgubun,char,1; + ȸǼ,cnt,cnt,int,3; + end + t1664OutBlock1,1,output,occurs; + begin + ڽð,dt,dt,char,8; + Ǽż,tjj01,tjj01,double,12.0; + ż,tjj02,tjj02,double,12.0; + żż,tjj03,tjj03,double,12.0; + ż,tjj04,tjj04,double,12.0; + ݼż,tjj05,tjj05,double,12.0; + ݼż,tjj06,tjj06,double,12.0; + Ÿż,tjj07,tjj07,double,12.0; + μż,tjj08,tjj08,double,12.0; + ܱμż,tjj17,tjj17,double,12.0; + ż,tjj18,tjj18,double,12.0; + ͼż,cha,cha,double,12.0; + ͼż,bicha,bicha,double,12.0; + ռż,totcha,totcha,double,12.0; + ̽ý,basis,basis,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1664_2.res b/sample_python/Res/t1664_2.res new file mode 100644 index 0000000..39fb56a --- /dev/null +++ b/sample_python/Res/t1664_2.res @@ -0,0 +1,31 @@ +BEGIN_FUNCTION_MAP + .Func,ڸŸ(íƮ),t1664,attr,block,headtype=A; + BEGIN_DATA_MAP + t1664InBlock,⺻Է,input; + begin + 屸,mgubun,mgubun,char,1; + ݾ׼,vagubun,vagubun,char,1; + ðϺ,bdgubun,bdgubun,char,1; + ȸǼ,cnt,cnt,int,3; + end + t1664OutBlock1,1,output,occurs; + begin + ڽð,dt,dt,char,8; + Ǽż,tjj01,tjj01,double,12.0; + ż,tjj02,tjj02,double,12.0; + żż,tjj03,tjj03,double,12.0; + ż,tjj04,tjj04,double,12.0; + ݼż,tjj05,tjj05,double,12.0; + ݼż,tjj06,tjj06,double,12.0; + Ÿż,tjj07,tjj07,double,12.0; + μż,tjj08,tjj08,double,12.0; + ܱμż,tjj17,tjj17,double,12.0; + ż,tjj18,tjj18,double,12.0; + ͼż,cha,cha,double,12.0; + ͼż,bicha,bicha,double,12.0; + ռż,totcha,totcha,double,12.0; + ̽ý,basis,basis,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1665.res b/sample_python/Res/t1665.res new file mode 100644 index 0000000..09c71e9 --- /dev/null +++ b/sample_python/Res/t1665.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ⰣڸŸ(íƮ),t1665,attr,block,headtype=A; + BEGIN_DATA_MAP + t1665InBlock,⺻Է,input; + begin + 屸(1:kospi2:kp2003:kosdaq4:5:Dzɼ6:ݿɼ),market,market,char,1; + ڵ,upcode,upcode,char,3; + ġ(1:ġ2:),gubun2,gubun2,char,1; + (1:2:3:),gubun3,gubun3,char,1; + ۳¥,from_date,from_date,char,8; + ᳯ¥,to_date,to_date,char,8; + end + t1665OutBlock,⺻,output; + begin + ڵ,mcode,mcode,char,8; + ,mname,mname,char,20; + end + t1665OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + μ,sv_08,sv_08,long,12; + ΰ(+̵),sv_17,sv_17,long,12; + ,sv_18,sv_18,long,12; + Ǽ,sv_01,sv_01,long,12; + ż,sv_03,sv_03,long,12; + ,sv_04,sv_04,long,12; + ,sv_02,sv_02,long,12; + ݼ,sv_05,sv_05,long,12; + ݼ,sv_06,sv_06,long,12; + Ÿ,sv_07,sv_07,long,12; + ݵ,sv_00,sv_00,long,12; + Ͽܱμ,sv_09,sv_09,long,12; + ̵Ͽܱμ,sv_10,sv_10,long,12; + ,sv_11,sv_11,long,12; + Ÿ(Ÿ+),sv_99,sv_99,long,12; + αݾ,sa_08,sa_08,double,12.0; + ΰݾ(+̵),sa_17,sa_17,double,12.0; + ݾ,sa_18,sa_18,double,12.0; + DZݾ,sa_01,sa_01,double,12.0; + űݾ,sa_03,sa_03,double,12.0; + ݾ,sa_04,sa_04,double,12.0; + ݾ,sa_02,sa_02,double,12.0; + ݱݾ,sa_05,sa_05,double,12.0; + ݱݾ,sa_06,sa_06,double,12.0; + Ÿݾ,sa_07,sa_07,double,12.0; + ݵݾ,sa_00,sa_00,double,12.0; + Ͽܱαݾ,sa_09,sa_09,double,12.0; + ̵Ͽܱαݾ,sa_10,sa_10,double,12.0; + ݾ,sa_11,sa_11,double,12.0; + Ÿݾ(Ÿ+),sa_99,sa_99,double,12.0; + ,jisu,jisu,float,7.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1665_2.res b/sample_python/Res/t1665_2.res new file mode 100644 index 0000000..09c71e9 --- /dev/null +++ b/sample_python/Res/t1665_2.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ⰣڸŸ(íƮ),t1665,attr,block,headtype=A; + BEGIN_DATA_MAP + t1665InBlock,⺻Է,input; + begin + 屸(1:kospi2:kp2003:kosdaq4:5:Dzɼ6:ݿɼ),market,market,char,1; + ڵ,upcode,upcode,char,3; + ġ(1:ġ2:),gubun2,gubun2,char,1; + (1:2:3:),gubun3,gubun3,char,1; + ۳¥,from_date,from_date,char,8; + ᳯ¥,to_date,to_date,char,8; + end + t1665OutBlock,⺻,output; + begin + ڵ,mcode,mcode,char,8; + ,mname,mname,char,20; + end + t1665OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + μ,sv_08,sv_08,long,12; + ΰ(+̵),sv_17,sv_17,long,12; + ,sv_18,sv_18,long,12; + Ǽ,sv_01,sv_01,long,12; + ż,sv_03,sv_03,long,12; + ,sv_04,sv_04,long,12; + ,sv_02,sv_02,long,12; + ݼ,sv_05,sv_05,long,12; + ݼ,sv_06,sv_06,long,12; + Ÿ,sv_07,sv_07,long,12; + ݵ,sv_00,sv_00,long,12; + Ͽܱμ,sv_09,sv_09,long,12; + ̵Ͽܱμ,sv_10,sv_10,long,12; + ,sv_11,sv_11,long,12; + Ÿ(Ÿ+),sv_99,sv_99,long,12; + αݾ,sa_08,sa_08,double,12.0; + ΰݾ(+̵),sa_17,sa_17,double,12.0; + ݾ,sa_18,sa_18,double,12.0; + DZݾ,sa_01,sa_01,double,12.0; + űݾ,sa_03,sa_03,double,12.0; + ݾ,sa_04,sa_04,double,12.0; + ݾ,sa_02,sa_02,double,12.0; + ݱݾ,sa_05,sa_05,double,12.0; + ݱݾ,sa_06,sa_06,double,12.0; + Ÿݾ,sa_07,sa_07,double,12.0; + ݵݾ,sa_00,sa_00,double,12.0; + Ͽܱαݾ,sa_09,sa_09,double,12.0; + ̵Ͽܱαݾ,sa_10,sa_10,double,12.0; + ݾ,sa_11,sa_11,double,12.0; + Ÿݾ(Ÿ+),sa_99,sa_99,double,12.0; + ,jisu,jisu,float,7.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1701.res b/sample_python/Res/t1701.res new file mode 100644 index 0000000..533fbf5 --- /dev/null +++ b/sample_python/Res/t1701.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1701),t1701,attr,block,headtype=A; + BEGIN_DATA_MAP + t1701InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,gubun,gubun,char,1; + ,fromdt,fromdt,char,8; + ,todt,todt,char,8; + PR,prapp,prapp,long,3; + PR뱸,prgubun,prgubun,char,1; + ,orggubun,orggubun,char,1; + ,frggubun,frggubun,char,1; + end + t1701OutBlock,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,psnvolume,psnvolume,long,12; + ,orgvolume,orgvolume,long,12; + ܱ,frgvolume,frgvolume,long,12; + ܱ,frgvolumesum,frgvolumesum,long,12; + α׷,pgmvolume,pgmvolume,long,12; + ֽļ,listing,listing,long,12; + ,listupdn,listupdn,long,12; + ,sjrate,sjrate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1701_2.res b/sample_python/Res/t1701_2.res new file mode 100644 index 0000000..533fbf5 --- /dev/null +++ b/sample_python/Res/t1701_2.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1701),t1701,attr,block,headtype=A; + BEGIN_DATA_MAP + t1701InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,gubun,gubun,char,1; + ,fromdt,fromdt,char,8; + ,todt,todt,char,8; + PR,prapp,prapp,long,3; + PR뱸,prgubun,prgubun,char,1; + ,orggubun,orggubun,char,1; + ,frggubun,frggubun,char,1; + end + t1701OutBlock,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,psnvolume,psnvolume,long,12; + ,orgvolume,orgvolume,long,12; + ܱ,frgvolume,frgvolume,long,12; + ܱ,frgvolumesum,frgvolumesum,long,12; + α׷,pgmvolume,pgmvolume,long,12; + ֽļ,listing,listing,long,12; + ,listupdn,listupdn,long,12; + ,sjrate,sjrate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1702.res b/sample_python/Res/t1702.res new file mode 100644 index 0000000..e44057d --- /dev/null +++ b/sample_python/Res/t1702.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1702),t1702,attr,block,headtype=A; + BEGIN_DATA_MAP + t1702InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,todt,todt,char,8; + ݾ׼(0:ݾ1:2:ܰ),volvalgb,volvalgb,char,1; + żŵ(0:ż1:ż2:ŵ),msmdgb,msmdgb,char,1; + (0:ϰ1:),cumulgb,cumulgb,char,1; + CTSDATE,cts_date,cts_date,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + end + t1702OutBlock,⺻,output; + begin + CTSIDX,cts_idx,cts_idx,long,4; + CTSDATE,cts_date,cts_date,char,8; + end + t1702OutBlock1,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ݵ,amt0000,amt0000,long,12; + ,amt0001,amt0001,long,12; + ,amt0002,amt0002,long,12; + ,amt0003,amt0003,long,12; + ,amt0004,amt0004,long,12; + ,amt0005,amt0005,long,12; + ,amt0006,amt0006,long,12; + Ÿ,amt0007,amt0007,long,12; + ,amt0008,amt0008,long,12; + Ͽܱ,amt0009,amt0009,long,12; + ̵Ͽܱ,amt0010,amt0010,long,12; + ,amt0011,amt0011,long,12; + ,amt0018,amt0018,long,12; + ΰ(+̵),amt0088,amt0088,long,12; + Ÿ(Ÿ+),amt0099,amt0099,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1702 \ No newline at end of file diff --git a/sample_python/Res/t1702_2.res b/sample_python/Res/t1702_2.res new file mode 100644 index 0000000..e44057d --- /dev/null +++ b/sample_python/Res/t1702_2.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1702),t1702,attr,block,headtype=A; + BEGIN_DATA_MAP + t1702InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,todt,todt,char,8; + ݾ׼(0:ݾ1:2:ܰ),volvalgb,volvalgb,char,1; + żŵ(0:ż1:ż2:ŵ),msmdgb,msmdgb,char,1; + (0:ϰ1:),cumulgb,cumulgb,char,1; + CTSDATE,cts_date,cts_date,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + end + t1702OutBlock,⺻,output; + begin + CTSIDX,cts_idx,cts_idx,long,4; + CTSDATE,cts_date,cts_date,char,8; + end + t1702OutBlock1,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ݵ,amt0000,amt0000,long,12; + ,amt0001,amt0001,long,12; + ,amt0002,amt0002,long,12; + ,amt0003,amt0003,long,12; + ,amt0004,amt0004,long,12; + ,amt0005,amt0005,long,12; + ,amt0006,amt0006,long,12; + Ÿ,amt0007,amt0007,long,12; + ,amt0008,amt0008,long,12; + Ͽܱ,amt0009,amt0009,long,12; + ̵Ͽܱ,amt0010,amt0010,long,12; + ,amt0011,amt0011,long,12; + ,amt0018,amt0018,long,12; + ΰ(+̵),amt0088,amt0088,long,12; + Ÿ(Ÿ+),amt0099,amt0099,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1702 \ No newline at end of file diff --git a/sample_python/Res/t1716.res b/sample_python/Res/t1716.res new file mode 100644 index 0000000..b0878ab --- /dev/null +++ b/sample_python/Res/t1716.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1716),t1716,attr,block,headtype=A; + BEGIN_DATA_MAP + t1716InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (0:ϰż1:Ⱓż),gubun,gubun,char,1; + ,fromdt,fromdt,char,8; + ,todt,todt,char,8; + PR,prapp,prapp,long,3; + PR뱸(0:1:),prgubun,prgubun,char,1; + ,orggubun,orggubun,char,1; + ,frggubun,frggubun,char,1; + end + t1716OutBlock,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ_,krx_0008,krx_0008,long,12; + ŷ_,krx_0018,krx_0018,long,12; + ŷ_ܱ,krx_0009,krx_0009,long,12; + α׷,pgmvol,pgmvol,long,12; + ݰ_κֽļ,fsc_listing,fsc_listing,long,12; + ݰ_,fsc_sjrate,fsc_sjrate,float,6.2; + ݰ_ܱ,fsc_0009,fsc_0009,long,12; + ŵ,gm_volume,m_volume,long,12; + ŵ,gm_value,gm_value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1716_2.res b/sample_python/Res/t1716_2.res new file mode 100644 index 0000000..b0878ab --- /dev/null +++ b/sample_python/Res/t1716_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1716),t1716,attr,block,headtype=A; + BEGIN_DATA_MAP + t1716InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (0:ϰż1:Ⱓż),gubun,gubun,char,1; + ,fromdt,fromdt,char,8; + ,todt,todt,char,8; + PR,prapp,prapp,long,3; + PR뱸(0:1:),prgubun,prgubun,char,1; + ,orggubun,orggubun,char,1; + ,frggubun,frggubun,char,1; + end + t1716OutBlock,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ_,krx_0008,krx_0008,long,12; + ŷ_,krx_0018,krx_0018,long,12; + ŷ_ܱ,krx_0009,krx_0009,long,12; + α׷,pgmvol,pgmvol,long,12; + ݰ_κֽļ,fsc_listing,fsc_listing,long,12; + ݰ_,fsc_sjrate,fsc_sjrate,float,6.2; + ݰ_ܱ,fsc_0009,fsc_0009,long,12; + ŵ,gm_volume,m_volume,long,12; + ŵ,gm_value,gm_value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1717.res b/sample_python/Res/t1717.res new file mode 100644 index 0000000..a52d45f --- /dev/null +++ b/sample_python/Res/t1717.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1717),t1717,attr,block,headtype=A; + BEGIN_DATA_MAP + t1717InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (0:ϰż1:Ⱓż),gubun,gubun,char,1; + (ϰȸϰspace),fromdt,fromdt,char,8; + ,todt,todt,char,8; + end + t1717OutBlock,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ݵ(ż),tjj0000_vol,tjj0000_vol,long,12; + (ż),tjj0001_vol,tjj0001_vol,long,12; + (ż),tjj0002_vol,tjj0002_vol,long,12; + (ż),tjj0003_vol,tjj0003_vol,long,12; + (ż),tjj0004_vol,tjj0004_vol,long,12; + (ż),tjj0005_vol,tjj0005_vol,long,12; + (ż),tjj0006_vol,tjj0006_vol,long,12; + Ÿ(ż),tjj0007_vol,tjj0007_vol,long,12; + (ż),tjj0008_vol,tjj0008_vol,long,12; + Ͽܱ(ż),tjj0009_vol,tjj0009_vol,long,12; + ̵Ͽܱ(ż),tjj0010_vol,tjj0010_vol,long,12; + (ż),tjj0011_vol,tjj0011_vol,long,12; + (ż),tjj0018_vol,tjj0018_vol,long,12; + ΰ(ż)(+̵),tjj0016_vol,tjj0016_vol,long,12; + Ÿ(ż)(Ÿ+),tjj0017_vol,tjj0017_vol,long,12; + ݵ(ܰ),tjj0000_dan,tjj0000_dan,long,12; + (ܰ),tjj0001_dan,tjj0001_dan,long,12; + (ܰ),tjj0002_dan,tjj0002_dan,long,12; + (ܰ),tjj0003_dan,tjj0003_dan,long,12; + (ܰ),tjj0004_dan,tjj0004_dan,long,12; + (ܰ),tjj0005_dan,tjj0005_dan,long,12; + (ܰ),tjj0006_dan,tjj0006_dan,long,12; + Ÿ(ܰ),tjj0007_dan,tjj0007_dan,long,12; + (ܰ),tjj0008_dan,tjj0008_dan,long,12; + Ͽܱ(ܰ),tjj0009_dan,tjj0009_dan,long,12; + ̵Ͽܱ(ܰ),tjj0010_dan,tjj0010_dan,long,12; + (ܰ),tjj0011_dan,tjj0011_dan,long,12; + (ܰ),tjj0018_dan,tjj0018_dan,long,12; + ΰ(ܰ)(+̵),tjj0016_dan,tjj0016_dan,long,12; + Ÿ(ܰ)(Ÿ+),tjj0017_dan,tjj0017_dan,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1717_2.res b/sample_python/Res/t1717_2.res new file mode 100644 index 0000000..a52d45f --- /dev/null +++ b/sample_python/Res/t1717_2.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,α񺰵(t1717),t1717,attr,block,headtype=A; + BEGIN_DATA_MAP + t1717InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (0:ϰż1:Ⱓż),gubun,gubun,char,1; + (ϰȸϰspace),fromdt,fromdt,char,8; + ,todt,todt,char,8; + end + t1717OutBlock,,output,occurs; + begin + ,date,date,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ݵ(ż),tjj0000_vol,tjj0000_vol,long,12; + (ż),tjj0001_vol,tjj0001_vol,long,12; + (ż),tjj0002_vol,tjj0002_vol,long,12; + (ż),tjj0003_vol,tjj0003_vol,long,12; + (ż),tjj0004_vol,tjj0004_vol,long,12; + (ż),tjj0005_vol,tjj0005_vol,long,12; + (ż),tjj0006_vol,tjj0006_vol,long,12; + Ÿ(ż),tjj0007_vol,tjj0007_vol,long,12; + (ż),tjj0008_vol,tjj0008_vol,long,12; + Ͽܱ(ż),tjj0009_vol,tjj0009_vol,long,12; + ̵Ͽܱ(ż),tjj0010_vol,tjj0010_vol,long,12; + (ż),tjj0011_vol,tjj0011_vol,long,12; + (ż),tjj0018_vol,tjj0018_vol,long,12; + ΰ(ż)(+̵),tjj0016_vol,tjj0016_vol,long,12; + Ÿ(ż)(Ÿ+),tjj0017_vol,tjj0017_vol,long,12; + ݵ(ܰ),tjj0000_dan,tjj0000_dan,long,12; + (ܰ),tjj0001_dan,tjj0001_dan,long,12; + (ܰ),tjj0002_dan,tjj0002_dan,long,12; + (ܰ),tjj0003_dan,tjj0003_dan,long,12; + (ܰ),tjj0004_dan,tjj0004_dan,long,12; + (ܰ),tjj0005_dan,tjj0005_dan,long,12; + (ܰ),tjj0006_dan,tjj0006_dan,long,12; + Ÿ(ܰ),tjj0007_dan,tjj0007_dan,long,12; + (ܰ),tjj0008_dan,tjj0008_dan,long,12; + Ͽܱ(ܰ),tjj0009_dan,tjj0009_dan,long,12; + ̵Ͽܱ(ܰ),tjj0010_dan,tjj0010_dan,long,12; + (ܰ),tjj0011_dan,tjj0011_dan,long,12; + (ܰ),tjj0018_dan,tjj0018_dan,long,12; + ΰ(ܰ)(+̵),tjj0016_dan,tjj0016_dan,long,12; + Ÿ(ܰ)(Ÿ+),tjj0017_dan,tjj0017_dan,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1752.res b/sample_python/Res/t1752.res new file mode 100644 index 0000000..cfa7a0a --- /dev/null +++ b/sample_python/Res/t1752.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,񺰻ȸ(t1752),t1752,attr,block,headtype=A; + BEGIN_DATA_MAP + t1752InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ȸ¥1,traddate1,traddate1,char,8; + ȸ¥2,traddate2,traddate2,char,8; + ܱ豸,fwgubun1,fwgubun1,char,1; + CTSIDX,cts_idx,cts_idx,long,4; + end + t1752OutBlock,⺻,output; + begin + ܱŵ,fwdvl,fwdvl,long,12; + ܱż,fwsvl,fwsvl,long,12; + CTSIDX,cts_idx,cts_idx,long,4; + end + t1752OutBlock1,1,output,occurs; + begin + ȸ,tradname,tradname,char,20; + ŵ,tradmdvol,tradmdvol,long,12; + ż,tradmsvol,tradmsvol,long,12; + ż,tradmssvol,tradmssvol,long,12; + âŷ,wintrd,wintrd,long,12; + ,winrat,winrat,float,6.1; + ȸڵ,tradno,tradno,char,3; + ܱ迩,wgubun,wgubun,char,1; + ,swinrat,swinrat,float,6.1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1752_2.res b/sample_python/Res/t1752_2.res new file mode 100644 index 0000000..cfa7a0a --- /dev/null +++ b/sample_python/Res/t1752_2.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,񺰻ȸ(t1752),t1752,attr,block,headtype=A; + BEGIN_DATA_MAP + t1752InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ȸ¥1,traddate1,traddate1,char,8; + ȸ¥2,traddate2,traddate2,char,8; + ܱ豸,fwgubun1,fwgubun1,char,1; + CTSIDX,cts_idx,cts_idx,long,4; + end + t1752OutBlock,⺻,output; + begin + ܱŵ,fwdvl,fwdvl,long,12; + ܱż,fwsvl,fwsvl,long,12; + CTSIDX,cts_idx,cts_idx,long,4; + end + t1752OutBlock1,1,output,occurs; + begin + ȸ,tradname,tradname,char,20; + ŵ,tradmdvol,tradmdvol,long,12; + ż,tradmsvol,tradmsvol,long,12; + ż,tradmssvol,tradmssvol,long,12; + âŷ,wintrd,wintrd,long,12; + ,winrat,winrat,float,6.1; + ȸڵ,tradno,tradno,char,3; + ܱ迩,wgubun,wgubun,char,1; + ,swinrat,swinrat,float,6.1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1764.res b/sample_python/Res/t1764.res new file mode 100644 index 0000000..390318f --- /dev/null +++ b/sample_python/Res/t1764.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ縮Ʈ(t1764),t1764,attr,block,headtype=A; + BEGIN_DATA_MAP + t1764InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + 1,gubun1,gubun1,char,1; + end + t1764OutBlock,1,output,occurs; + begin + ,rank,rank,long,4; + ŷȣ,tradno,tradno,char,3; + ŷ̸,tradname,tradname,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1764_2.res b/sample_python/Res/t1764_2.res new file mode 100644 index 0000000..390318f --- /dev/null +++ b/sample_python/Res/t1764_2.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ縮Ʈ(t1764),t1764,attr,block,headtype=A; + BEGIN_DATA_MAP + t1764InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + 1,gubun1,gubun1,char,1; + end + t1764OutBlock,1,output,occurs; + begin + ,rank,rank,long,4; + ŷȣ,tradno,tradno,char,3; + ŷ̸,tradname,tradname,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1771.res b/sample_python/Res/t1771.res new file mode 100644 index 0000000..611d2b6 --- /dev/null +++ b/sample_python/Res/t1771.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ(t1771),t1771,attr,block,headtype=A; + BEGIN_DATA_MAP + t1771InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ŷڵ,tradno,tradno,char,3; + 1,gubun1,gubun1,char,1; + ŷ¥1,traddate1,traddate1,char,8; + ŷ¥2,traddate2,traddate2,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ûǼ,cnt,cnt,int,3; + end + t1771OutBlock,⺻,output; + begin + CTSIDX,cts_idx,cts_idx,long,4; + end + t1771OutBlock2,2,output,occurs; + begin + ¥,traddate,traddate,char,8; + ð,tradtime,tradtime,char,8; + 簡,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵ,tradmdcha,tradmdcha,long,12; + ż,tradmscha,tradmscha,long,12; + ŵ,tradmdval,tradmdval,long,18; + ż,tradmsval,tradmsval,long,18; + ż,tradmsscha,tradmsscha,long,12; + ż,tradmttvolume,tradmttvolume,long,12; + մܰ,tradavg,tradavg,long,8; + մܰ,tradmttavg,tradmttavg,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1771_2.res b/sample_python/Res/t1771_2.res new file mode 100644 index 0000000..611d2b6 --- /dev/null +++ b/sample_python/Res/t1771_2.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ(t1771),t1771,attr,block,headtype=A; + BEGIN_DATA_MAP + t1771InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ŷڵ,tradno,tradno,char,3; + 1,gubun1,gubun1,char,1; + ŷ¥1,traddate1,traddate1,char,8; + ŷ¥2,traddate2,traddate2,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ûǼ,cnt,cnt,int,3; + end + t1771OutBlock,⺻,output; + begin + CTSIDX,cts_idx,cts_idx,long,4; + end + t1771OutBlock2,2,output,occurs; + begin + ¥,traddate,traddate,char,8; + ð,tradtime,tradtime,char,8; + 簡,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵ,tradmdcha,tradmdcha,long,12; + ż,tradmscha,tradmscha,long,12; + ŵ,tradmdval,tradmdval,long,18; + ż,tradmsval,tradmsval,long,18; + ż,tradmsscha,tradmsscha,long,12; + ż,tradmttvolume,tradmttvolume,long,12; + մܰ,tradavg,tradavg,long,8; + մܰ,tradmttavg,tradmttavg,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1809.res b/sample_python/Res/t1809.res new file mode 100644 index 0000000..18c280d --- /dev/null +++ b/sample_python/Res/t1809.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,ȣȸ(t1809),t1809,block,headtype=A; + BEGIN_DATA_MAP + t1809InBlock,⺻Է,input; + begin + ȣ,gubun,gubun,char,1; + 񱸺,jmGb,jmGb,char,1; + ڵ,jmcode,jmcode,char,6; + NEXTKEY,cts,cts,char,30; + end + t1809OutBlock,⺻,output; + begin + NEXTKEY,cts,cts,char,30; + end + t1809OutBlock1,⺻1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + ȣID,signal_id,signal_id,char,4; + ȣ,signal_desc,signal_desc,char,300; + ȣ,point,point,char,3; + ȣŰ,keyword,keyword,char,40; + ȣ,seq,seq,char,24; + ȣ,gubun,gubun,char,2; + ȣ,jmcode,jmcode,char,6; + 񰡰,price,price,long,7; + ȣ,sign,sign,char,1; + ,chgrate,chgrate,float,6.2; + ŷ,volume,volume,long,9; + ȣϽ,datetime,datetime,char,16; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1809_2.res b/sample_python/Res/t1809_2.res new file mode 100644 index 0000000..18c280d --- /dev/null +++ b/sample_python/Res/t1809_2.res @@ -0,0 +1,34 @@ +BEGIN_FUNCTION_MAP + .Func,ȣȸ(t1809),t1809,block,headtype=A; + BEGIN_DATA_MAP + t1809InBlock,⺻Է,input; + begin + ȣ,gubun,gubun,char,1; + 񱸺,jmGb,jmGb,char,1; + ڵ,jmcode,jmcode,char,6; + NEXTKEY,cts,cts,char,30; + end + t1809OutBlock,⺻,output; + begin + NEXTKEY,cts,cts,char,30; + end + t1809OutBlock1,⺻1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + ȣID,signal_id,signal_id,char,4; + ȣ,signal_desc,signal_desc,char,300; + ȣ,point,point,char,3; + ȣŰ,keyword,keyword,char,40; + ȣ,seq,seq,char,24; + ȣ,gubun,gubun,char,2; + ȣ,jmcode,jmcode,char,6; + 񰡰,price,price,long,7; + ȣ,sign,sign,char,1; + ,chgrate,chgrate,float,6.2; + ŷ,volume,volume,long,9; + ȣϽ,datetime,datetime,char,16; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1825.res b/sample_python/Res/t1825.res new file mode 100644 index 0000000..e261433 --- /dev/null +++ b/sample_python/Res/t1825.res @@ -0,0 +1,27 @@ +BEGIN_FUNCTION_MAP + .Func,QŬ˻(ťƮ)(t1825),t1825,attr,block,headtype=A; + BEGIN_DATA_MAP + t1825InBlock,⺻Է,input; + begin + ˻ڵ,search_cd,search_cd,char,4; + (0:ü1:ڽ2:ڽ),gubun,gubun,char,1; + end + t1825OutBlock,,output; + begin + ˻,JongCnt,JongCnt,long,4; + end + t1825OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + ϴ񱸺,sign,sign,char,1; + Ӻ,signcnt,signcnt,long,3; + 簡,close,close,long,9; + ϴ,change,change,long,9; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,10; + ŷϴ,volumerate,volumerate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1825_2.res b/sample_python/Res/t1825_2.res new file mode 100644 index 0000000..e261433 --- /dev/null +++ b/sample_python/Res/t1825_2.res @@ -0,0 +1,27 @@ +BEGIN_FUNCTION_MAP + .Func,QŬ˻(ťƮ)(t1825),t1825,attr,block,headtype=A; + BEGIN_DATA_MAP + t1825InBlock,⺻Է,input; + begin + ˻ڵ,search_cd,search_cd,char,4; + (0:ü1:ڽ2:ڽ),gubun,gubun,char,1; + end + t1825OutBlock,,output; + begin + ˻,JongCnt,JongCnt,long,4; + end + t1825OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,20; + ϴ񱸺,sign,sign,char,1; + Ӻ,signcnt,signcnt,long,3; + 簡,close,close,long,9; + ϴ,change,change,long,9; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,10; + ŷϴ,volumerate,volumerate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1826.res b/sample_python/Res/t1826.res new file mode 100644 index 0000000..d36e6c8 --- /dev/null +++ b/sample_python/Res/t1826.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,QŬ˻Ʈȸ(ťƮ)(t1826),t1826,block,headtype=A; + BEGIN_DATA_MAP + t1826InBlock,⺻Է,input; + begin + ˻(0:ٽɰ˻1:ǥ˻2:ü3:ڵ),search_gb,search_gb,char,1; + end + t1826OutBlock,,output,occurs; + begin + ˻ڵ,search_cd,search_cd,char,4; + ˻,search_nm,search_nm,char,40; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1826_2.res b/sample_python/Res/t1826_2.res new file mode 100644 index 0000000..d36e6c8 --- /dev/null +++ b/sample_python/Res/t1826_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,QŬ˻Ʈȸ(ťƮ)(t1826),t1826,block,headtype=A; + BEGIN_DATA_MAP + t1826InBlock,⺻Է,input; + begin + ˻(0:ٽɰ˻1:ǥ˻2:ü3:ڵ),search_gb,search_gb,char,1; + end + t1826OutBlock,,output,occurs; + begin + ˻ڵ,search_cd,search_cd,char,4; + ˻,search_nm,search_nm,char,40; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1857.res b/sample_python/Res/t1857.res new file mode 100644 index 0000000..d3a1ae5 --- /dev/null +++ b/sample_python/Res/t1857.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,e˻(ŹAPI),t1857,attr,block,headtype=A; + BEGIN_DATA_MAP + t1857InBlock,In(*EMPTY*),input; + begin + ǽð(0:ȸ 1:ǽð), sRealFlag, sRealFlag, char, 1 + ˻(F: S:), sSearchFlag, sSearchFlag, char, 1; + ˻Է°, query_index, query_index, char, 256; + end + t1857OutBlock,Out(*EMPTY*),output; + begin + ˻, result_count, result_count, long, 5; + ð, result_time, result_time, char, 6; + ǽðŰ, AlertNum, AlertNum, char, 11; + end + t1857OutBlock1,Out(*EMPTY*),output,occurs; + begin + ڵ, shcode, shcode, char, 7; + , hname, hname, char, 40; + 簡, price, price, long, 9; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 9; + , diff, diff, float, 6; + ŷ, volume, volume, long, 12; + (N: R: O:Ż), JobFlag, JobFlag, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/t1857_2.res b/sample_python/Res/t1857_2.res new file mode 100644 index 0000000..d3a1ae5 --- /dev/null +++ b/sample_python/Res/t1857_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,e˻(ŹAPI),t1857,attr,block,headtype=A; + BEGIN_DATA_MAP + t1857InBlock,In(*EMPTY*),input; + begin + ǽð(0:ȸ 1:ǽð), sRealFlag, sRealFlag, char, 1 + ˻(F: S:), sSearchFlag, sSearchFlag, char, 1; + ˻Է°, query_index, query_index, char, 256; + end + t1857OutBlock,Out(*EMPTY*),output; + begin + ˻, result_count, result_count, long, 5; + ð, result_time, result_time, char, 6; + ǽðŰ, AlertNum, AlertNum, char, 11; + end + t1857OutBlock1,Out(*EMPTY*),output,occurs; + begin + ڵ, shcode, shcode, char, 7; + , hname, hname, char, 40; + 簡, price, price, long, 9; + ϴ񱸺, sign, sign, char, 1; + ϴ, change, change, long, 9; + , diff, diff, float, 6; + ŷ, volume, volume, long, 12; + (N: R: O:Ż), JobFlag, JobFlag, char, 1; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/t1866.res b/sample_python/Res/t1866.res new file mode 100644 index 0000000..013b7c1 --- /dev/null +++ b/sample_python/Res/t1866.res @@ -0,0 +1,25 @@ +BEGIN_FUNCTION_MAP + .Func,ǸƮȸ(API)(t1866),t1866,ENCRYPT,block,headtype=A; + BEGIN_DATA_MAP + t1866InBlock,⺻Է,input; + begin + αID, user_id, user_id, char, 8; + ȸ, gb, gb, char, 1; + ׷, group_name, group_name, char, 40; + ӿ, cont, cont, char, 1; + Ű, contkey, cont_key, char, 40; + end + t1866OutBlock,,output; + begin + Ǽ, result_count, result_count, long, 5; + ӿ, cont, cont, char, 1; + Ű, contkey, cont_key, char, 40; + end + t1866OutBlock1,1,output,occurs; + begin + ε, query_index, query_index, char, 12; + ׷, group_name, group_name, char, 40; + , query_name, query_name, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/t1866_2.res b/sample_python/Res/t1866_2.res new file mode 100644 index 0000000..013b7c1 --- /dev/null +++ b/sample_python/Res/t1866_2.res @@ -0,0 +1,25 @@ +BEGIN_FUNCTION_MAP + .Func,ǸƮȸ(API)(t1866),t1866,ENCRYPT,block,headtype=A; + BEGIN_DATA_MAP + t1866InBlock,⺻Է,input; + begin + αID, user_id, user_id, char, 8; + ȸ, gb, gb, char, 1; + ׷, group_name, group_name, char, 40; + ӿ, cont, cont, char, 1; + Ű, contkey, cont_key, char, 40; + end + t1866OutBlock,,output; + begin + Ǽ, result_count, result_count, long, 5; + ӿ, cont, cont, char, 1; + Ű, contkey, cont_key, char, 40; + end + t1866OutBlock1,1,output,occurs; + begin + ε, query_index, query_index, char, 12; + ׷, group_name, group_name, char, 40; + , query_name, query_name, char, 40; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/t1901.res b/sample_python/Res/t1901.res new file mode 100644 index 0000000..89db486 --- /dev/null +++ b/sample_python/Res/t1901.res @@ -0,0 +1,147 @@ +BEGIN_FUNCTION_MAP + .Func,ETF簡(ü)ȸ(t1901),t1901,attr,block,headtype=A; + BEGIN_DATA_MAP + t1901InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1901OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ذ,recprice,recprice,long,8; + ,avg,avg,long,8; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ϰŷ,jnilvolume,jnilvolume,float,12; + ŷ,volumediff,volumediff,long,12; + ð,open,open,long,8; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + ܱκ,flmtvol,flmtvol,float,12; + PER,per,per,float,6.2; + ֽļ(õ),listing,listing,long,12; + ű,jkrate,jkrate,long,8; + ȸ,vol,vol,float,6.2; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + ְ,highyear,highyear,long,8; + ְ,highyeardate,highyeardate,char,8; + ,lowyear,lowyear,long,8; + ,lowyeardate,lowyeardate,char,8; + ,upname,upname,char,20; + ڵ,upcode,upcode,char,3; + 簡,upprice,upprice,float,7.2; + Ϻ񱸺,upsign,upsign,char,1; + ϴ,upchange,upchange,float,6.2; + ,updiff,updiff,float,6.2; + ֱٿ,futname,futname,char,20; + ֱٿڵ,futcode,futcode,char,8; + 簡,futprice,futprice,float,6.2; + Ϻ񱸺,futsign,futsign,char,1; + ϴ,futchange,futchange,float,6.2; + ,futdiff,futdiff,float,6.2; + NAV,nav,nav,float,8.2; + NAVϴ񱸺,navsign,navsign,char,1; + NAVϴ,navchange,navchange,float,8.2; + NAV,navdiff,navdiff,float,6.2; + ,cocrate,cocrate,float,6.2; + ,kasis,kasis,float,6.2; + 밡,subprice,subprice,long,10; + ŵǻڵ1,offerno1,offerno1,char,6; + żǻڵ1,bidno1,bidno1,char,6; + Ѹŵ1,dvol1,dvol1,long,8; + Ѹż1,svol1,svol1,long,8; + ŵ1,dcha1,dcha1,long,8; + ż1,scha1,scha1,long,8; + ŵ1,ddiff1,ddiff1,float,6.2; + ż1,sdiff1,sdiff1,float,6.2; + ŵǻڵ2,offerno2,offerno2,char,6; + żǻڵ2,bidno2,bidno2,char,6; + Ѹŵ2,dvol2,dvol2,long,8; + Ѹż2,svol2,svol2,long,8; + ŵ2,dcha2,dcha2,long,8; + ż2,scha2,scha2,long,8; + ŵ2,ddiff2,ddiff2,float,6.2; + ż2,sdiff2,sdiff2,float,6.2; + ŵǻڵ3,offerno3,offerno3,char,6; + żǻڵ3,bidno3,bidno3,char,6; + Ѹŵ3,dvol3,dvol3,long,8; + Ѹż3,svol3,svol3,long,8; + ŵ3,dcha3,dcha3,long,8; + ż3,scha3,scha3,long,8; + ŵ3,ddiff3,ddiff3,float,6.2; + ż3,sdiff3,sdiff3,float,6.2; + ŵǻڵ4,offerno4,offerno4,char,6; + żǻڵ4,bidno4,bidno4,char,6; + Ѹŵ4,dvol4,dvol4,long,8; + Ѹż4,svol4,svol4,long,8; + ŵ4,dcha4,dcha4,long,8; + ż4,scha4,scha4,long,8; + ŵ4,ddiff4,ddiff4,float,6.2; + ż4,sdiff4,sdiff4,float,6.2; + ŵǻڵ5,offerno5,offerno5,char,6; + żǻڵ5,bidno5,bidno5,char,6; + Ѹŵ5,dvol5,dvol5,long,8; + Ѹż5,svol5,svol5,long,8; + ŵ5,dcha5,dcha5,long,8; + ż5,scha5,scha5,long,8; + ŵ5,ddiff5,ddiff5,float,6.2; + ż5,sdiff5,sdiff5,float,6.2; + ܱŵհ,fwdvl,fwdvl,long,12; + ܱŵ,ftradmdcha,ftradmdcha,long,12; + ܱŵ,ftradmddiff,ftradmddiff,float,6.2; + ܱżհ,fwsvl,fwsvl,long,12; + ܱż,ftradmscha,ftradmscha,long,12; + ܱż,ftradmsdiff,ftradmsdiff,float,6.2; + ,upname2,upname2,char,20; + ڵ,upcode2,upcode2,char,3; + 簡,upprice2,upprice2,float,7.2; + NAV,jnilnav,jnilnav,float,8.2; + NAVϴ񱸺,jnilnavsign,jnilnavsign,char,1; + NAVϴ,jnilnavchange,jnilnavchange,float,8.2; + NAV,jnilnavdiff,jnilnavdiff,float,6.2; + ڻѾ(),etftotcap,etftotcap,long,12; + ,spread,spread,float,6.2; + ,leverage,leverage,long,2; + ,taxgubun,taxgubun,char,1; + ,opcom_nmk,opcom_nmk,char,20; + LP1,lp_nm1,lp_nm1,char,20; + LP2,lp_nm2,lp_nm2,char,20; + LP3,lp_nm3,lp_nm3,char,20; + LP4,lp_nm4,lp_nm4,char,20; + LP5,lp_nm5,lp_nm5,char,20; + ,etf_cp,etf_cp,char,10; + ǰ(Filler),etf_kind,etf_kind,char,10; + VIߵ,vi_gubun,vi_gubun,char,10; + ETNǰз,etn_kind_cd,etn_kind_cd,char,20; + ETN,lastymd,lastymd,char,8; + ETN,payday,payday,char,8; + ETNŷ,lastdate,lastdate,char,8; + ETN,issuernmk,issuernmk,char,20; + ETNȯݰ,last_sdate,last_sdate,char,8; + ETNȯݰ,last_edate,last_edate,char,8; + ETNLP,lp_holdvol,lp_holdvol,char,12; + ,listdate,listdate,char,8; + ETPǰڵ,etp_gb,etp_gb,char,1;/*1:ETF(ȸ)2:ETF()3:ETN4:սETN*/ + ETNȯɿ,etn_elback_yn,etn_elback_yn,char,1;/*ETNȯɿY/N2017.03.27*/ + ,settletype,settletype,char,2;/*01:02:ǹ03:+ǹ*/ + ڻзڵ(з),idx_asset_class1,idx_asset_class1,char,2; + ETF/ETN,ty_text,ty_text,char,8; + ͷ,leverage2,leverage2,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1901_2.res b/sample_python/Res/t1901_2.res new file mode 100644 index 0000000..89db486 --- /dev/null +++ b/sample_python/Res/t1901_2.res @@ -0,0 +1,147 @@ +BEGIN_FUNCTION_MAP + .Func,ETF簡(ü)ȸ(t1901),t1901,attr,block,headtype=A; + BEGIN_DATA_MAP + t1901InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1901OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ذ,recprice,recprice,long,8; + ,avg,avg,long,8; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ϰŷ,jnilvolume,jnilvolume,float,12; + ŷ,volumediff,volumediff,long,12; + ð,open,open,long,8; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + ܱκ,flmtvol,flmtvol,float,12; + PER,per,per,float,6.2; + ֽļ(õ),listing,listing,long,12; + ű,jkrate,jkrate,long,8; + ȸ,vol,vol,float,6.2; + ڵ,shcode,shcode,char,6; + ŷ,value,value,long,12; + ְ,highyear,highyear,long,8; + ְ,highyeardate,highyeardate,char,8; + ,lowyear,lowyear,long,8; + ,lowyeardate,lowyeardate,char,8; + ,upname,upname,char,20; + ڵ,upcode,upcode,char,3; + 簡,upprice,upprice,float,7.2; + Ϻ񱸺,upsign,upsign,char,1; + ϴ,upchange,upchange,float,6.2; + ,updiff,updiff,float,6.2; + ֱٿ,futname,futname,char,20; + ֱٿڵ,futcode,futcode,char,8; + 簡,futprice,futprice,float,6.2; + Ϻ񱸺,futsign,futsign,char,1; + ϴ,futchange,futchange,float,6.2; + ,futdiff,futdiff,float,6.2; + NAV,nav,nav,float,8.2; + NAVϴ񱸺,navsign,navsign,char,1; + NAVϴ,navchange,navchange,float,8.2; + NAV,navdiff,navdiff,float,6.2; + ,cocrate,cocrate,float,6.2; + ,kasis,kasis,float,6.2; + 밡,subprice,subprice,long,10; + ŵǻڵ1,offerno1,offerno1,char,6; + żǻڵ1,bidno1,bidno1,char,6; + Ѹŵ1,dvol1,dvol1,long,8; + Ѹż1,svol1,svol1,long,8; + ŵ1,dcha1,dcha1,long,8; + ż1,scha1,scha1,long,8; + ŵ1,ddiff1,ddiff1,float,6.2; + ż1,sdiff1,sdiff1,float,6.2; + ŵǻڵ2,offerno2,offerno2,char,6; + żǻڵ2,bidno2,bidno2,char,6; + Ѹŵ2,dvol2,dvol2,long,8; + Ѹż2,svol2,svol2,long,8; + ŵ2,dcha2,dcha2,long,8; + ż2,scha2,scha2,long,8; + ŵ2,ddiff2,ddiff2,float,6.2; + ż2,sdiff2,sdiff2,float,6.2; + ŵǻڵ3,offerno3,offerno3,char,6; + żǻڵ3,bidno3,bidno3,char,6; + Ѹŵ3,dvol3,dvol3,long,8; + Ѹż3,svol3,svol3,long,8; + ŵ3,dcha3,dcha3,long,8; + ż3,scha3,scha3,long,8; + ŵ3,ddiff3,ddiff3,float,6.2; + ż3,sdiff3,sdiff3,float,6.2; + ŵǻڵ4,offerno4,offerno4,char,6; + żǻڵ4,bidno4,bidno4,char,6; + Ѹŵ4,dvol4,dvol4,long,8; + Ѹż4,svol4,svol4,long,8; + ŵ4,dcha4,dcha4,long,8; + ż4,scha4,scha4,long,8; + ŵ4,ddiff4,ddiff4,float,6.2; + ż4,sdiff4,sdiff4,float,6.2; + ŵǻڵ5,offerno5,offerno5,char,6; + żǻڵ5,bidno5,bidno5,char,6; + Ѹŵ5,dvol5,dvol5,long,8; + Ѹż5,svol5,svol5,long,8; + ŵ5,dcha5,dcha5,long,8; + ż5,scha5,scha5,long,8; + ŵ5,ddiff5,ddiff5,float,6.2; + ż5,sdiff5,sdiff5,float,6.2; + ܱŵհ,fwdvl,fwdvl,long,12; + ܱŵ,ftradmdcha,ftradmdcha,long,12; + ܱŵ,ftradmddiff,ftradmddiff,float,6.2; + ܱżհ,fwsvl,fwsvl,long,12; + ܱż,ftradmscha,ftradmscha,long,12; + ܱż,ftradmsdiff,ftradmsdiff,float,6.2; + ,upname2,upname2,char,20; + ڵ,upcode2,upcode2,char,3; + 簡,upprice2,upprice2,float,7.2; + NAV,jnilnav,jnilnav,float,8.2; + NAVϴ񱸺,jnilnavsign,jnilnavsign,char,1; + NAVϴ,jnilnavchange,jnilnavchange,float,8.2; + NAV,jnilnavdiff,jnilnavdiff,float,6.2; + ڻѾ(),etftotcap,etftotcap,long,12; + ,spread,spread,float,6.2; + ,leverage,leverage,long,2; + ,taxgubun,taxgubun,char,1; + ,opcom_nmk,opcom_nmk,char,20; + LP1,lp_nm1,lp_nm1,char,20; + LP2,lp_nm2,lp_nm2,char,20; + LP3,lp_nm3,lp_nm3,char,20; + LP4,lp_nm4,lp_nm4,char,20; + LP5,lp_nm5,lp_nm5,char,20; + ,etf_cp,etf_cp,char,10; + ǰ(Filler),etf_kind,etf_kind,char,10; + VIߵ,vi_gubun,vi_gubun,char,10; + ETNǰз,etn_kind_cd,etn_kind_cd,char,20; + ETN,lastymd,lastymd,char,8; + ETN,payday,payday,char,8; + ETNŷ,lastdate,lastdate,char,8; + ETN,issuernmk,issuernmk,char,20; + ETNȯݰ,last_sdate,last_sdate,char,8; + ETNȯݰ,last_edate,last_edate,char,8; + ETNLP,lp_holdvol,lp_holdvol,char,12; + ,listdate,listdate,char,8; + ETPǰڵ,etp_gb,etp_gb,char,1;/*1:ETF(ȸ)2:ETF()3:ETN4:սETN*/ + ETNȯɿ,etn_elback_yn,etn_elback_yn,char,1;/*ETNȯɿY/N2017.03.27*/ + ,settletype,settletype,char,2;/*01:02:ǹ03:+ǹ*/ + ڻзڵ(з),idx_asset_class1,idx_asset_class1,char,2; + ETF/ETN,ty_text,ty_text,char,8; + ͷ,leverage2,leverage2,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1902.res b/sample_python/Res/t1902.res new file mode 100644 index 0000000..78a7dd5 --- /dev/null +++ b/sample_python/Res/t1902.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ETFð(t1902),t1902,attr,block,headtype=A; + BEGIN_DATA_MAP + t1902InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ð,time,time,char,6; + end + t1902OutBlock,,output; + begin + ð,time,time,char,6; + ,hname,hname,char,20; + ,upname,upname,char,20; + end + t1902OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ŷ,volume,volume,float,12; + NAV,navdiff,navdiff,float,9.2; + NAV,nav,nav,float,9.2; + ϴ,navchange,navchange,float,9.2; + ,crate,crate,float,9.2; + ,grate,grate,float,9.2; + ,jisu,jisu,float,8.2; + ϴ,jichange,jichange,float,8.2; + ϴ,jirate,jirate,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1902_2.res b/sample_python/Res/t1902_2.res new file mode 100644 index 0000000..78a7dd5 --- /dev/null +++ b/sample_python/Res/t1902_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ETFð(t1902),t1902,attr,block,headtype=A; + BEGIN_DATA_MAP + t1902InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ð,time,time,char,6; + end + t1902OutBlock,,output; + begin + ð,time,time,char,6; + ,hname,hname,char,20; + ,upname,upname,char,20; + end + t1902OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ŷ,volume,volume,float,12; + NAV,navdiff,navdiff,float,9.2; + NAV,nav,nav,float,9.2; + ϴ,navchange,navchange,float,9.2; + ,crate,crate,float,9.2; + ,grate,grate,float,9.2; + ,jisu,jisu,float,8.2; + ϴ,jichange,jichange,float,8.2; + ϴ,jirate,jirate,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1903.res b/sample_python/Res/t1903.res new file mode 100644 index 0000000..c3132dc --- /dev/null +++ b/sample_python/Res/t1903.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ETFϺ(t1903),t1903,attr,block,headtype=A; + BEGIN_DATA_MAP + t1903InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,date,date,char,8; + end + t1903OutBlock,,output; + begin + ,date,date,char,8; + ,hname,hname,char,20; + ,upname,upname,char,20; + end + t1903OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ŷ,volume,volume,float,12; + NAV,navdiff,navdiff,float,9.2; + NAV,nav,nav,float,9.2; + ϴ,navchange,navchange,float,9.2; + ,crate,crate,float,9.2; + ,grate,grate,float,9.2; + ,jisu,jisu,float,8.2; + ϴ,jichange,jichange,float,8.2; + ϴ,jirate,jirate,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1903_2.res b/sample_python/Res/t1903_2.res new file mode 100644 index 0000000..c3132dc --- /dev/null +++ b/sample_python/Res/t1903_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,ETFϺ(t1903),t1903,attr,block,headtype=A; + BEGIN_DATA_MAP + t1903InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,date,date,char,8; + end + t1903OutBlock,,output; + begin + ,date,date,char,8; + ,hname,hname,char,20; + ,upname,upname,char,20; + end + t1903OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ŷ,volume,volume,float,12; + NAV,navdiff,navdiff,float,9.2; + NAV,nav,nav,float,9.2; + ϴ,navchange,navchange,float,9.2; + ,crate,crate,float,9.2; + ,grate,grate,float,9.2; + ,jisu,jisu,float,8.2; + ϴ,jichange,jichange,float,8.2; + ϴ,jirate,jirate,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1904.res b/sample_python/Res/t1904.res new file mode 100644 index 0000000..5bd7cfe --- /dev/null +++ b/sample_python/Res/t1904.res @@ -0,0 +1,70 @@ +BEGIN_FUNCTION_MAP + .Func,ETFȸ(t1904),t1904,attr,block,headtype=A; + BEGIN_DATA_MAP + t1904InBlock,⺻Է,input; + begin + ETFڵ,shcode,shcode,char,6; + PDF,date,date,char,8; + ı(1:򰡱ݾ2:Ǽ),sgb,sgb,char,1; + end + t1904OutBlock,,output; + begin + ϱ,chk_tday,chk_tday,char,1; + PDF,date,date,char,8; + ETF簡,price,price,long,8; + ETFϴ񱸺,sign,sign,char,1; + ETFϴ,change,change,long,8; + ETF,diff,diff,float,6.2; + ETFŷ,volume,volume,long,12; + NAV,nav,nav,float,8.2; + NAVϴ񱸺,navsign,navsign,char,1; + NAVϴ,navchange,navchange,float,8.2; + NAV,navdiff,navdiff,float,6.2; + NAV,jnilnav,jnilnav,float,8.2; + NAVϴ񱸺,jnilnavsign,jnilnavsign,char,1; + NAVϴ,jnilnavchange,jnilnavchange,float,8.2; + NAV,jnilnavdiff,jnilnavdiff,float,6.2; + ,upname,upname,char,20; + ڵ,upcode,upcode,char,3; + 簡,upprice,upprice,float,7.2; + Ϻ񱸺,upsign,upsign,char,1; + ϴ,upchange,upchange,float,6.2; + ,updiff,updiff,float,6.2; + ֱٿ,futname,futname,char,20; + ֱٿڵ,futcode,futcode,char,8; + 簡,futprice,futprice,float,6.2; + Ϻ񱸺,futsign,futsign,char,1; + ϴ,futchange,futchange,float,6.2; + ,futdiff,futdiff,float,6.2; + ,upname2,upname2,char,20; + ڵ,upcode2,upcode2,char,3; + 簡,upprice2,upprice2,float,7.2; + ڻѾ(:),etftotcap,etftotcap,long,12; + ,etfnum,etfnum,long,4; + CUֽļ,etfcunum,etfcunum,long,12; + ,cash,cash,long,12; + ,opcom_nmk,opcom_nmk,char,20; + 򰡱ݾ,tot_pval,tot_pval,long,12; + 񱸼ðѾ,tot_sigatval,tot_sigatval,long,12; + end + t1904OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,12; + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ(鸸),value,value,long,12; + Ǽ(/ȭ/USD/â),icux,icux,long,12; + ׸ݾ/ݾ,parprice,parprice,long,12; + 򰡱ݾ,pvalue,pvalue,long,12; + ðѾ,sigatvalue,sigatvalue,long,12; + PDF,profitdate,profitdate,char,8; + (򰡱ݾ),weight,weight,float,6.2; + ETF,diff2,diff2,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1904_2.res b/sample_python/Res/t1904_2.res new file mode 100644 index 0000000..5bd7cfe --- /dev/null +++ b/sample_python/Res/t1904_2.res @@ -0,0 +1,70 @@ +BEGIN_FUNCTION_MAP + .Func,ETFȸ(t1904),t1904,attr,block,headtype=A; + BEGIN_DATA_MAP + t1904InBlock,⺻Է,input; + begin + ETFڵ,shcode,shcode,char,6; + PDF,date,date,char,8; + ı(1:򰡱ݾ2:Ǽ),sgb,sgb,char,1; + end + t1904OutBlock,,output; + begin + ϱ,chk_tday,chk_tday,char,1; + PDF,date,date,char,8; + ETF簡,price,price,long,8; + ETFϴ񱸺,sign,sign,char,1; + ETFϴ,change,change,long,8; + ETF,diff,diff,float,6.2; + ETFŷ,volume,volume,long,12; + NAV,nav,nav,float,8.2; + NAVϴ񱸺,navsign,navsign,char,1; + NAVϴ,navchange,navchange,float,8.2; + NAV,navdiff,navdiff,float,6.2; + NAV,jnilnav,jnilnav,float,8.2; + NAVϴ񱸺,jnilnavsign,jnilnavsign,char,1; + NAVϴ,jnilnavchange,jnilnavchange,float,8.2; + NAV,jnilnavdiff,jnilnavdiff,float,6.2; + ,upname,upname,char,20; + ڵ,upcode,upcode,char,3; + 簡,upprice,upprice,float,7.2; + Ϻ񱸺,upsign,upsign,char,1; + ϴ,upchange,upchange,float,6.2; + ,updiff,updiff,float,6.2; + ֱٿ,futname,futname,char,20; + ֱٿڵ,futcode,futcode,char,8; + 簡,futprice,futprice,float,6.2; + Ϻ񱸺,futsign,futsign,char,1; + ϴ,futchange,futchange,float,6.2; + ,futdiff,futdiff,float,6.2; + ,upname2,upname2,char,20; + ڵ,upcode2,upcode2,char,3; + 簡,upprice2,upprice2,float,7.2; + ڻѾ(:),etftotcap,etftotcap,long,12; + ,etfnum,etfnum,long,4; + CUֽļ,etfcunum,etfcunum,long,12; + ,cash,cash,long,12; + ,opcom_nmk,opcom_nmk,char,20; + 򰡱ݾ,tot_pval,tot_pval,long,12; + 񱸼ðѾ,tot_sigatval,tot_sigatval,long,12; + end + t1904OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,12; + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ(鸸),value,value,long,12; + Ǽ(/ȭ/USD/â),icux,icux,long,12; + ׸ݾ/ݾ,parprice,parprice,long,12; + 򰡱ݾ,pvalue,pvalue,long,12; + ðѾ,sigatvalue,sigatvalue,long,12; + PDF,profitdate,profitdate,char,8; + (򰡱ݾ),weight,weight,float,6.2; + ETF,diff2,diff2,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1906.res b/sample_python/Res/t1906.res new file mode 100644 index 0000000..8fcef05 --- /dev/null +++ b/sample_python/Res/t1906.res @@ -0,0 +1,119 @@ +BEGIN_FUNCTION_MAP + .Func,ETFLPȣ(t1906),t1906,attr,block,headtype=A; + BEGIN_DATA_MAP + t1906InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1906OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + LPŵȣ1,lp_offerrem1,lp_offerrem1,long,12; + LPżȣ1,lp_bidrem1,lp_bidrem1,long,12; + LPŵȣ2,lp_offerrem2,lp_offerrem2,long,12; + LPżȣ2,lp_bidrem2,lp_bidrem2,long,12; + LPŵȣ3,lp_offerrem3,lp_offerrem3,long,12; + LPżȣ3,lp_bidrem3,lp_bidrem3,long,12; + LPŵȣ4,lp_offerrem4,lp_offerrem4,long,12; + LPżȣ4,lp_bidrem4,lp_bidrem4,long,12; + LPŵȣ5,lp_offerrem5,lp_offerrem5,long,12; + LPżȣ5,lp_bidrem5,lp_bidrem5,long,12; + LPŵȣ6,lp_offerrem6,lp_offerrem6,long,12; + LPżȣ6,lp_bidrem6,lp_bidrem6,long,12; + LPŵȣ7,lp_offerrem7,lp_offerrem7,long,12; + LPżȣ7,lp_bidrem7,lp_bidrem7,long,12; + LPŵȣ8,lp_offerrem8,lp_offerrem8,long,12; + LPżȣ8,lp_bidrem8,lp_bidrem8,long,12; + LPŵȣ9,lp_offerrem9,lp_offerrem9,long,12; + LPżȣ9,lp_bidrem9,lp_bidrem9,long,12; + LPŵȣ10,lp_offerrem10,lp_offerrem10,long,12; + LPżȣ10,lp_bidrem10,lp_bidrem10,long,12; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,12; + żȣ1,bidrem1,bidrem1,long,12; + ŵ1,preoffercha1,preoffercha1,long,12; + ż1,prebidcha1,prebidcha1,long,12; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,12; + żȣ2,bidrem2,bidrem2,long,12; + ŵ2,preoffercha2,preoffercha2,long,12; + ż2,prebidcha2,prebidcha2,long,12; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,12; + żȣ3,bidrem3,bidrem3,long,12; + ŵ3,preoffercha3,preoffercha3,long,12; + ż3,prebidcha3,prebidcha3,long,12; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,12; + żȣ4,bidrem4,bidrem4,long,12; + ŵ4,preoffercha4,preoffercha4,long,12; + ż4,prebidcha4,prebidcha4,long,12; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,12; + żȣ5,bidrem5,bidrem5,long,12; + ŵ5,preoffercha5,preoffercha5,long,12; + ż5,prebidcha5,prebidcha5,long,12; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,12; + żȣ6,bidrem6,bidrem6,long,12; + ŵ6,preoffercha6,preoffercha6,long,12; + ż6,prebidcha6,prebidcha6,long,12; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,12; + żȣ7,bidrem7,bidrem7,long,12; + ŵ7,preoffercha7,preoffercha7,long,12; + ż7,prebidcha7,prebidcha7,long,12; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,12; + żȣ8,bidrem8,bidrem8,long,12; + ŵ8,preoffercha8,preoffercha8,long,12; + ż8,prebidcha8,prebidcha8,long,12; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,12; + żȣ9,bidrem9,bidrem9,long,12; + ŵ9,preoffercha9,preoffercha9,long,12; + ż9,prebidcha9,prebidcha9,long,12; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,12; + żȣ10,bidrem10,bidrem10,long,12; + ŵ10,preoffercha10,preoffercha10,long,12; + ż10,prebidcha10,prebidcha10,long,12; + ŵȣ,offer,offer,long,12; + żȣ,bid,bid,long,12; + ŵ,preoffercha,preoffercha,long,12; + ż,prebidcha,prebidcha,long,12; + Žð,hotime,hotime,char,8; + üᰡ,yeprice,yeprice,long,8; + ü,yevolume,yevolume,long,12; + üϱ,yesign,yesign,char,1; + üϴ,yechange,yechange,long,8; + ü,yediff,yediff,float,6.2; + ðܸŵܷ,tmoffer,tmoffer,long,12; + ðܸżܷ,tmbid,tmbid,long,12; + ñ,ho_status,ho_status,char,1; + ڵ,shcode,shcode,char,6; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1906_2.res b/sample_python/Res/t1906_2.res new file mode 100644 index 0000000..8fcef05 --- /dev/null +++ b/sample_python/Res/t1906_2.res @@ -0,0 +1,119 @@ +BEGIN_FUNCTION_MAP + .Func,ETFLPȣ(t1906),t1906,attr,block,headtype=A; + BEGIN_DATA_MAP + t1906InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1906OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + LPŵȣ1,lp_offerrem1,lp_offerrem1,long,12; + LPżȣ1,lp_bidrem1,lp_bidrem1,long,12; + LPŵȣ2,lp_offerrem2,lp_offerrem2,long,12; + LPżȣ2,lp_bidrem2,lp_bidrem2,long,12; + LPŵȣ3,lp_offerrem3,lp_offerrem3,long,12; + LPżȣ3,lp_bidrem3,lp_bidrem3,long,12; + LPŵȣ4,lp_offerrem4,lp_offerrem4,long,12; + LPżȣ4,lp_bidrem4,lp_bidrem4,long,12; + LPŵȣ5,lp_offerrem5,lp_offerrem5,long,12; + LPżȣ5,lp_bidrem5,lp_bidrem5,long,12; + LPŵȣ6,lp_offerrem6,lp_offerrem6,long,12; + LPżȣ6,lp_bidrem6,lp_bidrem6,long,12; + LPŵȣ7,lp_offerrem7,lp_offerrem7,long,12; + LPżȣ7,lp_bidrem7,lp_bidrem7,long,12; + LPŵȣ8,lp_offerrem8,lp_offerrem8,long,12; + LPżȣ8,lp_bidrem8,lp_bidrem8,long,12; + LPŵȣ9,lp_offerrem9,lp_offerrem9,long,12; + LPżȣ9,lp_bidrem9,lp_bidrem9,long,12; + LPŵȣ10,lp_offerrem10,lp_offerrem10,long,12; + LPżȣ10,lp_bidrem10,lp_bidrem10,long,12; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,12; + żȣ1,bidrem1,bidrem1,long,12; + ŵ1,preoffercha1,preoffercha1,long,12; + ż1,prebidcha1,prebidcha1,long,12; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,12; + żȣ2,bidrem2,bidrem2,long,12; + ŵ2,preoffercha2,preoffercha2,long,12; + ż2,prebidcha2,prebidcha2,long,12; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,12; + żȣ3,bidrem3,bidrem3,long,12; + ŵ3,preoffercha3,preoffercha3,long,12; + ż3,prebidcha3,prebidcha3,long,12; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,12; + żȣ4,bidrem4,bidrem4,long,12; + ŵ4,preoffercha4,preoffercha4,long,12; + ż4,prebidcha4,prebidcha4,long,12; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,12; + żȣ5,bidrem5,bidrem5,long,12; + ŵ5,preoffercha5,preoffercha5,long,12; + ż5,prebidcha5,prebidcha5,long,12; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,12; + żȣ6,bidrem6,bidrem6,long,12; + ŵ6,preoffercha6,preoffercha6,long,12; + ż6,prebidcha6,prebidcha6,long,12; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,12; + żȣ7,bidrem7,bidrem7,long,12; + ŵ7,preoffercha7,preoffercha7,long,12; + ż7,prebidcha7,prebidcha7,long,12; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,12; + żȣ8,bidrem8,bidrem8,long,12; + ŵ8,preoffercha8,preoffercha8,long,12; + ż8,prebidcha8,prebidcha8,long,12; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,12; + żȣ9,bidrem9,bidrem9,long,12; + ŵ9,preoffercha9,preoffercha9,long,12; + ż9,prebidcha9,prebidcha9,long,12; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,12; + żȣ10,bidrem10,bidrem10,long,12; + ŵ10,preoffercha10,preoffercha10,long,12; + ż10,prebidcha10,prebidcha10,long,12; + ŵȣ,offer,offer,long,12; + żȣ,bid,bid,long,12; + ŵ,preoffercha,preoffercha,long,12; + ż,prebidcha,prebidcha,long,12; + Žð,hotime,hotime,char,8; + üᰡ,yeprice,yeprice,long,8; + ü,yevolume,yevolume,long,12; + üϱ,yesign,yesign,char,1; + üϴ,yechange,yechange,long,8; + ü,yediff,yediff,float,6.2; + ðܸŵܷ,tmoffer,tmoffer,long,12; + ðܸżܷ,tmbid,tmbid,long,12; + ñ,ho_status,ho_status,char,1; + ڵ,shcode,shcode,char,6; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1921.res b/sample_python/Res/t1921.res new file mode 100644 index 0000000..d799be0 --- /dev/null +++ b/sample_python/Res/t1921.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ſŷ(t1921),t1921,attr,block,headtype=A; + BEGIN_DATA_MAP + t1921InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ڴֱ,gubun,gubun,char,1; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1921OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1921OutBlock1,1,output,occurs; + begin + ¥,mmdate,mmdate,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,jchange,jchange,long,8; + ,diff,diff,float,6.2; + ű,nvolume,nvolume,long,8; + ȯ,svolume,svolume,long,8; + ܰ,jvolume,jvolume,long,8; + ݾ,price,price,long,8; + ,change,change,long,8; + ,gyrate,gyrate,float,6.2; + ܰ,jkrate,jkrate,float,6.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1921_2.res b/sample_python/Res/t1921_2.res new file mode 100644 index 0000000..d799be0 --- /dev/null +++ b/sample_python/Res/t1921_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ſŷ(t1921),t1921,attr,block,headtype=A; + BEGIN_DATA_MAP + t1921InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ڴֱ,gubun,gubun,char,1; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1921OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + ¥,date,date,char,8; + IDX,idx,idx,long,4; + end + t1921OutBlock1,1,output,occurs; + begin + ¥,mmdate,mmdate,char,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,jchange,jchange,long,8; + ,diff,diff,float,6.2; + ű,nvolume,nvolume,long,8; + ȯ,svolume,svolume,long,8; + ܰ,jvolume,jvolume,long,8; + ݾ,price,price,long,8; + ,change,change,long,8; + ,gyrate,gyrate,float,6.2; + ܰ,jkrate,jkrate,float,6.2; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1926.res b/sample_python/Res/t1926.res new file mode 100644 index 0000000..2d2996d --- /dev/null +++ b/sample_python/Res/t1926.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,񺰽ſ(t1926),t1926,attr,block,headtype=A; + BEGIN_DATA_MAP + t1926InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1926OutBlock,,output; + begin + ڽűԼ,ynvolume,ynvolume,long,8; + ڻȯ,ysvolume,ysvolume,long,8; + ܰ,yjvolume,yjvolume,long,8; + ڼ,yvchange,yvchange,long,8; + ڰ,ygrate,ygrate,float,9.2; + ܰ,yjrate,yjrate,float,9.2; + ڽűԱݾ,ynprice,ynprice,long,8; + ڻȯݾ,ysprice,ysprice,long,8; + ܰݾ,yjprice,yjprice,long,8; + ڱݾ״,yachange,yachange,long,8; + ֽűԼ,dnvolume,dnvolume,long,8; + ֻȯ,dsvolume,dsvolume,long,8; + ܰ,djvolume,djvolume,long,8; + ּ,dvchange,dvchange,long,8; + ְ,dgrate,dgrate,float,9.2; + ܰ,djrate,djrate,float,9.2; + ֽűԱݾ,dnprice,dnprice,long,8; + ֻȯݾ,dsprice,dsprice,long,8; + ܰݾ,djprice,djprice,long,8; + ֱݾ״,dachange,dachange,long,8; + ,mmdate,mmdate,char,8; + ,close,close,long,8; + ϰŷ,volume,volume,long,10; + ϰŷ,value,value,long,12; + ְ5,pr5days,pr5days,float,9.2; + ְ20,pr20days,pr20days,float,9.2; + 5,yj5days,yj5days,float,9.2; + 20,yj20days,yj20days,float,9.2; + 5,dj5days,dj5days,float,9.2; + 20,dj20days,dj20days,float,9.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1926_2.res b/sample_python/Res/t1926_2.res new file mode 100644 index 0000000..2d2996d --- /dev/null +++ b/sample_python/Res/t1926_2.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,񺰽ſ(t1926),t1926,attr,block,headtype=A; + BEGIN_DATA_MAP + t1926InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1926OutBlock,,output; + begin + ڽűԼ,ynvolume,ynvolume,long,8; + ڻȯ,ysvolume,ysvolume,long,8; + ܰ,yjvolume,yjvolume,long,8; + ڼ,yvchange,yvchange,long,8; + ڰ,ygrate,ygrate,float,9.2; + ܰ,yjrate,yjrate,float,9.2; + ڽűԱݾ,ynprice,ynprice,long,8; + ڻȯݾ,ysprice,ysprice,long,8; + ܰݾ,yjprice,yjprice,long,8; + ڱݾ״,yachange,yachange,long,8; + ֽűԼ,dnvolume,dnvolume,long,8; + ֻȯ,dsvolume,dsvolume,long,8; + ܰ,djvolume,djvolume,long,8; + ּ,dvchange,dvchange,long,8; + ְ,dgrate,dgrate,float,9.2; + ܰ,djrate,djrate,float,9.2; + ֽűԱݾ,dnprice,dnprice,long,8; + ֻȯݾ,dsprice,dsprice,long,8; + ܰݾ,djprice,djprice,long,8; + ֱݾ״,dachange,dachange,long,8; + ,mmdate,mmdate,char,8; + ,close,close,long,8; + ϰŷ,volume,volume,long,10; + ϰŷ,value,value,long,12; + ְ5,pr5days,pr5days,float,9.2; + ְ20,pr20days,pr20days,float,9.2; + 5,yj5days,yj5days,float,9.2; + 20,yj20days,yj20days,float,9.2; + 5,dj5days,dj5days,float,9.2; + 20,dj20days,dj20days,float,9.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1927.res b/sample_python/Res/t1927.res new file mode 100644 index 0000000..947225a --- /dev/null +++ b/sample_python/Res/t1927.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ŵϺ(t1927),t1927,attr,block,headtype=A; + BEGIN_DATA_MAP + t1927InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,date,date,char,8; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + end + t1927OutBlock,,output; + begin + CTS,date,date,char,8; + end + t1927OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ŵ,gm_vo,gm_vo,long,12; + ŵ,gm_va,gm_va,long,12; + ŵŷ,gm_per,gm_per,float,6.2; + հŵܰ,gm_avg,gm_avg,long,12; + ŵ,gm_vo_sum,gm_vo_sum,long,12; + ƽŵ,gm_vo1,gm_vo1,long,12; + ƽŵ,gm_va1,gm_va1,long,12; + ƽ꿹ܰŵ,gm_vo2,gm_vo2,long,12; + ƽ꿹ܰŵ,gm_va2,gm_va2,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1927_2.res b/sample_python/Res/t1927_2.res new file mode 100644 index 0000000..947225a --- /dev/null +++ b/sample_python/Res/t1927_2.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ŵϺ(t1927),t1927,attr,block,headtype=A; + BEGIN_DATA_MAP + t1927InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,date,date,char,8; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + end + t1927OutBlock,,output; + begin + CTS,date,date,char,8; + end + t1927OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ŵ,gm_vo,gm_vo,long,12; + ŵ,gm_va,gm_va,long,12; + ŵŷ,gm_per,gm_per,float,6.2; + հŵܰ,gm_avg,gm_avg,long,12; + ŵ,gm_vo_sum,gm_vo_sum,long,12; + ƽŵ,gm_vo1,gm_vo1,long,12; + ƽŵ,gm_va1,gm_va1,long,12; + ƽ꿹ܰŵ,gm_vo2,gm_vo2,long,12; + ƽ꿹ܰŵ,gm_va2,gm_va2,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1941.res b/sample_python/Res/t1941.res new file mode 100644 index 0000000..dfa7904 --- /dev/null +++ b/sample_python/Res/t1941.res @@ -0,0 +1,27 @@ +BEGIN_FUNCTION_MAP + .Func,񺰴ŷϰ(t1941),t1941,attr,block,headtype=A; + BEGIN_DATA_MAP + t1941InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + end + t1941OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ü,upvolume,upvolume,long,12; + ϻȯ,dnvolume,dnvolume,long,12; + ܰ,tovolume,tovolume,long,12; + ܰݾ,tovalue,tovalue,long,12; + ڵ,shcode,shcode,char,6; + ,tovoldif,tovoldif,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1941_2.res b/sample_python/Res/t1941_2.res new file mode 100644 index 0000000..dfa7904 --- /dev/null +++ b/sample_python/Res/t1941_2.res @@ -0,0 +1,27 @@ +BEGIN_FUNCTION_MAP + .Func,񺰴ŷϰ(t1941),t1941,attr,block,headtype=A; + BEGIN_DATA_MAP + t1941InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + end + t1941OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ,price,price,long,8; + 񱸺,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ü,upvolume,upvolume,long,12; + ϻȯ,dnvolume,dnvolume,long,12; + ܰ,tovolume,tovolume,long,12; + ܰݾ,tovalue,tovalue,long,12; + ڵ,shcode,shcode,char,6; + ,tovoldif,tovoldif,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1950.res b/sample_python/Res/t1950.res new file mode 100644 index 0000000..7106f20 --- /dev/null +++ b/sample_python/Res/t1950.res @@ -0,0 +1,105 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡(ü)ȸ(t1950),t1950,attr,block,headtype=A; + BEGIN_DATA_MAP + t1950InBlock,⺻Է,input; + begin + ELWڵ,shcode,shcode,char,6; + end + t1950OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + üð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,cvolume,cvolume,long,10; + ŷ,volume,volume,float,12; + ذ,recprice,recprice,long,8; + ,avg,avg,long,8; + ϰŷ,jnilvolume,jnilvolume,float,12; + ϵðŷ,jvolume,jvolume,float,12; + ,jnilclose,jnilclose,long,8; + ŷ,volumechg,volumechg,float,12; + ŷ,volumediff,volumediff,float,6.2; + ð,open,open,long,8; + ð,odiff,odiff,float,6.2; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ,hdiff,hdiff,float,6.2; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ,ldiff,ldiff,float,6.2; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdiff,high52wdiff,float,6.2; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdiff,low52wdiff,float,6.2; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + ֽļ(õ),listing,listing,float,12; + ,memedan,memedan,char,5; + ȸ,vol,vol,float,6.2; + иƼ,parity,parity,float,8.2; + ͺб,berate,berate,float,8.2; + ,gearing,gearing,float,8.2; + 簡,elwexec,elwexec,float,8.2; + డ,issueprice,issueprice,long,8; + ȯ,convrate,convrate,float,12.4; + ŷ,lastdate,lastdate,char,8; + ں,capt,capt,float,8.2; + e.,egearing,egearing,float,8.2; + ̾,premium,premium,float,8.2; + ,spread,spread,float,6.2; + ִ뽺,espread,espread,float,6.2; + ̷а,theoryprice,theoryprice,float,10.2; + 纯,impv,impv,float,6.2; + ,moneyness,moneyness,char,1; + Ÿ,delt,delt,float,8.6; + ,gama,gama,float,8.6; + ,vega,vega,float,13.6; + Ÿ,ceta,ceta,float,13.6; + ,rhox,rhox,float,13.6; + ϼ,bjandatecnt,bjandatecnt,long,4; + 簳,mmsdate,mmsdate,char,8; + ,mmedate,mmedate,char,8; + ,payday,payday,char,8; + ,listdate,listdate,char,8; + LPȸ,lpmem,lpmem,char,20; + LP,lp_holdvol,lp_holdvol,float,12; + ڻڵ,bcode,bcode,char,6; + ڻ걸,bgubun,bgubun,char,1; + ڻ簡,bprice,bprice,long,8; + ڻϺ񱸺,bsign,bsign,char,1; + ڻϺ,bchange,bchange,long,8; + ڻ,bdiff,bdiff,float,6.2; + ڻŷ,bvolume,bvolume,float,12; + ,info1,info1,char,10; + /޵,info2,info2,char,10; + /屸,info3,info3,char,10; + /ҼDZ,info4,info4,char,12; + 屸,janginfo,janginfo,char,10; + ٽϱ,basketgb,basketgb,char,1; + ٽϰ,basketcnt,basketcnt,long,3; + ELWǸ,elwtype,elwtype,char,2; + ELW,settletype,settletype,char,2; + LPֹɿ,lpord,lpord,char,2; + Ǹ,elwdetail,elwdetail,char,100; + 򰡰ݹ,valuation,valuation,char,100; + end + t1950OutBlock1,1,output,occurs; + begin + ڻڵ,bskcode,bskcode,char,6; + ڻ,bskbno,bskbno,long,3; + ڻ簡,bskprice,bskprice,long,8; + ڻϺ񱸺,bsksign,bsksign,char,1; + ڻϺ,bskchange,bskchange,long,8; + ڻ,bskdiff,bskdiff,float,6.2; + ڻŷ,bskvolume,bskvolume,float,12; + ڻ,bskjnilclose,bskjnilclose,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1950 \ No newline at end of file diff --git a/sample_python/Res/t1950_2.res b/sample_python/Res/t1950_2.res new file mode 100644 index 0000000..7106f20 --- /dev/null +++ b/sample_python/Res/t1950_2.res @@ -0,0 +1,105 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡(ü)ȸ(t1950),t1950,attr,block,headtype=A; + BEGIN_DATA_MAP + t1950InBlock,⺻Է,input; + begin + ELWڵ,shcode,shcode,char,6; + end + t1950OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + üð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,cvolume,cvolume,long,10; + ŷ,volume,volume,float,12; + ذ,recprice,recprice,long,8; + ,avg,avg,long,8; + ϰŷ,jnilvolume,jnilvolume,float,12; + ϵðŷ,jvolume,jvolume,float,12; + ,jnilclose,jnilclose,long,8; + ŷ,volumechg,volumechg,float,12; + ŷ,volumediff,volumediff,float,6.2; + ð,open,open,long,8; + ð,odiff,odiff,float,6.2; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ,hdiff,hdiff,float,6.2; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ,ldiff,ldiff,float,6.2; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdiff,high52wdiff,float,6.2; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdiff,low52wdiff,float,6.2; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + ֽļ(õ),listing,listing,float,12; + ,memedan,memedan,char,5; + ȸ,vol,vol,float,6.2; + иƼ,parity,parity,float,8.2; + ͺб,berate,berate,float,8.2; + ,gearing,gearing,float,8.2; + 簡,elwexec,elwexec,float,8.2; + డ,issueprice,issueprice,long,8; + ȯ,convrate,convrate,float,12.4; + ŷ,lastdate,lastdate,char,8; + ں,capt,capt,float,8.2; + e.,egearing,egearing,float,8.2; + ̾,premium,premium,float,8.2; + ,spread,spread,float,6.2; + ִ뽺,espread,espread,float,6.2; + ̷а,theoryprice,theoryprice,float,10.2; + 纯,impv,impv,float,6.2; + ,moneyness,moneyness,char,1; + Ÿ,delt,delt,float,8.6; + ,gama,gama,float,8.6; + ,vega,vega,float,13.6; + Ÿ,ceta,ceta,float,13.6; + ,rhox,rhox,float,13.6; + ϼ,bjandatecnt,bjandatecnt,long,4; + 簳,mmsdate,mmsdate,char,8; + ,mmedate,mmedate,char,8; + ,payday,payday,char,8; + ,listdate,listdate,char,8; + LPȸ,lpmem,lpmem,char,20; + LP,lp_holdvol,lp_holdvol,float,12; + ڻڵ,bcode,bcode,char,6; + ڻ걸,bgubun,bgubun,char,1; + ڻ簡,bprice,bprice,long,8; + ڻϺ񱸺,bsign,bsign,char,1; + ڻϺ,bchange,bchange,long,8; + ڻ,bdiff,bdiff,float,6.2; + ڻŷ,bvolume,bvolume,float,12; + ,info1,info1,char,10; + /޵,info2,info2,char,10; + /屸,info3,info3,char,10; + /ҼDZ,info4,info4,char,12; + 屸,janginfo,janginfo,char,10; + ٽϱ,basketgb,basketgb,char,1; + ٽϰ,basketcnt,basketcnt,long,3; + ELWǸ,elwtype,elwtype,char,2; + ELW,settletype,settletype,char,2; + LPֹɿ,lpord,lpord,char,2; + Ǹ,elwdetail,elwdetail,char,100; + 򰡰ݹ,valuation,valuation,char,100; + end + t1950OutBlock1,1,output,occurs; + begin + ڻڵ,bskcode,bskcode,char,6; + ڻ,bskbno,bskbno,long,3; + ڻ簡,bskprice,bskprice,long,8; + ڻϺ񱸺,bsksign,bsksign,char,1; + ڻϺ,bskchange,bskchange,long,8; + ڻ,bskdiff,bskdiff,float,6.2; + ڻŷ,bskvolume,bskvolume,float,12; + ڻ,bskjnilclose,bskjnilclose,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1950 \ No newline at end of file diff --git a/sample_python/Res/t1951.res b/sample_python/Res/t1951.res new file mode 100644 index 0000000..770ff51 --- /dev/null +++ b/sample_python/Res/t1951.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ELWð뺰üȸ(t1951),t1951,attr,block,headtype=A; + BEGIN_DATA_MAP + t1951InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,starttime,starttime,char,4; + ð,endtime,endtime,char,4; + ðCTS,cts_time,cts_time,char,8; + end + t1951OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,8; + end + t1951OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,12; + üᰭ,chdegree,chdegree,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + üᷮ,revolume,revolume,long,12; + üǼ,rechecnt,rechecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1951 \ No newline at end of file diff --git a/sample_python/Res/t1951_2.res b/sample_python/Res/t1951_2.res new file mode 100644 index 0000000..770ff51 --- /dev/null +++ b/sample_python/Res/t1951_2.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ELWð뺰üȸ(t1951),t1951,attr,block,headtype=A; + BEGIN_DATA_MAP + t1951InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,starttime,starttime,char,4; + ð,endtime,endtime,char,4; + ðCTS,cts_time,cts_time,char,8; + end + t1951OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,8; + end + t1951OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,12; + üᰭ,chdegree,chdegree,float,8.2; + ŷ,volume,volume,long,12; + ŵü,mdvolume,mdvolume,long,12; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,12; + żüǼ,mschecnt,mschecnt,long,8; + üᷮ,revolume,revolume,long,12; + üǼ,rechecnt,rechecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1951 \ No newline at end of file diff --git a/sample_python/Res/t1954.res b/sample_python/Res/t1954.res new file mode 100644 index 0000000..844256f --- /dev/null +++ b/sample_python/Res/t1954.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,ELWϺְ(t1954),t1954,attr,block,headtype=A; + BEGIN_DATA_MAP + t1954InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ¥,date,date,char,8; + Ǽ,cnt,cnt,long,3; + end + t1954OutBlock,,output; + begin + ¥,date,date,char,8; + ڻ걸,bsjgubun,bsjgubun,char,1; + ڻڵ(),bscode,bscode,char,6; + ڻڵ(),bjcode,bjcode,char,3; + end + t1954OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ڻ(),bsprice,bsprice,long,8; + ڻ(),bjprice,bjprice,float,8.2; + ϴ񱸺,bsign,bsign,char,1; + ϴ(),bschange,bschange,long,8; + ϴ(),bjchange,bjchange,float,8.2; + ,bdiff,bdiff,float,6.2; + ڻŷ,bvolume,bvolume,float,12; + иƼ,parity,parity,float,6.2; + e.,egearing,egearing,float,6.2; + ̾,premium,premium,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + Moneyness,mness,mness,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1954 \ No newline at end of file diff --git a/sample_python/Res/t1954_2.res b/sample_python/Res/t1954_2.res new file mode 100644 index 0000000..844256f --- /dev/null +++ b/sample_python/Res/t1954_2.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,ELWϺְ(t1954),t1954,attr,block,headtype=A; + BEGIN_DATA_MAP + t1954InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ¥,date,date,char,8; + Ǽ,cnt,cnt,long,3; + end + t1954OutBlock,,output; + begin + ¥,date,date,char,8; + ڻ걸,bsjgubun,bsjgubun,char,1; + ڻڵ(),bscode,bscode,char,6; + ڻڵ(),bjcode,bjcode,char,3; + end + t1954OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ڻ(),bsprice,bsprice,long,8; + ڻ(),bjprice,bjprice,float,8.2; + ϴ񱸺,bsign,bsign,char,1; + ϴ(),bschange,bschange,long,8; + ϴ(),bjchange,bjchange,float,8.2; + ,bdiff,bdiff,float,6.2; + ڻŷ,bvolume,bvolume,float,12; + иƼ,parity,parity,float,6.2; + e.,egearing,egearing,float,6.2; + ̾,premium,premium,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + Moneyness,mness,mness,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1954 \ No newline at end of file diff --git a/sample_python/Res/t1955.res b/sample_python/Res/t1955.res new file mode 100644 index 0000000..ce77a87 --- /dev/null +++ b/sample_python/Res/t1955.res @@ -0,0 +1,95 @@ +BEGIN_FUNCTION_MAP + .Func,ELWǥ˻(t1955),t1955,attr,block,headtype=A; + BEGIN_DATA_MAP + t1955InBlock,Է,input; + begin + ڻchk,chkitem,chkitem,char,1; + ڻڵ,cbitem,cbitem,char,12; + chk,chkissuer,chkissuer,char,1; + ,cbissuer,cbissuer,char,12; + Ǹchk,chkcallput,chkcallput,char,1; + Ǹ(call:01.put:02),cbcallput,cbcallput,char,2; + 簡chk,chkexec,chkexec,char,1; + 簡(>=:1.<=:2),cbexec,cbexec,char,1; + chk,chktype,chktype,char,1; + ,cbtype,cbtype,char,2; + chk,chksettle,chksettle,char,1; + ,cbsettle,cbsettle,char,2; + chk,chklast,chklast,char,1; + ,cblast,cblast,char,6; + 簡chk,chkelwexec,chkelwexec,char,1; + 簡̻,elwexecs,elwexecs,float,10.2; + 簡,elwexece,elwexece,float,10.2; + ŷchk,chkvolume,chkvolume,char,1; + ŷ̻,volumes,volumes,float,12; + ŷ,volumee,volumee,float,12; + chk,chkrate,chkrate,char,1; + ̻,rates,rates,float,6.2; + ,ratee,ratee,float,6.2; + ̾chk,chkpremium,chkpremium,char,1; + ̻̾,premiums,premiums,float,6.2; + ̾,premiume,premiume,float,6.2; + иƼchk,chkparity,chkparity,char,1; + иƼ̻,paritys,paritys,float,6.2; + иƼ,paritye,paritye,float,6.2; + ͺбchk,chkberate,chkberate,char,1; + ͺб̻,berates,berates,float,6.2; + ͺб,beratee,beratee,float,6.2; + ںchk,chkcapt,chkcapt,char,1; + ں̻,capts,capts,float,6.2; + ں,capte,capte,float,6.2; + e.chk,chkegearing,chkegearing,char,1; + e.̻,egearings,egearings,float,6.2; + e.,egearinge,egearinge,float,6.2; + chk,chkgearing,chkgearing,char,1; + ̻,gearings,gearings,float,6.2; + ,gearinge,gearinge,float,6.2; + Ÿchk,chkdelta,chkdelta,char,1; + Ÿ̻,deltas,deltas,float,10.6; + Ÿ,deltae,deltae,float,10.6; + Ÿchk,chktheta,chktheta,char,1; + Ÿ̻,thetas,thetas,float,10.6; + Ÿ,thetae,thetae,float,10.6; + ŷchk,chkduedate,chkduedate,char,1; + ŷ̻,duedates,duedates,char,8; + ŷ,duedatee,duedatee,char,8; + chk,chkkoba,chkkoba,char,1; + (0:ü1:Ḹ2:),cbkoba,cbkoba,char,1; + end + t1955OutBlock,,output; + begin + 񰹼,cnt,cnt,long,4; + end + t1955OutBlock1,1,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + ,issuernmk,issuernmk,char,40; + ڻڵ,itemcode,itemcode,char,12; + /Dz,cpgubun,cpgubun,char,2; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ϰŷ,jnilvolume,jnilvolume,float,12; + 簡,elwexec,elwexec,float,10.2; + ڻ,item,item,char,20; + ڻ갡,bprice,bprice,float,10.2; + ϴ񱸺,bsign,bsign,char,1; + ϴ,bchange,bchange,float,10.2; + ʵ,bdiff,bdiff,float,6.2; + ̾,premium,premium,float,6.2; + иƼ,parity,parity,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + e.,egearing,egearing,float,6.2; + ,gearing,gearing,float,6.2; + ŷ,lastdate,lastdate,char,8; + Ÿ,delta,delta,float,10.6; + Ÿ,theta,theta,float,10.6; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1955 \ No newline at end of file diff --git a/sample_python/Res/t1955_2.res b/sample_python/Res/t1955_2.res new file mode 100644 index 0000000..ce77a87 --- /dev/null +++ b/sample_python/Res/t1955_2.res @@ -0,0 +1,95 @@ +BEGIN_FUNCTION_MAP + .Func,ELWǥ˻(t1955),t1955,attr,block,headtype=A; + BEGIN_DATA_MAP + t1955InBlock,Է,input; + begin + ڻchk,chkitem,chkitem,char,1; + ڻڵ,cbitem,cbitem,char,12; + chk,chkissuer,chkissuer,char,1; + ,cbissuer,cbissuer,char,12; + Ǹchk,chkcallput,chkcallput,char,1; + Ǹ(call:01.put:02),cbcallput,cbcallput,char,2; + 簡chk,chkexec,chkexec,char,1; + 簡(>=:1.<=:2),cbexec,cbexec,char,1; + chk,chktype,chktype,char,1; + ,cbtype,cbtype,char,2; + chk,chksettle,chksettle,char,1; + ,cbsettle,cbsettle,char,2; + chk,chklast,chklast,char,1; + ,cblast,cblast,char,6; + 簡chk,chkelwexec,chkelwexec,char,1; + 簡̻,elwexecs,elwexecs,float,10.2; + 簡,elwexece,elwexece,float,10.2; + ŷchk,chkvolume,chkvolume,char,1; + ŷ̻,volumes,volumes,float,12; + ŷ,volumee,volumee,float,12; + chk,chkrate,chkrate,char,1; + ̻,rates,rates,float,6.2; + ,ratee,ratee,float,6.2; + ̾chk,chkpremium,chkpremium,char,1; + ̻̾,premiums,premiums,float,6.2; + ̾,premiume,premiume,float,6.2; + иƼchk,chkparity,chkparity,char,1; + иƼ̻,paritys,paritys,float,6.2; + иƼ,paritye,paritye,float,6.2; + ͺбchk,chkberate,chkberate,char,1; + ͺб̻,berates,berates,float,6.2; + ͺб,beratee,beratee,float,6.2; + ںchk,chkcapt,chkcapt,char,1; + ں̻,capts,capts,float,6.2; + ں,capte,capte,float,6.2; + e.chk,chkegearing,chkegearing,char,1; + e.̻,egearings,egearings,float,6.2; + e.,egearinge,egearinge,float,6.2; + chk,chkgearing,chkgearing,char,1; + ̻,gearings,gearings,float,6.2; + ,gearinge,gearinge,float,6.2; + Ÿchk,chkdelta,chkdelta,char,1; + Ÿ̻,deltas,deltas,float,10.6; + Ÿ,deltae,deltae,float,10.6; + Ÿchk,chktheta,chktheta,char,1; + Ÿ̻,thetas,thetas,float,10.6; + Ÿ,thetae,thetae,float,10.6; + ŷchk,chkduedate,chkduedate,char,1; + ŷ̻,duedates,duedates,char,8; + ŷ,duedatee,duedatee,char,8; + chk,chkkoba,chkkoba,char,1; + (0:ü1:Ḹ2:),cbkoba,cbkoba,char,1; + end + t1955OutBlock,,output; + begin + 񰹼,cnt,cnt,long,4; + end + t1955OutBlock1,1,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + ,issuernmk,issuernmk,char,40; + ڻڵ,itemcode,itemcode,char,12; + /Dz,cpgubun,cpgubun,char,2; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ϰŷ,jnilvolume,jnilvolume,float,12; + 簡,elwexec,elwexec,float,10.2; + ڻ,item,item,char,20; + ڻ갡,bprice,bprice,float,10.2; + ϴ񱸺,bsign,bsign,char,1; + ϴ,bchange,bchange,float,10.2; + ʵ,bdiff,bdiff,float,6.2; + ̾,premium,premium,float,6.2; + иƼ,parity,parity,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + e.,egearing,egearing,float,6.2; + ,gearing,gearing,float,6.2; + ŷ,lastdate,lastdate,char,8; + Ÿ,delta,delta,float,10.6; + Ÿ,theta,theta,float,10.6; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1955 \ No newline at end of file diff --git a/sample_python/Res/t1956.res b/sample_python/Res/t1956.res new file mode 100644 index 0000000..983b540 --- /dev/null +++ b/sample_python/Res/t1956.res @@ -0,0 +1,106 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡(Ȯ޾)ȸ(t1956),t1956,attr,block,headtype=A; + BEGIN_DATA_MAP + t1956InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1956OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + üð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,cvolume,cvolume,long,10; + ŷ,volume,volume,float,12; + ذ,recprice,recprice,long,8; + ,avg,avg,long,8; + ϰŷ,jnilvolume,jnilvolume,float,12; + ϵðŷ,jvolume,jvolume,float,12; + ,jnilclose,jnilclose,long,8; + ŷ,volumechg,volumechg,float,12; + ŷ,volumediff,volumediff,float,6.2; + ð,open,open,long,8; + ð,odiff,odiff,float,6.2; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ,hdiff,hdiff,float,6.2; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ,ldiff,ldiff,float,6.2; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdiff,high52wdiff,float,6.2; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdiff,low52wdiff,float,6.2; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + ֽļ(õ),listing,listing,float,12; + ,memedan,memedan,char,5; + ȸ,vol,vol,float,6.2; + иƼ,parity,parity,float,8.2; + ͺб,berate,berate,float,8.2; + ,gearing,gearing,float,8.2; + 簡,elwexec,elwexec,float,8.2; + డ,issueprice,issueprice,long,8; + ȯ,convrate,convrate,float,12.4; + ŷ,lastdate,lastdate,char,8; + ں,capt,capt,float,8.2; + e.,egearing,egearing,float,8.2; + ̾,premium,premium,float,8.2; + ,spread,spread,float,6.2; + ִ뽺,espread,espread,float,6.2; + ̷а,theoryprice,theoryprice,float,10.2; + 纯,impv,impv,float,6.2; + ,moneyness,moneyness,char,1; + Ÿ,delt,delt,float,8.6; + ,gama,gama,float,8.6; + ,vega,vega,float,13.6; + Ÿ,ceta,ceta,float,13.6; + ,rhox,rhox,float,13.6; + ϼ,bjandatecnt,bjandatecnt,long,4; + 簳,mmsdate,mmsdate,char,8; + ,mmedate,mmedate,char,8; + ,payday,payday,char,8; + ,listdate,listdate,char,8; + LPȸ,lpmem,lpmem,char,20; + LP,lp_holdvol,lp_holdvol,float,12; + ڻڵ,bcode,bcode,char,6; + ڻ걸,bgubun,bgubun,char,1; + ڻ簡,bprice,bprice,long,8; + ڻϺ񱸺,bsign,bsign,char,1; + ڻϺ,bchange,bchange,long,8; + ڻ,bdiff,bdiff,float,6.2; + ڻŷ,bvolume,bvolume,float,12; + ,info1,info1,char,10; + /޵,info2,info2,char,10; + /屸,info3,info3,char,10; + /ҼDZ,info4,info4,char,12; + 屸,janginfo,janginfo,char,10; + ٽϱ,basketgb,basketgb,char,1; + ٽϰ,basketcnt,basketcnt,long,3; + ELWǸ,elwtype,elwtype,char,2; + ELW,settletype,settletype,char,2; + LPֹɿ,lpord,lpord,char,2; + Ǹ,elwdetail,elwdetail,char,100; + 򰡰ݹ,valuation,valuation,char,100; + Ȯ޾,givemoney,givemoney,float,8.3; + end + t1956OutBlock1,1,output,occurs; + begin + ڻڵ,bskcode,bskcode,char,6; + ڻ,bskbno,bskbno,long,3; + ڻ簡,bskprice,bskprice,long,8; + ڻϺ񱸺,bsksign,bsksign,char,1; + ڻϺ,bskchange,bskchange,long,8; + ڻ,bskdiff,bskdiff,float,6.2; + ڻŷ,bskvolume,bskvolume,float,12; + ڻ,bskjnilclose,bskjnilclose,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1956 \ No newline at end of file diff --git a/sample_python/Res/t1956_2.res b/sample_python/Res/t1956_2.res new file mode 100644 index 0000000..983b540 --- /dev/null +++ b/sample_python/Res/t1956_2.res @@ -0,0 +1,106 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡(Ȯ޾)ȸ(t1956),t1956,attr,block,headtype=A; + BEGIN_DATA_MAP + t1956InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1956OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + üð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + üᷮ,cvolume,cvolume,long,10; + ŷ,volume,volume,float,12; + ذ,recprice,recprice,long,8; + ,avg,avg,long,8; + ϰŷ,jnilvolume,jnilvolume,float,12; + ϵðŷ,jvolume,jvolume,float,12; + ,jnilclose,jnilclose,long,8; + ŷ,volumechg,volumechg,float,12; + ŷ,volumediff,volumediff,float,6.2; + ð,open,open,long,8; + ð,odiff,odiff,float,6.2; + ðð,opentime,opentime,char,6; + ,high,high,long,8; + ,hdiff,hdiff,float,6.2; + ð,hightime,hightime,char,6; + ,low,low,long,8; + ,ldiff,ldiff,float,6.2; + ð,lowtime,lowtime,char,6; + 52ְ,high52w,high52w,long,8; + 52ְ,high52wdiff,high52wdiff,float,6.2; + 52ְ,high52wdate,high52wdate,char,8; + 52,low52w,low52w,long,8; + 52,low52wdiff,low52wdiff,float,6.2; + 52,low52wdate,low52wdate,char,8; + ,exhratio,exhratio,float,6.2; + ֽļ(õ),listing,listing,float,12; + ,memedan,memedan,char,5; + ȸ,vol,vol,float,6.2; + иƼ,parity,parity,float,8.2; + ͺб,berate,berate,float,8.2; + ,gearing,gearing,float,8.2; + 簡,elwexec,elwexec,float,8.2; + డ,issueprice,issueprice,long,8; + ȯ,convrate,convrate,float,12.4; + ŷ,lastdate,lastdate,char,8; + ں,capt,capt,float,8.2; + e.,egearing,egearing,float,8.2; + ̾,premium,premium,float,8.2; + ,spread,spread,float,6.2; + ִ뽺,espread,espread,float,6.2; + ̷а,theoryprice,theoryprice,float,10.2; + 纯,impv,impv,float,6.2; + ,moneyness,moneyness,char,1; + Ÿ,delt,delt,float,8.6; + ,gama,gama,float,8.6; + ,vega,vega,float,13.6; + Ÿ,ceta,ceta,float,13.6; + ,rhox,rhox,float,13.6; + ϼ,bjandatecnt,bjandatecnt,long,4; + 簳,mmsdate,mmsdate,char,8; + ,mmedate,mmedate,char,8; + ,payday,payday,char,8; + ,listdate,listdate,char,8; + LPȸ,lpmem,lpmem,char,20; + LP,lp_holdvol,lp_holdvol,float,12; + ڻڵ,bcode,bcode,char,6; + ڻ걸,bgubun,bgubun,char,1; + ڻ簡,bprice,bprice,long,8; + ڻϺ񱸺,bsign,bsign,char,1; + ڻϺ,bchange,bchange,long,8; + ڻ,bdiff,bdiff,float,6.2; + ڻŷ,bvolume,bvolume,float,12; + ,info1,info1,char,10; + /޵,info2,info2,char,10; + /屸,info3,info3,char,10; + /ҼDZ,info4,info4,char,12; + 屸,janginfo,janginfo,char,10; + ٽϱ,basketgb,basketgb,char,1; + ٽϰ,basketcnt,basketcnt,long,3; + ELWǸ,elwtype,elwtype,char,2; + ELW,settletype,settletype,char,2; + LPֹɿ,lpord,lpord,char,2; + Ǹ,elwdetail,elwdetail,char,100; + 򰡰ݹ,valuation,valuation,char,100; + Ȯ޾,givemoney,givemoney,float,8.3; + end + t1956OutBlock1,1,output,occurs; + begin + ڻڵ,bskcode,bskcode,char,6; + ڻ,bskbno,bskbno,long,3; + ڻ簡,bskprice,bskprice,long,8; + ڻϺ񱸺,bsksign,bsksign,char,1; + ڻϺ,bskchange,bskchange,long,8; + ڻ,bskdiff,bskdiff,float,6.2; + ڻŷ,bskvolume,bskvolume,float,12; + ڻ,bskjnilclose,bskjnilclose,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1956 \ No newline at end of file diff --git a/sample_python/Res/t1958.res b/sample_python/Res/t1958.res new file mode 100644 index 0000000..044d965 --- /dev/null +++ b/sample_python/Res/t1958.res @@ -0,0 +1,87 @@ +BEGIN_FUNCTION_MAP + .Func,ELW(t1958),t1958,attr,block,headtype=A; + BEGIN_DATA_MAP + t1958InBlock,Է,input; + begin + ڵ1,shcode1,shcode1,char,6; + ڵ2,shcode2,shcode2,char,6; + end + t1958OutBlock,,output; + begin + ,hname,hname,char,40; + ڻ,item1,item1,char,12; + ,issuernmk,issuernmk,char,40; + Dz,elwopt,elwopt,char,2; + ,elwtype,elwtype,char,2; + ,settletype,settletype,char,2; + 簡,elwexec,elwexec,float,8.2; + ȯ,convrate,convrate,float,12.4; + ,listing,listing,float,12; + 簳,mmsdate,mmsdate,char,8; + ŷ,lastdate,lastdate,char,8; + ŷϼ,nofdays,nofdays,long,4; + ,payday,payday,char,8; + иƼ,parity,parity,float,6.2; + ̾,premium,premium,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + e.,egearing,egearing,float,6.2; + ,price,price,long,8; + ŷ,volume,volume,float,12; + ,diff,diff,float,6.2; + end + t1958OutBlock1,1,output; + begin + ,hname,hname,char,40; + ڻ,item1,item1,char,12; + ,issuernmk,issuernmk,char,40; + Dz,elwopt,elwopt,char,2; + ,elwtype,elwtype,char,2; + ,settletype,settletype,char,2; + 簡,elwexec,elwexec,float,8.2; + ȯ,convrate,convrate,float,12.4; + ,listing,listing,float,12; + 簳,mmsdate,mmsdate,char,8; + ŷ,lastdate,lastdate,char,8; + ŷϼ,nofdays,nofdays,long,4; + ,payday,payday,char,8; + иƼ,parity,parity,float,6.2; + ̾,premium,premium,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + e.,egearing,egearing,float,6.2; + ,price,price,long,8; + ŷ,volume,volume,float,12; + ,diff,diff,float,6.2; + end + t1958OutBlock2,2,output; + begin + ,hnamecmp,hnamecmp,char,6; + ڻ,item1cmp,item1cmp,char,6; + ,issuernmkcmp,issuernmkcmp,char,6; + Dzк,elwoptcmp,elwoptcmp,char,6; + ĺ,elwtypecmp,elwtypecmp,char,6; + ,settlecmp,settlecmp,char,6; + 簡,elwexeccmp,elwexeccmp,float,8.2; + ȯ,convcmp,convcmp,float,12.4; + ,listingcmp,listingcmp,float,12; + 簳Ϻ,mmsdatecmp,mmsdatecmp,char,6; + ŷϺ,lastdatecmp,lastdatecmp,char,6; + ŷϼ,nofdayscmp,nofdayscmp,char,6; + Ϻ,paydaycmp,paydaycmp,char,6; + иƼ,paritycmp,paritycmp,float,6.2; + ̾,premiumcmp,premiumcmp,float,6.2; + ͺб,beratecmp,beratecmp,float,6.2; + ں,captcmp,captcmp,float,6.2; + ,gearingcmp,gearingcmp,float,6.2; + e.,egearingcmp,egearingcmp,float,6.2; + ݺ,pricecmp,pricecmp,long,8; + ŷ,volumecmp,volumecmp,float,12; + ,diffcmp,diffcmp,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1958 \ No newline at end of file diff --git a/sample_python/Res/t1958_2.res b/sample_python/Res/t1958_2.res new file mode 100644 index 0000000..044d965 --- /dev/null +++ b/sample_python/Res/t1958_2.res @@ -0,0 +1,87 @@ +BEGIN_FUNCTION_MAP + .Func,ELW(t1958),t1958,attr,block,headtype=A; + BEGIN_DATA_MAP + t1958InBlock,Է,input; + begin + ڵ1,shcode1,shcode1,char,6; + ڵ2,shcode2,shcode2,char,6; + end + t1958OutBlock,,output; + begin + ,hname,hname,char,40; + ڻ,item1,item1,char,12; + ,issuernmk,issuernmk,char,40; + Dz,elwopt,elwopt,char,2; + ,elwtype,elwtype,char,2; + ,settletype,settletype,char,2; + 簡,elwexec,elwexec,float,8.2; + ȯ,convrate,convrate,float,12.4; + ,listing,listing,float,12; + 簳,mmsdate,mmsdate,char,8; + ŷ,lastdate,lastdate,char,8; + ŷϼ,nofdays,nofdays,long,4; + ,payday,payday,char,8; + иƼ,parity,parity,float,6.2; + ̾,premium,premium,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + e.,egearing,egearing,float,6.2; + ,price,price,long,8; + ŷ,volume,volume,float,12; + ,diff,diff,float,6.2; + end + t1958OutBlock1,1,output; + begin + ,hname,hname,char,40; + ڻ,item1,item1,char,12; + ,issuernmk,issuernmk,char,40; + Dz,elwopt,elwopt,char,2; + ,elwtype,elwtype,char,2; + ,settletype,settletype,char,2; + 簡,elwexec,elwexec,float,8.2; + ȯ,convrate,convrate,float,12.4; + ,listing,listing,float,12; + 簳,mmsdate,mmsdate,char,8; + ŷ,lastdate,lastdate,char,8; + ŷϼ,nofdays,nofdays,long,4; + ,payday,payday,char,8; + иƼ,parity,parity,float,6.2; + ̾,premium,premium,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + e.,egearing,egearing,float,6.2; + ,price,price,long,8; + ŷ,volume,volume,float,12; + ,diff,diff,float,6.2; + end + t1958OutBlock2,2,output; + begin + ,hnamecmp,hnamecmp,char,6; + ڻ,item1cmp,item1cmp,char,6; + ,issuernmkcmp,issuernmkcmp,char,6; + Dzк,elwoptcmp,elwoptcmp,char,6; + ĺ,elwtypecmp,elwtypecmp,char,6; + ,settlecmp,settlecmp,char,6; + 簡,elwexeccmp,elwexeccmp,float,8.2; + ȯ,convcmp,convcmp,float,12.4; + ,listingcmp,listingcmp,float,12; + 簳Ϻ,mmsdatecmp,mmsdatecmp,char,6; + ŷϺ,lastdatecmp,lastdatecmp,char,6; + ŷϼ,nofdayscmp,nofdayscmp,char,6; + Ϻ,paydaycmp,paydaycmp,char,6; + иƼ,paritycmp,paritycmp,float,6.2; + ̾,premiumcmp,premiumcmp,float,6.2; + ͺб,beratecmp,beratecmp,float,6.2; + ں,captcmp,captcmp,float,6.2; + ,gearingcmp,gearingcmp,float,6.2; + e.,egearingcmp,egearingcmp,float,6.2; + ݺ,pricecmp,pricecmp,long,8; + ŷ,volumecmp,volumecmp,float,12; + ,diffcmp,diffcmp,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1958 \ No newline at end of file diff --git a/sample_python/Res/t1959.res b/sample_python/Res/t1959.res new file mode 100644 index 0000000..0d26204 --- /dev/null +++ b/sample_python/Res/t1959.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,LPȸ(t1959),t1959,attr,block,headtype=A; + BEGIN_DATA_MAP + t1959InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1959OutBlock1,LP,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + 簡,price,price,char,12; + ȣ,sign,sign,char,1; + ,change,change,char,12; + ,rate,rate,float,5.2; + ŷ,volume,volume,char,12; + ŷ,value,value,char,12; + LPֹɿ,lp_gb,lp_gb,char,4; + LPȸ1,lp_mem_nm1,lp_mem_nm1,char,20; + LPȸ2,lp_mem_nm2,lp_mem_nm2,char,20; + LPȸ3,lp_mem_nm3,lp_mem_nm3,char,20; + LPȸ4,lp_mem_nm4,lp_mem_nm4,char,20; + LPȸ5,lp_mem_nm5,lp_mem_nm5,char,20; + LPּȣ,lp_min_qty,lp_min_qty,char,10; + LP,lp_st_date,lp_st_date,char,8; + LP,lp_end_date,lp_end_date,char,8; + LP,lp_spread,lp_spread,float,5.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1959 \ No newline at end of file diff --git a/sample_python/Res/t1959_2.res b/sample_python/Res/t1959_2.res new file mode 100644 index 0000000..0d26204 --- /dev/null +++ b/sample_python/Res/t1959_2.res @@ -0,0 +1,32 @@ +BEGIN_FUNCTION_MAP + .Func,LPȸ(t1959),t1959,attr,block,headtype=A; + BEGIN_DATA_MAP + t1959InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1959OutBlock1,LP,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + 簡,price,price,char,12; + ȣ,sign,sign,char,1; + ,change,change,char,12; + ,rate,rate,float,5.2; + ŷ,volume,volume,char,12; + ŷ,value,value,char,12; + LPֹɿ,lp_gb,lp_gb,char,4; + LPȸ1,lp_mem_nm1,lp_mem_nm1,char,20; + LPȸ2,lp_mem_nm2,lp_mem_nm2,char,20; + LPȸ3,lp_mem_nm3,lp_mem_nm3,char,20; + LPȸ4,lp_mem_nm4,lp_mem_nm4,char,20; + LPȸ5,lp_mem_nm5,lp_mem_nm5,char,20; + LPּȣ,lp_min_qty,lp_min_qty,char,10; + LP,lp_st_date,lp_st_date,char,8; + LP,lp_end_date,lp_end_date,char,8; + LP,lp_spread,lp_spread,float,5.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1959 \ No newline at end of file diff --git a/sample_python/Res/t1960.res b/sample_python/Res/t1960.res new file mode 100644 index 0000000..38761e9 --- /dev/null +++ b/sample_python/Res/t1960.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,ELW(t1960),t1960,attr,block,headtype=A; + BEGIN_DATA_MAP + t1960InBlock,⺻Է,input; + begin + ϶(0:1:϶),gubun,gubun,char,1; + Ǹ(00:EX01:02:Dz'':ü),ggubun,ggubun,char,2; + ڻ,itemcode,itemcode,char,12; + ȸ,lastdate,lastdate,char,8; + ,exgubun,exgubun,char,6; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + ϼ,sjanday,sjanday,long,8; + ϼ,ejanday,ejanday,long,8; + IDX,idx,idx,long,4; + end + t1960OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1960OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,double,12.0; + 簡,elwexec,elwexec,double,10.2; + ȯ,convrate,convrate,double,12.4; + ,lastdate,lastdate,char,8; + ڻڵ,itemcode,itemcode,char,12; + ڻڵ,itemshcode,itemshcode,char,9; + ڻ,itemname,itemname,char,20; + ڻ簡,itemprice,itemprice,char,10; + ڻ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,char,10; + ڻ,itemdiff,itemdiff,double,6.2; + ELWڵ,elwshcode,elwshcode,char,6; + ͺб,bepoint,bepoint,double,12.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1960 \ No newline at end of file diff --git a/sample_python/Res/t1960_2.res b/sample_python/Res/t1960_2.res new file mode 100644 index 0000000..38761e9 --- /dev/null +++ b/sample_python/Res/t1960_2.res @@ -0,0 +1,46 @@ +BEGIN_FUNCTION_MAP + .Func,ELW(t1960),t1960,attr,block,headtype=A; + BEGIN_DATA_MAP + t1960InBlock,⺻Է,input; + begin + ϶(0:1:϶),gubun,gubun,char,1; + Ǹ(00:EX01:02:Dz'':ü),ggubun,ggubun,char,2; + ڻ,itemcode,itemcode,char,12; + ȸ,lastdate,lastdate,char,8; + ,exgubun,exgubun,char,6; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + ϼ,sjanday,sjanday,long,8; + ϼ,ejanday,ejanday,long,8; + IDX,idx,idx,long,4; + end + t1960OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1960OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,double,12.0; + 簡,elwexec,elwexec,double,10.2; + ȯ,convrate,convrate,double,12.4; + ,lastdate,lastdate,char,8; + ڻڵ,itemcode,itemcode,char,12; + ڻڵ,itemshcode,itemshcode,char,9; + ڻ,itemname,itemname,char,20; + ڻ簡,itemprice,itemprice,char,10; + ڻ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,char,10; + ڻ,itemdiff,itemdiff,double,6.2; + ELWڵ,elwshcode,elwshcode,char,6; + ͺб,bepoint,bepoint,double,12.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1960 \ No newline at end of file diff --git a/sample_python/Res/t1961.res b/sample_python/Res/t1961.res new file mode 100644 index 0000000..9b7fbcb --- /dev/null +++ b/sample_python/Res/t1961.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,ELWŷ(t1961),t1961,attr,block,headtype=A; + BEGIN_DATA_MAP + t1961InBlock,⺻Է,input; + begin + (0:1:),gubun,gubun,char,1; + Ǹ(00:EX01:02:Dz'':ü),ggubun,ggubun,char,2; + ڻ,itemcode,itemcode,char,12; + ȸ,lastdate,lastdate,char,8; + ,exgubun,exgubun,char,6; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + ϼ,sjanday,sjanday,long,8; + ϼ,ejanday,ejanday,long,8; + IDX,idx,idx,long,4; + end + t1961OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1961OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,double,12.0; + ϰŷ,jnilvolume,jnilvolume,double,12.0; + 簡,elwexec,elwexec,double,10.2; + ȯ,convrate,convrate,double,12.4; + ,lastdate,lastdate,char,8; + ڻڵ,itemcode,itemcode,char,12; + ڻڵ,itemshcode,itemshcode,char,9; + ڻ,itemname,itemname,char,20; + ڻ簡,itemprice,itemprice,char,10; + ڻ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,char,10; + ڻ,itemdiff,itemdiff,double,6.2; + ELWڵ,elwshcode,elwshcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1961_2.res b/sample_python/Res/t1961_2.res new file mode 100644 index 0000000..9b7fbcb --- /dev/null +++ b/sample_python/Res/t1961_2.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,ELWŷ(t1961),t1961,attr,block,headtype=A; + BEGIN_DATA_MAP + t1961InBlock,⺻Է,input; + begin + (0:1:),gubun,gubun,char,1; + Ǹ(00:EX01:02:Dz'':ü),ggubun,ggubun,char,2; + ڻ,itemcode,itemcode,char,12; + ȸ,lastdate,lastdate,char,8; + ,exgubun,exgubun,char,6; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + ϼ,sjanday,sjanday,long,8; + ϼ,ejanday,ejanday,long,8; + IDX,idx,idx,long,4; + end + t1961OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1961OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,double,12.0; + ϰŷ,jnilvolume,jnilvolume,double,12.0; + 簡,elwexec,elwexec,double,10.2; + ȯ,convrate,convrate,double,12.4; + ,lastdate,lastdate,char,8; + ڻڵ,itemcode,itemcode,char,12; + ڻڵ,itemshcode,itemshcode,char,9; + ڻ,itemname,itemname,char,20; + ڻ簡,itemprice,itemprice,char,10; + ڻ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,char,10; + ڻ,itemdiff,itemdiff,double,6.2; + ELWڵ,elwshcode,elwshcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1964.res b/sample_python/Res/t1964.res new file mode 100644 index 0000000..533a63e --- /dev/null +++ b/sample_python/Res/t1964.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,ELW(t1964),t1964,attr,block,headtype=A; + BEGIN_DATA_MAP + t1964InBlock,⺻Է,input; + begin + ڻڵ,item,item,char,12; + ,issuercd,issuercd,char,12; + ,lastmonth,lastmonth,char,6; + Dz,elwopt,elwopt,char,1; + Ӵϱ,atmgubun,atmgubun,char,1; + Ǹ,elwtype,elwtype,char,2; + ,settletype,settletype,char,2; + ڻ걸,elwexecgubun,elwexecgubun,char,1; + ۺ,fromrat,fromrat,char,5; + ,torat,torat,char,5; + ŷ,volume,volume,char,12; + end + t1964OutBlock1,1,output,occurs; + begin + ELWڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + ڻڵ,item1,item1,char,6; + ڻ,itemnm,itemnm,char,20; + ,issuernmk,issuernmk,char,40; + Dz,elwopt,elwopt,char,4; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + 簡,elwexec,elwexec,float,10.2; + ϼ,jandatecnt,jandatecnt,long,8; + ȯ,convrate,convrate,float,8.4; + ŷ,lastdate,lastdate,char,8; + 簳,mmsdate,mmsdate,char,8; + ,payday,payday,char,8; + ,listing,listing,long,8; + Ӵϱ,atmgbnm,atmgbnm,char,10; + иƼ,parity,parity,float,6.2; + ̾,preminum,preminum,float,10.2; + ,spread,spread,float,3.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + e,egearing,egearing,float,6.2; + ڻ簡,itemprice,itemprice,long,8; + ڻϴ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,long,8; + ڻ,itemdiff,itemdiff,float,6.2; + ڻŷ,itemvolume,itemvolume,long,12; + ϰŷ,jnilvolume,jnilvolume,long,12; + ̷а,theoryprice,theoryprice,float,10.2; + LP,lp_rate,lp_rate,float,5.2; + 纯,impv,impv,float,6.2; + Ÿ,delta,delta,float,10.6; + Ÿ,theta,theta,float,10.6; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1964 \ No newline at end of file diff --git a/sample_python/Res/t1964_2.res b/sample_python/Res/t1964_2.res new file mode 100644 index 0000000..533a63e --- /dev/null +++ b/sample_python/Res/t1964_2.res @@ -0,0 +1,61 @@ +BEGIN_FUNCTION_MAP + .Func,ELW(t1964),t1964,attr,block,headtype=A; + BEGIN_DATA_MAP + t1964InBlock,⺻Է,input; + begin + ڻڵ,item,item,char,12; + ,issuercd,issuercd,char,12; + ,lastmonth,lastmonth,char,6; + Dz,elwopt,elwopt,char,1; + Ӵϱ,atmgubun,atmgubun,char,1; + Ǹ,elwtype,elwtype,char,2; + ,settletype,settletype,char,2; + ڻ걸,elwexecgubun,elwexecgubun,char,1; + ۺ,fromrat,fromrat,char,5; + ,torat,torat,char,5; + ŷ,volume,volume,char,12; + end + t1964OutBlock1,1,output,occurs; + begin + ELWڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + ڻڵ,item1,item1,char,6; + ڻ,itemnm,itemnm,char,20; + ,issuernmk,issuernmk,char,40; + Dz,elwopt,elwopt,char,4; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + 簡,elwexec,elwexec,float,10.2; + ϼ,jandatecnt,jandatecnt,long,8; + ȯ,convrate,convrate,float,8.4; + ŷ,lastdate,lastdate,char,8; + 簳,mmsdate,mmsdate,char,8; + ,payday,payday,char,8; + ,listing,listing,long,8; + Ӵϱ,atmgbnm,atmgbnm,char,10; + иƼ,parity,parity,float,6.2; + ̾,preminum,preminum,float,10.2; + ,spread,spread,float,3.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + ,gearing,gearing,float,6.2; + e,egearing,egearing,float,6.2; + ڻ簡,itemprice,itemprice,long,8; + ڻϴ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,long,8; + ڻ,itemdiff,itemdiff,float,6.2; + ڻŷ,itemvolume,itemvolume,long,12; + ϰŷ,jnilvolume,jnilvolume,long,12; + ̷а,theoryprice,theoryprice,float,10.2; + LP,lp_rate,lp_rate,float,5.2; + 纯,impv,impv,float,6.2; + Ÿ,delta,delta,float,10.6; + Ÿ,theta,theta,float,10.6; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1964 \ No newline at end of file diff --git a/sample_python/Res/t1966.res b/sample_python/Res/t1966.res new file mode 100644 index 0000000..81c3b85 --- /dev/null +++ b/sample_python/Res/t1966.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,ELWŷݻ(t1966),t1966,attr,block,headtype=A; + BEGIN_DATA_MAP + t1966InBlock,⺻Է,input; + begin + (0:1:),gubun,gubun,char,1; + Ǹ(00:EX01:02:Dz'':ü),ggubun,ggubun,char,2; + ڻ,itemcode,itemcode,char,12; + ȸ,lastdate,lastdate,char,8; + ,exgubun,exgubun,char,6; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + ϼ,sjanday,sjanday,long,8; + ϼ,ejanday,ejanday,long,8; + IDX,idx,idx,long,4; + end + t1966OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1966OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,value,value,double,12.0; + ϰŷ,jnilvalue,jnilvalue,double,12.0; + 簡,elwexec,elwexec,double,10.2; + ȯ,convrate,convrate,double,12.4; + ,lastdate,lastdate,char,8; + ڻڵ,itemcode,itemcode,char,12; + ڻڵ,itemshcode,itemshcode,char,9; + ڻ,itemname,itemname,char,20; + ڻ簡,itemprice,itemprice,char,10; + ڻ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,char,10; + ڻ,itemdiff,itemdiff,double,6.2; + ELWڵ,elwshcode,elwshcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1966_2.res b/sample_python/Res/t1966_2.res new file mode 100644 index 0000000..81c3b85 --- /dev/null +++ b/sample_python/Res/t1966_2.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,ELWŷݻ(t1966),t1966,attr,block,headtype=A; + BEGIN_DATA_MAP + t1966InBlock,⺻Է,input; + begin + (0:1:),gubun,gubun,char,1; + Ǹ(00:EX01:02:Dz'':ü),ggubun,ggubun,char,2; + ڻ,itemcode,itemcode,char,12; + ȸ,lastdate,lastdate,char,8; + ,exgubun,exgubun,char,6; + ۰,sprice,sprice,long,8; + ᰡ,eprice,eprice,long,8; + ŷ,volume,volume,long,12; + ϼ,sjanday,sjanday,long,8; + ϼ,ejanday,ejanday,long,8; + IDX,idx,idx,long,4; + end + t1966OutBlock,,output; + begin + IDX,idx,idx,long,4; + end + t1966OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,value,value,double,12.0; + ϰŷ,jnilvalue,jnilvalue,double,12.0; + 簡,elwexec,elwexec,double,10.2; + ȯ,convrate,convrate,double,12.4; + ,lastdate,lastdate,char,8; + ڻڵ,itemcode,itemcode,char,12; + ڻڵ,itemshcode,itemshcode,char,9; + ڻ,itemname,itemname,char,20; + ڻ簡,itemprice,itemprice,char,10; + ڻ񱸺,itemsign,itemsign,char,1; + ڻϴ,itemchange,itemchange,char,10; + ڻ,itemdiff,itemdiff,double,6.2; + ELWڵ,elwshcode,elwshcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1969.res b/sample_python/Res/t1969.res new file mode 100644 index 0000000..a39c980 --- /dev/null +++ b/sample_python/Res/t1969.res @@ -0,0 +1,104 @@ +BEGIN_FUNCTION_MAP + .Func,ELWǥ˻(t1969),t1969,attr,block,headtype=A; + BEGIN_DATA_MAP + t1969InBlock,Է,input; + begin + ڻchk,chkitem,chkitem,char,1; + ڻڵ,cbitem,cbitem,char,12; + chk,chkissuer,chkissuer,char,1; + ,cbissuer,cbissuer,char,12; + Ǹchk,chkcallput,chkcallput,char,1; + Ǹ(call:01.put:02),cbcallput,cbcallput,char,2; + 簡chk,chkexec,chkexec,char,1; + 簡(>=:1.<=:2),cbexec,cbexec,char,1; + chk,chktype,chktype,char,1; + ,cbtype,cbtype,char,2; + chk,chksettle,chksettle,char,1; + ,cbsettle,cbsettle,char,2; + chk,chklast,chklast,char,1; + ,cblast,cblast,char,6; + 簡chk,chkelwexec,chkelwexec,char,1; + 簡̻,elwexecs,elwexecs,float,10.2; + 簡,elwexece,elwexece,float,10.2; + ŷchk,chkvolume,chkvolume,char,1; + ŷ̻,volumes,volumes,float,12; + ŷ,volumee,volumee,float,12; + chk,chkrate,chkrate,char,1; + ̻,rates,rates,float,6.2; + ,ratee,ratee,float,6.2; + ̾chk,chkpremium,chkpremium,char,1; + ̻̾,premiums,premiums,float,6.2; + ̾,premiume,premiume,float,6.2; + иƼchk,chkparity,chkparity,char,1; + иƼ̻,paritys,paritys,float,6.2; + иƼ,paritye,paritye,float,6.2; + ͺбchk,chkberate,chkberate,char,1; + ͺб̻,berates,berates,float,6.2; + ͺб,beratee,beratee,float,6.2; + ںchk,chkcapt,chkcapt,char,1; + ں̻,capts,capts,float,6.2; + ں,capte,capte,float,6.2; + e.chk,chkegearing,chkegearing,char,1; + e.̻,egearings,egearings,float,6.2; + e.,egearinge,egearinge,float,6.2; + chk,chkgearing,chkgearing,char,1; + ̻,gearings,gearings,float,6.2; + ,gearinge,gearinge,float,6.2; + Ÿchk,chkdelta,chkdelta,char,1; + Ÿ̻,deltas,deltas,float,10.6; + Ÿ,deltae,deltae,float,10.6; + Ÿchk,chktheta,chktheta,char,1; + Ÿ̻,thetas,thetas,float,10.6; + Ÿ,thetae,thetae,float,10.6; + ŷchk,chkduedate,chkduedate,char,1; + ŷ̻,duedates,duedates,char,8; + ŷ,duedatee,duedatee,char,8; + LP1ƽ,onetickgubun,onetickgubun,char,1; + LP,lp_liquidity,lp_liquidity,char,1; + LPchk,chklp_code,chklp_code,char,1; + LPȸڵ,lp_code,lp_code,char,3; + chk,chkkoba,chkkoba,char,1; + (0:ü1:KOBA2:KOBA),cbkoba,cbkoba,char,1; + end + t1969OutBlock,,output; + begin + 񰹼,cnt,cnt,long,4; + end + t1969OutBlock1,1,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + ,issuernmk,issuernmk,char,40; + ڻڵ,itemcode,itemcode,char,12; + /Dz,cpgubun,cpgubun,char,2; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ϰŷ,jnilvolume,jnilvolume,float,12; + 簡,elwexec,elwexec,float,10.2; + ڻ,item,item,char,20; + ڻ갡,bprice,bprice,float,10.2; + ϴ񱸺,bsign,bsign,char,1; + ϴ,bchange,bchange,float,10.2; + ʵ,bdiff,bdiff,float,6.2; + ̾,premium,premium,float,6.2; + иƼ,parity,parity,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + e.,egearing,egearing,float,6.2; + ,gearing,gearing,float,6.2; + ŷ,lastdate,lastdate,char,8; + Ÿ,delta,delta,float,10.6; + Ÿ,theta,theta,float,10.6; + LPȸ,lpname,lpname,char,40; + LP,lphold,lphold,float,6.2; + ϼ,bjandatecnt,bjandatecnt,long,4; + ȯ,convrate,convrate,float,8.4; + 1ƽȯ,tickvalue,tickvalue,float,10.2; + ,kasis,kasis,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1969_2.res b/sample_python/Res/t1969_2.res new file mode 100644 index 0000000..a39c980 --- /dev/null +++ b/sample_python/Res/t1969_2.res @@ -0,0 +1,104 @@ +BEGIN_FUNCTION_MAP + .Func,ELWǥ˻(t1969),t1969,attr,block,headtype=A; + BEGIN_DATA_MAP + t1969InBlock,Է,input; + begin + ڻchk,chkitem,chkitem,char,1; + ڻڵ,cbitem,cbitem,char,12; + chk,chkissuer,chkissuer,char,1; + ,cbissuer,cbissuer,char,12; + Ǹchk,chkcallput,chkcallput,char,1; + Ǹ(call:01.put:02),cbcallput,cbcallput,char,2; + 簡chk,chkexec,chkexec,char,1; + 簡(>=:1.<=:2),cbexec,cbexec,char,1; + chk,chktype,chktype,char,1; + ,cbtype,cbtype,char,2; + chk,chksettle,chksettle,char,1; + ,cbsettle,cbsettle,char,2; + chk,chklast,chklast,char,1; + ,cblast,cblast,char,6; + 簡chk,chkelwexec,chkelwexec,char,1; + 簡̻,elwexecs,elwexecs,float,10.2; + 簡,elwexece,elwexece,float,10.2; + ŷchk,chkvolume,chkvolume,char,1; + ŷ̻,volumes,volumes,float,12; + ŷ,volumee,volumee,float,12; + chk,chkrate,chkrate,char,1; + ̻,rates,rates,float,6.2; + ,ratee,ratee,float,6.2; + ̾chk,chkpremium,chkpremium,char,1; + ̻̾,premiums,premiums,float,6.2; + ̾,premiume,premiume,float,6.2; + иƼchk,chkparity,chkparity,char,1; + иƼ̻,paritys,paritys,float,6.2; + иƼ,paritye,paritye,float,6.2; + ͺбchk,chkberate,chkberate,char,1; + ͺб̻,berates,berates,float,6.2; + ͺб,beratee,beratee,float,6.2; + ںchk,chkcapt,chkcapt,char,1; + ں̻,capts,capts,float,6.2; + ں,capte,capte,float,6.2; + e.chk,chkegearing,chkegearing,char,1; + e.̻,egearings,egearings,float,6.2; + e.,egearinge,egearinge,float,6.2; + chk,chkgearing,chkgearing,char,1; + ̻,gearings,gearings,float,6.2; + ,gearinge,gearinge,float,6.2; + Ÿchk,chkdelta,chkdelta,char,1; + Ÿ̻,deltas,deltas,float,10.6; + Ÿ,deltae,deltae,float,10.6; + Ÿchk,chktheta,chktheta,char,1; + Ÿ̻,thetas,thetas,float,10.6; + Ÿ,thetae,thetae,float,10.6; + ŷchk,chkduedate,chkduedate,char,1; + ŷ̻,duedates,duedates,char,8; + ŷ,duedatee,duedatee,char,8; + LP1ƽ,onetickgubun,onetickgubun,char,1; + LP,lp_liquidity,lp_liquidity,char,1; + LPchk,chklp_code,chklp_code,char,1; + LPȸڵ,lp_code,lp_code,char,3; + chk,chkkoba,chkkoba,char,1; + (0:ü1:KOBA2:KOBA),cbkoba,cbkoba,char,1; + end + t1969OutBlock,,output; + begin + 񰹼,cnt,cnt,long,4; + end + t1969OutBlock1,1,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + ,issuernmk,issuernmk,char,40; + ڻڵ,itemcode,itemcode,char,12; + /Dz,cpgubun,cpgubun,char,2; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ϰŷ,jnilvolume,jnilvolume,float,12; + 簡,elwexec,elwexec,float,10.2; + ڻ,item,item,char,20; + ڻ갡,bprice,bprice,float,10.2; + ϴ񱸺,bsign,bsign,char,1; + ϴ,bchange,bchange,float,10.2; + ʵ,bdiff,bdiff,float,6.2; + ̾,premium,premium,float,6.2; + иƼ,parity,parity,float,6.2; + ͺб,berate,berate,float,6.2; + ں,capt,capt,float,6.2; + e.,egearing,egearing,float,6.2; + ,gearing,gearing,float,6.2; + ŷ,lastdate,lastdate,char,8; + Ÿ,delta,delta,float,10.6; + Ÿ,theta,theta,float,10.6; + LPȸ,lpname,lpname,char,40; + LP,lphold,lphold,float,6.2; + ϼ,bjandatecnt,bjandatecnt,long,4; + ȯ,convrate,convrate,float,8.4; + 1ƽȯ,tickvalue,tickvalue,float,10.2; + ,kasis,kasis,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1971.res b/sample_python/Res/t1971.res new file mode 100644 index 0000000..f750ed0 --- /dev/null +++ b/sample_python/Res/t1971.res @@ -0,0 +1,121 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡ȣȸ(t1971),t1971,attr,block,headtype=A; + BEGIN_DATA_MAP + t1971InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1971OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,12; + LPŵȣ1,lp_offerrem1,lp_offerrem1,long,12; + żȣ1,bidrem1,bidrem1,long,12; + LPżȣ1,lp_bidrem1,lp_bidrem1,long,12; + ŵ1,preoffercha1,preoffercha1,long,12; + ż1,prebidcha1,prebidcha1,long,12; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,12; + LPŵȣ2,lp_offerrem2,lp_offerrem2,long,12; + żȣ2,bidrem2,bidrem2,long,12; + LPżȣ2,lp_bidrem2,lp_bidrem2,long,12; + ŵ2,preoffercha2,preoffercha2,long,12; + ż2,prebidcha2,prebidcha2,long,12; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,12; + LPŵȣ3,lp_offerrem3,lp_offerrem3,long,12; + żȣ3,bidrem3,bidrem3,long,12; + LPżȣ3,lp_bidrem3,lp_bidrem3,long,12; + ŵ3,preoffercha3,preoffercha3,long,12; + ż3,prebidcha3,prebidcha3,long,12; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,12; + LPŵȣ4,lp_offerrem4,lp_offerrem4,long,12; + żȣ4,bidrem4,bidrem4,long,12; + LPżȣ4,lp_bidrem4,lp_bidrem4,long,12; + ŵ4,preoffercha4,preoffercha4,long,12; + ż4,prebidcha4,prebidcha4,long,12; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,12; + LPŵȣ5,lp_offerrem5,lp_offerrem5,long,12; + żȣ5,bidrem5,bidrem5,long,12; + LPżȣ5,lp_bidrem5,lp_bidrem5,long,12; + ŵ5,preoffercha5,preoffercha5,long,12; + ż5,prebidcha5,prebidcha5,long,12; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,12; + LPŵȣ6,lp_offerrem6,lp_offerrem6,long,12; + żȣ6,bidrem6,bidrem6,long,12; + LPżȣ6,lp_bidrem6,lp_bidrem6,long,12; + ŵ6,preoffercha6,preoffercha6,long,12; + ż6,prebidcha6,prebidcha6,long,12; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,12; + LPŵȣ7,lp_offerrem7,lp_offerrem7,long,12; + żȣ7,bidrem7,bidrem7,long,12; + LPżȣ7,lp_bidrem7,lp_bidrem7,long,12; + ŵ7,preoffercha7,preoffercha7,long,12; + ż7,prebidcha7,prebidcha7,long,12; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,12; + LPŵȣ8,lp_offerrem8,lp_offerrem8,long,12; + żȣ8,bidrem8,bidrem8,long,12; + LPżȣ8,lp_bidrem8,lp_bidrem8,long,12; + ŵ8,preoffercha8,preoffercha8,long,12; + ż8,prebidcha8,prebidcha8,long,12; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,12; + LPŵȣ9,lp_offerrem9,lp_offerrem9,long,12; + żȣ9,bidrem9,bidrem9,long,12; + LPżȣ9,lp_bidrem9,lp_bidrem9,long,12; + ŵ9,preoffercha9,preoffercha9,long,12; + ż9,prebidcha9,prebidcha9,long,12; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,12; + LPŵȣ10,lp_offerrem10,lp_offerrem10,long,12; + żȣ10,bidrem10,bidrem10,long,12; + LPżȣ10,lp_bidrem10,lp_bidrem10,long,12; + ŵ10,preoffercha10,preoffercha10,long,12; + ż10,prebidcha10,prebidcha10,long,12; + ŵȣ,offer,offer,long,12; + żȣ,bid,bid,long,12; + ŵ,preoffercha,preoffercha,long,12; + ż,prebidcha,prebidcha,long,12; + Žð,hotime,hotime,char,8; + üᰡ,yeprice,yeprice,long,8; + ü,yevolume,yevolume,float,12; + üϱ,yesign,yesign,char,1; + üϴ,yechange,yechange,long,8; + ü,yediff,yediff,float,6.2; + ðܸŵܷ,tmoffer,tmoffer,long,12; + ðܸżܷ,tmbid,tmbid,long,12; + ñ,ho_status,ho_status,char,1; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ELWǸ(1:ǥ2:3:),invidx,invidx,char,1; + KO,koba_stdprc,koba_stdprc,float,12.2; + KOٵ,koba_acc_rt,koba_acc_rt,float,12.2; + KO߻(Y/N),koba_yn,koba_yn,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1971 \ No newline at end of file diff --git a/sample_python/Res/t1971_2.res b/sample_python/Res/t1971_2.res new file mode 100644 index 0000000..f750ed0 --- /dev/null +++ b/sample_python/Res/t1971_2.res @@ -0,0 +1,121 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡ȣȸ(t1971),t1971,attr,block,headtype=A; + BEGIN_DATA_MAP + t1971InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1971OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,12; + LPŵȣ1,lp_offerrem1,lp_offerrem1,long,12; + żȣ1,bidrem1,bidrem1,long,12; + LPżȣ1,lp_bidrem1,lp_bidrem1,long,12; + ŵ1,preoffercha1,preoffercha1,long,12; + ż1,prebidcha1,prebidcha1,long,12; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,12; + LPŵȣ2,lp_offerrem2,lp_offerrem2,long,12; + żȣ2,bidrem2,bidrem2,long,12; + LPżȣ2,lp_bidrem2,lp_bidrem2,long,12; + ŵ2,preoffercha2,preoffercha2,long,12; + ż2,prebidcha2,prebidcha2,long,12; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,12; + LPŵȣ3,lp_offerrem3,lp_offerrem3,long,12; + żȣ3,bidrem3,bidrem3,long,12; + LPżȣ3,lp_bidrem3,lp_bidrem3,long,12; + ŵ3,preoffercha3,preoffercha3,long,12; + ż3,prebidcha3,prebidcha3,long,12; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,12; + LPŵȣ4,lp_offerrem4,lp_offerrem4,long,12; + żȣ4,bidrem4,bidrem4,long,12; + LPżȣ4,lp_bidrem4,lp_bidrem4,long,12; + ŵ4,preoffercha4,preoffercha4,long,12; + ż4,prebidcha4,prebidcha4,long,12; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,12; + LPŵȣ5,lp_offerrem5,lp_offerrem5,long,12; + żȣ5,bidrem5,bidrem5,long,12; + LPżȣ5,lp_bidrem5,lp_bidrem5,long,12; + ŵ5,preoffercha5,preoffercha5,long,12; + ż5,prebidcha5,prebidcha5,long,12; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,12; + LPŵȣ6,lp_offerrem6,lp_offerrem6,long,12; + żȣ6,bidrem6,bidrem6,long,12; + LPżȣ6,lp_bidrem6,lp_bidrem6,long,12; + ŵ6,preoffercha6,preoffercha6,long,12; + ż6,prebidcha6,prebidcha6,long,12; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,12; + LPŵȣ7,lp_offerrem7,lp_offerrem7,long,12; + żȣ7,bidrem7,bidrem7,long,12; + LPżȣ7,lp_bidrem7,lp_bidrem7,long,12; + ŵ7,preoffercha7,preoffercha7,long,12; + ż7,prebidcha7,prebidcha7,long,12; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,12; + LPŵȣ8,lp_offerrem8,lp_offerrem8,long,12; + żȣ8,bidrem8,bidrem8,long,12; + LPżȣ8,lp_bidrem8,lp_bidrem8,long,12; + ŵ8,preoffercha8,preoffercha8,long,12; + ż8,prebidcha8,prebidcha8,long,12; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,12; + LPŵȣ9,lp_offerrem9,lp_offerrem9,long,12; + żȣ9,bidrem9,bidrem9,long,12; + LPżȣ9,lp_bidrem9,lp_bidrem9,long,12; + ŵ9,preoffercha9,preoffercha9,long,12; + ż9,prebidcha9,prebidcha9,long,12; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,12; + LPŵȣ10,lp_offerrem10,lp_offerrem10,long,12; + żȣ10,bidrem10,bidrem10,long,12; + LPżȣ10,lp_bidrem10,lp_bidrem10,long,12; + ŵ10,preoffercha10,preoffercha10,long,12; + ż10,prebidcha10,prebidcha10,long,12; + ŵȣ,offer,offer,long,12; + żȣ,bid,bid,long,12; + ŵ,preoffercha,preoffercha,long,12; + ż,prebidcha,prebidcha,long,12; + Žð,hotime,hotime,char,8; + üᰡ,yeprice,yeprice,long,8; + ü,yevolume,yevolume,float,12; + üϱ,yesign,yesign,char,1; + üϴ,yechange,yechange,long,8; + ü,yediff,yediff,float,6.2; + ðܸŵܷ,tmoffer,tmoffer,long,12; + ðܸżܷ,tmbid,tmbid,long,12; + ñ,ho_status,ho_status,char,1; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ELWǸ(1:ǥ2:3:),invidx,invidx,char,1; + KO,koba_stdprc,koba_stdprc,float,12.2; + KOٵ,koba_acc_rt,koba_acc_rt,float,12.2; + KO߻(Y/N),koba_yn,koba_yn,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1971 \ No newline at end of file diff --git a/sample_python/Res/t1972.res b/sample_python/Res/t1972.res new file mode 100644 index 0000000..1b13d0c --- /dev/null +++ b/sample_python/Res/t1972.res @@ -0,0 +1,63 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡(ŷ)ȸ(t1972),t1972,attr,block,headtype=A; + BEGIN_DATA_MAP + t1972InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1972OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + ǥڵ,expcode,expcode,char,12; + ڵ,shcode,shcode,char,9; + ŵǻڵ1,offerno1,offerno1,char,6; + żǻڵ1,bidno1,bidno1,char,6; + Ѹŵ1,dvol1,dvol1,long,12; + Ѹż1,svol1,svol1,long,12; + ŵ1,dcha1,dcha1,long,12; + ż1,scha1,scha1,long,12; + ŵ1,ddiff1,ddiff1,float,6.2; + ż1,sdiff1,sdiff1,float,6.2; + ŵǻڵ2,offerno2,offerno2,char,6; + żǻڵ2,bidno2,bidno2,char,6; + Ѹŵ2,dvol2,dvol2,long,12; + Ѹż2,svol2,svol2,long,12; + ŵ2,dcha2,dcha2,long,12; + ż2,scha2,scha2,long,12; + ŵ2,ddiff2,ddiff2,float,6.2; + ż2,sdiff2,sdiff2,float,6.2; + ŵǻڵ3,offerno3,offerno3,char,6; + żǻڵ3,bidno3,bidno3,char,6; + Ѹŵ3,dvol3,dvol3,long,12; + Ѹż3,svol3,svol3,long,12; + ŵ3,dcha3,dcha3,long,12; + ż3,scha3,scha3,long,12; + ŵ3,ddiff3,ddiff3,float,6.2; + ż3,sdiff3,sdiff3,float,6.2; + ŵǻڵ4,offerno4,offerno4,char,6; + żǻڵ4,bidno4,bidno4,char,6; + Ѹŵ4,dvol4,dvol4,long,12; + Ѹż4,svol4,svol4,long,12; + ŵ4,dcha4,dcha4,long,12; + ż4,scha4,scha4,long,12; + ŵ4,ddiff4,ddiff4,float,6.2; + ż4,sdiff4,sdiff4,float,6.2; + ŵǻڵ5,offerno5,offerno5,char,6; + żǻڵ5,bidno5,bidno5,char,6; + Ѹŵ5,dvol5,dvol5,long,12; + Ѹż5,svol5,svol5,long,12; + ŵ5,dcha5,dcha5,long,12; + ż5,scha5,scha5,long,12; + ŵ5,ddiff5,ddiff5,float,6.2; + ż5,sdiff5,sdiff5,float,6.2; + ܱŵհ,fwdvl,fwdvl,long,12; + ܱżհ,fwsvl,fwsvl,long,12; + ܱŵ,ftradmdcha,ftradmdcha,long,12; + ܱż,ftradmscha,ftradmscha,long,12; + ܱŵհ,fwddiff,fwddiff,float,6.2; + ܱżհ,fwsdiff,fwsdiff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1972 \ No newline at end of file diff --git a/sample_python/Res/t1972_2.res b/sample_python/Res/t1972_2.res new file mode 100644 index 0000000..1b13d0c --- /dev/null +++ b/sample_python/Res/t1972_2.res @@ -0,0 +1,63 @@ +BEGIN_FUNCTION_MAP + .Func,ELW簡(ŷ)ȸ(t1972),t1972,attr,block,headtype=A; + BEGIN_DATA_MAP + t1972InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1972OutBlock,,output; + begin + ѱ۸,hname,hname,char,40; + ǥڵ,expcode,expcode,char,12; + ڵ,shcode,shcode,char,9; + ŵǻڵ1,offerno1,offerno1,char,6; + żǻڵ1,bidno1,bidno1,char,6; + Ѹŵ1,dvol1,dvol1,long,12; + Ѹż1,svol1,svol1,long,12; + ŵ1,dcha1,dcha1,long,12; + ż1,scha1,scha1,long,12; + ŵ1,ddiff1,ddiff1,float,6.2; + ż1,sdiff1,sdiff1,float,6.2; + ŵǻڵ2,offerno2,offerno2,char,6; + żǻڵ2,bidno2,bidno2,char,6; + Ѹŵ2,dvol2,dvol2,long,12; + Ѹż2,svol2,svol2,long,12; + ŵ2,dcha2,dcha2,long,12; + ż2,scha2,scha2,long,12; + ŵ2,ddiff2,ddiff2,float,6.2; + ż2,sdiff2,sdiff2,float,6.2; + ŵǻڵ3,offerno3,offerno3,char,6; + żǻڵ3,bidno3,bidno3,char,6; + Ѹŵ3,dvol3,dvol3,long,12; + Ѹż3,svol3,svol3,long,12; + ŵ3,dcha3,dcha3,long,12; + ż3,scha3,scha3,long,12; + ŵ3,ddiff3,ddiff3,float,6.2; + ż3,sdiff3,sdiff3,float,6.2; + ŵǻڵ4,offerno4,offerno4,char,6; + żǻڵ4,bidno4,bidno4,char,6; + Ѹŵ4,dvol4,dvol4,long,12; + Ѹż4,svol4,svol4,long,12; + ŵ4,dcha4,dcha4,long,12; + ż4,scha4,scha4,long,12; + ŵ4,ddiff4,ddiff4,float,6.2; + ż4,sdiff4,sdiff4,float,6.2; + ŵǻڵ5,offerno5,offerno5,char,6; + żǻڵ5,bidno5,bidno5,char,6; + Ѹŵ5,dvol5,dvol5,long,12; + Ѹż5,svol5,svol5,long,12; + ŵ5,dcha5,dcha5,long,12; + ż5,scha5,scha5,long,12; + ŵ5,ddiff5,ddiff5,float,6.2; + ż5,sdiff5,sdiff5,float,6.2; + ܱŵհ,fwdvl,fwdvl,long,12; + ܱżհ,fwsvl,fwsvl,long,12; + ܱŵ,ftradmdcha,ftradmdcha,long,12; + ܱż,ftradmscha,ftradmscha,long,12; + ܱŵհ,fwddiff,fwddiff,float,6.2; + ܱżհ,fwsdiff,fwsdiff,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1972 \ No newline at end of file diff --git a/sample_python/Res/t1973.res b/sample_python/Res/t1973.res new file mode 100644 index 0000000..2024334 --- /dev/null +++ b/sample_python/Res/t1973.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ELWð뺰üȸ(t1973),t1973,attr,block,headtype=A; + BEGIN_DATA_MAP + t1973InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ðCTS,cts_time,cts_time,char,8; + end + t1973OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,8; + end + t1973OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + üᰡ,yeprice,yeprice,long,8; + üᱸ,yegubun,yegubun,char,1; + 񱸺,jnilysign,jnilysign,char,1; + ,jnilychange,jnilychange,long,8; + ü,yediff,yediff,float,6.2; + üᷮ,yevolume,yevolume,long,12; + ŵüᷮ,ymdvolume,ymdvolume,long,12; + żüᷮ,ymsvolume,ymsvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1973 \ No newline at end of file diff --git a/sample_python/Res/t1973_2.res b/sample_python/Res/t1973_2.res new file mode 100644 index 0000000..2024334 --- /dev/null +++ b/sample_python/Res/t1973_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,ELWð뺰üȸ(t1973),t1973,attr,block,headtype=A; + BEGIN_DATA_MAP + t1973InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ðCTS,cts_time,cts_time,char,8; + end + t1973OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,8; + end + t1973OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,8; + üᰡ,yeprice,yeprice,long,8; + üᱸ,yegubun,yegubun,char,1; + 񱸺,jnilysign,jnilysign,char,1; + ,jnilychange,jnilychange,long,8; + ü,yediff,yediff,float,6.2; + üᷮ,yevolume,yevolume,long,12; + ŵüᷮ,ymdvolume,ymdvolume,long,12; + żüᷮ,ymsvolume,ymsvolume,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1973 \ No newline at end of file diff --git a/sample_python/Res/t1974.res b/sample_python/Res/t1974.res new file mode 100644 index 0000000..aeee258 --- /dev/null +++ b/sample_python/Res/t1974.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP + .Func,ELWڻ굿(t1974),t1974,attr,block,headtype=A; + BEGIN_DATA_MAP + t1974InBlock,Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1974OutBlock,,output; + begin + 񰹼,cnt,cnt,long,4; + end + t1974OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + /Dz,cpgubun,cpgubun,char,2; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1974 \ No newline at end of file diff --git a/sample_python/Res/t1974_2.res b/sample_python/Res/t1974_2.res new file mode 100644 index 0000000..aeee258 --- /dev/null +++ b/sample_python/Res/t1974_2.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP + .Func,ELWڻ굿(t1974),t1974,attr,block,headtype=A; + BEGIN_DATA_MAP + t1974InBlock,Է,input; + begin + ڵ,shcode,shcode,char,6; + end + t1974OutBlock,,output; + begin + 񰹼,cnt,cnt,long,4; + end + t1974OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + /Dz,cpgubun,cpgubun,char,2; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1974 \ No newline at end of file diff --git a/sample_python/Res/t1981.res b/sample_python/Res/t1981.res new file mode 100644 index 0000000..bd41392 --- /dev/null +++ b/sample_python/Res/t1981.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ڻ긮Ʈȸ(t1981),t1981,attr,block,headtype=A; + BEGIN_DATA_MAP + t1981InBlock,⺻Է,input; + begin + 屸(0:ü1:ڽ2:ڽ),mkt_gb,mkt_gb,char,1; + end + t1981OutBlock,1,output; + begin + ڽǼ,ksp_cnt,ksp_cnt,char,4; + ڽǼ,ksd_cnt,ksd_cnt,char,4; + end + t1981OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ǥڵ,expcode,expcode,char,12; + ,hname,hname,char,20; + 簡,price,price,char,12; + ȣ,sign,sign,char,1; + ,change,change,char,12; + ,rate,rate,float,5.2; + ŷ(),volume,volume,char,12; + ŷ(鸸),value,value,char,12; + 屸,mkt_gb,mkt_gb,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1981 \ No newline at end of file diff --git a/sample_python/Res/t1981_2.res b/sample_python/Res/t1981_2.res new file mode 100644 index 0000000..bd41392 --- /dev/null +++ b/sample_python/Res/t1981_2.res @@ -0,0 +1,29 @@ +BEGIN_FUNCTION_MAP + .Func,ڻ긮Ʈȸ(t1981),t1981,attr,block,headtype=A; + BEGIN_DATA_MAP + t1981InBlock,⺻Է,input; + begin + 屸(0:ü1:ڽ2:ڽ),mkt_gb,mkt_gb,char,1; + end + t1981OutBlock,1,output; + begin + ڽǼ,ksp_cnt,ksp_cnt,char,4; + ڽǼ,ksd_cnt,ksd_cnt,char,4; + end + t1981OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ǥڵ,expcode,expcode,char,12; + ,hname,hname,char,20; + 簡,price,price,char,12; + ȣ,sign,sign,char,1; + ,change,change,char,12; + ,rate,rate,float,5.2; + ŷ(),volume,volume,char,12; + ŷ(鸸),value,value,char,12; + 屸,mkt_gb,mkt_gb,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + +t1981 \ No newline at end of file diff --git a/sample_python/Res/t1988.res b/sample_python/Res/t1988.res new file mode 100644 index 0000000..6c05a29 --- /dev/null +++ b/sample_python/Res/t1988.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ڻ긮Ʈȸ(t1988),t1988,attr,block,headtype=A; + BEGIN_DATA_MAP + t1988InBlock,⺻Է,input; + begin + 屸(0:ü1:ڽ2:ڽ),mkt_gb,mkt_gb,char,1; + ݼ(0:ü1:Ǽ),chk_price,chk_price,char,1; + 1,from_price,from_price,char,12; + 2,to_price,to_price,char,12; + ŷ(0:ü1:Ǽ),chk_vol,chk_vol,char,1; + ŷ1,from_vol,from_vol,char,12; + ŷ2,to_vol,to_vol,char,12; + (0:ü1:Ǽ),chk_rate,chk_rate,char,1; + 1,from_rate,from_rate,float,5.2; + 2,to_rate,to_rate,float,5.2; + ŷݼ(0:ü1:Ǽ),chk_amt,chk_amt,char,1; + ŷ1,from_amt,from_amt,char,12; + ŷ2,to_amt,to_amt,char,12; + (0:ü1:Ǽ),chk_up,chk_up,char,1; + (0:ü1:Ǽ),chk_down,chk_down,char,1; + end + t1988OutBlock,1,output; + begin + ڽǼ,ksp_cnt,ksp_cnt,char,4; + ڽǼ,ksd_cnt,ksd_cnt,char,4; + end + t1988OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ǥڵ,expcode,expcode,char,12; + ,hname,hname,char,20; + 簡,price,price,char,12; + ȣ,sign,sign,char,1; + ,change,change,char,12; + ,rate,rate,float,5.2; + ŷ(),volume,volume,char,12; + ŷ(鸸),value,value,char,12; + 屸,mkt_gb,mkt_gb,char,1; + ϵðŷ(),jvolume,jvolume,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t1988_2.res b/sample_python/Res/t1988_2.res new file mode 100644 index 0000000..6c05a29 --- /dev/null +++ b/sample_python/Res/t1988_2.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ڻ긮Ʈȸ(t1988),t1988,attr,block,headtype=A; + BEGIN_DATA_MAP + t1988InBlock,⺻Է,input; + begin + 屸(0:ü1:ڽ2:ڽ),mkt_gb,mkt_gb,char,1; + ݼ(0:ü1:Ǽ),chk_price,chk_price,char,1; + 1,from_price,from_price,char,12; + 2,to_price,to_price,char,12; + ŷ(0:ü1:Ǽ),chk_vol,chk_vol,char,1; + ŷ1,from_vol,from_vol,char,12; + ŷ2,to_vol,to_vol,char,12; + (0:ü1:Ǽ),chk_rate,chk_rate,char,1; + 1,from_rate,from_rate,float,5.2; + 2,to_rate,to_rate,float,5.2; + ŷݼ(0:ü1:Ǽ),chk_amt,chk_amt,char,1; + ŷ1,from_amt,from_amt,char,12; + ŷ2,to_amt,to_amt,char,12; + (0:ü1:Ǽ),chk_up,chk_up,char,1; + (0:ü1:Ǽ),chk_down,chk_down,char,1; + end + t1988OutBlock,1,output; + begin + ڽǼ,ksp_cnt,ksp_cnt,char,4; + ڽǼ,ksd_cnt,ksd_cnt,char,4; + end + t1988OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ǥڵ,expcode,expcode,char,12; + ,hname,hname,char,20; + 簡,price,price,char,12; + ȣ,sign,sign,char,1; + ,change,change,char,12; + ,rate,rate,float,5.2; + ŷ(),volume,volume,char,12; + ŷ(鸸),value,value,char,12; + 屸,mkt_gb,mkt_gb,char,1; + ϵðŷ(),jvolume,jvolume,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2101.res b/sample_python/Res/t2101.res new file mode 100644 index 0000000..844e5dc --- /dev/null +++ b/sample_python/Res/t2101.res @@ -0,0 +1,82 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼ簡(ü)ȸ(t2101),t2101,attr,block,headtype=A; + BEGIN_DATA_MAP + t2101InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + end + t2101OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ̰,mgjv,mgjv,long,8; + ̰,mgjvdiff,mgjvdiff,long,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + 52ְ,high52w,high52w,float,6.2; + 52,low52w,low52w,float,6.2; + ̽ý,basis,basis,float,6.2; + ذ,recprice,recprice,float,6.2; + ̷а,theoryprice,theoryprice,float,6.2; + ,glyl,glyl,float,6.3; + CBѰ,cbhprice,cbhprice,float,6.2; + CBѰ,cblprice,cblprice,float,6.2; + ,lastmonth,lastmonth,char,8; + ܿ,jandatecnt,jandatecnt,long,8; + ,pricejisu,pricejisu,float,6.2; + ϴ񱸺,jisusign,jisusign,char,1; + ϴ,jisuchange,jisuchange,float,6.2; + ,jisudiff,jisudiff,float,6.2; + KOSPI200,kospijisu,kospijisu,float,6.2; + KOSPI200ϴ񱸺,kospisign,kospisign,char,1; + KOSPI200ϴ,kospichange,kospichange,float,6.2; + KOSPI200,kospidiff,kospidiff,float,6.2; + ְ,listhprice,listhprice,float,6.2; + ,listlprice,listlprice,float,6.2; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ,vega,vega,float,6.4; + ο,rhox,rhox,float,6.4; + ٿ簡,gmprice,gmprice,float,6.2; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,float,6.2; + ٿ,gmdiff,gmdiff,float,6.2; + ̷а,theorypriceg,theorypriceg,float,6.2; + ,histimpv,histimpv,float,6.2; + 纯,impv,impv,float,6.2; + BASIS,sbasis,sbasis,float,6.2; + ̷BASIS,ibasis,ibasis,float,6.2; + ٿڵ,gmfutcode,gmfutcode,char,8; + 簡,actprice,actprice,float,6.2; + ŷҹΰŽð,greeks_time,greeks_time,char,6; + ŷҹΰȮ,greeks_confirm,greeks_confirm,char,8; + ϰȣ,danhochk,danhochk,char,1; + üᰡ,yeprice,yeprice,float,6.2; + üᰡ񱸺,jnilysign,jnilysign,char,1; + üᰡ,jnilychange,jnilychange,float,6.2; + üᰡ,jnilydrate,jnilydrate,float,6.2; + б(1:а2:0:̹߻),alloc_gubun,alloc_gubun,char,1; + ܿ(),bjandatecnt,bjandatecnt,long,8; + ڵ,focode,focode,char,8; + ǽðѿ(0:ƴ1:2:3:Ͻ),dy_gubun,dy_gubun,char,1; + ǽðѰ,dy_uplmtprice,dy_uplmtprice,float,6.2; + ǽðѰ,dy_dnlmtprice,dy_dnlmtprice,float,6.2; + Ȯ(0:Ȯ1:Ȯ2:ƴ),updnstep_gubun,updnstep_gubun,char,1; + ܰ,upstep,upstep,char,2; + ܰ,dnstep,dnstep,char,2; + 3ܰѰ,uplmtprice_3rd,uplmtprice_3rd,float,6.2; + 3ܰѰ,dnlmtprice_3rd,dnlmtprice_3rd,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2101_2.res b/sample_python/Res/t2101_2.res new file mode 100644 index 0000000..844e5dc --- /dev/null +++ b/sample_python/Res/t2101_2.res @@ -0,0 +1,82 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼ簡(ü)ȸ(t2101),t2101,attr,block,headtype=A; + BEGIN_DATA_MAP + t2101InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + end + t2101OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ̰,mgjv,mgjv,long,8; + ̰,mgjvdiff,mgjvdiff,long,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + 52ְ,high52w,high52w,float,6.2; + 52,low52w,low52w,float,6.2; + ̽ý,basis,basis,float,6.2; + ذ,recprice,recprice,float,6.2; + ̷а,theoryprice,theoryprice,float,6.2; + ,glyl,glyl,float,6.3; + CBѰ,cbhprice,cbhprice,float,6.2; + CBѰ,cblprice,cblprice,float,6.2; + ,lastmonth,lastmonth,char,8; + ܿ,jandatecnt,jandatecnt,long,8; + ,pricejisu,pricejisu,float,6.2; + ϴ񱸺,jisusign,jisusign,char,1; + ϴ,jisuchange,jisuchange,float,6.2; + ,jisudiff,jisudiff,float,6.2; + KOSPI200,kospijisu,kospijisu,float,6.2; + KOSPI200ϴ񱸺,kospisign,kospisign,char,1; + KOSPI200ϴ,kospichange,kospichange,float,6.2; + KOSPI200,kospidiff,kospidiff,float,6.2; + ְ,listhprice,listhprice,float,6.2; + ,listlprice,listlprice,float,6.2; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ,vega,vega,float,6.4; + ο,rhox,rhox,float,6.4; + ٿ簡,gmprice,gmprice,float,6.2; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,float,6.2; + ٿ,gmdiff,gmdiff,float,6.2; + ̷а,theorypriceg,theorypriceg,float,6.2; + ,histimpv,histimpv,float,6.2; + 纯,impv,impv,float,6.2; + BASIS,sbasis,sbasis,float,6.2; + ̷BASIS,ibasis,ibasis,float,6.2; + ٿڵ,gmfutcode,gmfutcode,char,8; + 簡,actprice,actprice,float,6.2; + ŷҹΰŽð,greeks_time,greeks_time,char,6; + ŷҹΰȮ,greeks_confirm,greeks_confirm,char,8; + ϰȣ,danhochk,danhochk,char,1; + üᰡ,yeprice,yeprice,float,6.2; + üᰡ񱸺,jnilysign,jnilysign,char,1; + üᰡ,jnilychange,jnilychange,float,6.2; + üᰡ,jnilydrate,jnilydrate,float,6.2; + б(1:а2:0:̹߻),alloc_gubun,alloc_gubun,char,1; + ܿ(),bjandatecnt,bjandatecnt,long,8; + ڵ,focode,focode,char,8; + ǽðѿ(0:ƴ1:2:3:Ͻ),dy_gubun,dy_gubun,char,1; + ǽðѰ,dy_uplmtprice,dy_uplmtprice,float,6.2; + ǽðѰ,dy_dnlmtprice,dy_dnlmtprice,float,6.2; + Ȯ(0:Ȯ1:Ȯ2:ƴ),updnstep_gubun,updnstep_gubun,char,1; + ܰ,upstep,upstep,char,2; + ܰ,dnstep,dnstep,char,2; + 3ܰѰ,uplmtprice_3rd,uplmtprice_3rd,float,6.2; + 3ܰѰ,dnlmtprice_3rd,dnlmtprice_3rd,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2105.res b/sample_python/Res/t2105.res new file mode 100644 index 0000000..fcf29ce --- /dev/null +++ b/sample_python/Res/t2105.res @@ -0,0 +1,57 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼ簡ȣȸ(t2105),t2105,attr,block,headtype=A; + BEGIN_DATA_MAP + t2105InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + end + t2105OutBlock,,output; + begin + ,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷϵð,stimeqrt,stimeqrt,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ŵȣ1,offerho1,offerho1,float,6.2; + żȣ1,bidho1,bidho1,float,6.2; + ŵȣ1,offerrem1,offerrem1,long,8; + żȣ1,bidrem1,bidrem1,long,8; + ŵȣǼ1,dcnt1,dcnt1,long,8; + żȣǼ1,scnt1,scnt1,long,8; + ŵȣ2,offerho2,offerho2,float,6.2; + żȣ2,bidho2,bidho2,float,6.2; + ŵȣ2,offerrem2,offerrem2,long,8; + żȣ2,bidrem2,bidrem2,long,8; + ŵȣǼ2,dcnt2,dcnt2,long,8; + żȣǼ2,scnt2,scnt2,long,8; + ŵȣ3,offerho3,offerho3,float,6.2; + żȣ3,bidho3,bidho3,float,6.2; + ŵȣ3,offerrem3,offerrem3,long,8; + żȣ3,bidrem3,bidrem3,long,8; + ŵȣǼ3,dcnt3,dcnt3,long,8; + żȣǼ3,scnt3,scnt3,long,8; + ŵȣ4,offerho4,offerho4,float,6.2; + żȣ4,bidho4,bidho4,float,6.2; + ŵȣ4,offerrem4,offerrem4,long,8; + żȣ4,bidrem4,bidrem4,long,8; + ŵȣǼ4,dcnt4,dcnt4,long,8; + żȣǼ4,scnt4,scnt4,long,8; + ŵȣ5,offerho5,offerho5,float,6.2; + żȣ5,bidho5,bidho5,float,6.2; + ŵȣ5,offerrem5,offerrem5,long,8; + żȣ5,bidrem5,bidrem5,long,8; + ŵȣǼ5,dcnt5,dcnt5,long,8; + żȣǼ5,scnt5,scnt5,long,8; + ŵȣѼ,dvol,dvol,long,8; + żȣѼ,svol,svol,long,8; + ѸŵȣǼ,toffernum,toffernum,long,8; + ѸżȣǼ,tbidnum,tbidnum,long,8; + Žð,time,time,char,6; + ڵ,shcode,shcode,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2105_2.res b/sample_python/Res/t2105_2.res new file mode 100644 index 0000000..fcf29ce --- /dev/null +++ b/sample_python/Res/t2105_2.res @@ -0,0 +1,57 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼ簡ȣȸ(t2105),t2105,attr,block,headtype=A; + BEGIN_DATA_MAP + t2105InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + end + t2105OutBlock,,output; + begin + ,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷϵð,stimeqrt,stimeqrt,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ŵȣ1,offerho1,offerho1,float,6.2; + żȣ1,bidho1,bidho1,float,6.2; + ŵȣ1,offerrem1,offerrem1,long,8; + żȣ1,bidrem1,bidrem1,long,8; + ŵȣǼ1,dcnt1,dcnt1,long,8; + żȣǼ1,scnt1,scnt1,long,8; + ŵȣ2,offerho2,offerho2,float,6.2; + żȣ2,bidho2,bidho2,float,6.2; + ŵȣ2,offerrem2,offerrem2,long,8; + żȣ2,bidrem2,bidrem2,long,8; + ŵȣǼ2,dcnt2,dcnt2,long,8; + żȣǼ2,scnt2,scnt2,long,8; + ŵȣ3,offerho3,offerho3,float,6.2; + żȣ3,bidho3,bidho3,float,6.2; + ŵȣ3,offerrem3,offerrem3,long,8; + żȣ3,bidrem3,bidrem3,long,8; + ŵȣǼ3,dcnt3,dcnt3,long,8; + żȣǼ3,scnt3,scnt3,long,8; + ŵȣ4,offerho4,offerho4,float,6.2; + żȣ4,bidho4,bidho4,float,6.2; + ŵȣ4,offerrem4,offerrem4,long,8; + żȣ4,bidrem4,bidrem4,long,8; + ŵȣǼ4,dcnt4,dcnt4,long,8; + żȣǼ4,scnt4,scnt4,long,8; + ŵȣ5,offerho5,offerho5,float,6.2; + żȣ5,bidho5,bidho5,float,6.2; + ŵȣ5,offerrem5,offerrem5,long,8; + żȣ5,bidrem5,bidrem5,long,8; + ŵȣǼ5,dcnt5,dcnt5,long,8; + żȣǼ5,scnt5,scnt5,long,8; + ŵȣѼ,dvol,dvol,long,8; + żȣѼ,svol,svol,long,8; + ѸŵȣǼ,toffernum,toffernum,long,8; + ѸżȣǼ,tbidnum,tbidnum,long,8; + Žð,time,time,char,6; + ڵ,shcode,shcode,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2106.res b/sample_python/Res/t2106.res new file mode 100644 index 0000000..f953bd7 --- /dev/null +++ b/sample_python/Res/t2106.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼ簡ü޸(t2106),t2106,block,headtype=A; + BEGIN_DATA_MAP + t2106InBlock,⺻Է,input; + begin + ڵ,code,code,char,8; + Ǽ,nrec,nrec,char,2; + end + t2106InBlock1,⺻Է1,input,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + Ÿ1,dat1,dat1,char,1; + Ÿ2,dat2,dat2,char,8; + end + t2106OutBlock,,output; + begin + °Ǽ,nrec,nrec,char,2; + end + t2106OutBlock1,1,output,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + °,vals,vals,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2106_2.res b/sample_python/Res/t2106_2.res new file mode 100644 index 0000000..f953bd7 --- /dev/null +++ b/sample_python/Res/t2106_2.res @@ -0,0 +1,28 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼ簡ü޸(t2106),t2106,block,headtype=A; + BEGIN_DATA_MAP + t2106InBlock,⺻Է,input; + begin + ڵ,code,code,char,8; + Ǽ,nrec,nrec,char,2; + end + t2106InBlock1,⺻Է1,input,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + Ÿ1,dat1,dat1,char,1; + Ÿ2,dat2,dat2,char,8; + end + t2106OutBlock,,output; + begin + °Ǽ,nrec,nrec,char,2; + end + t2106OutBlock1,1,output,occurs; + begin + ε,indx,indx,char,1; + DZ,gubn,gubn,char,1; + °,vals,vals,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2201.res b/sample_python/Res/t2201.res new file mode 100644 index 0000000..6d75c9c --- /dev/null +++ b/sample_python/Res/t2201.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǽð뺰üȸ(t2201),t2201,attr,block,headtype=A; + BEGIN_DATA_MAP + t2201InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t2201OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t2201OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,8.2; + ŵȣ,offerho,offerho,float,6.2; + żȣ,bidho,bidho,float,6.2; + ŷ,volume,volume,double,12.0; + ̰,openyak,openyak,long,8; + ̰,jnilopenupdn,jnilopenupdn,long,8; + ̷BASIS,ibasis,ibasis,float,6.2; + BASIS,sbasis,sbasis,float,6.2; + ,kasis,kasis,float,6.2; + ŷ,value,value,double,12.0; + ̰,j_openupdn,j_openupdn,long,8; + żüᷮ,n_msvolume,n_msvolume,double,12.0; + ŵüᷮ,n_mdvolume,n_mdvolume,double,12.0; + żüᷮ,s_msvolume,s_msvolume,double,12.0; + żüǼ,n_mschecnt,n_mschecnt,long,8; + ŵüǼ,n_mdchecnt,n_mdchecnt,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2201_2.res b/sample_python/Res/t2201_2.res new file mode 100644 index 0000000..6d75c9c --- /dev/null +++ b/sample_python/Res/t2201_2.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǽð뺰üȸ(t2201),t2201,attr,block,headtype=A; + BEGIN_DATA_MAP + t2201InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t2201OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t2201OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,8.2; + ŵȣ,offerho,offerho,float,6.2; + żȣ,bidho,bidho,float,6.2; + ŷ,volume,volume,double,12.0; + ̰,openyak,openyak,long,8; + ̰,jnilopenupdn,jnilopenupdn,long,8; + ̷BASIS,ibasis,ibasis,float,6.2; + BASIS,sbasis,sbasis,float,6.2; + ,kasis,kasis,float,6.2; + ŷ,value,value,double,12.0; + ̰,j_openupdn,j_openupdn,long,8; + żüᷮ,n_msvolume,n_msvolume,double,12.0; + ŵüᷮ,n_mdvolume,n_mdvolume,double,12.0; + żüᷮ,s_msvolume,s_msvolume,double,12.0; + żüǼ,n_mschecnt,n_mschecnt,long,8; + ŵüǼ,n_mdchecnt,n_mdchecnt,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2203.res b/sample_python/Res/t2203.res new file mode 100644 index 0000000..1bb1d49 --- /dev/null +++ b/sample_python/Res/t2203.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓְ(t2203),t2203,attr,block,headtype=A; + BEGIN_DATA_MAP + t2203InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱٿ,futcheck,futcheck,char,1; + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ȸûǼ,cnt,cnt,int,3; + end + t2203OutBlock,,output; + begin + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ֱٿ,nowfutyn,nowfutyn,char,1; + end + t2203OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ̰,openyak,openyak,long,8; + ̰,openyakupdn,openyakupdn,long,8; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2203_2.res b/sample_python/Res/t2203_2.res new file mode 100644 index 0000000..1bb1d49 --- /dev/null +++ b/sample_python/Res/t2203_2.res @@ -0,0 +1,38 @@ +BEGIN_FUNCTION_MAP + .Func,Ⱓְ(t2203),t2203,attr,block,headtype=A; + BEGIN_DATA_MAP + t2203InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱٿ,futcheck,futcheck,char,1; + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ȸûǼ,cnt,cnt,int,3; + end + t2203OutBlock,,output; + begin + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ֱٿ,nowfutyn,nowfutyn,char,1; + end + t2203OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ̰,openyak,openyak,long,8; + ̰,openyakupdn,openyakupdn,long,8; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2209.res b/sample_python/Res/t2209.res new file mode 100644 index 0000000..e94edb6 --- /dev/null +++ b/sample_python/Res/t2209.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ɼƽкüȸíƮ(t2209),t2209,attr,block,headtype=A; + BEGIN_DATA_MAP + t2209InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + íƮ,cgubun,cgubun,char,1; + б,bgubun,bgubun,int,3; + ȸǼ,cnt,cnt,int,3; + end + t2209OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ŷ,volume,volume,double,12.0; + ŷ,value,value,double,12.0; + ̰,openyak,openyak,long,8; + ̰,openupdn,openupdn,long,8; + ü,cvolume,cvolume,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + ŵüǼ,s_mdchecnt,s_mdchecnt,long,8; + żüǼ,ss_mschecnt,ss_mschecnt,long,8; + żüᷮ,s_mschevol,s_mschevol,double,12.0; + ŵüᷮ,s_mdchevol,s_mdchevol,double,12.0; + żüᷮ,ss_mschevol,ss_mschevol,double,12.0; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2209_2.res b/sample_python/Res/t2209_2.res new file mode 100644 index 0000000..e94edb6 --- /dev/null +++ b/sample_python/Res/t2209_2.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,ɼƽкüȸíƮ(t2209),t2209,attr,block,headtype=A; + BEGIN_DATA_MAP + t2209InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + íƮ,cgubun,cgubun,char,1; + б,bgubun,bgubun,int,3; + ȸǼ,cnt,cnt,int,3; + end + t2209OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ŷ,volume,volume,double,12.0; + ŷ,value,value,double,12.0; + ̰,openyak,openyak,long,8; + ̰,openupdn,openupdn,long,8; + ü,cvolume,cvolume,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + ŵüǼ,s_mdchecnt,s_mdchecnt,long,8; + żüǼ,ss_mschecnt,ss_mschecnt,long,8; + żüᷮ,s_mschevol,s_mschevol,double,12.0; + ŵüᷮ,s_mdchevol,s_mdchevol,double,12.0; + żüᷮ,ss_mschevol,ss_mschevol,double,12.0; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2210.res b/sample_python/Res/t2210.res new file mode 100644 index 0000000..9db799b --- /dev/null +++ b/sample_python/Res/t2210.res @@ -0,0 +1,20 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǽð뺰üȸ(¿),t2210,attr,block,headtype=A; + BEGIN_DATA_MAP + t2210InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + end + t2210OutBlock,,output; + begin + ŵü,mdvolume,mdvolume,long,8; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,8; + żüǼ,mschecnt,mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2210_2.res b/sample_python/Res/t2210_2.res new file mode 100644 index 0000000..9db799b --- /dev/null +++ b/sample_python/Res/t2210_2.res @@ -0,0 +1,20 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǽð뺰üȸ(¿),t2210,attr,block,headtype=A; + BEGIN_DATA_MAP + t2210InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + end + t2210OutBlock,,output; + begin + ŵü,mdvolume,mdvolume,long,8; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,long,8; + żüǼ,mschecnt,mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2301.res b/sample_python/Res/t2301.res new file mode 100644 index 0000000..4bcb69d --- /dev/null +++ b/sample_python/Res/t2301.res @@ -0,0 +1,94 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ(t2301),t2301,attr,block,headtype=A; + BEGIN_DATA_MAP + t2301InBlock,⺻Է,input; + begin + ,yyyymm,yyyymm,char,6; + ̴ϱ(M:̴G:),gubun,gubun,char,1; + end + t2301OutBlock,,output; + begin + ,histimpv,histimpv,long,4; + ɼ,jandatecnt,jandatecnt,long,4; + ݿɼǴǥIV,cimpv,cimpv,float,6.3; + DzɼǴǥIV,pimpv,pimpv,float,6.3; + ٿ簡,gmprice,gmprice,float,6.2; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,float,6.2; + ٿ,gmdiff,gmdiff,float,6.2; + ٿŷ,gmvolume,gmvolume,long,12; + ٿڵ,gmshcode,gmshcode,char,8; + end + t2301OutBlock1,1,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + ݿɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + IV,iv,iv,float,6.2; + ̰,mgjv,mgjv,long,12; + ̰,mgjvupdn,mgjvupdn,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + ,vega,vega,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ο,rhox,rhox,float,6.4; + ̷а,theoryprice,theoryprice,float,6.2; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ܰ,jvolume,jvolume,long,12; + 򰡼,parpl,parpl,long,12; + û갡ɼ,jngo,jngo,long,6; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + ŷ,value,value,float,12; + end + t2301OutBlock2,2,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + Dzɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + IV,iv,iv,float,6.2; + ̰,mgjv,mgjv,long,12; + ̰,mgjvupdn,mgjvupdn,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + ,vega,vega,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ο,rhox,rhox,float,6.4; + ̷а,theoryprice,theoryprice,float,6.2; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ܰ,jvolume,jvolume,long,12; + 򰡼,parpl,parpl,long,12; + û갡ɼ,jngo,jngo,long,6; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2301_2.res b/sample_python/Res/t2301_2.res new file mode 100644 index 0000000..4bcb69d --- /dev/null +++ b/sample_python/Res/t2301_2.res @@ -0,0 +1,94 @@ +BEGIN_FUNCTION_MAP + .Func,ɼ(t2301),t2301,attr,block,headtype=A; + BEGIN_DATA_MAP + t2301InBlock,⺻Է,input; + begin + ,yyyymm,yyyymm,char,6; + ̴ϱ(M:̴G:),gubun,gubun,char,1; + end + t2301OutBlock,,output; + begin + ,histimpv,histimpv,long,4; + ɼ,jandatecnt,jandatecnt,long,4; + ݿɼǴǥIV,cimpv,cimpv,float,6.3; + DzɼǴǥIV,pimpv,pimpv,float,6.3; + ٿ簡,gmprice,gmprice,float,6.2; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,float,6.2; + ٿ,gmdiff,gmdiff,float,6.2; + ٿŷ,gmvolume,gmvolume,long,12; + ٿڵ,gmshcode,gmshcode,char,8; + end + t2301OutBlock1,1,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + ݿɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + IV,iv,iv,float,6.2; + ̰,mgjv,mgjv,long,12; + ̰,mgjvupdn,mgjvupdn,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + ,vega,vega,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ο,rhox,rhox,float,6.4; + ̷а,theoryprice,theoryprice,float,6.2; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ܰ,jvolume,jvolume,long,12; + 򰡼,parpl,parpl,long,12; + û갡ɼ,jngo,jngo,long,6; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + ŷ,value,value,float,12; + end + t2301OutBlock2,2,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + Dzɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + IV,iv,iv,float,6.2; + ̰,mgjv,mgjv,long,12; + ̰,mgjvupdn,mgjvupdn,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + ,vega,vega,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ο,rhox,rhox,float,6.4; + ̷а,theoryprice,theoryprice,float,6.2; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ܰ,jvolume,jvolume,long,12; + 򰡼,parpl,parpl,long,12; + û갡ɼ,jngo,jngo,long,6; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2405.res b/sample_python/Res/t2405.res new file mode 100644 index 0000000..14f490a --- /dev/null +++ b/sample_python/Res/t2405.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,ɼȣܷíƮ(t2405),t2405,attr,block,headtype=A; + BEGIN_DATA_MAP + t2405InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + б,bgubun,bgubun,char,1; + N,nmin,nmin,int,2; + ð,etime,etime,char,4; + ȣ,hgubun,hgubun,char,1; + ȸǼ,cnt,cnt,int,3; + ðCTS,cts_time,cts_time,char,6; + end + t2405OutBlock,,output; + begin + ŵü,mdvolume,mdvolume,double,12.0; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,double,12.0; + żüǼ,mschecnt,mschecnt,long,8; + ðCTS,cts_time,cts_time,char,6; + end + t2405OutBlock1,1,output,occurs; + begin + ð,time,time,char,6; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ŷ,volume,volume,double,12.0; + ü,cvolume,cvolume,long,8; + ŵ1ȣ,offerho1,offerho1,float,6.2; + ż1ȣ,bidho1,bidho1,float,6.2; + ŵ,offerrem,offerrem,long,8; + ż,bidrem,bidrem,long,8; + ŵǼ,offercnt,offercnt,long,8; + żǼ,bidcnt,bidcnt,long,8; + ŵ,c_offerrem,c_offerrem,long,8; + ż,c_bidrem,c_bidrem,long,8; + ŵǼ,c_offercnt,c_offercnt,long,8; + żǼ,c_bidcnt,c_bidcnt,long,8; + ż,r_bidrem,r_bidrem,float,6.2; + żǼ,r_bidcnt,r_bidcnt,float,6.2; + ż,r_sign,r_sign,char,1; + ,date,date,date,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2405_2.res b/sample_python/Res/t2405_2.res new file mode 100644 index 0000000..14f490a --- /dev/null +++ b/sample_python/Res/t2405_2.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,ɼȣܷíƮ(t2405),t2405,attr,block,headtype=A; + BEGIN_DATA_MAP + t2405InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + б,bgubun,bgubun,char,1; + N,nmin,nmin,int,2; + ð,etime,etime,char,4; + ȣ,hgubun,hgubun,char,1; + ȸǼ,cnt,cnt,int,3; + ðCTS,cts_time,cts_time,char,6; + end + t2405OutBlock,,output; + begin + ŵü,mdvolume,mdvolume,double,12.0; + ŵüǼ,mdchecnt,mdchecnt,long,8; + żü,msvolume,msvolume,double,12.0; + żüǼ,mschecnt,mschecnt,long,8; + ðCTS,cts_time,cts_time,char,6; + end + t2405OutBlock1,1,output,occurs; + begin + ð,time,time,char,6; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ŷ,volume,volume,double,12.0; + ü,cvolume,cvolume,long,8; + ŵ1ȣ,offerho1,offerho1,float,6.2; + ż1ȣ,bidho1,bidho1,float,6.2; + ŵ,offerrem,offerrem,long,8; + ż,bidrem,bidrem,long,8; + ŵǼ,offercnt,offercnt,long,8; + żǼ,bidcnt,bidcnt,long,8; + ŵ,c_offerrem,c_offerrem,long,8; + ż,c_bidrem,c_bidrem,long,8; + ŵǼ,c_offercnt,c_offercnt,long,8; + żǼ,c_bidcnt,c_bidcnt,long,8; + ż,r_bidrem,r_bidrem,float,6.2; + żǼ,r_bidcnt,r_bidcnt,float,6.2; + ż,r_sign,r_sign,char,1; + ,date,date,date,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2421.res b/sample_python/Res/t2421.res new file mode 100644 index 0000000..f6aa0a1 --- /dev/null +++ b/sample_python/Res/t2421.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,̰(t2421),t2421,attr,block,headtype=A; + BEGIN_DATA_MAP + t2421InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + ϱ,bdgubun,bdgubun,char,1; + N,nmin,nmin,int,3; + Ͽᱸ,tcgubun,tcgubun,char,1; + ȸǼ,cnt,cnt,int,4; + end + t2421OutBlock,,output; + begin + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,8; + ŷ,volume,volume,double,15.0; + ̰,openyak,openyak,long,8; + end + t2421OutBlock1,1,output,occurs; + begin + ڽð,dt,dt,char,14; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ̰÷,openopenyak,openopenyak,long,8; + ̰,highopenyak,highopenyak,long,8; + ̰,lowopenyak,lowopenyak,long,8; + ̰,closeopenyak,closeopenyak,long,8; + ̰,openupdn,openupdn,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2421_2.res b/sample_python/Res/t2421_2.res new file mode 100644 index 0000000..f6aa0a1 --- /dev/null +++ b/sample_python/Res/t2421_2.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,̰(t2421),t2421,attr,block,headtype=A; + BEGIN_DATA_MAP + t2421InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + ϱ,bdgubun,bdgubun,char,1; + N,nmin,nmin,int,3; + Ͽᱸ,tcgubun,tcgubun,char,1; + ȸǼ,cnt,cnt,int,4; + end + t2421OutBlock,,output; + begin + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ü,cvolume,cvolume,long,8; + ŷ,volume,volume,double,15.0; + ̰,openyak,openyak,long,8; + end + t2421OutBlock1,1,output,occurs; + begin + ڽð,dt,dt,char,14; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ̰÷,openopenyak,openopenyak,long,8; + ̰,highopenyak,highopenyak,long,8; + ̰,lowopenyak,lowopenyak,long,8; + ̰,closeopenyak,closeopenyak,long,8; + ̰,openupdn,openupdn,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2541.res b/sample_python/Res/t2541.res new file mode 100644 index 0000000..a650d77 --- /dev/null +++ b/sample_python/Res/t2541.res @@ -0,0 +1,99 @@ +BEGIN_FUNCTION_MAP + .Func,ǰڸŸŵ(ǽð)(t2541),t2541,attr,block,headtype=A; + BEGIN_DATA_MAP + t2541InBlock,⺻Է,input; + begin + ǰID,eitem,eitem,char,2; + 屸,market,market,char,1; + ڵ,upcode,upcode,char,3; + ,gubun1,gubun1,char,1; + Ϻб,gubun2,gubun2,char,1; + CTSTIME,cts_time,cts_time,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ȸǼ,cnt,cnt,int,4; + end + t2541OutBlock,⺻,output; + begin + ǰID,eitem,eitem,char,2; + 屸,sgubun,sgubun,char,1; + CTSTIME,cts_time,cts_time,char,8; + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t2541OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + μż,sv_08,sv_08,long,12; + ܱμż,sv_17,sv_17,long,12; + ż,sv_18,sv_18,long,12; + Ǽż,sv_01,sv_01,long,12; + żż,sv_03,sv_03,long,12; + ż,sv_04,sv_04,long,12; + ż,sv_02,sv_02,long,12; + ݼż,sv_05,sv_05,long,12; + ݼż,sv_06,sv_06,long,12; + Ÿż,sv_07,sv_07,long,12; + ż,sv_11,sv_11,long,12; + ݵż,sv_00,sv_00,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2541_2.res b/sample_python/Res/t2541_2.res new file mode 100644 index 0000000..a650d77 --- /dev/null +++ b/sample_python/Res/t2541_2.res @@ -0,0 +1,99 @@ +BEGIN_FUNCTION_MAP + .Func,ǰڸŸŵ(ǽð)(t2541),t2541,attr,block,headtype=A; + BEGIN_DATA_MAP + t2541InBlock,⺻Է,input; + begin + ǰID,eitem,eitem,char,2; + 屸,market,market,char,1; + ڵ,upcode,upcode,char,3; + ,gubun1,gubun1,char,1; + Ϻб,gubun2,gubun2,char,1; + CTSTIME,cts_time,cts_time,char,8; + CTSIDX,cts_idx,cts_idx,long,4; + ȸǼ,cnt,cnt,int,4; + end + t2541OutBlock,⺻,output; + begin + ǰID,eitem,eitem,char,2; + 屸,sgubun,sgubun,char,1; + CTSTIME,cts_time,cts_time,char,8; + ڵ,tjjcode_08,tjjcode_08,char,4; + θż,ms_08,ms_08,long,12; + θŵ,md_08,md_08,long,12; + ,rate_08,rate_08,long,12; + μż,svolume_08,svolume_08,long,12; + ܱڵ,jjcode_17,tjjcode_17,char,4; + ܱθż,ms_17,ms_17,long,12; + ܱθŵ,md_17,md_17,long,12; + ܱ,rate_17,rate_17,long,12; + ܱμż,svolume_17,svolume_17,long,12; + ڵ,jjcode_18,tjjcode_18,char,4; + ż,ms_18,ms_18,long,12; + ŵ,md_18,md_18,long,12; + ,rate_18,rate_18,long,12; + ż,svolume_18,svolume_18,long,12; + ڵ,jjcode_01,tjjcode_01,char,4; + Ǹż,ms_01,ms_01,long,12; + Ǹŵ,md_01,md_01,long,12; + ,rate_01,rate_01,long,12; + Ǽż,svolume_01,svolume_01,long,12; + ڵ,jjcode_03,tjjcode_03,char,4; + Ÿż,ms_03,ms_03,long,12; + Ÿŵ,md_03,md_03,long,12; + ,rate_03,rate_03,long,12; + żż,svolume_03,svolume_03,long,12; + ڵ,jjcode_04,tjjcode_04,char,4; + ż,ms_04,ms_04,long,12; + ŵ,md_04,md_04,long,12; + ,rate_04,rate_04,long,12; + ż,svolume_04,svolume_04,long,12; + ڵ,jjcode_02,tjjcode_02,char,4; + ż,ms_02,ms_02,long,12; + ŵ,md_02,md_02,long,12; + ,rate_02,rate_02,long,12; + ż,svolume_02,svolume_02,long,12; + ڵ,jjcode_05,tjjcode_05,char,4; + ݸż,ms_05,ms_05,long,12; + ݸŵ,md_05,md_05,long,12; + ,rate_05,rate_05,long,12; + ݼż,svolume_05,svolume_05,long,12; + ڵ,jjcode_06,tjjcode_06,char,4; + ݸż,ms_06,ms_06,long,12; + ݸŵ,md_06,md_06,long,12; + ,rate_06,rate_06,long,12; + ݼż,svolume_06,svolume_06,long,12; + Ÿڵ,jjcode_07,tjjcode_07,char,4; + Ÿż,ms_07,ms_07,long,12; + Ÿŵ,md_07,md_07,long,12; + Ÿ,rate_07,rate_07,long,12; + Ÿż,svolume_07,svolume_07,long,12; + ڵ,jjcode_11,tjjcode_11,char,4; + ż,ms_11,ms_11,long,12; + ŵ,md_11,md_11,long,12; + ,rate_11,rate_11,long,12; + ż,svolume_11,svolume_11,long,12; + ݵڵ,jjcode_00,tjjcode_00,char,4; + ݵż,ms_00,ms_00,long,12; + ݵŵ,md_00,md_00,long,12; + ݵ,rate_00,rate_00,long,12; + ݵż,svolume_00,svolume_00,long,12; + end + t2541OutBlock1,1,output,occurs; + begin + ð,time,time,char,8; + μż,sv_08,sv_08,long,12; + ܱμż,sv_17,sv_17,long,12; + ż,sv_18,sv_18,long,12; + Ǽż,sv_01,sv_01,long,12; + żż,sv_03,sv_03,long,12; + ż,sv_04,sv_04,long,12; + ż,sv_02,sv_02,long,12; + ݼż,sv_05,sv_05,long,12; + ݼż,sv_06,sv_06,long,12; + Ÿż,sv_07,sv_07,long,12; + ż,sv_11,sv_11,long,12; + ݵż,sv_00,sv_00,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2545.res b/sample_python/Res/t2545.res new file mode 100644 index 0000000..078ebbc --- /dev/null +++ b/sample_python/Res/t2545.res @@ -0,0 +1,68 @@ +BEGIN_FUNCTION_MAP + .Func,ǰڸŸŵ(íƮ),t2545,attr,block,headtype=A; + BEGIN_DATA_MAP + t2545InBlock,⺻Է,input; + begin + ǰID,eitem,eitem,char,2; + 屸,sgubun,sgubun,char,1; + ڵ,upcode,upcode,char,3; + N,nmin,nmin,int,2; + ȸǼ,cnt,cnt,int,3; + Ϻ,bgubun,bgubun,char,1; + end + t2545OutBlock,⺻,output; + begin + ǰID,eitem,eitem,char,2; + 屸,sgubun,sgubun,char,1; + ڵ,indcode,indcode,char,4; + ܱڵ,forcode,forcode,char,4; + ڵ,syscode,syscode,char,4; + ڵ,stocode,stocode,char,4; + ڵ,invcode,invcode,char,4; + ڵ,bancode,bancode,char,4; + ڵ,inscode,inscode,char,4; + ڵ,fincode,fincode,char,4; + ڵ,moncode,moncode,char,4; + Ÿڵ,etccode,etccode,char,4; + ڵ,natcode,natcode,char,4; + ݵڵ,pefcode,pefcode,char,4; + ڵ,jisucd,jisucd,char,8; + ,jisunm,jisunm,char,20; + end + t2545OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + ڽð,datetime,datetime,char,14; + μżŷ,indmsvol,indmsvol,long,8; + μżŷ,indmsamt,indmsamt,double,12.0; + ܱμżŷ,formsvol,formsvol,long,8; + ܱμżŷ,formsamt,formsamt,double,12.0; + żŷ,sysmsvol,sysmsvol,long,8; + żŷ,sysmsamt,sysmsamt,double,12.0; + Ǽżŷ,stomsvol,stomsvol,long,8; + Ǽżŷ,stomsamt,stomsamt,double,12.0; + żżŷ,invmsvol,invmsvol,long,8; + żżŷ,invmsamt,invmsamt,double,12.0; + żŷ,banmsvol,banmsvol,long,8; + żŷ,banmsamt,banmsamt,double,12.0; + żŷ,insmsvol,insmsvol,long,8; + żŷ,insmsamt,insmsamt,double,12.0; + ݼżŷ,finmsvol,finmsvol,long,8; + ݼżŷ,finmsamt,finmsamt,double,12.0; + ݼżŷ,monmsvol,monmsvol,long,8; + ݼżŷ,monmsamt,monmsamt,double,12.0; + Ÿżŷ,etcmsvol,etcmsvol,long,8; + Ÿżŷ,etcmsamt,etcmsamt,double,12.0; + żŷ,natmsvol,natmsvol,long,8; + żŷ,natmsamt,natmsamt,double,12.0; + ݵżŷ,pefmsvol,pefmsvol,long,8; + ݵżŷ,pefmsamt,pefmsamt,double,12.0; + ,upclose,upclose,float,6.2; + üŷ,upcvolume,upcvolume,long,8; + شŷ,upvolume,upvolume,double,12.0; + ذŷ,upvalue,upvalue,double,12.0; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2545_2.res b/sample_python/Res/t2545_2.res new file mode 100644 index 0000000..078ebbc --- /dev/null +++ b/sample_python/Res/t2545_2.res @@ -0,0 +1,68 @@ +BEGIN_FUNCTION_MAP + .Func,ǰڸŸŵ(íƮ),t2545,attr,block,headtype=A; + BEGIN_DATA_MAP + t2545InBlock,⺻Է,input; + begin + ǰID,eitem,eitem,char,2; + 屸,sgubun,sgubun,char,1; + ڵ,upcode,upcode,char,3; + N,nmin,nmin,int,2; + ȸǼ,cnt,cnt,int,3; + Ϻ,bgubun,bgubun,char,1; + end + t2545OutBlock,⺻,output; + begin + ǰID,eitem,eitem,char,2; + 屸,sgubun,sgubun,char,1; + ڵ,indcode,indcode,char,4; + ܱڵ,forcode,forcode,char,4; + ڵ,syscode,syscode,char,4; + ڵ,stocode,stocode,char,4; + ڵ,invcode,invcode,char,4; + ڵ,bancode,bancode,char,4; + ڵ,inscode,inscode,char,4; + ڵ,fincode,fincode,char,4; + ڵ,moncode,moncode,char,4; + Ÿڵ,etccode,etccode,char,4; + ڵ,natcode,natcode,char,4; + ݵڵ,pefcode,pefcode,char,4; + ڵ,jisucd,jisucd,char,8; + ,jisunm,jisunm,char,20; + end + t2545OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,6; + ڽð,datetime,datetime,char,14; + μżŷ,indmsvol,indmsvol,long,8; + μżŷ,indmsamt,indmsamt,double,12.0; + ܱμżŷ,formsvol,formsvol,long,8; + ܱμżŷ,formsamt,formsamt,double,12.0; + żŷ,sysmsvol,sysmsvol,long,8; + żŷ,sysmsamt,sysmsamt,double,12.0; + Ǽżŷ,stomsvol,stomsvol,long,8; + Ǽżŷ,stomsamt,stomsamt,double,12.0; + żżŷ,invmsvol,invmsvol,long,8; + żżŷ,invmsamt,invmsamt,double,12.0; + żŷ,banmsvol,banmsvol,long,8; + żŷ,banmsamt,banmsamt,double,12.0; + żŷ,insmsvol,insmsvol,long,8; + żŷ,insmsamt,insmsamt,double,12.0; + ݼżŷ,finmsvol,finmsvol,long,8; + ݼżŷ,finmsamt,finmsamt,double,12.0; + ݼżŷ,monmsvol,monmsvol,long,8; + ݼżŷ,monmsamt,monmsamt,double,12.0; + Ÿżŷ,etcmsvol,etcmsvol,long,8; + Ÿżŷ,etcmsamt,etcmsamt,double,12.0; + żŷ,natmsvol,natmsvol,long,8; + żŷ,natmsamt,natmsamt,double,12.0; + ݵżŷ,pefmsvol,pefmsvol,long,8; + ݵżŷ,pefmsamt,pefmsamt,double,12.0; + ,upclose,upclose,float,6.2; + üŷ,upcvolume,upcvolume,long,8; + شŷ,upvolume,upvolume,double,12.0; + ذŷ,upvalue,upvalue,double,12.0; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2830.res b/sample_python/Res/t2830.res new file mode 100644 index 0000000..d7e5749 --- /dev/null +++ b/sample_python/Res/t2830.res @@ -0,0 +1,50 @@ +BEGIN_FUNCTION_MAP + .Func,EUREXKOSPI200ɼǼ簡(ü)ȸ(t2830),t2830,attr,block,headtype=A; + BEGIN_DATA_MAP + t2830InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + end + t2830OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ذ,recprice,recprice,float,6.2; + ̷а,theoryprice,theoryprice,float,6.2; + 簡,actprice,actprice,float,6.2; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + KOSPI200,kospijisu,kospijisu,float,6.2; + KOSPI200ϴ񱸺,kospisign,kospisign,char,1; + KOSPI200ϴ,kospichange,kospichange,float,6.2; + KOSPI200,kospidiff,kospidiff,float,6.2; + CME߰簡,cmeprice,cmeprice,float,6.2; + CME߰ϴ񱸺,cmesign,cmesign,char,1; + CME߰ϴ,cmechange,cmechange,float,6.2; + CME߰,cmediff,cmediff,float,6.2; + CME߰ڵ,cmefocode,cmefocode,char,8; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + ڵ,focode,focode,char,8; + üᰡ,yeprice,yeprice,float,6.2; + ϴ񱸺,ysign,ysign,char,1; + ϴ,ychange,ychange,float,6.2; + ,ydiff,ydiff,float,6.2; + ϰȣ,danhochk,danhochk,char,1; + ϰŷ,jnilvolume,jnilvolume,long,12; + ϰŷ,jnilvalue,jnilvalue,long,12; + 3ܰѰ,uplmtprice_3rd,uplmtprice_3rd,float,6.2; + 3ܰѰ,dnlmtprice_3rd,dnlmtprice_3rd,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2830_2.res b/sample_python/Res/t2830_2.res new file mode 100644 index 0000000..d7e5749 --- /dev/null +++ b/sample_python/Res/t2830_2.res @@ -0,0 +1,50 @@ +BEGIN_FUNCTION_MAP + .Func,EUREXKOSPI200ɼǼ簡(ü)ȸ(t2830),t2830,attr,block,headtype=A; + BEGIN_DATA_MAP + t2830InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + end + t2830OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ذ,recprice,recprice,float,6.2; + ̷а,theoryprice,theoryprice,float,6.2; + 簡,actprice,actprice,float,6.2; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + KOSPI200,kospijisu,kospijisu,float,6.2; + KOSPI200ϴ񱸺,kospisign,kospisign,char,1; + KOSPI200ϴ,kospichange,kospichange,float,6.2; + KOSPI200,kospidiff,kospidiff,float,6.2; + CME߰簡,cmeprice,cmeprice,float,6.2; + CME߰ϴ񱸺,cmesign,cmesign,char,1; + CME߰ϴ,cmechange,cmechange,float,6.2; + CME߰,cmediff,cmediff,float,6.2; + CME߰ڵ,cmefocode,cmefocode,char,8; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + ڵ,focode,focode,char,8; + üᰡ,yeprice,yeprice,float,6.2; + ϴ񱸺,ysign,ysign,char,1; + ϴ,ychange,ychange,float,6.2; + ,ydiff,ydiff,float,6.2; + ϰȣ,danhochk,danhochk,char,1; + ϰŷ,jnilvolume,jnilvolume,long,12; + ϰŷ,jnilvalue,jnilvalue,long,12; + 3ܰѰ,uplmtprice_3rd,uplmtprice_3rd,float,6.2; + 3ܰѰ,dnlmtprice_3rd,dnlmtprice_3rd,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2831.res b/sample_python/Res/t2831.res new file mode 100644 index 0000000..b9fdb10 --- /dev/null +++ b/sample_python/Res/t2831.res @@ -0,0 +1,56 @@ +BEGIN_FUNCTION_MAP + .Func,EUREXKOSPI200ɼǼȣȸ(t2831),t2831,attr,block,headtype=A; + BEGIN_DATA_MAP + t2831InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + end + t2831OutBlock,,output; + begin + ,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,jnilclose,jnilclose,float,6.2; + ŵȣ1,offerho1,offerho1,float,6.2; + żȣ1,bidho1,bidho1,float,6.2; + ŵȣ1,offerrem1,offerrem1,long,8; + żȣ1,bidrem1,bidrem1,long,8; + ŵȣǼ1,dcnt1,dcnt1,long,8; + żȣǼ1,scnt1,scnt1,long,8; + ŵȣ2,offerho2,offerho2,float,6.2; + żȣ2,bidho2,bidho2,float,6.2; + ŵȣ2,offerrem2,offerrem2,long,8; + żȣ2,bidrem2,bidrem2,long,8; + ŵȣǼ2,dcnt2,dcnt2,long,8; + żȣǼ2,scnt2,scnt2,long,8; + ŵȣ3,offerho3,offerho3,float,6.2; + żȣ3,bidho3,bidho3,float,6.2; + ŵȣ3,offerrem3,offerrem3,long,8; + żȣ3,bidrem3,bidrem3,long,8; + ŵȣǼ3,dcnt3,dcnt3,long,8; + żȣǼ3,scnt3,scnt3,long,8; + ŵȣ4,offerho4,offerho4,float,6.2; + żȣ4,bidho4,bidho4,float,6.2; + ŵȣ4,offerrem4,offerrem4,long,8; + żȣ4,bidrem4,bidrem4,long,8; + ŵȣǼ4,dcnt4,dcnt4,long,8; + żȣǼ4,scnt4,scnt4,long,8; + ŵȣ5,offerho5,offerho5,float,6.2; + żȣ5,bidho5,bidho5,float,6.2; + ŵȣ5,offerrem5,offerrem5,long,8; + żȣ5,bidrem5,bidrem5,long,8; + ŵȣǼ5,dcnt5,dcnt5,long,8; + żȣǼ5,scnt5,scnt5,long,8; + ŵȣѼ,dvol,dvol,long,8; + żȣѼ,svol,svol,long,8; + ѸŵȣǼ,toffernum,toffernum,long,8; + ѸżȣǼ,tbidnum,tbidnum,long,8; + Žð,time,time,char,6; + ڵ,shcode,shcode,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2831_2.res b/sample_python/Res/t2831_2.res new file mode 100644 index 0000000..b9fdb10 --- /dev/null +++ b/sample_python/Res/t2831_2.res @@ -0,0 +1,56 @@ +BEGIN_FUNCTION_MAP + .Func,EUREXKOSPI200ɼǼȣȸ(t2831),t2831,attr,block,headtype=A; + BEGIN_DATA_MAP + t2831InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + end + t2831OutBlock,,output; + begin + ,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ,jnilclose,jnilclose,float,6.2; + ŵȣ1,offerho1,offerho1,float,6.2; + żȣ1,bidho1,bidho1,float,6.2; + ŵȣ1,offerrem1,offerrem1,long,8; + żȣ1,bidrem1,bidrem1,long,8; + ŵȣǼ1,dcnt1,dcnt1,long,8; + żȣǼ1,scnt1,scnt1,long,8; + ŵȣ2,offerho2,offerho2,float,6.2; + żȣ2,bidho2,bidho2,float,6.2; + ŵȣ2,offerrem2,offerrem2,long,8; + żȣ2,bidrem2,bidrem2,long,8; + ŵȣǼ2,dcnt2,dcnt2,long,8; + żȣǼ2,scnt2,scnt2,long,8; + ŵȣ3,offerho3,offerho3,float,6.2; + żȣ3,bidho3,bidho3,float,6.2; + ŵȣ3,offerrem3,offerrem3,long,8; + żȣ3,bidrem3,bidrem3,long,8; + ŵȣǼ3,dcnt3,dcnt3,long,8; + żȣǼ3,scnt3,scnt3,long,8; + ŵȣ4,offerho4,offerho4,float,6.2; + żȣ4,bidho4,bidho4,float,6.2; + ŵȣ4,offerrem4,offerrem4,long,8; + żȣ4,bidrem4,bidrem4,long,8; + ŵȣǼ4,dcnt4,dcnt4,long,8; + żȣǼ4,scnt4,scnt4,long,8; + ŵȣ5,offerho5,offerho5,float,6.2; + żȣ5,bidho5,bidho5,float,6.2; + ŵȣ5,offerrem5,offerrem5,long,8; + żȣ5,bidrem5,bidrem5,long,8; + ŵȣǼ5,dcnt5,dcnt5,long,8; + żȣǼ5,scnt5,scnt5,long,8; + ŵȣѼ,dvol,dvol,long,8; + żȣѼ,svol,svol,long,8; + ѸŵȣǼ,toffernum,toffernum,long,8; + ѸżȣǼ,tbidnum,tbidnum,long,8; + Žð,time,time,char,6; + ڵ,shcode,shcode,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2832.res b/sample_python/Res/t2832.res new file mode 100644 index 0000000..065c0f2 --- /dev/null +++ b/sample_python/Res/t2832.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX߰ɼǼð뺰üȸ(t2832),t2832,attr,block,headtype=A; + BEGIN_DATA_MAP + t2832InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t2832OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t2832OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,8.2; + ŵȣ,offerho,offerho,float,6.2; + żȣ,bidho,bidho,float,6.2; + ŷ,volume,volume,double,12.0; + żüᷮ,n_msvolume,n_msvolume,double,12.0; + ŵüᷮ,n_mdvolume,n_mdvolume,double,12.0; + żüᷮ,s_msvolume,s_msvolume,double,12.0; + żüǼ,n_mschecnt,n_mschecnt,long,8; + ŵüǼ,n_mdchecnt,n_mdchecnt,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2832_2.res b/sample_python/Res/t2832_2.res new file mode 100644 index 0000000..065c0f2 --- /dev/null +++ b/sample_python/Res/t2832_2.res @@ -0,0 +1,36 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX߰ɼǼð뺰üȸ(t2832),t2832,attr,block,headtype=A; + BEGIN_DATA_MAP + t2832InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t2832OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t2832OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,8.2; + ŵȣ,offerho,offerho,float,6.2; + żȣ,bidho,bidho,float,6.2; + ŷ,volume,volume,double,12.0; + żüᷮ,n_msvolume,n_msvolume,double,12.0; + ŵüᷮ,n_mdvolume,n_mdvolume,double,12.0; + żüᷮ,s_msvolume,s_msvolume,double,12.0; + żüǼ,n_mschecnt,n_mschecnt,long,8; + ŵüǼ,n_mdchecnt,n_mdchecnt,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2833.res b/sample_python/Res/t2833.res new file mode 100644 index 0000000..5e54280 --- /dev/null +++ b/sample_python/Res/t2833.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX߰ɼǼⰣ(t2833),t2833,attr,block,headtype=A; + BEGIN_DATA_MAP + t2833InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱٿ,futcheck,futcheck,char,1; + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ȸûǼ,cnt,cnt,int,3; + end + t2833OutBlock,,output; + begin + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ֱٿ,nowfutyn,nowfutyn,char,1; + end + t2833OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2833_2.res b/sample_python/Res/t2833_2.res new file mode 100644 index 0000000..5e54280 --- /dev/null +++ b/sample_python/Res/t2833_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX߰ɼǼⰣ(t2833),t2833,attr,block,headtype=A; + BEGIN_DATA_MAP + t2833InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱٿ,futcheck,futcheck,char,1; + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ȸûǼ,cnt,cnt,int,3; + end + t2833OutBlock,,output; + begin + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ֱٿ,nowfutyn,nowfutyn,char,1; + end + t2833OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2835.res b/sample_python/Res/t2835.res new file mode 100644 index 0000000..c4f6975 --- /dev/null +++ b/sample_python/Res/t2835.res @@ -0,0 +1,64 @@ +BEGIN_FUNCTION_MAP + .Func,EUREXɼǼü(t2835),t2835,attr,block,headtype=A; + BEGIN_DATA_MAP + t2835InBlock,⺻Է,input; + begin + (ȤֹWN),yyyymm,yyyymm,char,6; + (G:W:Ŭ),gubun,gubun,char,1; + end + t2835OutBlock,,output; + begin + ٿ簡,gmprice,gmprice,float,6.2; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,float,6.2; + ٿ,gmdiff,gmdiff,float,6.2; + ٿŷ,gmvolume,gmvolume,long,12; + ٿڵ,gmshcode,gmshcode,char,8; + end + t2835OutBlock1,1,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + ݿɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + end + t2835OutBlock2,2,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + Dzɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t2835_2.res b/sample_python/Res/t2835_2.res new file mode 100644 index 0000000..c4f6975 --- /dev/null +++ b/sample_python/Res/t2835_2.res @@ -0,0 +1,64 @@ +BEGIN_FUNCTION_MAP + .Func,EUREXɼǼü(t2835),t2835,attr,block,headtype=A; + BEGIN_DATA_MAP + t2835InBlock,⺻Է,input; + begin + (ȤֹWN),yyyymm,yyyymm,char,6; + (G:W:Ŭ),gubun,gubun,char,1; + end + t2835OutBlock,,output; + begin + ٿ簡,gmprice,gmprice,float,6.2; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,float,6.2; + ٿ,gmdiff,gmdiff,float,6.2; + ٿŷ,gmvolume,gmvolume,long,12; + ٿڵ,gmshcode,gmshcode,char,8; + end + t2835OutBlock1,1,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + ݿɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + end + t2835OutBlock2,2,output,occurs; + begin + 簡,actprice,actprice,float,6.2; + Dzɼڵ,optcode,optcode,char,8; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho1,offerho1,float,6.2; + żȣ,bidho1,bidho1,float,6.2; + üᷮ,cvolume,cvolume,long,12; + 簡ġ,impv,impv,float,6.2; + ðġ,timevl,timevl,float,6.2; + ŵܷ,offerrem1,offerrem1,long,12; + żܷ,bidrem1,bidrem1,long,12; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ATM,atmgubun,atmgubun,char,1; + ȯ,jisuconv,jisuconv,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t3102.res b/sample_python/Res/t3102.res new file mode 100644 index 0000000..c60701b --- /dev/null +++ b/sample_python/Res/t3102.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,(t3102),t3102,block,headtype=A; + BEGIN_DATA_MAP + t3102InBlock,⺻Է,input; + begin + ȣ,sNewsno,sNewsno,char,24; + end + t3102OutBlock,⺻,output,occurs; + begin + ,sJongcode,sJongcode,char,6; + end + t3102OutBlock1,⺻1,output,occurs; + begin + ,sBody,sBody,char,100; + end + t3102OutBlock2,⺻2,output; + begin + ŸƲ,sTitle,sTitle,char,300; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t3102_2.res b/sample_python/Res/t3102_2.res new file mode 100644 index 0000000..c60701b --- /dev/null +++ b/sample_python/Res/t3102_2.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,(t3102),t3102,block,headtype=A; + BEGIN_DATA_MAP + t3102InBlock,⺻Է,input; + begin + ȣ,sNewsno,sNewsno,char,24; + end + t3102OutBlock,⺻,output,occurs; + begin + ,sJongcode,sJongcode,char,6; + end + t3102OutBlock1,⺻1,output,occurs; + begin + ,sBody,sBody,char,100; + end + t3102OutBlock2,⺻2,output; + begin + ŸƲ,sTitle,sTitle,char,300; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t3202.res b/sample_python/Res/t3202.res new file mode 100644 index 0000000..6a6139e --- /dev/null +++ b/sample_python/Res/t3202.res @@ -0,0 +1,21 @@ +BEGIN_FUNCTION_MAP + .Func,(t3202),t3202,attr,block,headtype=A; + BEGIN_DATA_MAP + t3202InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ȸ,date,date,char,8; + end + t3202OutBlock,,output,occurs; + begin + ,recdt,recdt,char,8; + ̵̺,tableid,tableid,char,6; + ,upgu,upgu,char,2; + üȣ,custno,custno,char,5; + ȸ,custnm,custnm,char,80; + ڵ,shcode,shcode,char,6; + ,upunm,upnm,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t3202_2.res b/sample_python/Res/t3202_2.res new file mode 100644 index 0000000..6a6139e --- /dev/null +++ b/sample_python/Res/t3202_2.res @@ -0,0 +1,21 @@ +BEGIN_FUNCTION_MAP + .Func,(t3202),t3202,attr,block,headtype=A; + BEGIN_DATA_MAP + t3202InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ȸ,date,date,char,8; + end + t3202OutBlock,,output,occurs; + begin + ,recdt,recdt,char,8; + ̵̺,tableid,tableid,char,6; + ,upgu,upgu,char,2; + üȣ,custno,custno,char,5; + ȸ,custnm,custnm,char,80; + ڵ,shcode,shcode,char,6; + ,upunm,upnm,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t3320.res b/sample_python/Res/t3320.res new file mode 100644 index 0000000..66b32a0 --- /dev/null +++ b/sample_python/Res/t3320.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,FNG_(t3320),t3320,attr,block,headtype=A; + BEGIN_DATA_MAP + t3320InBlock,⺻Է,input; + begin + ڵ,gicode,gicode,char,7; + end + t3320OutBlock,⺻,output; + begin + и,upgubunnm,upgubunnm,char,20; + 屸,sijangcd,sijangcd,char,1; + 屸и,marketnm,marketnm,char,10; + ѱ۱,company,company,char,100; + ּ,baddress,baddress,char,100; + ȭȣ,btelno,btelno,char,20; + ֱٰ⵵,gsyyyy,gsyyyy,char,4; + ,gsmm,gsmm,char,2; + ֱٰ,gsym,gsym,char,6; + ִ׸鰡,lstprice,lstprice,long,12; + ֽļ,gstock,gstock,long,12; + Homepage,homeurl,homeurl,char,50; + ׷,grdnm,grdnm,char,30; + ܱ,foreignratio,foreignratio,float,6.2; + ִȭ,irtel,irtel,char,30; + ں,capital,capital,float,12.0; + ðѾ,sigavalue,sigavalue,float,12.0; + ,cashsis,cashsis,float,12.0; + ,cashrate,cashrate,float,13.2; + 簡,price,price,long,8; + ,jnilclose,jnilclose,long,8; + 1_Ÿ,notice1,notice1,char,1; + 2_,notice2,notice2,char,1; + 3_ܱ,notice3,notice3,char,1; + end + t3320OutBlock1,繫,output; + begin + ڵ,gicode,gicode,char,7; + ,gsym,gsym,char,6; + 걸,gsgb,gsgb,char,1; + PER,per,per,float,13.2; + EPS,eps,eps,float,13.0; + PBR,pbr,pbr,float,13.2; + ROA,roa,roa,float,13.2; + ROE,roe,roe,float,13.2; + EBITDA,ebitda,ebitda,float,13.2; + EVEBITDA,evebitda,evebitda,float,13.2; + ׸鰡,par,par,float,13.2; + SPS,sps,sps,float,13.2; + CPS,cps,cps,float,13.2; + BPS,bps,bps,float,13.0; + T.PER,t_per,t_per,float,13.2; + T.EPS,t_eps,t_eps,float,13.0; + PEG,peg,peg,float,13.2; + T.PEG,t_peg,t_peg,float,13.2; + ֱٺб⵵,t_gsym,t_gsym,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t3320_2.res b/sample_python/Res/t3320_2.res new file mode 100644 index 0000000..66b32a0 --- /dev/null +++ b/sample_python/Res/t3320_2.res @@ -0,0 +1,59 @@ +BEGIN_FUNCTION_MAP + .Func,FNG_(t3320),t3320,attr,block,headtype=A; + BEGIN_DATA_MAP + t3320InBlock,⺻Է,input; + begin + ڵ,gicode,gicode,char,7; + end + t3320OutBlock,⺻,output; + begin + и,upgubunnm,upgubunnm,char,20; + 屸,sijangcd,sijangcd,char,1; + 屸и,marketnm,marketnm,char,10; + ѱ۱,company,company,char,100; + ּ,baddress,baddress,char,100; + ȭȣ,btelno,btelno,char,20; + ֱٰ⵵,gsyyyy,gsyyyy,char,4; + ,gsmm,gsmm,char,2; + ֱٰ,gsym,gsym,char,6; + ִ׸鰡,lstprice,lstprice,long,12; + ֽļ,gstock,gstock,long,12; + Homepage,homeurl,homeurl,char,50; + ׷,grdnm,grdnm,char,30; + ܱ,foreignratio,foreignratio,float,6.2; + ִȭ,irtel,irtel,char,30; + ں,capital,capital,float,12.0; + ðѾ,sigavalue,sigavalue,float,12.0; + ,cashsis,cashsis,float,12.0; + ,cashrate,cashrate,float,13.2; + 簡,price,price,long,8; + ,jnilclose,jnilclose,long,8; + 1_Ÿ,notice1,notice1,char,1; + 2_,notice2,notice2,char,1; + 3_ܱ,notice3,notice3,char,1; + end + t3320OutBlock1,繫,output; + begin + ڵ,gicode,gicode,char,7; + ,gsym,gsym,char,6; + 걸,gsgb,gsgb,char,1; + PER,per,per,float,13.2; + EPS,eps,eps,float,13.0; + PBR,pbr,pbr,float,13.2; + ROA,roa,roa,float,13.2; + ROE,roe,roe,float,13.2; + EBITDA,ebitda,ebitda,float,13.2; + EVEBITDA,evebitda,evebitda,float,13.2; + ׸鰡,par,par,float,13.2; + SPS,sps,sps,float,13.2; + CPS,cps,cps,float,13.2; + BPS,bps,bps,float,13.0; + T.PER,t_per,t_per,float,13.2; + T.EPS,t_eps,t_eps,float,13.0; + PEG,peg,peg,float,13.2; + T.PEG,t_peg,t_peg,float,13.2; + ֱٺб⵵,t_gsym,t_gsym,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t3341.res b/sample_python/Res/t3341.res new file mode 100644 index 0000000..a0642b6 --- /dev/null +++ b/sample_python/Res/t3341.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,繫(t3341),t3341,attr,block,headtype=A; + BEGIN_DATA_MAP + t3341InBlock,⺻Է,input; + begin + 屸,gubun,gubun,char,1; + (1:2:3:4:ä5:6:EPS7:BPS8:ROE9:PERa:PBRb:PEG),gubun1,gubun1,char,1; + 񱸺,gubun2,gubun2,char,1; + IDX,idx,idx,long,4; + end + t3341OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + IDX,idx,idx,long,4; + end + t3341OutBlock1,1,output,occurs; + begin + ,rank,rank,long,4; + ,hname,hname,char,20; + ,salesgrowth,salesgrowth,long,12; + ,operatingincomegrowt,operatingincomegrowt,long,12; + ,ordinaryincomegrowth,ordinaryincomegrowth,long,12; + ä,liabilitytoequity,liabilitytoequity,long,12; + ,enterpriseratio,enterpriseratio,long,12; + EPS,eps,eps,long,12; + BPS,bps,bps,long,12; + ROE,roe,roe,long,12; + ڵ,shcode,shcode,char,6; + PER,per,per,float,13.2; + PBR,pbr,pbr,float,13.2; + PEG,peg,peg,float,13.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t3341_2.res b/sample_python/Res/t3341_2.res new file mode 100644 index 0000000..a0642b6 --- /dev/null +++ b/sample_python/Res/t3341_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,繫(t3341),t3341,attr,block,headtype=A; + BEGIN_DATA_MAP + t3341InBlock,⺻Է,input; + begin + 屸,gubun,gubun,char,1; + (1:2:3:4:ä5:6:EPS7:BPS8:ROE9:PERa:PBRb:PEG),gubun1,gubun1,char,1; + 񱸺,gubun2,gubun2,char,1; + IDX,idx,idx,long,4; + end + t3341OutBlock,,output; + begin + CNT,cnt,cnt,long,4; + IDX,idx,idx,long,4; + end + t3341OutBlock1,1,output,occurs; + begin + ,rank,rank,long,4; + ,hname,hname,char,20; + ,salesgrowth,salesgrowth,long,12; + ,operatingincomegrowt,operatingincomegrowt,long,12; + ,ordinaryincomegrowth,ordinaryincomegrowth,long,12; + ä,liabilitytoequity,liabilitytoequity,long,12; + ,enterpriseratio,enterpriseratio,long,12; + EPS,eps,eps,long,12; + BPS,bps,bps,long,12; + ROE,roe,roe,long,12; + ڵ,shcode,shcode,char,6; + PER,per,per,float,13.2; + PBR,pbr,pbr,float,13.2; + PEG,peg,peg,float,13.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t3401.res b/sample_python/Res/t3401.res new file mode 100644 index 0000000..d5f07f0 --- /dev/null +++ b/sample_python/Res/t3401.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ǰ(t3401),t3401,attr,block,headtype=A; + BEGIN_DATA_MAP + t3401InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,9; + ,gubun1,gubun1,char,1; + ȸڵ,tradno,tradno,char,3; + IDXDATE,cts_date,cts_date,char,8; + end + t3401OutBlock,,output; + begin + IDXDATE,cts_date,cts_date,char,8; + 簡,price,price,long,8; + Ӽ,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + end + t3401OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,9; + ȸڵ,tradno,tradno,char,3; + ǰ,date,date,char,8; + ȸ,tradname,tradname,char,30; + ǰߺ,bopn,bopn,char,30; + ǰߺ,nopn,nopn,char,30; + ǥ,boga,boga,long,12; + ǥ,noga,noga,long,12; + ǰ,close,close,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t3401_2.res b/sample_python/Res/t3401_2.res new file mode 100644 index 0000000..d5f07f0 --- /dev/null +++ b/sample_python/Res/t3401_2.res @@ -0,0 +1,35 @@ +BEGIN_FUNCTION_MAP + .Func,ǰ(t3401),t3401,attr,block,headtype=A; + BEGIN_DATA_MAP + t3401InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,9; + ,gubun1,gubun1,char,1; + ȸڵ,tradno,tradno,char,3; + IDXDATE,cts_date,cts_date,char,8; + end + t3401OutBlock,,output; + begin + IDXDATE,cts_date,cts_date,char,8; + 簡,price,price,long,8; + Ӽ,sign,sign,char,1; + ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,value,value,long,12; + end + t3401OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,9; + ȸڵ,tradno,tradno,char,3; + ǰ,date,date,char,8; + ȸ,tradname,tradname,char,30; + ǰߺ,bopn,bopn,char,30; + ǰߺ,nopn,nopn,char,30; + ǥ,boga,boga,long,12; + ǥ,noga,noga,long,12; + ǰ,close,close,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t3518.res b/sample_python/Res/t3518.res new file mode 100644 index 0000000..2b85633 --- /dev/null +++ b/sample_python/Res/t3518.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܽǽð(t3518),t3518,attr,block,headtype=A; + BEGIN_DATA_MAP + t3518InBlock,Է,input; + begin + ,kind,kind,char,1; + SYMBOL,symbol,symbol,char,16; + Է°Ǽ,cnt,cnt,long,4; + ȸ,jgbn,jgbn,char,1; + N,nmin,nmin,long,3; + CTS_DATE,cts_date,cts_date,char,8; + CTS_TIME,cts_time,cts_time,char,6; + end + t3518OutBlock,,output; + begin + CTS_DATE,cts_date,cts_date,char,8; + CTS_TIME,cts_time,cts_time,char,6; + end + t3518OutBlock1,Ƽ,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,8; + ð,open,open,double,9.4; + ,high,high,double,9.4; + ,low,low,double,9.4; + 簡,price,price,double,9.4; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,9.4; + ,uprate,uprate,double,9.4; + ŷ,volume,volume,double,12.0; + żȣ,bidho,bidho,double,9.4; + ŵȣ,offerho,offerho,double,9.4; + żܷ,bidrem,bidrem,double,12.0; + ŵܷ,offerrem,offerrem,double,12.0; + ,kind,kind,char,1; + SYMBOL,symbol,symbol,char,16; + EXID,exid,exid,char,4; + ѱ,kodate,kodate,char,8; + ѱð,kotime,kotime,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t3518_2.res b/sample_python/Res/t3518_2.res new file mode 100644 index 0000000..2b85633 --- /dev/null +++ b/sample_python/Res/t3518_2.res @@ -0,0 +1,43 @@ +BEGIN_FUNCTION_MAP + .Func,ؿܽǽð(t3518),t3518,attr,block,headtype=A; + BEGIN_DATA_MAP + t3518InBlock,Է,input; + begin + ,kind,kind,char,1; + SYMBOL,symbol,symbol,char,16; + Է°Ǽ,cnt,cnt,long,4; + ȸ,jgbn,jgbn,char,1; + N,nmin,nmin,long,3; + CTS_DATE,cts_date,cts_date,char,8; + CTS_TIME,cts_time,cts_time,char,6; + end + t3518OutBlock,,output; + begin + CTS_DATE,cts_date,cts_date,char,8; + CTS_TIME,cts_time,cts_time,char,6; + end + t3518OutBlock1,Ƽ,output,occurs; + begin + ,date,date,char,8; + ð,time,time,char,8; + ð,open,open,double,9.4; + ,high,high,double,9.4; + ,low,low,double,9.4; + 簡,price,price,double,9.4; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,double,9.4; + ,uprate,uprate,double,9.4; + ŷ,volume,volume,double,12.0; + żȣ,bidho,bidho,double,9.4; + ŵȣ,offerho,offerho,double,9.4; + żܷ,bidrem,bidrem,double,12.0; + ŵܷ,offerrem,offerrem,double,12.0; + ,kind,kind,char,1; + SYMBOL,symbol,symbol,char,16; + EXID,exid,exid,char,4; + ѱ,kodate,kodate,char,8; + ѱð,kotime,kotime,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t3521.res b/sample_python/Res/t3521.res new file mode 100644 index 0000000..e540836 --- /dev/null +++ b/sample_python/Res/t3521.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ؿȸ(API)(t3521),t3521,attr,block,headtype=A; + BEGIN_DATA_MAP + t3521InBlock,⺻Է,input; + begin + ,kind,kind,char,1; + SYMBOL,symbol,symbol,char,16; + end + t3521OutBlock,,output; + begin + ɹ,symbol,symbol,char,16; + ,hname,hname,char,20; + ,close,close,float,12.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + ,diff,diff,float,6.2; + ,date,date,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t3521 \ No newline at end of file diff --git a/sample_python/Res/t3521_2.res b/sample_python/Res/t3521_2.res new file mode 100644 index 0000000..e540836 --- /dev/null +++ b/sample_python/Res/t3521_2.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ؿȸ(API)(t3521),t3521,attr,block,headtype=A; + BEGIN_DATA_MAP + t3521InBlock,⺻Է,input; + begin + ,kind,kind,char,1; + SYMBOL,symbol,symbol,char,16; + end + t3521OutBlock,,output; + begin + ɹ,symbol,symbol,char,16; + ,hname,hname,char,20; + ,close,close,float,12.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + ,diff,diff,float,6.2; + ,date,date,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t3521 \ No newline at end of file diff --git a/sample_python/Res/t4201.res b/sample_python/Res/t4201.res new file mode 100644 index 0000000..ac8aec4 --- /dev/null +++ b/sample_python/Res/t4201.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ()(t4201),t4201,attr,block,headtype=A; + BEGIN_DATA_MAP + t4201InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֱⱸ(0:ƽ1:2:3:4:),gubun,gubun,char,1; + ƽ,ncnt,ncnt,long,4; + Ǽ(500),qrycnt,qrycnt,long,4; + ϱ(0:ü1:ϸ),tdgb,tdgb,char,1; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ(0:ü1:Ӵϸ2:ϸ),cts_daygb,cts_daygb,char,1; + end + t4201OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,1; + end + t4201OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + ݿŷ,ratevalue,ratevalue,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t4201_2.res b/sample_python/Res/t4201_2.res new file mode 100644 index 0000000..ac8aec4 --- /dev/null +++ b/sample_python/Res/t4201_2.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ()(t4201),t4201,attr,block,headtype=A; + BEGIN_DATA_MAP + t4201InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֱⱸ(0:ƽ1:2:3:4:),gubun,gubun,char,1; + ƽ,ncnt,ncnt,long,4; + Ǽ(500),qrycnt,qrycnt,long,4; + ϱ(0:ü1:ϸ),tdgb,tdgb,char,1; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ(0:ü1:Ӵϸ2:ϸ),cts_daygb,cts_daygb,char,1; + end + t4201OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,1; + end + t4201OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + ݿŷ,ratevalue,ratevalue,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t4203.res b/sample_python/Res/t4203.res new file mode 100644 index 0000000..ef0746d --- /dev/null +++ b/sample_python/Res/t4203.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,íƮ()(t4203),t4203,attr,block,headtype=A; + BEGIN_DATA_MAP + t4203InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + ֱⱸ(0:ƽ1:2:3:4:),gubun,gubun,char,1; + ƽ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ϱ(0:ü1:ϸ),tdgb,tdgb,char,1; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ(0:ü1:Ӵϸ2:ϸ),cts_daygb,cts_daygb,char,1; + end + t4203OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ϰŷ,disvalue,disvalue,long,12; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,1; + end + t4203OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t4203_2.res b/sample_python/Res/t4203_2.res new file mode 100644 index 0000000..ef0746d --- /dev/null +++ b/sample_python/Res/t4203_2.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,íƮ()(t4203),t4203,attr,block,headtype=A; + BEGIN_DATA_MAP + t4203InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + ֱⱸ(0:ƽ1:2:3:4:),gubun,gubun,char,1; + ƽ,ncnt,ncnt,long,4; + Ǽ,qrycnt,qrycnt,long,4; + ϱ(0:ü1:ϸ),tdgb,tdgb,char,1; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ(0:ü1:Ӵϸ2:ϸ),cts_daygb,cts_daygb,char,1; + end + t4203OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ϰŷ,disvalue,disvalue,long,12; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + Ӵϱ,cts_daygb,cts_daygb,char,1; + end + t4203OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8401.res b/sample_python/Res/t8401.res new file mode 100644 index 0000000..054bead --- /dev/null +++ b/sample_python/Res/t8401.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļȸ(API)(t8401),t8401,block,headtype=A; + BEGIN_DATA_MAP + t8401InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8401OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + ڻڵ,basecode,basecode,char,9; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8401_2.res b/sample_python/Res/t8401_2.res new file mode 100644 index 0000000..054bead --- /dev/null +++ b/sample_python/Res/t8401_2.res @@ -0,0 +1,17 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļȸ(API)(t8401),t8401,block,headtype=A; + BEGIN_DATA_MAP + t8401InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8401OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + ڻڵ,basecode,basecode,char,9; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8402.res b/sample_python/Res/t8402.res new file mode 100644 index 0000000..7fca1a1 --- /dev/null +++ b/sample_python/Res/t8402.res @@ -0,0 +1,81 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļ簡ȸ(API)(t8402),t8402,attr,block,headtype=A; + BEGIN_DATA_MAP + t8402InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + end + t8402OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,jnilclose,jnilclose,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷϵð,stimeqrt,stimeqrt,double,6.2; + ŷ,value,value,long,12; + ̰,mgjv,mgjv,long,8; + ̰,mgjvdiff,mgjvdiff,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + 52ְ,high52w,high52w,long,8; + 52,low52w,low52w,long,8; + ̽ý,basis,basis,float,6.2; + ذ,recprice,recprice,long,8; + ̷а,theoryprice,theoryprice,long,8; + ,glyl,glyl,float,6.3; + ,lastmonth,lastmonth,char,8; + ܿ,jandatecnt,jandatecnt,long,8; + ,pricejisu,pricejisu,float,6.2; + ϴ񱸺,jisusign,jisusign,char,1; + ϴ,jisuchange,jisuchange,float,6.2; + ,jisudiff,jisudiff,float,6.2; + KOSPI200,kospijisu,kospijisu,float,6.2; + KOSPI200ϴ񱸺,kospisign,kospisign,char,1; + KOSPI200ϴ,kospichange,kospichange,float,6.2; + KOSPI200,kospidiff,kospidiff,float,6.2; + ְ,listhprice,listhprice,long,8; + ,listlprice,listlprice,long,8; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ,vega,vega,float,6.4; + ο,rhox,rhox,float,6.4; + ٿ簡,gmprice,gmprice,long,8; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,long,8; + ٿ,gmdiff,gmdiff,float,6.2; + ̷а,theorypriceg,theorypriceg,long,8; + ,histimpv,histimpv,float,6.2; + 纯,impv,impv,float,6.2; + BASIS,sbasis,sbasis,long,8; + ̷BASIS,ibasis,ibasis,long,8; + ٿڵ,gmfutcode,gmfutcode,char,8; + 簡,actprice,actprice,long,8; + ڻڵ,shcode,shcode,char,6; + ڻѱ۸,basehname,basehname,char,20; + ڻ簡,baseprice,baseprice,long,8; + ڻ簡񱸺,basesign,basesign,char,1; + ڻ簡ϴ,basechange,basechange,long,8; + ڻ,basediff,basediff,float,6.2; + ڻŷ,basevol,basevol,long,12; + ڻϰŷ,baseprevol,baseprevol,long,12; + ڻżȣ,basebidprc,basebidprc,long,9; + ڻŵȣ,baseaskprc,baseaskprc,long,9; + ڻܱȸż,basefornetbid,basefornetbid,long,12; + ǰ,prodgrp,prodgrp,char,20; + ¼,mulcnt,mulcnt,float,12.8; + ϰȣ,danhochk,danhochk,char,1; + üᰡ,yeprice,yeprice,long,8; + üᰡ񱸺,jnilysign,jnilysign,char,1; + üᰡ,jnilychange,jnilychange,long,8; + üᰡ,jnilydrate,jnilydrate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8402_2.res b/sample_python/Res/t8402_2.res new file mode 100644 index 0000000..7fca1a1 --- /dev/null +++ b/sample_python/Res/t8402_2.res @@ -0,0 +1,81 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļ簡ȸ(API)(t8402),t8402,attr,block,headtype=A; + BEGIN_DATA_MAP + t8402InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + end + t8402OutBlock,,output; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,jnilclose,jnilclose,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷϵð,stimeqrt,stimeqrt,double,6.2; + ŷ,value,value,long,12; + ̰,mgjv,mgjv,long,8; + ̰,mgjvdiff,mgjvdiff,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + 52ְ,high52w,high52w,long,8; + 52,low52w,low52w,long,8; + ̽ý,basis,basis,float,6.2; + ذ,recprice,recprice,long,8; + ̷а,theoryprice,theoryprice,long,8; + ,glyl,glyl,float,6.3; + ,lastmonth,lastmonth,char,8; + ܿ,jandatecnt,jandatecnt,long,8; + ,pricejisu,pricejisu,float,6.2; + ϴ񱸺,jisusign,jisusign,char,1; + ϴ,jisuchange,jisuchange,float,6.2; + ,jisudiff,jisudiff,float,6.2; + KOSPI200,kospijisu,kospijisu,float,6.2; + KOSPI200ϴ񱸺,kospisign,kospisign,char,1; + KOSPI200ϴ,kospichange,kospichange,float,6.2; + KOSPI200,kospidiff,kospidiff,float,6.2; + ְ,listhprice,listhprice,long,8; + ,listlprice,listlprice,long,8; + Ÿ,delt,delt,float,6.4; + ,gama,gama,float,6.4; + Ÿ,ceta,ceta,float,6.4; + ,vega,vega,float,6.4; + ο,rhox,rhox,float,6.4; + ٿ簡,gmprice,gmprice,long,8; + ٿϴ񱸺,gmsign,gmsign,char,1; + ٿϴ,gmchange,gmchange,long,8; + ٿ,gmdiff,gmdiff,float,6.2; + ̷а,theorypriceg,theorypriceg,long,8; + ,histimpv,histimpv,float,6.2; + 纯,impv,impv,float,6.2; + BASIS,sbasis,sbasis,long,8; + ̷BASIS,ibasis,ibasis,long,8; + ٿڵ,gmfutcode,gmfutcode,char,8; + 簡,actprice,actprice,long,8; + ڻڵ,shcode,shcode,char,6; + ڻѱ۸,basehname,basehname,char,20; + ڻ簡,baseprice,baseprice,long,8; + ڻ簡񱸺,basesign,basesign,char,1; + ڻ簡ϴ,basechange,basechange,long,8; + ڻ,basediff,basediff,float,6.2; + ڻŷ,basevol,basevol,long,12; + ڻϰŷ,baseprevol,baseprevol,long,12; + ڻżȣ,basebidprc,basebidprc,long,9; + ڻŵȣ,baseaskprc,baseaskprc,long,9; + ڻܱȸż,basefornetbid,basefornetbid,long,12; + ǰ,prodgrp,prodgrp,char,20; + ¼,mulcnt,mulcnt,float,12.8; + ϰȣ,danhochk,danhochk,char,1; + üᰡ,yeprice,yeprice,long,8; + üᰡ񱸺,jnilysign,jnilysign,char,1; + üᰡ,jnilychange,jnilychange,long,8; + üᰡ,jnilydrate,jnilydrate,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8403.res b/sample_python/Res/t8403.res new file mode 100644 index 0000000..b4c6ce1 --- /dev/null +++ b/sample_python/Res/t8403.res @@ -0,0 +1,88 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļȣȸ(API)(t8403),t8403,attr,block,headtype=A; + BEGIN_DATA_MAP + t8403InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + end + t8403OutBlock,,output; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷϵð,stimeqrt,stimeqrt,float,6.2; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,8; + żȣ1,bidrem1,bidrem1,long,8; + ŵȣǼ1,dcnt1,dcnt1,long,8; + żȣǼ1,scnt1,scnt1,long,8; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,8; + żȣ2,bidrem2,bidrem2,long,8; + ŵȣǼ2,dcnt2,dcnt2,long,8; + żȣǼ2,scnt2,scnt2,long,8; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,8; + żȣ3,bidrem3,bidrem3,long,8; + ŵȣǼ3,dcnt3,dcnt3,long,8; + żȣǼ3,scnt3,scnt3,long,8; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,8; + żȣ4,bidrem4,bidrem4,long,8; + ŵȣǼ4,dcnt4,dcnt4,long,8; + żȣǼ4,scnt4,scnt4,long,8; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,8; + żȣ5,bidrem5,bidrem5,long,8; + ŵȣǼ5,dcnt5,dcnt5,long,8; + żȣǼ5,scnt5,scnt5,long,8; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,8; + żȣ6,bidrem6,bidrem6,long,8; + ŵȣǼ6,dcnt6,dcnt6,long,8; + żȣǼ6,scnt6,scnt6,long,8; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,8; + żȣ7,bidrem7,bidrem7,long,8; + ŵȣǼ7,dcnt7,dcnt7,long,8; + żȣǼ7,scnt7,scnt7,long,8; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,8; + żȣ8,bidrem8,bidrem8,long,8; + ŵȣǼ8,dcnt8,dcnt8,long,8; + żȣǼ8,scnt8,scnt8,long,8; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,8; + żȣ9,bidrem9,bidrem9,long,8; + ŵȣǼ9,dcnt9,dcnt9,long,8; + żȣǼ9,scnt9,scnt9,long,8; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,8; + żȣ10,bidrem10,bidrem10,long,8; + ŵȣǼ10,dcnt10,dcnt10,long,8; + żȣǼ10,scnt10,scnt10,long,8; + ŵȣѼ,dvol,dvol,long,8; + żȣѼ,svol,svol,long,8; + ѸŵȣǼ,toffernum,toffernum,long,8; + ѸżȣǼ,tbidnum,tbidnum,long,8; + Žð,time,time,char,6; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8403 \ No newline at end of file diff --git a/sample_python/Res/t8403_2.res b/sample_python/Res/t8403_2.res new file mode 100644 index 0000000..b4c6ce1 --- /dev/null +++ b/sample_python/Res/t8403_2.res @@ -0,0 +1,88 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļȣȸ(API)(t8403),t8403,attr,block,headtype=A; + BEGIN_DATA_MAP + t8403InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + end + t8403OutBlock,,output; + begin + ,hname,hname,char,20; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷϵð,stimeqrt,stimeqrt,float,6.2; + ,jnilclose,jnilclose,long,8; + ŵȣ1,offerho1,offerho1,long,8; + żȣ1,bidho1,bidho1,long,8; + ŵȣ1,offerrem1,offerrem1,long,8; + żȣ1,bidrem1,bidrem1,long,8; + ŵȣǼ1,dcnt1,dcnt1,long,8; + żȣǼ1,scnt1,scnt1,long,8; + ŵȣ2,offerho2,offerho2,long,8; + żȣ2,bidho2,bidho2,long,8; + ŵȣ2,offerrem2,offerrem2,long,8; + żȣ2,bidrem2,bidrem2,long,8; + ŵȣǼ2,dcnt2,dcnt2,long,8; + żȣǼ2,scnt2,scnt2,long,8; + ŵȣ3,offerho3,offerho3,long,8; + żȣ3,bidho3,bidho3,long,8; + ŵȣ3,offerrem3,offerrem3,long,8; + żȣ3,bidrem3,bidrem3,long,8; + ŵȣǼ3,dcnt3,dcnt3,long,8; + żȣǼ3,scnt3,scnt3,long,8; + ŵȣ4,offerho4,offerho4,long,8; + żȣ4,bidho4,bidho4,long,8; + ŵȣ4,offerrem4,offerrem4,long,8; + żȣ4,bidrem4,bidrem4,long,8; + ŵȣǼ4,dcnt4,dcnt4,long,8; + żȣǼ4,scnt4,scnt4,long,8; + ŵȣ5,offerho5,offerho5,long,8; + żȣ5,bidho5,bidho5,long,8; + ŵȣ5,offerrem5,offerrem5,long,8; + żȣ5,bidrem5,bidrem5,long,8; + ŵȣǼ5,dcnt5,dcnt5,long,8; + żȣǼ5,scnt5,scnt5,long,8; + ŵȣ6,offerho6,offerho6,long,8; + żȣ6,bidho6,bidho6,long,8; + ŵȣ6,offerrem6,offerrem6,long,8; + żȣ6,bidrem6,bidrem6,long,8; + ŵȣǼ6,dcnt6,dcnt6,long,8; + żȣǼ6,scnt6,scnt6,long,8; + ŵȣ7,offerho7,offerho7,long,8; + żȣ7,bidho7,bidho7,long,8; + ŵȣ7,offerrem7,offerrem7,long,8; + żȣ7,bidrem7,bidrem7,long,8; + ŵȣǼ7,dcnt7,dcnt7,long,8; + żȣǼ7,scnt7,scnt7,long,8; + ŵȣ8,offerho8,offerho8,long,8; + żȣ8,bidho8,bidho8,long,8; + ŵȣ8,offerrem8,offerrem8,long,8; + żȣ8,bidrem8,bidrem8,long,8; + ŵȣǼ8,dcnt8,dcnt8,long,8; + żȣǼ8,scnt8,scnt8,long,8; + ŵȣ9,offerho9,offerho9,long,8; + żȣ9,bidho9,bidho9,long,8; + ŵȣ9,offerrem9,offerrem9,long,8; + żȣ9,bidrem9,bidrem9,long,8; + ŵȣǼ9,dcnt9,dcnt9,long,8; + żȣǼ9,scnt9,scnt9,long,8; + ŵȣ10,offerho10,offerho10,long,8; + żȣ10,bidho10,bidho10,long,8; + ŵȣ10,offerrem10,offerrem10,long,8; + żȣ10,bidrem10,bidrem10,long,8; + ŵȣǼ10,dcnt10,dcnt10,long,8; + żȣǼ10,scnt10,scnt10,long,8; + ŵȣѼ,dvol,dvol,long,8; + żȣѼ,svol,svol,long,8; + ѸŵȣǼ,toffernum,toffernum,long,8; + ѸżȣǼ,tbidnum,tbidnum,long,8; + Žð,time,time,char,6; + ڵ,shcode,shcode,char,6; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8403 \ No newline at end of file diff --git a/sample_python/Res/t8404.res b/sample_python/Res/t8404.res new file mode 100644 index 0000000..3322c1c --- /dev/null +++ b/sample_python/Res/t8404.res @@ -0,0 +1,44 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļð뺰üȸ(API)(t8404),t8404,attr,block,headtype=A; + BEGIN_DATA_MAP + t8404InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t8404OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t8404OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,8; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,8.2; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + ŷ,volume,volume,double,12.0; + ̰,openyak,openyak,long,8; + ̰,jnilopenupdn,jnilopenupdn,long,8; + ̷BASIS,ibasis,ibasis,long,8; + BASIS,sbasis,sbasis,long,8; + ,kasis,kasis,float,6.2; + ŷ,value,value,double,12.0; + ̰,j_openupdn,j_openupdn,long,8; + żüᷮ,n_msvolume,n_msvolume,double,12.0; + ŵüᷮ,n_mdvolume,n_mdvolume,double,12.0; + żüᷮ,s_msvolume,s_msvolume,double,12.0; + żüǼ,n_mschecnt,n_mschecnt,long,8; + ŵüǼ,n_mdchecnt,n_mdchecnt,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8404 \ No newline at end of file diff --git a/sample_python/Res/t8404_2.res b/sample_python/Res/t8404_2.res new file mode 100644 index 0000000..3322c1c --- /dev/null +++ b/sample_python/Res/t8404_2.res @@ -0,0 +1,44 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļð뺰üȸ(API)(t8404),t8404,attr,block,headtype=A; + BEGIN_DATA_MAP + t8404InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + Ư̰ŷ,cvolume,cvolume,long,12; + ۽ð,stime,stime,char,4; + ð,etime,etime,char,4; + ðCTS,cts_time,cts_time,char,10; + end + t8404OutBlock,,output; + begin + ðCTS,cts_time,cts_time,char,10; + end + t8404OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,8; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,8.2; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + ŷ,volume,volume,double,12.0; + ̰,openyak,openyak,long,8; + ̰,jnilopenupdn,jnilopenupdn,long,8; + ̷BASIS,ibasis,ibasis,long,8; + BASIS,sbasis,sbasis,long,8; + ,kasis,kasis,float,6.2; + ŷ,value,value,double,12.0; + ̰,j_openupdn,j_openupdn,long,8; + żüᷮ,n_msvolume,n_msvolume,double,12.0; + ŵüᷮ,n_mdvolume,n_mdvolume,double,12.0; + żüᷮ,s_msvolume,s_msvolume,double,12.0; + żüǼ,n_mschecnt,n_mschecnt,long,8; + ŵüǼ,n_mdchecnt,n_mdchecnt,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8404 \ No newline at end of file diff --git a/sample_python/Res/t8405.res b/sample_python/Res/t8405.res new file mode 100644 index 0000000..af7ff81 --- /dev/null +++ b/sample_python/Res/t8405.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļⰣְ(API)(t8405),t8405,attr,block,headtype=A; + BEGIN_DATA_MAP + t8405InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱٿ,futcheck,futcheck,char,1; + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ȸûǼ,cnt,cnt,int,3; + end + t8405OutBlock,,output; + begin + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ֱٿ,nowfutyn,nowfutyn,char,1; + end + t8405OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ̰,openyak,openyak,long,8; + ̰,openyakupdn,openyakupdn,long,8; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8405 \ No newline at end of file diff --git a/sample_python/Res/t8405_2.res b/sample_python/Res/t8405_2.res new file mode 100644 index 0000000..af7ff81 --- /dev/null +++ b/sample_python/Res/t8405_2.res @@ -0,0 +1,39 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļⰣְ(API)(t8405),t8405,attr,block,headtype=A; + BEGIN_DATA_MAP + t8405InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱٿ,futcheck,futcheck,char,1; + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ȸûǼ,cnt,cnt,int,3; + end + t8405OutBlock,,output; + begin + ¥,date,date,char,8; + CTSڵ,cts_code,cts_code,char,8; + 񸸱,lastdate,lastdate,char,8; + ֱٿ,nowfutyn,nowfutyn,char,1; + end + t8405OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ̰,openyak,openyak,long,8; + ̰,openyakupdn,openyakupdn,long,8; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8405 \ No newline at end of file diff --git a/sample_python/Res/t8406.res b/sample_python/Res/t8406.res new file mode 100644 index 0000000..79a012d --- /dev/null +++ b/sample_python/Res/t8406.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļƽкüȸ(API)(t8406),t8406,attr,block,headtype=A; + BEGIN_DATA_MAP + t8406InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + íƮ,cgubun,cgubun,char,1; + б,bgubun,bgubun,int,3; + ȸǼ,cnt,cnt,int,3; + end + t8406OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ,volume,volume,double,12.0; + ŷ,value,value,double,12.0; + ̰,openyak,openyak,long,8; + ̰,openupdn,openupdn,long,8; + ü,cvolume,cvolume,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + ŵüǼ,s_mdchecnt,s_mdchecnt,long,8; + żüǼ,ss_mschecnt,ss_mschecnt,long,8; + żüᷮ,s_mschevol,s_mschevol,double,12.0; + ŵüᷮ,s_mdchevol,s_mdchevol,double,12.0; + żüᷮ,ss_mschevol,ss_mschevol,double,12.0; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8406 \ No newline at end of file diff --git a/sample_python/Res/t8406_2.res b/sample_python/Res/t8406_2.res new file mode 100644 index 0000000..79a012d --- /dev/null +++ b/sample_python/Res/t8406_2.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,ֽļƽкüȸ(API)(t8406),t8406,attr,block,headtype=A; + BEGIN_DATA_MAP + t8406InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + íƮ,cgubun,cgubun,char,1; + б,bgubun,bgubun,int,3; + ȸǼ,cnt,cnt,int,3; + end + t8406OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ,volume,volume,double,12.0; + ŷ,value,value,double,12.0; + ̰,openyak,openyak,long,8; + ̰,openupdn,openupdn,long,8; + ü,cvolume,cvolume,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + ŵüǼ,s_mdchecnt,s_mdchecnt,long,8; + żüǼ,ss_mschecnt,ss_mschecnt,long,8; + żüᷮ,s_mschevol,s_mschevol,double,12.0; + ŵüᷮ,s_mdchevol,s_mdchevol,double,12.0; + żüᷮ,ss_mschevol,ss_mschevol,double,12.0; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8406 \ No newline at end of file diff --git a/sample_python/Res/t8407.res b/sample_python/Res/t8407.res new file mode 100644 index 0000000..f3cbf71 --- /dev/null +++ b/sample_python/Res/t8407.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,APIֽĸƼ簡ȸ(t8407),t8407,attr,block,headtype=A; + BEGIN_DATA_MAP + t8407InBlock,⺻Է,input; + begin + Ǽ,nrec,nrec,long,3; + ڵ,shcode,shcode,char,300; + end + t8407OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,9.2; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ(鸸),value,value,long,12; + 켱ŵܷ,offerrem,offerrem,long,12; + 켱żܷ,bidrem,bidrem,long,12; + Ѹŵܷ,totofferrem,totofferrem,long,12; + Ѹżܷ,totbidrem,totbidrem,long,12; + ,jnilclose,jnilclose,long,8; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8407 \ No newline at end of file diff --git a/sample_python/Res/t8407_2.res b/sample_python/Res/t8407_2.res new file mode 100644 index 0000000..f3cbf71 --- /dev/null +++ b/sample_python/Res/t8407_2.res @@ -0,0 +1,37 @@ +BEGIN_FUNCTION_MAP + .Func,APIֽĸƼ簡ȸ(t8407),t8407,attr,block,headtype=A; + BEGIN_DATA_MAP + t8407InBlock,⺻Է,input; + begin + Ǽ,nrec,nrec,long,3; + ڵ,shcode,shcode,char,300; + end + t8407OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ,hname,hname,char,40; + 簡,price,price,long,8; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,long,8; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŵȣ,offerho,offerho,long,8; + żȣ,bidho,bidho,long,8; + ü,cvolume,cvolume,long,8; + üᰭ,chdegree,chdegree,float,9.2; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ŷ(鸸),value,value,long,12; + 켱ŵܷ,offerrem,offerrem,long,12; + 켱żܷ,bidrem,bidrem,long,12; + Ѹŵܷ,totofferrem,totofferrem,long,12; + Ѹżܷ,totbidrem,totbidrem,long,12; + ,jnilclose,jnilclose,long,8; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + +t8407 \ No newline at end of file diff --git a/sample_python/Res/t8410.res b/sample_python/Res/t8410.res new file mode 100644 index 0000000..f8f58a5 --- /dev/null +++ b/sample_python/Res/t8410.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,APIֽíƮ(ֿ)(t8410),t8410,attr,block,headtype=A; + BEGIN_DATA_MAP + t8410InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֱⱸ(2:3:4:5:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + ְ(Y:N:),sujung,sujung,char,1; + end + t8410OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + VIѰ,svi_uplmtprice,svi_uplmtprice,long,8; + VIѰ,svi_dnlmtprice,svi_dnlmtprice,long,8; + end + t8410OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,12; + ,high,high,long,12; + ,low,low,long,12; + ,close,close,long,12; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + ݿŷ,ratevalue,ratevalue,long,12; + (1:2:3:4:5:϶ֽϸ),sign,sign,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8410_2.res b/sample_python/Res/t8410_2.res new file mode 100644 index 0000000..f8f58a5 --- /dev/null +++ b/sample_python/Res/t8410_2.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,APIֽíƮ(ֿ)(t8410),t8410,attr,block,headtype=A; + BEGIN_DATA_MAP + t8410InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֱⱸ(2:3:4:5:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + ְ(Y:N:),sujung,sujung,char,1; + end + t8410OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + VIѰ,svi_uplmtprice,svi_uplmtprice,long,8; + VIѰ,svi_dnlmtprice,svi_dnlmtprice,long,8; + end + t8410OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,12; + ,high,high,long,12; + ,low,low,long,12; + ,close,close,long,12; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + ݿŷ,ratevalue,ratevalue,long,12; + (1:2:3:4:5:϶ֽϸ),sign,sign,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8411.res b/sample_python/Res/t8411.res new file mode 100644 index 0000000..9fdfb14 --- /dev/null +++ b/sample_python/Res/t8411.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ(ƽ/nƽ)(t8411),t8411,attr,block,headtype=A; + BEGIN_DATA_MAP + t8411InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (nƽ),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8411OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8411OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8411_2.res b/sample_python/Res/t8411_2.res new file mode 100644 index 0000000..9fdfb14 --- /dev/null +++ b/sample_python/Res/t8411_2.res @@ -0,0 +1,54 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ(ƽ/nƽ)(t8411),t8411,attr,block,headtype=A; + BEGIN_DATA_MAP + t8411InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (nƽ),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8411OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8411OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8412.res b/sample_python/Res/t8412.res new file mode 100644 index 0000000..5808134 --- /dev/null +++ b/sample_python/Res/t8412.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ(N)(t8412),t8412,attr,block,headtype=A; + BEGIN_DATA_MAP + t8412InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (n),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8412OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8412OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + (1:2:3:4:5:϶),sign,sign,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8412_2.res b/sample_python/Res/t8412_2.res new file mode 100644 index 0000000..5808134 --- /dev/null +++ b/sample_python/Res/t8412_2.res @@ -0,0 +1,55 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ(N)(t8412),t8412,attr,block,headtype=A; + BEGIN_DATA_MAP + t8412InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + (n),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8412OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8412OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + (1:2:3:4:5:϶),sign,sign,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8413.res b/sample_python/Res/t8413.res new file mode 100644 index 0000000..2b6bc10 --- /dev/null +++ b/sample_python/Res/t8413.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ(ֿ)(t8413),t8413,attr,block,headtype=A; + BEGIN_DATA_MAP + t8413InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֱⱸ(2:3:4:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8413OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8413OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + ݿŷ,ratevalue,ratevalue,long,12; + (1:2:3:4:5:϶ֽϸ),sign,sign,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8413_2.res b/sample_python/Res/t8413_2.res new file mode 100644 index 0000000..2b6bc10 --- /dev/null +++ b/sample_python/Res/t8413_2.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func,ֽíƮ(ֿ)(t8413),t8413,attr,block,headtype=A; + BEGIN_DATA_MAP + t8413InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,6; + ֱⱸ(2:3:4:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8413OutBlock,,output; + begin + ڵ,shcode,shcode,char,6; + Ͻð,jisiga,jisiga,long,8; + ϰ,jihigh,jihigh,long,8; + ,jilow,jilow,long,8; + ,jiclose,jiclose,long,8; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,long,8; + ϰ,dihigh,dihigh,long,8; + ,dilow,dilow,long,8; + ,diclose,diclose,long,8; + Ѱ,highend,highend,long,8; + Ѱ,lowend,lowend,long,8; + ,cts_date,cts_date,char,8; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8413OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,long,8; + ,high,high,long,8; + ,low,low,long,8; + ,close,close,long,8; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ,jongchk,jongchk,long,13; + ,rate,rate,double,6.2; + ְݿ׸,pricechk,pricechk,long,13; + ݿŷ,ratevalue,ratevalue,long,12; + (1:2:3:4:5:϶ֽϸ),sign,sign,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8414.res b/sample_python/Res/t8414.res new file mode 100644 index 0000000..5d81f37 --- /dev/null +++ b/sample_python/Res/t8414.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,ɼƮ(ƽ/nƽ)(t8414),t8414,attr,block,headtype=A; + BEGIN_DATA_MAP + t8414InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + (nƽ),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8414OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + Ͻð,jisiga,jisiga,float,6.2; + ϰ,jihigh,jihigh,float,6.2; + ,jilow,jilow,float,6.2; + ,jiclose,jiclose,float,6.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,6.2; + ϰ,dihigh,dihigh,float,6.2; + ,dilow,dilow,float,6.2; + ,diclose,diclose,float,6.2; + Ѱ,highend,highend,float,6.2; + Ѱ,lowend,lowend,float,6.2; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8414OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ̰,openyak,openyak,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8414_2.res b/sample_python/Res/t8414_2.res new file mode 100644 index 0000000..5d81f37 --- /dev/null +++ b/sample_python/Res/t8414_2.res @@ -0,0 +1,52 @@ +BEGIN_FUNCTION_MAP + .Func,ɼƮ(ƽ/nƽ)(t8414),t8414,attr,block,headtype=A; + BEGIN_DATA_MAP + t8414InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + (nƽ),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8414OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + Ͻð,jisiga,jisiga,float,6.2; + ϰ,jihigh,jihigh,float,6.2; + ,jilow,jilow,float,6.2; + ,jiclose,jiclose,float,6.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,6.2; + ϰ,dihigh,dihigh,float,6.2; + ,dilow,dilow,float,6.2; + ,diclose,diclose,float,6.2; + Ѱ,highend,highend,float,6.2; + Ѱ,lowend,lowend,float,6.2; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8414OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ̰,openyak,openyak,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8415.res b/sample_python/Res/t8415.res new file mode 100644 index 0000000..526600d --- /dev/null +++ b/sample_python/Res/t8415.res @@ -0,0 +1,53 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼíƮ(N)(t8415),t8415,attr,block,headtype=A; + BEGIN_DATA_MAP + t8415InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + (n),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8415OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + Ͻð,jisiga,jisiga,float,6.2; + ϰ,jihigh,jihigh,float,6.2; + ,jilow,jilow,float,6.2; + ,jiclose,jiclose,float,6.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,6.2; + ϰ,dihigh,dihigh,float,6.2; + ,dilow,dilow,float,6.2; + ,diclose,diclose,float,6.2; + Ѱ,highend,highend,float,6.2; + Ѱ,lowend,lowend,float,6.2; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8415OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ̰,openyak,openyak,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8415_2.res b/sample_python/Res/t8415_2.res new file mode 100644 index 0000000..526600d --- /dev/null +++ b/sample_python/Res/t8415_2.res @@ -0,0 +1,53 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼíƮ(N)(t8415),t8415,attr,block,headtype=A; + BEGIN_DATA_MAP + t8415InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + (n),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8415OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + Ͻð,jisiga,jisiga,float,6.2; + ϰ,jihigh,jihigh,float,6.2; + ,jilow,jilow,float,6.2; + ,jiclose,jiclose,float,6.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,6.2; + ϰ,dihigh,dihigh,float,6.2; + ,dilow,dilow,float,6.2; + ,diclose,diclose,float,6.2; + Ѱ,highend,highend,float,6.2; + Ѱ,lowend,lowend,float,6.2; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8415OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,10; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ̰,openyak,openyak,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8416.res b/sample_python/Res/t8416.res new file mode 100644 index 0000000..a252e1f --- /dev/null +++ b/sample_python/Res/t8416.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼíƮ(ֿ)(t8416),t8416,attr,block,headtype=A; + BEGIN_DATA_MAP + t8416InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱⱸ(2:3:4:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8416OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + Ͻð,jisiga,jisiga,float,6.2; + ϰ,jihigh,jihigh,float,6.2; + ,jilow,jilow,float,6.2; + ,jiclose,jiclose,float,6.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,6.2; + ϰ,dihigh,dihigh,float,6.2; + ,dilow,dilow,float,6.2; + ,diclose,diclose,float,6.2; + Ѱ,highend,highend,float,6.2; + Ѱ,lowend,lowend,float,6.2; + ,cts_date,cts_date,char,8; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8416OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ̰,openyak,openyak,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8416_2.res b/sample_python/Res/t8416_2.res new file mode 100644 index 0000000..a252e1f --- /dev/null +++ b/sample_python/Res/t8416_2.res @@ -0,0 +1,47 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼíƮ(ֿ)(t8416),t8416,attr,block,headtype=A; + BEGIN_DATA_MAP + t8416InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,8; + ֱⱸ(2:3:4:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8416OutBlock,,output; + begin + ڵ,shcode,shcode,char,8; + Ͻð,jisiga,jisiga,float,6.2; + ϰ,jihigh,jihigh,float,6.2; + ,jilow,jilow,float,6.2; + ,jiclose,jiclose,float,6.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,6.2; + ϰ,dihigh,dihigh,float,6.2; + ,dilow,dilow,float,6.2; + ,diclose,diclose,float,6.2; + Ѱ,highend,highend,float,6.2; + Ѱ,lowend,lowend,float,6.2; + ,cts_date,cts_date,char,8; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8416OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + ̰,openyak,openyak,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8417.res b/sample_python/Res/t8417.res new file mode 100644 index 0000000..c0787f9 --- /dev/null +++ b/sample_python/Res/t8417.res @@ -0,0 +1,49 @@ +BEGIN_FUNCTION_MAP + .Func,Ʈ(ƽ/nƽ)(t8417),t8417,attr,block,headtype=A; + BEGIN_DATA_MAP + t8417InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + (nƽ),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8417OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8417OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8417_2.res b/sample_python/Res/t8417_2.res new file mode 100644 index 0000000..c0787f9 --- /dev/null +++ b/sample_python/Res/t8417_2.res @@ -0,0 +1,49 @@ +BEGIN_FUNCTION_MAP + .Func,Ʈ(ƽ/nƽ)(t8417),t8417,attr,block,headtype=A; + BEGIN_DATA_MAP + t8417InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + (nƽ),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8417OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8417OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8418.res b/sample_python/Res/t8418.res new file mode 100644 index 0000000..33cae20 --- /dev/null +++ b/sample_python/Res/t8418.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func,íƮ(N)(t8418),t8418,attr,block,headtype=A; + BEGIN_DATA_MAP + t8418InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + (n),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8418OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ϰŷ,disvalue,disvalue,long,12; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8418OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8418_2.res b/sample_python/Res/t8418_2.res new file mode 100644 index 0000000..33cae20 --- /dev/null +++ b/sample_python/Res/t8418_2.res @@ -0,0 +1,51 @@ +BEGIN_FUNCTION_MAP + .Func,íƮ(N)(t8418),t8418,attr,block,headtype=A; + BEGIN_DATA_MAP + t8418InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + (n),ncnt,ncnt,long,4; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ȸϼ(0:̻1>=),nday,nday,char,1; + ,sdate,sdate,char,8; + ۽ð(̻),stime,stime,char,6; + ,edate,edate,char,8; + ð(̻),etime,etime,char,6; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8418OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ϰŷ,disvalue,disvalue,long,12; + ,cts_date,cts_date,char,8; + ӽð,cts_time,cts_time,char,10; + ۽ð(HHMMSS),s_time,s_time,char,6; + ð(HHMMSS),e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8418OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8419.res b/sample_python/Res/t8419.res new file mode 100644 index 0000000..70249db --- /dev/null +++ b/sample_python/Res/t8419.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,íƮ(ֿ)(t8419),t8419,attr,block,headtype=A; + BEGIN_DATA_MAP + t8419InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + ֱⱸ(2:3:4:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8419OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ϰŷ,disvalue,disvalue,long,12; + ,cts_date,cts_date,char,8; + ۽ð,s_time,s_time,char,6; + ð,e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8419OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8419_2.res b/sample_python/Res/t8419_2.res new file mode 100644 index 0000000..70249db --- /dev/null +++ b/sample_python/Res/t8419_2.res @@ -0,0 +1,45 @@ +BEGIN_FUNCTION_MAP + .Func,íƮ(ֿ)(t8419),t8419,attr,block,headtype=A; + BEGIN_DATA_MAP + t8419InBlock,⺻Է,input; + begin + ڵ,shcode,shcode,char,3; + ֱⱸ(2:3:4:),gubun,gubun,char,1; + ûǼ(ִ-:2000:500),qrycnt,qrycnt,long,4; + ,sdate,sdate,char,8; + ,edate,edate,char,8; + ,cts_date,cts_date,char,8; + ࿩(Y:N:),comp_yn,comp_yn,char,1; + end + t8419OutBlock,,output; + begin + ڵ,shcode,shcode,char,3; + Ͻð,jisiga,jisiga,float,7.2; + ϰ,jihigh,jihigh,float,7.2; + ,jilow,jilow,float,7.2; + ,jiclose,jiclose,float,7.2; + ϰŷ,jivolume,jivolume,long,12; + Ͻð,disiga,disiga,float,7.2; + ϰ,dihigh,dihigh,float,7.2; + ,dilow,dilow,float,7.2; + ,diclose,diclose,float,7.2; + ϰŷ,disvalue,disvalue,long,12; + ,cts_date,cts_date,char,8; + ۽ð,s_time,s_time,char,6; + ð,e_time,e_time,char,6; + ȣóð(MM:),dshmin,dshmin,char,2; + ڵīƮ,rec_count,rec_count,long,7; + end + t8419OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,open,open,float,7.2; + ,high,high,float,7.2; + ,low,low,float,7.2; + ,close,close,float,7.2; + ŷ,jdiff_vol,jdiff_vol,long,12; + ŷ,value,value,long,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8424.res b/sample_python/Res/t8424.res new file mode 100644 index 0000000..4b19814 --- /dev/null +++ b/sample_python/Res/t8424.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ü(t8424),t8424,attr,block,headtype=A; + BEGIN_DATA_MAP + t8424InBlock,⺻Է,input; + begin + 1,gubun1,gubun1,char,1; + end + t8424OutBlock,,output,occurs; + begin + ,hname,hname,char,20; + ڵ,upcode,upcode,char,3; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8424_2.res b/sample_python/Res/t8424_2.res new file mode 100644 index 0000000..4b19814 --- /dev/null +++ b/sample_python/Res/t8424_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ü(t8424),t8424,attr,block,headtype=A; + BEGIN_DATA_MAP + t8424InBlock,⺻Է,input; + begin + 1,gubun1,gubun1,char,1; + end + t8424OutBlock,,output,occurs; + begin + ,hname,hname,char,20; + ڵ,upcode,upcode,char,3; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8425.res b/sample_python/Res/t8425.res new file mode 100644 index 0000000..44b6515 --- /dev/null +++ b/sample_python/Res/t8425.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ü׸(t8425),t8425,attr,block,headtype=A; + BEGIN_DATA_MAP + t8425InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8425OutBlock,,output,occurs; + begin + ׸,tmname,tmname,char,36; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8425_2.res b/sample_python/Res/t8425_2.res new file mode 100644 index 0000000..44b6515 --- /dev/null +++ b/sample_python/Res/t8425_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ü׸(t8425),t8425,attr,block,headtype=A; + BEGIN_DATA_MAP + t8425InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8425OutBlock,,output,occurs; + begin + ׸,tmname,tmname,char,36; + ׸ڵ,tmcode,tmcode,char,4; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8426.res b/sample_python/Res/t8426.res new file mode 100644 index 0000000..8f5451f --- /dev/null +++ b/sample_python/Res/t8426.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,ǰȸ(API)(t8426),t8426,block,headtype=A; + BEGIN_DATA_MAP + t8426InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8426OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8426_2.res b/sample_python/Res/t8426_2.res new file mode 100644 index 0000000..8f5451f --- /dev/null +++ b/sample_python/Res/t8426_2.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,ǰȸ(API)(t8426),t8426,block,headtype=A; + BEGIN_DATA_MAP + t8426InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8426OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8427.res b/sample_python/Res/t8427.res new file mode 100644 index 0000000..3858f64 --- /dev/null +++ b/sample_python/Res/t8427.res @@ -0,0 +1,42 @@ +BEGIN_FUNCTION_MAP + .Func,ŵͽð뺰ȸ(t8427),t8427,attr,block,headtype=A; + BEGIN_DATA_MAP + t8427InBlock,⺻Է,input; + begin + ɼDZ,fo_gbn,fo_gbn,char,1; + ȸ⵵,yyyy,yyyy,char,4; + ȸ,mm,mm,char,2; + ɼDz,cp_gbn,cp_gbn,char,1; + ɼ簡,actprice,actprice,float,6.2; + ɼڵ,focode,focode,char,8; + Ϻб,dt_gbn,dt_gbn,char,1; + а,min_term,min_term,char,2; + ¥,date,date,char,8; + ð,time,time,char,6; + end + t8427OutBlock,,output; + begin + ɼڵ,focode,focode,char,8; + ¥,date,date,char,8; + ð,time,time,char,6; + end + t8427OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ̰,openyak,openyak,long,8; + ̰,openyakupdn,openyakupdn,long,8; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8427_2.res b/sample_python/Res/t8427_2.res new file mode 100644 index 0000000..3858f64 --- /dev/null +++ b/sample_python/Res/t8427_2.res @@ -0,0 +1,42 @@ +BEGIN_FUNCTION_MAP + .Func,ŵͽð뺰ȸ(t8427),t8427,attr,block,headtype=A; + BEGIN_DATA_MAP + t8427InBlock,⺻Է,input; + begin + ɼDZ,fo_gbn,fo_gbn,char,1; + ȸ⵵,yyyy,yyyy,char,4; + ȸ,mm,mm,char,2; + ɼDz,cp_gbn,cp_gbn,char,1; + ɼ簡,actprice,actprice,float,6.2; + ɼڵ,focode,focode,char,8; + Ϻб,dt_gbn,dt_gbn,char,1; + а,min_term,min_term,char,2; + ¥,date,date,char,8; + ð,time,time,char,6; + end + t8427OutBlock,,output; + begin + ɼڵ,focode,focode,char,8; + ¥,date,date,char,8; + ð,time,time,char,6; + end + t8427OutBlock1,1,output,occurs; + begin + ¥,date,date,char,8; + ð,time,time,char,6; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ,close,close,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + ŷ,diff_vol,diff_vol,float,10.2; + ̰,openyak,openyak,long,8; + ̰,openyakupdn,openyakupdn,long,8; + ŷ,value,value,float,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8428.res b/sample_python/Res/t8428.res new file mode 100644 index 0000000..4748af8 --- /dev/null +++ b/sample_python/Res/t8428.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ֺڱ(t8428),t8428,attr,block,headtype=A; + BEGIN_DATA_MAP + t8428InBlock,⺻Է,input; + begin + from,fdate,fdate,char,8; + to,tdate,tdate,char,8; + ,gubun,gubun,char,1; + ¥,key_date,key_date,char,8; + ڵ,upcode,upcode,char,3; + ȸǼ,cnt,cnt,int,3; + end + t8428OutBlock,,output; + begin + ¥CTS,date,date,char,8; + IDX,idx,idx,long,4; + end + t8428OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ,jisu,jisu,float,7.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + Ź_,custmoney,custmoney,long,12; + Ź_,yecha,yecha,long,12; + ȸ,vol,vol,float,6.2; + ̼_,outmoney,outmoney,long,12; + ſܰ_,trjango,trjango,long,12; + _,futymoney,futymoney,long,12; + ֽ_,stkmoney,stkmoney,long,8; + ȥ_(ֽ),mstkmoney,mstkmoney,long,8; + ȥ_(ä),mbndmoney,mbndmoney,long,8; + ä_,bndmoney,bndmoney,long,8; + ʷ(.ܱä),bndsmoney,bndsmoney,long,8; + MMF_(ֽ),mmfmoney,mmfmoney,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8428_2.res b/sample_python/Res/t8428_2.res new file mode 100644 index 0000000..4748af8 --- /dev/null +++ b/sample_python/Res/t8428_2.res @@ -0,0 +1,41 @@ +BEGIN_FUNCTION_MAP + .Func,ֺڱ(t8428),t8428,attr,block,headtype=A; + BEGIN_DATA_MAP + t8428InBlock,⺻Է,input; + begin + from,fdate,fdate,char,8; + to,tdate,tdate,char,8; + ,gubun,gubun,char,1; + ¥,key_date,key_date,char,8; + ڵ,upcode,upcode,char,3; + ȸǼ,cnt,cnt,int,3; + end + t8428OutBlock,,output; + begin + ¥CTS,date,date,char,8; + IDX,idx,idx,long,4; + end + t8428OutBlock1,1,output,occurs; + begin + ,date,date,char,8; + ,jisu,jisu,float,7.2; + 񱸺,sign,sign,char,1; + ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + Ź_,custmoney,custmoney,long,12; + Ź_,yecha,yecha,long,12; + ȸ,vol,vol,float,6.2; + ̼_,outmoney,outmoney,long,12; + ſܰ_,trjango,trjango,long,12; + _,futymoney,futymoney,long,12; + ֽ_,stkmoney,stkmoney,long,8; + ȥ_(ֽ),mstkmoney,mstkmoney,long,8; + ȥ_(ä),mbndmoney,mbndmoney,long,8; + ä_,bndmoney,bndmoney,long,8; + ʷ(.ܱä),bndsmoney,bndsmoney,long,8; + MMF_(ֽ),mmfmoney,mmfmoney,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8429.res b/sample_python/Res/t8429.res new file mode 100644 index 0000000..09584d5 --- /dev/null +++ b/sample_python/Res/t8429.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX߰ɼǼƽкüȸíƮ(t8429),t8429,attr,block,headtype=A; + BEGIN_DATA_MAP + t8429InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + íƮ,cgubun,cgubun,char,1; + б,bgubun,bgubun,int,3; + ȸǼ,cnt,cnt,int,3; + end + t8429OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ŷ,volume,volume,double,12.0; + ü,cvolume,cvolume,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + ŵüǼ,s_mdchecnt,s_mdchecnt,long,8; + żüǼ,ss_mschecnt,ss_mschecnt,long,8; + żüᷮ,s_mschevol,s_mschevol,double,12.0; + ŵüᷮ,s_mdchevol,s_mdchevol,double,12.0; + żüᷮ,ss_mschevol,ss_mschevol,double,12.0; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8429_2.res b/sample_python/Res/t8429_2.res new file mode 100644 index 0000000..09584d5 --- /dev/null +++ b/sample_python/Res/t8429_2.res @@ -0,0 +1,33 @@ +BEGIN_FUNCTION_MAP + .Func,EUREX߰ɼǼƽкüȸíƮ(t8429),t8429,attr,block,headtype=A; + BEGIN_DATA_MAP + t8429InBlock,⺻Է,input; + begin + ڵ,focode,focode,char,8; + íƮ,cgubun,cgubun,char,1; + б,bgubun,bgubun,int,3; + ȸǼ,cnt,cnt,int,3; + end + t8429OutBlock1,1,output,occurs; + begin + ð,chetime,chetime,char,10; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ð,open,open,float,6.2; + ,high,high,float,6.2; + ,low,low,float,6.2; + ŷ,volume,volume,double,12.0; + ü,cvolume,cvolume,long,8; + żüǼ,s_mschecnt,s_mschecnt,long,8; + ŵüǼ,s_mdchecnt,s_mdchecnt,long,8; + żüǼ,ss_mschecnt,ss_mschecnt,long,8; + żüᷮ,s_mschevol,s_mschevol,double,12.0; + ŵüᷮ,s_mdchevol,s_mdchevol,double,12.0; + żüᷮ,ss_mschevol,ss_mschevol,double,12.0; + üᰭ(ŷ),chdegvol,chdegvol,float,8.2; + üᰭ(Ǽ),chdegcnt,chdegcnt,float,8.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8430.res b/sample_python/Res/t8430.res new file mode 100644 index 0000000..cd043d3 --- /dev/null +++ b/sample_python/Res/t8430.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP + .Func,ֽȸ(t8430),t8430,block,headtype=A; + BEGIN_DATA_MAP + t8430InBlock,⺻Է,input; + begin + (0:ü1:ڽ2:ڽ),gubun,gubun,char,1; + end + t8430OutBlock,1,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + ETF(1:ETF),etfgubun,etfgubun,char,1; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ϰ,jnilclose,jnilclose,long,8; + ֹ,memedan,memedan,char,5; + ذ,recprice,recprice,long,8; + (1:ڽ2:ڽ),gubun,gubun,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8430_2.res b/sample_python/Res/t8430_2.res new file mode 100644 index 0000000..cd043d3 --- /dev/null +++ b/sample_python/Res/t8430_2.res @@ -0,0 +1,23 @@ +BEGIN_FUNCTION_MAP + .Func,ֽȸ(t8430),t8430,block,headtype=A; + BEGIN_DATA_MAP + t8430InBlock,⺻Է,input; + begin + (0:ü1:ڽ2:ڽ),gubun,gubun,char,1; + end + t8430OutBlock,1,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + ETF(1:ETF),etfgubun,etfgubun,char,1; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ϰ,jnilclose,jnilclose,long,8; + ֹ,memedan,memedan,char,5; + ذ,recprice,recprice,long,8; + (1:ڽ2:ڽ),gubun,gubun,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8431.res b/sample_python/Res/t8431.res new file mode 100644 index 0000000..e12ffd0 --- /dev/null +++ b/sample_python/Res/t8431.res @@ -0,0 +1,20 @@ +BEGIN_FUNCTION_MAP + .Func,ELWȸ(t8431),t8431,block,headtype=A; + BEGIN_DATA_MAP + t8431InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8431OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ,jnilclose,jnilclose,long,8; + ذ,recprice,recprice,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8431_2.res b/sample_python/Res/t8431_2.res new file mode 100644 index 0000000..e12ffd0 --- /dev/null +++ b/sample_python/Res/t8431_2.res @@ -0,0 +1,20 @@ +BEGIN_FUNCTION_MAP + .Func,ELWȸ(t8431),t8431,block,headtype=A; + BEGIN_DATA_MAP + t8431InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8431OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ,jnilclose,jnilclose,long,8; + ذ,recprice,recprice,long,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8432.res b/sample_python/Res/t8432.res new file mode 100644 index 0000000..17ac96e --- /dev/null +++ b/sample_python/Res/t8432.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ȸAPI(t8432),t8432,block,headtype=A; + BEGIN_DATA_MAP + t8432InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + end + t8432OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ϰ,jnilhigh,jnilhigh,float,6.2; + ,jnillow,jnillow,float,6.2; + ذ,recprice,recprice,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8432_2.res b/sample_python/Res/t8432_2.res new file mode 100644 index 0000000..17ac96e --- /dev/null +++ b/sample_python/Res/t8432_2.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ȸAPI(t8432),t8432,block,headtype=A; + BEGIN_DATA_MAP + t8432InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + end + t8432OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ϰ,jnilhigh,jnilhigh,float,6.2; + ,jnillow,jnillow,float,6.2; + ذ,recprice,recprice,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8433.res b/sample_python/Res/t8433.res new file mode 100644 index 0000000..2273856 --- /dev/null +++ b/sample_python/Res/t8433.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǸȸAPI(t8433),t8433,block,headtype=A; + BEGIN_DATA_MAP + t8433InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8433OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + Ѱ,hprice,hprice,float,6.2; + Ѱ,lprice,lprice,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ϰ,jnilhigh,jnilhigh,float,6.2; + ,jnillow,jnillow,float,6.2; + ذ,recprice,recprice,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8433_2.res b/sample_python/Res/t8433_2.res new file mode 100644 index 0000000..2273856 --- /dev/null +++ b/sample_python/Res/t8433_2.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǸȸAPI(t8433),t8433,block,headtype=A; + BEGIN_DATA_MAP + t8433InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t8433OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + Ѱ,hprice,hprice,float,6.2; + Ѱ,lprice,lprice,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ϰ,jnilhigh,jnilhigh,float,6.2; + ,jnillow,jnillow,float,6.2; + ذ,recprice,recprice,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8434.res b/sample_python/Res/t8434.res new file mode 100644 index 0000000..5cac5bb --- /dev/null +++ b/sample_python/Res/t8434.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼǸƼ簡ȸ(t8434),t8434,attr,block,headtype=A; + BEGIN_DATA_MAP + t8434InBlock,⺻Է,input; + begin + Ǽ,qrycnt,qrycnt,long,3; + ڵ,focode,focode,char,400; + end + t8434OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + üǼ,checnt,checnt,long,8; + ڵ,focode,focode,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8434_2.res b/sample_python/Res/t8434_2.res new file mode 100644 index 0000000..5cac5bb --- /dev/null +++ b/sample_python/Res/t8434_2.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,/ɼǸƼ簡ȸ(t8434),t8434,attr,block,headtype=A; + BEGIN_DATA_MAP + t8434InBlock,⺻Է,input; + begin + Ǽ,qrycnt,qrycnt,long,3; + ڵ,focode,focode,char,400; + end + t8434OutBlock1,1,output,occurs; + begin + ѱ۸,hname,hname,char,20; + 簡,price,price,float,6.2; + ϴ񱸺,sign,sign,char,1; + ϴ,change,change,float,6.2; + ,diff,diff,float,6.2; + ŷ,volume,volume,long,12; + üǼ,checnt,checnt,long,8; + ڵ,focode,focode,char,8; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8435.res b/sample_python/Res/t8435.res new file mode 100644 index 0000000..3812116 --- /dev/null +++ b/sample_python/Res/t8435.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,Ļ񸶽ȸAPI(t8435),t8435,block,headtype=A; + BEGIN_DATA_MAP + t8435InBlock,⺻Է,input; + begin + (MF/MO),gubun,gubun,char,2; + end + t8435OutBlock,Ļ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ϰ,jnilhigh,jnilhigh,float,6.2; + ,jnillow,jnillow,float,6.2; + ذ,recprice,recprice,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8435_2.res b/sample_python/Res/t8435_2.res new file mode 100644 index 0000000..3812116 --- /dev/null +++ b/sample_python/Res/t8435_2.res @@ -0,0 +1,22 @@ +BEGIN_FUNCTION_MAP + .Func,Ļ񸶽ȸAPI(t8435),t8435,block,headtype=A; + BEGIN_DATA_MAP + t8435InBlock,⺻Է,input; + begin + (MF/MO),gubun,gubun,char,2; + end + t8435OutBlock,Ļ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + Ѱ,uplmtprice,uplmtprice,float,6.2; + Ѱ,dnlmtprice,dnlmtprice,float,6.2; + ,jnilclose,jnilclose,float,6.2; + ϰ,jnilhigh,jnilhigh,float,6.2; + ,jnillow,jnillow,float,6.2; + ذ,recprice,recprice,float,6.2; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8436.res b/sample_python/Res/t8436.res new file mode 100644 index 0000000..dcc59e9 --- /dev/null +++ b/sample_python/Res/t8436.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP + .Func,ֽȸ API(t8436),t8436,block,headtype=A; + BEGIN_DATA_MAP + t8436InBlock,⺻Է,input; + begin + (0:ü1:ڽ2:ڽ),gubun,gubun,char,1; + end + t8436OutBlock,1,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + ETF(1:ETF2:ETN),etfgubun,etfgubun,char,1; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ϰ,jnilclose,jnilclose,long,8; + ֹ,memedan,memedan,char,5; + ذ,recprice,recprice,long,8; + (1:ڽ2:ڽ),gubun,gubun,char,1; + DZ׷,bu12gubun,bu12gubun,char,2; + μȸ翩(Y/N),spac_gubun,spac_gubun,char,1; + filler(̻),filler,filler,char,32; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8436_2.res b/sample_python/Res/t8436_2.res new file mode 100644 index 0000000..dcc59e9 --- /dev/null +++ b/sample_python/Res/t8436_2.res @@ -0,0 +1,26 @@ +BEGIN_FUNCTION_MAP + .Func,ֽȸ API(t8436),t8436,block,headtype=A; + BEGIN_DATA_MAP + t8436InBlock,⺻Է,input; + begin + (0:ü1:ڽ2:ڽ),gubun,gubun,char,1; + end + t8436OutBlock,1,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + ETF(1:ETF2:ETN),etfgubun,etfgubun,char,1; + Ѱ,uplmtprice,uplmtprice,long,8; + Ѱ,dnlmtprice,dnlmtprice,long,8; + ϰ,jnilclose,jnilclose,long,8; + ֹ,memedan,memedan,char,5; + ذ,recprice,recprice,long,8; + (1:ڽ2:ڽ),gubun,gubun,char,1; + DZ׷,bu12gubun,bu12gubun,char,2; + μȸ翩(Y/N),spac_gubun,spac_gubun,char,1; + filler(̻),filler,filler,char,32; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8437.res b/sample_python/Res/t8437.res new file mode 100644 index 0000000..c25a3f1 --- /dev/null +++ b/sample_python/Res/t8437.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP + .Func,CME/EUREXȸ(API)(t8437),t8437,block,headtype=A; + BEGIN_DATA_MAP + t8437InBlock,⺻Է,input; + begin + (NF/NC/NM/NO),gubun,gubun,char,2; + end + t8437OutBlock,߰帶,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + ǥڵ,expcode,expcode,char,12; + ŷ¼,tradeunit,tradeunit,float,21.8; + ATM(1:ATM2:ITM3:OTM),atmgb,atmgb,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t8437_2.res b/sample_python/Res/t8437_2.res new file mode 100644 index 0000000..c25a3f1 --- /dev/null +++ b/sample_python/Res/t8437_2.res @@ -0,0 +1,18 @@ +BEGIN_FUNCTION_MAP + .Func,CME/EUREXȸ(API)(t8437),t8437,block,headtype=A; + BEGIN_DATA_MAP + t8437InBlock,⺻Է,input; + begin + (NF/NC/NM/NO),gubun,gubun,char,2; + end + t8437OutBlock,߰帶,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + ǥڵ,expcode,expcode,char,12; + ŷ¼,tradeunit,tradeunit,float,21.8; + ATM(1:ATM2:ITM3:OTM),atmgb,atmgb,char,1; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t9905.res b/sample_python/Res/t9905.res new file mode 100644 index 0000000..808f928 --- /dev/null +++ b/sample_python/Res/t9905.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,ڻ긮Ʈȸ(t9905),t9905,block,headtype=A; + BEGIN_DATA_MAP + t9905InBlock,⺻Է,input; + begin + DUMMY,dummy,dummy,char,1; + end + t9905OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ǥڵ,expcode,expcode,char,12; + ,hname,hname,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t9905_2.res b/sample_python/Res/t9905_2.res new file mode 100644 index 0000000..808f928 --- /dev/null +++ b/sample_python/Res/t9905_2.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,ڻ긮Ʈȸ(t9905),t9905,block,headtype=A; + BEGIN_DATA_MAP + t9905InBlock,⺻Է,input; + begin + DUMMY,dummy,dummy,char,1; + end + t9905OutBlock1,1,output,occurs; + begin + ڵ,shcode,shcode,char,6; + ǥڵ,expcode,expcode,char,12; + ,hname,hname,char,20; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t9907.res b/sample_python/Res/t9907.res new file mode 100644 index 0000000..a65e295 --- /dev/null +++ b/sample_python/Res/t9907.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ(t9907),t9907,block,headtype=A; + BEGIN_DATA_MAP + t9907InBlock,⺻Է,input; + begin + DUMMY,dummy,dummy,char,1; + end + t9907OutBlock1,1,output,occurs; + begin + ,lastym,lastym,char,6; + ,lastnm,lastnm,char,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t9907_2.res b/sample_python/Res/t9907_2.res new file mode 100644 index 0000000..a65e295 --- /dev/null +++ b/sample_python/Res/t9907_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ȸ(t9907),t9907,block,headtype=A; + BEGIN_DATA_MAP + t9907InBlock,⺻Է,input; + begin + DUMMY,dummy,dummy,char,1; + end + t9907OutBlock1,1,output,occurs; + begin + ,lastym,lastym,char,6; + ,lastnm,lastnm,char,10; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t9942.res b/sample_python/Res/t9942.res new file mode 100644 index 0000000..30c4e09 --- /dev/null +++ b/sample_python/Res/t9942.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ELWȸAPI(t9942),t9942,block,headtype=A; + BEGIN_DATA_MAP + t9942InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t9942OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/t9942_2.res b/sample_python/Res/t9942_2.res new file mode 100644 index 0000000..30c4e09 --- /dev/null +++ b/sample_python/Res/t9942_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ELWȸAPI(t9942),t9942,block,headtype=A; + BEGIN_DATA_MAP + t9942InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t9942OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/t9943.res b/sample_python/Res/t9943.res new file mode 100644 index 0000000..c9cdd0b --- /dev/null +++ b/sample_python/Res/t9943.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,ȸAPI(t9943),t9943,block,headtype=A; + BEGIN_DATA_MAP + t9943InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + end + t9943OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t9943_2.res b/sample_python/Res/t9943_2.res new file mode 100644 index 0000000..c9cdd0b --- /dev/null +++ b/sample_python/Res/t9943_2.res @@ -0,0 +1,16 @@ +BEGIN_FUNCTION_MAP + .Func,ȸAPI(t9943),t9943,block,headtype=A; + BEGIN_DATA_MAP + t9943InBlock,⺻Է,input; + begin + ,gubun,gubun,char,1; + end + t9943OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP + diff --git a/sample_python/Res/t9944.res b/sample_python/Res/t9944.res new file mode 100644 index 0000000..30e2762 --- /dev/null +++ b/sample_python/Res/t9944.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǸȸAPI(t9944),t9944,block,headtype=A; + BEGIN_DATA_MAP + t9944InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t9944OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/t9944_2.res b/sample_python/Res/t9944_2.res new file mode 100644 index 0000000..30e2762 --- /dev/null +++ b/sample_python/Res/t9944_2.res @@ -0,0 +1,15 @@ +BEGIN_FUNCTION_MAP + .Func,ɼǸȸAPI(t9944),t9944,block,headtype=A; + BEGIN_DATA_MAP + t9944InBlock,⺻Է,input; + begin + Dummy,dummy,dummy,char,1; + end + t9944OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,20; + ڵ,shcode,shcode,char,8; + Ȯڵ,expcode,expcode,char,12; + end + END_DATA_MAP +END_FUNCTION_MAP diff --git a/sample_python/Res/t9945.res b/sample_python/Res/t9945.res new file mode 100644 index 0000000..1cda5f6 --- /dev/null +++ b/sample_python/Res/t9945.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĸȸAPI-40bytes(t9945),t9945,block,headtype=A; + BEGIN_DATA_MAP + t9945InBlock,⺻Է,input; + begin + (KSP:1KSD:2),gubun,gubun,char,1; + end + t9945OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + ETF,etfchk,etfchk,char,1; + filler,filler,filler,char,5; + end + END_DATA_MAP +END_FUNCTION_MAP + +t9945 \ No newline at end of file diff --git a/sample_python/Res/t9945_2.res b/sample_python/Res/t9945_2.res new file mode 100644 index 0000000..1cda5f6 --- /dev/null +++ b/sample_python/Res/t9945_2.res @@ -0,0 +1,19 @@ +BEGIN_FUNCTION_MAP + .Func,ֽĸȸAPI-40bytes(t9945),t9945,block,headtype=A; + BEGIN_DATA_MAP + t9945InBlock,⺻Է,input; + begin + (KSP:1KSD:2),gubun,gubun,char,1; + end + t9945OutBlock,ֽ񸶽,output,occurs; + begin + ,hname,hname,char,40; + ڵ,shcode,shcode,char,6; + Ȯڵ,expcode,expcode,char,12; + ETF,etfchk,etfchk,char,1; + filler,filler,filler,char,5; + end + END_DATA_MAP +END_FUNCTION_MAP + +t9945 \ No newline at end of file diff --git a/sample_python/balance_window.py b/sample_python/balance_window.py new file mode 100644 index 0000000..5373350 --- /dev/null +++ b/sample_python/balance_window.py @@ -0,0 +1,135 @@ +from PySide2 import QtCore, QtWidgets +from PySide2.QtUiTools import QUiLoader +from PySide2.QtWidgets import QTableWidgetItem +import sys +# from .ui.ui_test import Ui_Test +# from ui.ui_test import Ui_Test +# from ui.ui_second_window import Ui_Second_Window +from tr.tr_0424 import Tr_0424 +# from tr.tr_pending import Tr_pending +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 + +# app=QApplication(sys.argv) + +loader=QUiLoader() + +class Balance_window(QtCore.QObject): + + # class Worker(QtCore.QThread): + # # def __init__(self,tr_0424): + # # self.tr_0424=tr_0424 + + # def call(self,tr_0424): + # self.tr_0424=tr_0424 + + # def run(self): + # while True: + # #print("안녕하세요") + # self.sleep(2) + # self.tr_0424.get_account(Balance_window) + + + + def __init__(self,tr_pending): + super().__init__() + self.ui=loader.load('./ui/balance-window.ui',None) + + if self.ui is None: + return + + self.ui.setWindowTitle("잔고 조회") + self.tr_0424=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_0424)#계좌티알 + self.tr_pending=tr_pending#미체결 + + + # self.ui.balance_table.setItem(0,1,QTableWidgetItem(str(1))) + # self.ui.balance_table.setItem(0,0,QTableWidgetItem(str(2))) + # self.login_label.clicked.connect(self.do_action) + self.ui.balance_stocks_table.setColumnWidth(7,130) + self.ui.waiting_stocks_table.setColumnWidth(7,130) + self.ui.balance_table.hide() + self.tr_0424.get_account() + # self.tr_0424.init_draw_balance_table(self) + # self.tr_0424.callback_from_balance_window(self.insert_row_on_stocks_table,self.set_value_on_stocks_table) + + self.ui.pending_reselect.clicked.connect(self.pending_reselect) + self.ui.pending_reselect.hide() + # self.ui.testBtn2.clicked.connect(self.testBtn2) + + def pending_reselect(self): + # self.ui.waiting_stocks_table.removeRow(1) + # self.remove_row_on_pending_table(2) + self.tr_pending.get_pending(self) + + + # def testBtn2(self): + # print('testBtn testBtntestBtn testBtn') + # # self.ui.waiting_stocks_table.removeRow(1) + # self.remove_row_on_pending_table(0) + # # self.tr_0424.get_account() + + def clear_table(self): + self.ui.balance_table.clear() + + def remove_row_on_stocks_table(self,index): + self.ui.balance_stocks_table.removeRow(index) + + + def remove_row_on_pending_table(self,index): + # print('왜 안 처지우세요? ', index) + self.ui.waiting_stocks_table.removeRow(index) + + + def show(self): + self.ui.show() + # app.exec_() + + + + def do_action(self): + #print('doing: ',self.name_line_edit.text()) + #print('doing2: ',self.job_line_edit.text()) + self.login_label.setText('되냐?') + + def set_value_on_table(self,column_num,value): + # #print('set_value_on_table: ',column_num) + # #print('set_value_on_table2: ',value) + self.ui.balance_table.setItem(0,column_num,QTableWidgetItem(str(value))) + + + def insert_row_on_stocks_table(self): + #print('call_back_test@@@@@@@@@@#######') + + rowPosition=self.ui.balance_stocks_table.rowCount() + self.ui.balance_stocks_table.insertRow(rowPosition) + + def insert_row_on_pending_table(self): + rowPosition=self.ui.waiting_stocks_table.rowCount() + self.ui.waiting_stocks_table.insertRow(rowPosition) + + + def set_value_on_pending_table(self,column_num,row_num,value): + # #print('set_value_on_table: ',column_num) + # #print('set_value_on_table2: ',value) + + item =QTableWidgetItem(str(value)) + item.setTextAlignment(int(QtCore.Qt.AlignCenter)) + + self.ui.waiting_stocks_table.setItem(row_num,column_num,item) + + + def call_back_test(self): + #print('call_back_test@@@@@@@@@@#######') + pass + + + def set_value_on_stocks_table(self,column_num,row_num,value): + # #print('set_value_on_table: ',column_num) + # #print('set_value_on_table2: ',value) + + item =QTableWidgetItem(str(value)) + item.setTextAlignment(int(QtCore.Qt.AlignCenter)) + + self.ui.balance_stocks_table.setItem(row_num,column_num,item) + diff --git a/sample_python/button_holder.py b/sample_python/button_holder.py new file mode 100644 index 0000000..1dfb1b7 --- /dev/null +++ b/sample_python/button_holder.py @@ -0,0 +1,15 @@ +# from PySide2.QtWidgets import QPushButton,QMainWindow + +# class ButtonHolder(QMainWindow): +# def __init__(self): +# super().__init__() +# self.setWindowTitle('Xing Api Client By dev') +# btn=QPushButton() +# btn.setText('hit me') +# btn.clicked.connect(self.on_click) +# btn.setCheckable(True) +# self.setCentralWidget(btn) + +# def on_click(self,data): +# #print('btn is clicked: ',data) +# pass \ No newline at end of file diff --git a/sample_python/main.py b/sample_python/main.py new file mode 100644 index 0000000..908fc26 --- /dev/null +++ b/sample_python/main.py @@ -0,0 +1,303 @@ +from PySide2.QtWidgets import QApplication,QMainWindow +from PySide2.QtUiTools import QUiLoader +from PySide2.QtCore import QObject, QEvent, QTimer, QCoreApplication + +import sys +# from button_holder import ButtonHolder +# from slider import SliderHolder +# from rockwidget import RockWidget +from main_window import Main_window +from balance_window import Balance_window +# from test import Test +# from ui.ui_test import Ui_Test +# from second_window import Second_Window +import time +from threading import Thread + +from tr.tr_master import Tr_master +# from tr.tr_sc0 import Tr_sc0 +# from tr.tr_sc1 import Tr_sc1 +from tr.tr_0424 import Tr_0424 +from tr.tr_pending import Tr_pending + +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 + +from apscheduler.schedulers.asyncio import AsyncIOScheduler + +from apscheduler.schedulers.qt import QtScheduler + +from dotenv import load_dotenv +import os + +# load .env +load_dotenv() + +loader=QUiLoader() + +app=QApplication(sys.argv) + +the_path=os.path.dirname(__file__) +os.environ['ROOT_FILE_PATH'] = the_path + + + +#meta class conflict 나서 서브클래스로 하면 안 됨 미리 선언하고 생성자로 넘겨야됨 +# class XReal_S3_: +# def __init__(self): +# super().__init__() +# self.count = 0 + +# def OnReceiveRealData(self, tr_code): # event handler +# """ +# 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler +# """ +# self.count += 1 +# shcode = self.GetFieldData("OutBlock", "shcode") +# # price = self.GetFieldData("OutBlock", "price") +# # chetime = self.GetFieldData("OutBlock", "chetime") + +# if shcode is + + +# #print('shcode: ',shcode) +# #print('price: ',price) +# #print('chetime: ',chetime) +# # window.set_the_stock_code(price) + +# def start(self,stock_code): +# """ +# 이베스트 서버에 실시간 data 요청함. +# """ +# self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\S3_.res" # RES 파일 등록 +# self.SetFieldData("InBlock", "shcode", stock_code) +# self.AdviseRealData() # 실시간데이터 요청 + +# def add_item(self, stockcode): +# # 실시간데이터 요청 종목 추가 +# self.SetFieldData("InBlock", "shcode", stockcode) +# self.AdviseRealData() + +# def remove_item(self, stockcode): +# # stockcode 종목만 실시간데이터 요청 취소 +# self.UnadviseRealDataWithKey(stockcode) + +# def end(self): +# self.UnadviseRealData() # 실시간데이터 요청 모두 취소 + + +#meta class conflict 나서 서브클래스로 하면 안 됨 미리 선언하고 생성자로 넘겨야됨 끝 + +SHUT_DOWN_FLAG=False + +# def set_shut_down_flag(): +# SHUT_DOWN_FLAG=True +# #print('SHUT_DOWN_FLAG: ',SHUT_DOWN_FLAG) + + + +tr_pending=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_pending)#미체결티알 +tr_0424=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_0424)#계좌티알 + + +balance_window=Balance_window(tr_pending) +#이베스트 로그인 +STAND_BY = 0 +RECEIVED = 1 + +class XASessionEvents: + login_state = STAND_BY + + login_cnt=0 + + def OnLogin(self, code, msg): + XASessionEvents.login_state = RECEIVED + # time.sleep(5) + # print('로그인 결과: ',msg) + # print('로그인 결과 code: ',code) + if code=='0000': + query.single_request(tr_0424,balance_window,tr_pending) + res=self.account_info() + if res is not None: + window.show_buttons() + window.set_status_label('로그인 성공') + + # tr_0424.init_get_account() + else: + self.login_cnt+=1 + if self.login_cnt <5: + window.set_status_label(f'로그인 실패. 남은 회수 {self.login_cnt} / 5') + else: + window.set_status_label(f'로그인 실패. 재시도 회수를 초과했습니다') + + if self.login_cnt >5: + pass + + + + + # window.set_the_text(msg) + def OnDisconnect(self, code, msg): + pass + + def account_info(self): + """ + 계좌 정보 조회 + """ + + account_no = self.GetAccountListCount() + + if account_no is not None: + + # print("계좌 갯수 = {0}".format(account_no)) + + # for i in range(account_no): + # account = self.GetAccountList(i) + # #print("계좌번호 = {0}".format(account)) + + + self.account = self.GetAccountList(0) + os.environ['ACCOUNT'] = self.GetAccountList(0) + return 1 + + else: + return None + +class XAQueryEvents: + query_state = STAND_BY + def OnReceiveData(self, code): + XAQueryEvents.query_state = RECEIVED + def OnReceiveMessage(self, error, nMessageCode, szMessage): + #print(szMessage) + pass + +session=win32com.client.DispatchWithEvents("XA_Session.XASession",XASessionEvents) + +url=os.environ.get('URL') +port=os.environ.get('PORT') +server_type=os.environ.get('SERVER_TYPE') + +id=os.environ.get('ID') +pw=os.environ.get('PW') +cert=os.environ.get('CERT') +account = os.environ.get('ACCOUNT') + + +window=Main_window(session,balance_window) +window.show() + + + +result=session.ConnectServer(url,port) + +#이베스트 로그인 끝 + + +#마스터 테스트 + +query=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_master) + + + +# while Tr_master.query_state == False: +# pythoncom.PumpWaitingMessages() + + + +#마스터 테스트 끝 + + +#데몬쓰레드 테스트 + + + +#데몬쓰레드 테스트 끝 + + + + +#리얼 테스트 + +# class XReal_S3_: +# def __init__(self): +# super().__init__() +# self.count = 0 + +# def OnReceiveRealData(self, tr_code): # event handler +# """ +# 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler +# """ +# self.count += 1 +# shcode = self.GetFieldData("OutBlock", "shcode") +# price = self.GetFieldData("OutBlock", "price") +# chetime = self.GetFieldData("OutBlock", "chetime") +# #print('shcode: ',shcode) +# #print('price: ',price) +# #print('chetime: ',chetime) +# window.set_the_stock_code(price) + +# def start(self,stock_code): +# """ +# 이베스트 서버에 실시간 data 요청함. +# """ +# self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\S3_.res" # RES 파일 등록 +# self.SetFieldData("InBlock", "shcode", stock_code) +# self.AdviseRealData() # 실시간데이터 요청 + +# def add_item(self, stockcode): +# # 실시간데이터 요청 종목 추가 +# self.SetFieldData("InBlock", "shcode", stockcode) +# self.AdviseRealData() + +# def remove_item(self, stockcode): +# # stockcode 종목만 실시간데이터 요청 취소 +# self.UnadviseRealDataWithKey(stockcode) + +# def end(self): +# self.UnadviseRealData() # 실시간데이터 요청 모두 취소 + +# xreal = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", XReal_S3_) + +# xreal.start('005930') + +# # for i in range(100): +# # #print('try: {}'.format(i)) +# # pythoncom.PumpWaitingMessages() +# # await asyncio.sleep(0) + +# while True: +# pythoncom.PumpWaitingMessages() +# # if xreal.count == 5: +# # xreal.add_item("003490") # 대한항공 추가 + +# # if xreal.count == 20: +# # xreal.remove_item("005930") +# #000660 + +# # if xreal.count == 30: +# # xreal.end() +# # time.sleep(10) +# # #print("---- end -----") +# # break + +# # await asyncio.sleep(0) + + +# @app.on_event('startup') +# def init_data(): + +# async_scheduler = AsyncIOScheduler() +# async_scheduler.add_job(spider_batch.ping_to_db, 'cron', second='*/15',args=[app]) +# async_scheduler.start() + + +# def yeah(): +# #print('YEAH!!!!') + +# scheduler = QtScheduler() +# scheduler.add_job(yeah, 'interval', seconds=5) +# scheduler.start() + + +app.exec_() + diff --git a/sample_python/main.spec b/sample_python/main.spec new file mode 100644 index 0000000..594e298 --- /dev/null +++ b/sample_python/main.spec @@ -0,0 +1,44 @@ +# -*- mode: python ; coding: utf-8 -*- + + +block_cipher = None + + +a = Analysis( + ['main.py'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher, + noarchive=False, +) +pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.zipfiles, + a.datas, + [], + name='main', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=False, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) diff --git a/sample_python/main_window.py b/sample_python/main_window.py new file mode 100644 index 0000000..8ef7c4f --- /dev/null +++ b/sample_python/main_window.py @@ -0,0 +1,272 @@ +from PySide2 import QtCore, QtWidgets +import PySide2.QtGui +from PySide2.QtUiTools import QUiLoader +from PySide2.QtWidgets import QWidget, QDialog, QMainWindow +from PySide2.QtCore import Qt, QEvent,QObject,SIGNAL,QFile +# from ui.ui_test import Ui_Test +# from ui.ui_second_window import Ui_Second_Window +# from ui.ui_third_window import Ui_Third_Window +from tr.tr_0424 import Tr_0424 + +# from balance_window import Balance_window +from order_window import Order_window +from search_window import Search_window + +from tr.tr_master import Tr_master +# from tr.s3_real import XReal_S3_ + +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 + +from dotenv import load_dotenv +import os + +# load .env +load_dotenv() + + +loader=QUiLoader() + + + +#class Test(QWidget,Ui_Test) +# QtCore.QObject +class Main_window(QMainWindow): + + # def __new__(self): + # if not hasattr(self,'instance'): + # #print('싱글톤 만듬 MAIN WINDOW') + # self.instance=super(Main_window,self).__new__(self) + # else: + # #print('이미 싱글톤 있음 MAIN WINDOW') + # return self.instance + + def __init__(self,session,balance_window): + super().__init__() + # self.setupUi(self) + self.session=session + self.balance_window=balance_window + + self.ui=loader.load('./ui/main-window.ui',None) + + if self.ui is None: + return + + + + self.ui.setWindowTitle("Xing Api Client") + + + + # self.go_to_2.clicked.connect(lambda:self.set_the_stock_code('second')) + self.ui.to_balance_page.clicked.connect(lambda:self.open_new_window('balance')) + self.ui.to_order_page.clicked.connect(lambda:self.open_new_window('order')) + self.ui.to_search_page.clicked.connect(lambda:self.open_new_window('search')) + + self.ui.to_balance_page.hide() + self.ui.to_order_page.hide() + self.ui.to_search_page.hide() + + + self.ui.login_button.clicked.connect(lambda:self.shoot_login()) + self.ui.login_button.show() + + self.ui.closeEvent=self.closeEvent + + self.ui.status_label.setStyleSheet("color: red;") + + self.account=''#계좌번호 + + + # self.go_to_2.clicked.connect(self.calling_master) + # self.ui.go_to_3.clicked.connect(self.start_s3_real) + # self.ui.summer.clicked.connect(self.call_summer) + # self.login_label.clicked.connect(self.do_action) + # self.ui.stock_code_label.clicked.connect(self.do_action) + + # self.XReal_S3_=XReal_S3_ + # self.tr_0424=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_0424)#계좌티알 + # self.tr_0424.get_account(self) + + + # self.worker = Worker() + # self.worker.start() + + def handle_close(self): + #print('CLOSE!@!@') + pass + + def set_status_label(self, string): + + self.ui.status_label.setText(string) + + def set_session(self,session): + self.session=session + + + # class XASessionEvents: + + # def __init__(self,parent): + # session=win32com.client.DispatchWithEvents("XA_Session.XASession",self) + + # url=os.environ.get('URL') + # port=os.environ.get('PORT') + # cert=os.environ.get('CERT') + + # result=session.ConnectServer(url,port) + # parent.set_session(session) + # self.parent=parent + # #print("result: ",result) + + # def OnLogin(self, code, msg): + # # time.sleep(5) + # #print('로그인 결과@@: ',msg) + # self.parent.possible() + # # query.single_request() + # def OnDisconnect(self, code, msg): + # pass + + + + + + + + def show(self): + self.ui.show() + + def show_buttons(self): + #print('ssap possible') + self.ui.to_balance_page.show() + self.ui.to_order_page.show() + self.ui.to_search_page.show() + + + def shoot_login(self): + #print('@@shoot_login@@') + server_type=os.environ.get('SERVER_TYPE') + + cert=os.environ.get('CERT') + + id=self.ui.login_id_input.text() + pw=self.ui.login_pw_input.text() + + # print('login_cnt: ',self.session.login_cnt) + + if self.session.login_cnt >5: + return + + self.session.Login(id,pw,cert,server_type,0) + os.environ['PW'] = pw + os.environ['ID'] = id + + + # def closeEvent(self, event): + # #print('asdasdas') + # self.set_shut_down_flag() + # return super().closeEvent(event) + + + + def open_new_window(self,type): + + #print('ACCOUNT NO: ',self.session.account) + os.environ['ACCOUNT'] = self.session.account + #print('ACCOUNT NO2: ',os.environ.get('ACCOUNT')) + + if type=="balance": + # self.window=QtWidgets.QMainWindow() + # self.ui=Ui_Second_Window() + # self.ui.setupUi(self.window) + # self.balance_window=self.balance_window + self.balance_window.show() + elif type=='order': + self.order_window=Order_window() + self.order_window.show() + elif type=='search': + self.search_window=Search_window() + self.search_window.showMe() + + + + def get_master(self): + query=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_master) + + master_res=query.single_request() + print('master_res: ',master_res) + + if master_res is not None: + + while Tr_master.query_state == False: + pythoncom.PumpWaitingMessages() + + + # def start_s3_real(self): + # xreal = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", self.XReal_S3_) + + # xreal.start('005930') + # while True: + # pythoncom.PumpWaitingMessages() + + + def do_action(self): + #print('doing: ',self.name_line_edit.text()) + #print('doing2: ',self.job_line_edit.text()) + pass + + def set_the_text(self,the_thing): + self.ui.login_label.setText(the_thing) + + def set_the_stock_code(self,the_thing): + self.ui.stock_code_label.setText(the_thing) + + + +# STAND_BY = 0 +# RECEIVED = 1 + +# class XASessionEvents: +# login_state = STAND_BY + +# # def __init__(self): + + +# # # self.main_window=Main_window() +# # # self.main_window.show() +# # session=win32com.client.DispatchWithEvents("XA_Session.XASession",self) +# # session.init_main_window() + +# # url=os.environ.get('URL') +# # port=os.environ.get('PORT') +# # cert=os.environ.get('CERT') + +# # result=session.ConnectServer(url,port) +# # #print("result: ",result) + + + +# def init_main_window(self): +# self.main_window=Main_window() +# self.main_window.show() + + + +# def OnLogin(self, code, msg): +# XASessionEvents.login_state = RECEIVED +# # time.sleep(5) +# #print('로그인 결과@@: ',msg) +# self.main_window.possible() +# # query.single_request() +# def OnDisconnect(self, code, msg): +# pass + + +# session=win32com.client.DispatchWithEvents("XA_Session.XASession",XASessionEvents) +# session.init_main_window() + +# url=os.environ.get('URL') +# port=os.environ.get('PORT') +# cert=os.environ.get('CERT') + +# result=session.ConnectServer(url,port) +# #print("result: ",result) \ No newline at end of file diff --git a/sample_python/order_window.py b/sample_python/order_window.py new file mode 100644 index 0000000..a672d72 --- /dev/null +++ b/sample_python/order_window.py @@ -0,0 +1,351 @@ +from PySide2 import QtCore, QtWidgets +from PySide2.QtUiTools import QUiLoader +from PySide2.QtWidgets import QApplication +import sys +# from .ui.ui_test import Ui_Test +# from ui.ui_test import Ui_Test +# from ui.ui_second_window import Ui_Second_Window +from tr.tr_master import Tr_master +from tr.tr_order import Tr_order +from tr.tr_redo_order import Tr_redo_order +from tr.tr_cancel_order import Tr_cancel_order +from tr.tr_0424 import Tr_0424 +from tr.tr_sc0 import Tr_sc0 +# from tr.tr_sc1 import Tr_sc1 +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 +tr_master=Tr_master() +tr_0424=Tr_0424() + +# app=QApplication(sys.argv) + +loader=QUiLoader() + +class Order_window(QtCore.QObject): + def __init__(self): + super().__init__() + self.ui=loader.load('./ui/order-window.ui',None) + + + if self.ui is None: + return + + self.ui.setWindowTitle("주문") + self.orderType='normal' + self.orderStockCode='' + self.orderStyle='ask' + self.is_all_qty=True + + self.query_order=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_order) + self.query_order.init_set_text(self.set_status_label) + self.query_order_redo=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_redo_order) + self.query_order_cancel=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_cancel_order) + + + self.ui.order_tab_widget.currentChanged.connect(self.orderTabChanged) + + self.ui.stock_input.textChanged.connect(lambda:self.onChangeStockInput(1)) + self.ui.stock_input_3.textChanged.connect(lambda:self.onChangeStockInput(2)) + + self.ui.stock_input_4.textChanged.connect(lambda:self.onChangeStockInput(3)) + self.ui.stock_input_5.textChanged.connect(lambda:self.onChangeStockInput(4)) + self.ui.normal_radio.setChecked(True) + self.ui.normal_radio_2.setChecked(True) + self.ui.all_qty_radio.setChecked(True) + self.ui.all_qty_radio.hide() + self.ui.some_qty_radio.hide() + self.ui.all_qty_radio_2.hide() + self.ui.some_qty_radio_2.hide() + self.ui.normal_radio.clicked.connect(self.radioSelected) + self.ui.normal_radio_2.clicked.connect(self.radioSelected_2) + self.ui.market_radio.clicked.connect(self.radioSelected) + self.ui.market_radio_2.clicked.connect(self.radioSelected_2) + self.ui.order_btn.clicked.connect(self.shootOrder) + self.ui.order_btn_2.clicked.connect(self.shootOrder) + self.ui.order_btn_3.clicked.connect(self.shootOrder) + self.ui.order_btn_4.clicked.connect(self.shootOrder) + + + self.ui.all_qty_radio.clicked.connect(self.qty_radioSelected) + self.ui.some_qty_radio.clicked.connect(self.qty_radioSelected) + + + self.ui.status_label.setText('') + self.ui.status_label.setStyleSheet("color: red;") + + + + # #print('the_balance: ',tr_0424.the_balance) + # self.submit_btn.clicked.connect(self.do_action) + # self.login_label.clicked.connect(self.do_action) + + + def set_status_label(self, string): + + self.ui.status_label.setText(string) + + def orderTabChanged(self,tabIndex): + #print('tabIndex: ',tabIndex) + if tabIndex==0: + self.orderStyle='ask' + elif tabIndex==1: + self.orderStyle='bid' + elif tabIndex==2: + self.orderStyle='redo' + elif tabIndex==3: + self.orderStyle='cancel' + + + self.ui.normal_radio.setChecked(True) + self.ui.normal_radio_2.setChecked(True) + self.orderType='normal' + res_1=self.onChangeStockInput(1) + res_2=self.onChangeStockInput(2) + res_3=self.onChangeStockInput(3) + res_4=self.onChangeStockInput(4) + + + if (res_1 is not None and + res_2 is not None and + res_3 is not None and + res_4 is not None): + + self.ui.stock_input.setText('') + self.ui.stock_input_3.setText('') + self.ui.stock_input_4.setText('') + self.ui.stock_input_5.setText('') + + + + def onChangeStockInput(self,num): + + theInput=self.ui.stock_input.text() + + if num==1: + theInput=self.ui.stock_input.text() + elif num==2: + theInput=self.ui.stock_input_3.text() + elif num==3: + theInput=self.ui.stock_input_4.text() + elif num==4: + theInput=self.ui.stock_input_5.text() + + + theDict=tr_master.master_dict.get(theInput,None) + #print('theDict: ',theDict) + + if theDict != None: + stockName=theDict['hname'] + self.ui.stock_name_label.setText(stockName) + self.ui.stock_name_label_2.setText(stockName) + self.ui.stock_name_label_3.setText(stockName) + self.ui.stock_name_label_4.setText(stockName) + self.orderStockCode=theDict['shcode'] + else: + self.ui.stock_name_label.setText('') + self.ui.stock_name_label_2.setText('') + self.ui.stock_name_label_3.setText('') + self.ui.stock_name_label_4.setText('') + + return 1 + + + + def onChangeStockInput_3(self): + theInput=self.ui.stock_input_3.text() + + theDict=tr_master.master_dict.get(theInput,None) + #print('theDict: ',theDict) + + if theDict != None: + stockName=theDict['hname'] + self.ui.stock_name_label.setText(stockName) + self.orderStockCode=theDict['shcode'] + else: + self.ui.stock_name_label.setText('') + + + + + def onChangeStockInput_4(self): + theInput=self.ui.stock_input_4.text() + + theDict=tr_master.master_dict.get(theInput,None) + #print('theDict: ',theDict) + + if theDict != None: + stockName=theDict['hname'] + self.ui.stock_name_label.setText(stockName) + self.orderStockCode=theDict['shcode'] + else: + self.ui.stock_name_label.setText('') + + + + + def onChangeStockInput_5(self): + theInput=self.ui.stock_input_5.text() + + theDict=tr_master.master_dict.get(theInput,None) + #print('theDict: ',theDict) + + if theDict != None: + stockName=theDict['hname'] + self.ui.stock_name_label.setText(stockName) + self.orderStockCode=theDict['shcode'] + else: + self.ui.stock_name_label.setText('') + + + def onChangeOrderQtInput(self): + theInput=self.ui.order_qt_input.text() + + + + def onChangeOrderWonInput(self): + theInput=self.ui.order_won_input.text() + + + def qty_radioSelected(self): + + if self.ui.all_qty_radio.isChecked()==True: + self.is_all_qty=True + elif self.ui.some_qty_radio.isChecked()==True: + self.is_all_qty=False + + #print('is_all_qty: ',self.is_all_qty) + + + def radioSelected(self): + #print('radioSelected: ',self.ui.normal_radio.isChecked()) + #print('radioSelected2: ',self.ui.market_radio.isChecked()) + + if self.ui.normal_radio.isChecked()==True: + self.orderType='normal' + elif self.ui.market_radio.isChecked()==True: + self.orderType='market' + + #print('orderType: ',self.orderType) + + + def radioSelected_2(self): + #print('radioSelected: ',self.ui.normal_radio.isChecked()) + #print('radioSelected2: ',self.ui.market_radio.isChecked()) + + if self.ui.normal_radio_2.isChecked()==True: + self.orderType='normal' + elif self.ui.market_radio_2.isChecked()==True: + self.orderType='market' + + #print('orderType: ',self.orderType) + + + def show(self): + self.ui.show() + # app.exec_() + + def shootOrder(self): + #print('orderStyle: ',self.orderStyle) + + if self.orderStyle=='ask': + + #print('stockInput: ',self.ui.stock_input.text()) + #print('orderType: ',self.orderType) + #print('orderQtInput: ',self.ui.order_qt_input.text()) + #print('orderWonInput: ',self.ui.order_won_input.text()) + #print('orderStockCode: ',self.orderStockCode) + #print('orderStyle: ',self.orderStyle) + + self.query_order.shoot_order( + self.orderStockCode, + self.ui.order_qt_input.text(), + 1, + 2, + self.ui.order_won_input.text(), + self.orderStyle, + self.orderType + ) + + self.ui.status_label.setText('매도 주문 완료') + self.ui.status_label.setStyleSheet("color: blue;") + + + elif self.orderStyle=='bid': + #print('stockInput: ',self.ui.stock_input_3.text()) + #print('orderType: ',self.orderType) + #print('orderQtInput_2: ',self.ui.order_qt_input_2.text()) + #print('orderWonInput_2: ',self.ui.order_won_input_2.text()) + #print('orderStockCode: ',self.orderStockCode) + #print('orderStyle: ',self.orderStyle) + + + self.query_order.shoot_order( + self.orderStockCode, + self.ui.order_qt_input_2.text(), + 1, + 2, + self.ui.order_won_input_2.text(), + self.orderStyle, + self.orderType + ) + self.ui.status_label.setText('매수 주문 완료') + self.ui.status_label.setStyleSheet("color: red;") + + elif self.orderStyle=='redo': + #print('orgNoInput: ',self.ui.org_no_input.text()) + #print('stockInput: ',self.ui.stock_input_4.text()) + #print('orderType: ',self.orderType) + + #print('order_qt_input_3: ',self.ui.order_qt_input_3.text()) + #print('orderWonInput_3: ',self.ui.order_won_input_3.text()) + #print('orderStyle: ',self.orderStyle) + #print('is_all_qty: ',self.is_all_qty) + + self.query_order_redo.shoot_order( + self.orderStockCode, + self.ui.order_qt_input_3.text(), + 1, + 2, + self.ui.order_won_input_3.text(), + self.orderStyle, + self.orderType, + self.ui.org_no_input.text(), + ) + + + self.ui.status_label.setText('정정 주문 완료') + self.ui.status_label.setStyleSheet("color: black;") + + elif self.orderStyle=='cancel': + #print('orgNoInput: ',self.ui.org_no_input_2.text()) + #print('orderType: ',self.orderStyle) + + #print('order_qt_input_4: ',self.ui.order_qt_input_4.text()) + #print('orderStyle: ',self.orderStyle) + + self.query_order_cancel.shoot_order( + self.orderStockCode, + self.ui.order_qt_input_4.text(), + 1, + 2, + 3, + self.orderStyle, + self.orderType, + self.ui.org_no_input_2.text(), + ) + + + self.ui.status_label.setText('취소 주문 완료') + self.ui.status_label.setStyleSheet("color: black;") + + def do_action(self): + #print('doing: ',self.name_line_edit.text()) + #print('doing2: ',self.job_line_edit.text()) + self.login_label.setText('되냐?') + + def set_the_text(self,the_thing): + #print('세팅한다: ',the_thing) + self.login_label.setText(the_thing) + def set_the_stock_code(self,the_thing): + #print('세팅한다2: ',the_thing) + self.stock_code_label.setText(the_thing) diff --git a/sample_python/requirements.txt b/sample_python/requirements.txt new file mode 100644 index 0000000..c17e3ef --- /dev/null +++ b/sample_python/requirements.txt @@ -0,0 +1,49 @@ +altgraph==0.17.3 +anyio==3.6.2 +APScheduler==3.10.1 +boto3==1.26.98 +botocore==1.29.98 +certifi==2022.12.7 +cffi==1.15.1 +charset-normalizer==3.1.0 +click==8.1.3 +colorama==0.4.6 +cryptography==40.0.0 +dnspython==2.3.0 +email-validator==1.3.1 +fastapi==0.95.0 +h11==0.14.0 +idna==3.4 +jmespath==1.0.1 +jwt==1.3.1 +llvmlite==0.39.1 +numba==0.56.4 +numpy==1.23.5 +pefile==2023.2.7 +phonenumbers==8.13.7 +pycparser==2.21 +pydantic==1.10.7 +pyinstaller==5.10.1 +pyinstaller-hooks-contrib==2023.2 +PyMySQL==1.0.2 +pypiwin32==223 +pyshorteners==1.0.1 +PySide2==5.15.2.1 +python-dateutil==2.8.2 +python-dotenv==1.0.0 +python-multipart==0.0.6 +pytz==2023.3 +pytz-deprecation-shim==0.1.0.post0 +pywin32==305 +pywin32-ctypes==0.2.0 +requests==2.28.2 +s3transfer==0.6.0 +shiboken2==5.15.2.1 +six==1.16.0 +sniffio==1.3.0 +starlette==0.26.1 +typing_extensions==4.5.0 +tzdata==2023.3 +tzlocal==4.3 +urllib3==1.26.15 +uvicorn==0.21.1 diff --git a/sample_python/rockwidget.py b/sample_python/rockwidget.py new file mode 100644 index 0000000..f74994f --- /dev/null +++ b/sample_python/rockwidget.py @@ -0,0 +1,22 @@ +# from PySide2.QtWidgets import QWidget,QPushButton,QHBoxLayout,QVBoxLayout + +# class RockWidget(QWidget): +# def __init__(self): +# super().__init__() +# btn=QPushButton() +# btn.setText('hit me') + + +# btn2=QPushButton('hit me too') +# btn3=QPushButton('hit me too3') + + +# btn_layout=QVBoxLayout() +# btn_layout2=QHBoxLayout() +# btn_layout.addWidget(btn) +# btn_layout.addWidget(btn2) + + +# # btn_layout2.addLayout(btn_layout) + +# self.setLayout( btn_layout) diff --git a/sample_python/search_window.py b/sample_python/search_window.py new file mode 100644 index 0000000..7375d6a --- /dev/null +++ b/sample_python/search_window.py @@ -0,0 +1,130 @@ +from PySide2 import QtCore, QtWidgets +from PySide2.QtUiTools import QUiLoader +# from PySide2.QtWidgets import QTableWidgetItem, QFileDialog +from PySide2.QtWidgets import * +from PySide2.QtWidgets import QDialog +from PySide2.QtCore import QEvent, QObject, SIGNAL,QFile +from PySide2.QtWidgets import (QApplication, QWidget, QMessageBox) + +import sys +# from .ui.ui_test import Ui_Test +# from ui.ui_test import Ui_Test +# from ui.ui_second_window import Ui_Second_Window +from tr.tr_0424 import Tr_0424 +from tr.tr_1857 import Tr_1857 +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 +import os +from ui.ui_search_window import Ui_Form + +# app=QApplication(sys.argv) + +class MyEventFilter(QObject): + def eventFilter(self, watched, event): + if event.type() == QEvent.Close: + #print("Event filter: Window is being closed.") + # Add your custom logic here if needed + pass + return super().eventFilter(watched, event) + +loader=QUiLoader() +#QWidget +class Search_window(QWidget,Ui_Form): + def __init__(self): + super().__init__() + # self=loader.load('./ui/search-window.ui',None) + self.setupUi(self) + + + + + # loader = QUiLoader() + # ui_file = QFile('./ui/search-window.ui') + # ui_file.open(QFile.ReadOnly) + # self = loader.load(ui_file) + # ui_file.close() + + # event_filter = MyEventFilter() + # self.installEventFilter(event_filter) + + + + #print('자기소개 SEARCH_WINDOW: ',dir(self)) + # uic.loadUi('./ui/search-window.ui', self) + self.setWindowTitle("종목 검색") + self.tr_1857=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_1857) + self.tr_1857.init_callbacks(self.set_value_on_table,self.insert_row_on_stocks_table) + + + # self.balance_table.setItem(0,1,QTableWidgetItem(str(1))) + # self.balance_stocks_table.setColumnWidth(7,130) + # self.balance_table.setItem(0,0,QTableWidgetItem(str(2))) + self.file_select_button.clicked.connect(self.selectFile) + # self.end_btn.clicked.connect(self.handle_close_event) + # self.destroyed.connect(self.handle_close_event) + + self.closeEvent=self.handle_close_event + # self.installEventFilter(self) + #print('init search window') + + # def __init__(self, parent=None): + # super().__init__(parent) + + # # Load the UI file + # loader = QUiLoader() + # ui_file = QFile('./ui/search-window.ui') # Replace with your UI file path + # ui_file.open(QFile.ReadOnly) + # self = loader.load(ui_file) + # ui_file.close() + + # # Set up the UI and connections + # self.setCentralWidget(self) + # self.setWindowTitle("Search Window") + + # # Connect the close event to a custom handler + # self.closeEvent = self.handle_close_event + + def closeEvent(self, event) -> None: + #print('a') + self.tr_1857.manually_stop() + return super().closeEvent(event) + + def handle_close_event(self, event): + # Perform desired action when the window is closed + self.tr_1857.manually_stop() + #print("Search window closed!") + self.close() + # super().closeEvent(event) + + def showMe(self): + self.show() + # app.exec_() + + # def closeEvent(self, event): + # #print('IM CLOSING!!!@!') + # super().closeEvent(event) + + def selectFile(self): + the_path=os.environ.get('ROOT_FILE_PATH')+"\\ACF" + fname = QFileDialog.getOpenFileName( + parent=self, + caption='ACF 파일 선택', + dir=the_path) + + #print('the_acf: ',fname[0]) + self.tr_1857.go_search(fname[0]) + + + def set_value_on_table(self,column_num,row_num,value): + # #print('set_value_on_table: ',column_num) + # #print('set_value_on_table2: ',value) + self.search_stocks_table.setItem(row_num,column_num,QTableWidgetItem(str(value))) + + + def insert_row_on_stocks_table(self): + rowPosition=self.search_stocks_table.rowCount() + # #print('테이블 개수: ',rowPosition) + self.search_stocks_table.insertRow(rowPosition) + return rowPosition + + diff --git a/sample_python/second_window.py b/sample_python/second_window.py new file mode 100644 index 0000000..fc9f8f7 --- /dev/null +++ b/sample_python/second_window.py @@ -0,0 +1,31 @@ +# from PySide2 import QtCore, QtWidgets +# from PySide2.QtUiTools import QUiLoader +# from PySide2.QtWidgets import QWidget +# # from .ui.ui_test import Ui_Test +# # from ui.ui_test import Ui_Test +# from ui.ui_second_window import Ui_Second_Window + + + +# loader=QUiLoader() + +# class Second_Window(QWidget,Ui_Second_Window): +# def __init__(self): +# super().__init__() +# self.setupUi(self) +# self.setWindowTitle("Xing Api Client By Woojae") + +# # self.submit_btn.clicked.connect(self.do_action) +# # self.login_label.clicked.connect(self.do_action) + +# def do_action(self): +# #print('doing: ',self.name_line_edit.text()) +# #print('doing2: ',self.job_line_edit.text()) +# self.login_label.setText('되냐?') + +# def set_the_text(self,the_thing): +# #print('세팅한다: ',the_thing) +# self.login_label.setText(the_thing) +# def set_the_stock_code(self,the_thing): +# #print('세팅한다2: ',the_thing) +# self.stock_code_label.setText(the_thing) diff --git a/sample_python/slider.py b/sample_python/slider.py new file mode 100644 index 0000000..3d0dd2a --- /dev/null +++ b/sample_python/slider.py @@ -0,0 +1,17 @@ +# from PySide2.QtWidgets import QSlider,QMainWindow +# from PySide2.QtCore import Qt + +# class SliderHolder(QMainWindow): +# def __init__(self): +# super().__init__() +# # self.setWindowTitle('Xing Api Client By dev') +# slider=QSlider(Qt.Horizontal) +# slider.setMinimum(1) +# slider.setMaximum(100) +# slider.setValue(23) +# self.setCentralWidget(slider) +# slider.valueChanged.connect(self.on_moved) + +# def on_moved(self,data): +# #print('slider moving: ',data) +# pass \ No newline at end of file diff --git a/sample_python/test.py b/sample_python/test.py new file mode 100644 index 0000000..a22221a --- /dev/null +++ b/sample_python/test.py @@ -0,0 +1,100 @@ +# from PySide2 import QtCore, QtWidgets +# import PySide2.QtGui +# from PySide2.QtUiTools import QUiLoader +# from PySide2.QtWidgets import QWidget +# from ui.ui_test import Ui_Test +# # from ui.ui_second_window import Ui_Second_Window +# from ui.ui_third_window import Ui_Third_Window +# from tr.tr_0424 import Tr_0424 + +# # from balance_window import Second_Window + +# from tr.tr_master import Tr_master +# # from tr.s3_real import XReal_S3_ + +# import win32com.client #이베스트 관련 +# import pythoncom #이베스트 관련 + + + +# loader=QUiLoader() + +# #class Test(QWidget,Ui_Test) +# class Test(QtCore.QObject): +# #print('싱글톤 생성: TEST') + +# def __init__(self,XReal_S3_,set_shut_down_flag): +# super().__init__() +# # self.setupUi(self) +# self.ui=loader.load('./ui/test.ui',None) +# self.ui.setWindowTitle("Xing Api Client By dev") + +# # self.go_to_2.clicked.connect(lambda:self.set_the_stock_code('second')) +# self.ui.to_balance_page.clicked.connect(lambda:self.open_new_window('second')) +# # self.go_to_2.clicked.connect(self.calling_master) +# # self.ui.go_to_3.clicked.connect(self.start_s3_real) +# # self.ui.summer.clicked.connect(self.call_summer) +# # self.login_label.clicked.connect(self.do_action) +# # self.ui.stock_code_label.clicked.connect(self.do_action) + +# self.XReal_S3_=XReal_S3_ +# self.set_shut_down_flag=set_shut_down_flag +# # self.tr_0424=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_0424)#계좌티알 +# # self.tr_0424.get_account(self) + +# def show(self): +# self.ui.show() + + +# def closeEvent(self, event): +# self.set_shut_down_flag() +# # return super().closeEvent(event) + + + +# def open_new_window(self,type): + +# if type=="second": +# # self.window=QtWidgets.QMainWindow() +# # self.ui=Ui_Second_Window() +# # self.ui.setupUi(self.window) +# # self.second_window=Second_Window() +# # self.window.setWindowTitle('열려라!!!!!!!!!!!!!!!!!!!') +# self.second_window.show() +# else: +# self.window=QtWidgets.QMainWindow() +# self.ui=Ui_Third_Window() +# self.ui.setupUi(self.window) +# self.window.setWindowTitle('열려라!!!!!!!!!!!!!!!!!!!') +# self.window.show() + + +# def get_master(self): +# query=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_master) + +# query.single_request() +# while Tr_master.query_state == False: +# pythoncom.PumpWaitingMessages() + + + +# def start_s3_real(self): +# xreal = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", self.XReal_S3_) + +# xreal.start('005930') +# while True: +# pythoncom.PumpWaitingMessages() + + +# def do_action(self): +# #print('doing: ',self.name_line_edit.text()) +# #print('doing2: ',self.job_line_edit.text()) +# self.ui.login_label.setText('되냐?') + +# def set_the_text(self,the_thing): +# #print('세팅한다: ',the_thing) +# self.ui.login_label.setText(the_thing) + +# def set_the_stock_code(self,the_thing): +# #print('세팅한다2: ',the_thing) +# self.ui.stock_code_label.setText(the_thing) diff --git a/sample_python/third_window.py b/sample_python/third_window.py new file mode 100644 index 0000000..33dc8e9 --- /dev/null +++ b/sample_python/third_window.py @@ -0,0 +1,31 @@ +# from PySide2 import QtCore, QtWidgets +# from PySide2.QtUiTools import QUiLoader +# from PySide2.QtWidgets import QWidget +# # from .ui.ui_test import Ui_Test +# # from ui.ui_test import Ui_Test +# from ui.ui_third_window import Ui_Third_Window + + + +# loader=QUiLoader() + +# class Third_Window(QWidget,Ui_Third_Window): +# def __init__(self): +# super().__init__() +# self.setupUi(self) +# self.setWindowTitle("Xing Api Client By dev") + +# # self.submit_btn.clicked.connect(self.do_action) +# # self.login_label.clicked.connect(self.do_action) + +# def do_action(self): +# #print('doing: ',self.name_line_edit.text()) +# #print('doing2: ',self.job_line_edit.text()) +# self.login_label.setText('되냐?') + +# def set_the_text(self,the_thing): +# #print('세팅한다: ',the_thing) +# self.login_label.setText(the_thing) +# def set_the_stock_code(self,the_thing): +# #print('세팅한다2: ',the_thing) +# self.stock_code_label.setText(the_thing) diff --git a/sample_python/tr/k3_real.py b/sample_python/tr/k3_real.py new file mode 100644 index 0000000..3b6b8da --- /dev/null +++ b/sample_python/tr/k3_real.py @@ -0,0 +1,63 @@ + +# from tr.tr_0424 import Tr_0424 +# tr_0424=Tr_0424() +import os + +#코스닥임 +class XReal_K3_: + def __init__(self): + super().__init__() + + def OnReceiveRealData(self, tr_code): # event handler + """ + 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler + """ + # self.count += 1 + stock_code = self.GetFieldData("OutBlock", "shcode") + # chetime = self.GetFieldData("OutBlock", "chetime") + price = int(self.GetFieldData("OutBlock", "price")) + + if stock_code is not None and price is not None: + self.process_balance_change(stock_code,price) + + # open = int(self.GetFieldData("OutBlock", "open")) + # drate = float(self.GetFieldData("OutBlock", "drate")) + #print('코스닥 코드: ',stock_code) + # # #print('drate: ',drate) + # # #print('chetime: ',chetime) + # # chetime = self.GetFieldData("OutBlock", "chetime") + # volume = int(self.GetFieldData("OutBlock", "cvolume"))#cvolume이 체결거래량이고 그냥 볼륨은 누적거래량임 + # accu_volume = int(self.GetFieldData("OutBlock", "volume"))#누적거래대금 + # value = int(self.GetFieldData("OutBlock", "value"))#누적거래대금 + # side = self.GetFieldData("OutBlock", "cgubun") + + + def initialize_process_balance_change(self,process_balance_change): + #print('k3 initialize_process_balance_change @#@#@#@#@#@#@#') + self.process_balance_change=process_balance_change + + def start(self,stock_code): + #print('코스닥 리얼 스타트: ',stock_code) + """ + 이베스트 서버에 실시간 data 요청함. + """ + + the_path=os.environ.get('ROOT_FILE_PATH')+"\\Res\\K3_.res" + self.ResFileName = the_path # RES 파일 등록 + + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\K3_.res" # RES 파일 등록 + self.SetFieldData("InBlock", "shcode", stock_code) + self.AdviseRealData() # 실시간데이터 요청 + + + def add_item(self, stockcode): + # 실시간데이터 요청 종목 추가 + self.SetFieldData("InBlock", "shcode", stockcode) + self.AdviseRealData() + + def remove_item(self, stockcode): + # stockcode 종목만 실시간데이터 요청 취소 + self.UnadviseRealDataWithKey(stockcode) + + def end(self): + self.UnadviseRealData() # 실시간데이터 요청 모두 취소 diff --git a/sample_python/tr/s3_real.py b/sample_python/tr/s3_real.py new file mode 100644 index 0000000..97ecbf7 --- /dev/null +++ b/sample_python/tr/s3_real.py @@ -0,0 +1,63 @@ + +# from tr.tr_0424 import Tr_0424 +# tr_0424=Tr_0424() +import os +#XReal_S3_ +class XReal_S3_: + def __init__(self): + super().__init__() + self.count = 0 + # self.tr_0424=tr_0424 + + def OnReceiveRealData(self, tr_code): # event handler + """ + 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler + """ + shcode = self.GetFieldData("OutBlock", "shcode") + price = self.GetFieldData("OutBlock", "price") + + if shcode is not None and price is not None: + self.process_balance_change(shcode,price) + + # chetime = self.GetFieldData("OutBlock", "chetime") + # print('코스피 코드: ',shcode) + # print('price: ',price) + # #print('chetime: ',chetime) + # self.continue_draw_balance_table() + + + + def initialize_continue_draw_balance_table(self,continue_draw_balance_table): + #print('s3 initialize_continue_draw_balance_table @#@#@#@#@#@#@#') + self.continue_draw_balance_table=continue_draw_balance_table + + def initialize_process_balance_change(self,process_balance_change): + #print('s3 initialize_process_balance_change @#@#@#@#@#@#@#') + self.process_balance_change=process_balance_change + + def start(self,stock_code): + #print('코스피 리얼 스타트: ',stock_code) + # #print('왜 자꾸 콜하는겨') + """ + 이베스트 서버에 실시간 data 요청함. + """ + + the_path=os.environ.get('ROOT_FILE_PATH')+"\\Res\\S3_.res" + self.ResFileName = the_path # RES 파일 등록 + + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\S3_.res" # RES 파일 등록 + + self.SetFieldData("InBlock", "shcode", stock_code) + self.AdviseRealData() # 실시간데이터 요청 + + def add_item(self, stockcode): + # 실시간데이터 요청 종목 추가 + self.SetFieldData("InBlock", "shcode", stockcode) + self.AdviseRealData() + + def remove_item(self, stockcode): + # stockcode 종목만 실시간데이터 요청 취소 + self.UnadviseRealDataWithKey(stockcode) + + def end(self): + self.UnadviseRealData() # 실시간데이터 요청 모두 취소 diff --git a/sample_python/tr/tr_0424.py b/sample_python/tr/tr_0424.py new file mode 100644 index 0000000..f74c8f8 --- /dev/null +++ b/sample_python/tr/tr_0424.py @@ -0,0 +1,813 @@ +#XAQueryEvents + + +from tr.k3_real import XReal_K3_ +from tr.s3_real import XReal_S3_ +from tr.tr_kh import XReal_KH_ +import math + +# from test import Test + +# test=Test() +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 +# from apscheduler.schedulers.asyncio import AsyncIOScheduler +from apscheduler.schedulers.qt import QtScheduler +from tr.tr_sc1 import Tr_sc1 +from tr.tr_sc2 import Tr_sc2 + +from tr.tr_sc0 import Tr_sc0 +from tr.tr_sc3 import Tr_sc3 + +# from tr.tr_pending import Tr_pending +# tr_pending=Tr_pending() + +from tr.tr_master import Tr_master +tr_master=Tr_master() + +import json + +from dotenv import load_dotenv +import os +load_dotenv() +class Tr_0424: + + # account=os.environ.get('ACCOUNT') + # pw=os.environ.get('PW') + master_arr=[] + master_dict={} + query_state = False + + the_balance={} + + def __init__(self): + super().__init__() + self.xreal = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", XReal_S3_) + self.xreal_daq = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", XReal_K3_) + +#프로그램 테스트 + # self.pro_kh = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", XReal_KH_) + +#프로그램 테스트 끝 + + + + self.xreal.initialize_process_balance_change(self.process_balance_change) + self.xreal.initialize_continue_draw_balance_table(self.continue_draw_balance_table) + self.xreal_daq.initialize_process_balance_change(self.process_balance_change) + + self.account=os.environ.get('ACCOUNT') + self.pw=os.environ.get('PW') + + # scheduler = QtScheduler() + # scheduler.add_job(self.yeah, 'interval', seconds=5) + # scheduler.start() + + # async_scheduler = AsyncIOScheduler() + # async_scheduler.add_job(self.yeah(), 'cron', second='*/3',args=[]) + # async_scheduler.start() + + + + + + def init_sc1(self): + + self.sc0_real = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", Tr_sc0) + self.sc0_real.start(self.process_pending_change_echo) + + self.sc1_real = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", Tr_sc1) + self.sc1_real.start(self.process_balance_change_echo) + + self.sc2_real = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", Tr_sc2) + self.sc2_real.start() + + self.sc3_real = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", Tr_sc3) + self.sc3_real.start(self.process_pending_cancel_echo) + + + + + # def process_pending_fix_echo(self,orgordno,ord_qty,ord_price): + + + + def process_pending_cancel_echo(self,orgordno,volume): + + + the_pending_list_j=os.environ.get('the_pending_list') + the_pending_list=json.loads(the_pending_list_j) + + + for i,obj in enumerate( the_pending_list): + + + if obj['ord_no']==orgordno: + # print('ord_qty: ',obj['ord_qty']) + # print('volume: ',volume) + if int(obj['ord_qty']) == int(volume): + + # print('왜 안지우냐: ',i) + + self.balance_window.remove_row_on_pending_table(i) + old_length=int(os.environ.get('the_pending_list_length')) + #미체결 길이 다시 설정 + os.environ['the_pending_list_length']=str(old_length-1) + + del the_pending_list[i] + os.environ['the_pending_list']=json.dumps(the_pending_list) + + else: + new_qty=int(obj['ord_qty'])-int(volume) + obj['ord_qty']=new_qty + os.environ['the_pending_list']=json.dumps(the_pending_list) + + self.balance_window.set_value_on_pending_table(4,i,new_qty) + + + def process_pending_change_echo(self,ord_no, ord_qty, ord_price, stock_code, stock_name,side,orgordno,OrdTrxPtnNm): + + + the_pending_list_j=os.environ.get('the_pending_list') + new_pending_list=json.loads(the_pending_list_j) + + obj={ + "ord_no":ord_no, + "ord_qty":ord_qty, + "ord_price":int(float(ord_price)), + "stock_code":stock_code, + "stock_name":stock_name + } + + # obj={ + # "ord_no":ord_no, + # "ord_qty":ord_qty, + # "ord_price":int(float(ord_price)), + # "stock_code":stock_code_from_master, + # "stock_name":stock_name, + # 'side':side, + # 'OrgOrdNo':OrgOrdNo, + # 'OrdTrxPtnNm':OrdTrxPtnNm + # } + + + new_pending_list.append(obj) + + + os.environ['the_pending_list']=json.dumps(new_pending_list) + new_index=int(os.environ.get('the_pending_list_length')) + + + + self.balance_window.insert_row_on_pending_table() + self.balance_window.set_value_on_pending_table(0,new_index,ord_no ) + self.balance_window.set_value_on_pending_table(1,new_index,stock_name ) + self.balance_window.set_value_on_pending_table(2,new_index,side) + self.balance_window.set_value_on_pending_table(3,new_index,stock_code) + self.balance_window.set_value_on_pending_table(4,new_index,ord_qty) + self.balance_window.set_value_on_pending_table(5,new_index,ord_price) + self.balance_window.set_value_on_pending_table(6,new_index,orgordno) + self.balance_window.set_value_on_pending_table(7,new_index,OrdTrxPtnNm) + + + if OrdTrxPtnNm=='정정확인': + the_pending_list_j=os.environ.get('the_pending_list') + the_pending_list=json.loads(the_pending_list_j) + + for i,obj in enumerate( the_pending_list): + + + if obj['ord_no']==orgordno: + if int(obj['ord_qty']) <= int(ord_qty): + + self.balance_window.remove_row_on_pending_table(i) + old_length=int(os.environ.get('the_pending_list_length')) + #미체결 길이 다시 설정 + os.environ['the_pending_list_length']=str(old_length-1) + del the_pending_list[i] + + else: + new_qty=int(obj['ord_qty'])-int(ord_qty) + + obj['ord_qty']=new_qty + + self.balance_window.set_value_on_pending_table(4,i,new_qty) + + + break + + + + + #미체결 길이 다시 설정 + os.environ['the_pending_list_length']=str(new_index+1) + + + def process_balance_change_echo(self,stock_code,volume,side,contract_price,stock_name,ord_no_input): + + the_dict=self.the_balance.get(stock_code,None) + + if the_dict is not None: + the_index=self.the_balance[stock_code]['the_index'] + + pamt=int(self.the_balance[stock_code]['pamt'])#평단가임 + mamt=int(self.the_balance[stock_code]['mamt'])#매입금액 + janqty=int(self.the_balance[stock_code]['janqty'])#수량임 + appamt=int(self.the_balance[stock_code]['appamt'])#평가금액 + # sunikrt=int(self.the_balance[stock_code]['sunikrt'])#수익률 + dtsunik=int(self.the_balance[stock_code]['dtsunik']) + + + + + sunikrt=format((int(contract_price)/pamt)*100-100," .2f") #수익률 계산 + + if side ==1: + janqty=janqty-volume + new_pamt=pamt + mamt=mamt-(volume*pamt) #새 매입금액 + elif side==2: + # new_pamt=((janqty*pamt) + (volume*contract_price)) / janqty+volume #새 평단가 + cal1=janqty*pamt + cal2=volume*contract_price + cal3=cal1+cal2 + cal4=janqty+volume + new_pamt=math.floor( cal3/cal4) + + + mamt=mamt+(volume*contract_price) #새 매입금액 + sunikrt=format((int(contract_price)/new_pamt)*100-100," .2f") #새 수익률 계산 + + + janqty=janqty+volume + + + eval_profit=(int(contract_price)-new_pamt)*janqty#현재가랑 평단가 뺀거에 수량 곱하면 평가손익 됨 + + + eval_profit_diff=eval_profit-dtsunik#이전 평가손익이랑 얼만큼 차이나는지 + + new_eval_price=appamt+eval_profit_diff#새 평가금액 + + + if janqty>0: + + self.the_balance[stock_code]['janqty']=janqty + + + try: + # self.the_balance[stock_code]={ + # 'stock_name':stock_name, + # 'stock_code':stock_code, + # 'the_index':new_index, + # 'pamt':contract_price, + # 'mamt':volume*contract_price, + # 'janqty':volume, + # 'appamt':volume*contract_price, + # 'sunikrt':0 + # } + + self.the_balance[stock_code]['pamt']=new_pamt + self.the_balance[stock_code]['mamt']=mamt + self.the_balance[stock_code]['janqty']=janqty + self.the_balance[stock_code]['appamt']=new_eval_price + self.the_balance[stock_code]['sunikrt']=sunikrt + self.the_balance[stock_code]['dtsunik']=0 + + + self.balance_window.set_value_on_stocks_table(2,the_index,janqty) + self.balance_window.set_value_on_stocks_table(3,the_index,new_pamt) + self.balance_window.set_value_on_stocks_table(4,the_index,contract_price) + self.balance_window.set_value_on_stocks_table(5,the_index,mamt) + self.balance_window.set_value_on_stocks_table(6,the_index,new_eval_price) + self.balance_window.set_value_on_stocks_table(7,the_index,sunikrt) + + except Exception as e: + #print('process_balance_change_echo err: ',e) + pass + + else: + remove_res=self.remove_from_the_balance(stock_code) + + if remove_res is None: + return + + + else: + + try: + if side==2: + #잔고에 없고 신규 매수일 때 + + # self.balance_window.insert_row_on_stocks_table() + + new_index=len(self.the_balance)+1 + # self.balance_window.set_value_on_stocks_table(0,new_index-1,stock_name) + + the_dict_from_master=tr_master.master_dict.get(stock_code,{}) + + if the_dict_from_master['gubun']=='1': + self.xreal.start(stock_code) + elif the_dict_from_master['gubun']=='2': + self.xreal_daq.start(stock_code) + + self.the_balance[stock_code]={ + 'stock_name':stock_name, + 'stock_code':stock_code, + 'the_index':new_index-1, + 'pamt':contract_price, + 'mamt':volume*contract_price, + 'janqty':volume, + 'appamt':volume*contract_price, + 'sunikrt':0, + 'dtsunik':0 + } + + self.insert_to_the_balance(stock_code,stock_name,new_index) + + # self.get_account() + + + except Exception as e: + #print('process_balance_change_echo2 err: ',e) + pass + + + #미체결 그리드 지우기 + the_pending_list_j=os.environ.get('the_pending_list') + the_pending_list=json.loads(the_pending_list_j) + + for i,obj in enumerate( the_pending_list): + + # print('들어온거@@ obj: ',obj) + + if obj['ord_no']==ord_no_input: + if int(obj['ord_qty']) <= int(volume): + + self.balance_window.remove_row_on_pending_table(i) + old_length=int(os.environ.get('the_pending_list_length')) + #미체결 길이 다시 설정 + os.environ['the_pending_list_length']=str(old_length-1) + del the_pending_list[i] + + else: + new_qty=int(obj['ord_qty'])-int(volume) + + obj['ord_qty']=new_qty + + self.balance_window.set_value_on_pending_table(4,i,new_qty) + + + break + + + #미체결 리스트 다시 설정 + os.environ['the_pending_list']=json.dumps(the_pending_list) + + + + + # tdtsunik=int(self.the_balance['total']['tdtsunik']) + # new_tdtsunik=tdtsunik+eval_profit_diff + # self.the_balance['total']['tdtsunik']=new_tdtsunik + + def process_balance_change(self,stock_code,price): + + # #print('process balance change: ',self.balance_window) + + the_index=self.the_balance[stock_code]['the_index'] + # #print('the_index: ',the_index) + + # if stock_code=='000660': + # #print('self.the_balance: ',self.the_balance) + # #print('the_index: ',the_index) + + pamt=int(self.the_balance[stock_code]['pamt'])#평단가임 + mamt=int(self.the_balance[stock_code]['mamt'])#매입금액 + janqty=int(self.the_balance[stock_code]['janqty'])#수량임 + appamt=int(self.the_balance[stock_code]['appamt'])#평가금액 + # sunikrt=int(self.the_balance[stock_code]['sunikrt'])#수익률 + dtsunik=int(self.the_balance[stock_code]['dtsunik']) + + eval_profit=(int(price)-pamt)*janqty#현재가랑 평단가 뺀거에 수량 곱하면 평가손익 됨 + + eval_profit_diff=eval_profit-dtsunik#이전 평가손익이랑 얼만큼 차이나는지 + + new_eval_price=appamt+eval_profit_diff#새 평가금액 + + + sunikrt=format((int(price)/pamt)*100-100," .2f") #수익률 계산 + + # #print('@@평단가: ',pamt) + # #print('@@매입금액: ',mamt) + # #print('@@평가금액: ',appamt) + # #print('@@평가손익: ',eval_profit) + # #print('@@new_eval_price: ',new_eval_price) + # #print('@@sunikrt: ',sunikrt) + + try: + self.balance_window.set_value_on_stocks_table(2,the_index,janqty) + self.balance_window.set_value_on_stocks_table(3,the_index,pamt) + self.balance_window.set_value_on_stocks_table(4,the_index,price) + self.balance_window.set_value_on_stocks_table(5,the_index,mamt) + self.balance_window.set_value_on_stocks_table(6,the_index,new_eval_price) + self.balance_window.set_value_on_stocks_table(7,the_index,sunikrt) + + except: + pass + + + + # tdtsunik=int(self.the_balance['total']['tdtsunik']) + # new_tdtsunik=tdtsunik+eval_profit_diff + # self.the_balance['total']['tdtsunik']=new_tdtsunik + + def continue_draw_balance_table(self): + #print('self.the_balance: ',self.the_balance) + + for i,key in enumerate( self.the_balance): + try: + stock_name=self.the_balance[key]['stock_name'] + stock_code=self.the_balance[key]['stock_code'] + janqty=self.the_balance[key]['janqty'] + pamt=self.the_balance[key]['pamt'] + price=self.the_balance[key]['price'] + mamt=self.the_balance[key]['mamt'] + appamt=self.the_balance[key]['appamt'] + sunikrt=self.the_balance[key]['sunikrt'] + + self.balance_window.insert_row_on_stocks_table() + + self.balance_window.set_value_on_stocks_table(0,i,stock_name) + self.balance_window.set_value_on_stocks_table(1,i,stock_code) + self.balance_window.set_value_on_stocks_table(2,i,janqty) + self.balance_window.set_value_on_stocks_table(3,i,pamt) + self.balance_window.set_value_on_stocks_table(4,i,price) + self.balance_window.set_value_on_stocks_table(5,i,mamt) + self.balance_window.set_value_on_stocks_table(6,i,appamt) + self.balance_window.set_value_on_stocks_table(7,i,sunikrt) + + # #print('업뎃한거임?') + + except: + pass + + + def init_draw_balance_table(self,balance_window): + self.balance_window=balance_window + #print('init_draw_balance_table: ',self.the_balance) + + for i,key in enumerate( self.the_balance): + try: + stock_name=self.the_balance[key]['stock_name'] + stock_code=self.the_balance[key]['stock_code'] + janqty=self.the_balance[key]['janqty'] + pamt=self.the_balance[key]['pamt'] + price=self.the_balance[key]['price'] + mamt=self.the_balance[key]['mamt'] + appamt=self.the_balance[key]['appamt'] + sunikrt=self.the_balance[key]['sunikrt'] + + self.balance_window.insert_row_on_stocks_table() + + self.balance_window.set_value_on_stocks_table(0,i,stock_name) + self.balance_window.set_value_on_stocks_table(1,i,stock_code) + self.balance_window.set_value_on_stocks_table(2,i,janqty) + self.balance_window.set_value_on_stocks_table(3,i,pamt) + self.balance_window.set_value_on_stocks_table(4,i,price) + self.balance_window.set_value_on_stocks_table(5,i,mamt) + self.balance_window.set_value_on_stocks_table(6,i,appamt) + self.balance_window.set_value_on_stocks_table(7,i,sunikrt) + + + the_dict=tr_master.master_dict.get(stock_code,{}) + #print('the_dict: ',the_dict) + + if the_dict['gubun']=='1': + self.xreal.start(stock_code) + + + elif the_dict['gubun']=='2': + self.xreal_daq.start(stock_code) + + + except: + pass + + + + def OnReceiveData(self, tr_code): + # Tr_0424.query_state = True + block_count=self.GetBlockCount("t0424OutBlock1") + # #print('ACCOUNT @@ block_count: ',block_count) + + # sunamt = self.GetFieldData("t0424OutBlock", "sunamt", 0).strip() + # dtsunik = self.GetFieldData("t0424OutBlock", "dtsunik", 0).strip() + # mamt = self.GetFieldData("t0424OutBlock", "mamt", 0).strip() + # sunamt1 = self.GetFieldData("t0424OutBlock", "sunamt1", 0).strip() + # cts_expcode = self.GetFieldData("t0424OutBlock", "cts_expcode", 0).strip() + # tappamt = self.GetFieldData("t0424OutBlock", "tappamt", 0).strip() + # tdtsunik = self.GetFieldData("t0424OutBlock", "tdtsunik", 0).strip() + + # #print('sunamt: ',sunamt) + # self.balance_window.set_value_on_table(0,sunamt) + # self.balance_window.set_value_on_table(1,dtsunik) + # self.balance_window.set_value_on_table(2,mamt) + # self.balance_window.set_value_on_table(3,tappamt) + # self.balance_window.set_value_on_table(4,tdtsunik) + # self.balance_window.set_value_on_table(5,99) + + # self.the_balance['total']={ + # 'sunamt':sunamt, + # 'dtsunik':dtsunik, + # 'mamt':mamt, + # 'tappamt':tappamt, + # 'tdtsunik':tdtsunik, + # 'profit':99 + + + # } + + # self.test_ui_class.set_the_stock_code(sunamt) + # self.xreal.start('005930') + + + if block_count is None: + return + + + for i in range(block_count): + stock_code = self.GetFieldData("t0424OutBlock1", "expcode", i).strip() + + jangb = self.GetFieldData("t0424OutBlock1", "jangb", i).strip()#잔고구분 + + janqty = self.GetFieldData("t0424OutBlock1", "janqty", i).strip()#잔고수량 + pamt = self.GetFieldData("t0424OutBlock1", "pamt", i).strip()#평단가 + mamt = self.GetFieldData("t0424OutBlock1", "mamt", i).strip()#매입금액 + stock_name = self.GetFieldData("t0424OutBlock1", "hname", i).strip()#종목명 + price = self.GetFieldData("t0424OutBlock1", "price", i).strip()#현재가 + appamt = self.GetFieldData("t0424OutBlock1", "appamt", i).strip()#평가금액 + dtsunik = self.GetFieldData("t0424OutBlock1", "dtsunik", i).strip()#평가손익 + sunikrt = self.GetFieldData("t0424OutBlock1", "sunikrt", i).strip()#수익율 + + + if (stock_code is not None and + janqty is not None and + pamt is not None and + mamt is not None and + stock_name is not None and + price is not None and + appamt is not None and + dtsunik is not None and + sunikrt is not None): + + + self.the_balance[stock_code]={ + 'stock_name':stock_name, + 'stock_code':stock_code, + 'janqty':janqty, + 'pamt':pamt, + 'price':price, + 'mamt':mamt, + 'appamt':appamt, + 'sunikrt':sunikrt, + 'the_index':i, + 'dtsunik':dtsunik + } + + #print('@@@@self.the_balance: ',self.the_balance) + # #print('@@@@self.balance_window: ',self.balance_window) + + + + + + for i in range(block_count): + stock_code = self.GetFieldData("t0424OutBlock1", "expcode", i).strip() + janqty = self.GetFieldData("t0424OutBlock1", "janqty", i).strip()#잔고수량 + pamt = self.GetFieldData("t0424OutBlock1", "pamt", i).strip()#평단가 + mamt = self.GetFieldData("t0424OutBlock1", "mamt", i).strip()#매입금액 + stock_name = self.GetFieldData("t0424OutBlock1", "hname", i).strip()#종목명 + price = self.GetFieldData("t0424OutBlock1", "price", i).strip()#현재가 + appamt = self.GetFieldData("t0424OutBlock1", "appamt", i).strip()#평가금액 + dtsunik = self.GetFieldData("t0424OutBlock1", "dtsunik", i).strip()#평가손익 + sunikrt = self.GetFieldData("t0424OutBlock1", "sunikrt", i).strip()#수익율 + + + + if (stock_code is not None and + janqty is not None and + pamt is not None and + mamt is not None and + stock_name is not None and + price is not None and + appamt is not None and + dtsunik is not None and + sunikrt is not None): + + # #print('STOCK_NAME: ',stock_name) + the_dict=tr_master.master_dict.get(stock_code,{}) + #print('the loop stock_name: ',stock_name) + + if the_dict['gubun']=='1': + self.xreal.start(stock_code) + # #프로그램 테스트 + # self.pro_kh.start('095340') + elif the_dict['gubun']=='2': + self.xreal_daq.start(stock_code) + + + # #print('stock_name: ',stock_name) + # #print('stock_code: ',stock_code) + # #print('janqty: ',janqty) + # #print('pamt: ',pamt) + # #print('price: ',price) + # #print('mamt: ',mamt) + # #print('appamt: ',appamt) + # #print('sunikrt: ',sunikrt) + + try: + balance_check=self.the_balance.get('stock_code',None) + + if balance_check is None: + + self.balance_window.insert_row_on_stocks_table() + + self.balance_window.set_value_on_stocks_table(0,i,stock_name) + self.balance_window.set_value_on_stocks_table(1,i,stock_code) + self.balance_window.set_value_on_stocks_table(2,i,janqty) + self.balance_window.set_value_on_stocks_table(3,i,pamt) + self.balance_window.set_value_on_stocks_table(4,i,price) + self.balance_window.set_value_on_stocks_table(5,i,mamt) + self.balance_window.set_value_on_stocks_table(6,i,appamt) + self.balance_window.set_value_on_stocks_table(7,i,sunikrt) + + #print('업뎃한거임?') + + except Exception as e: + #print('잔고 업댓 에러: ',e) + pass + + + + self.the_balance[stock_code]={ + 'stock_name':stock_name, + 'stock_code':stock_code, + 'janqty':janqty, + 'pamt':pamt, + 'price':price, + 'mamt':mamt, + 'appamt':appamt, + 'sunikrt':sunikrt, + 'the_index':i, + 'dtsunik':dtsunik + } + # #print('@@@@22222self.the_balance: ',self.the_balance) + + + #print('작업 다 한 것: self.the_balance: ',self.the_balance) + + + + # #print('삼전: ',self.master_dict['005930']) + + # hname = self.GetFieldData("t8430OutBlock", "hname", 0) + # shcode = self.GetFieldData("t8430OutBlock", "shcode", 0) + # #print('tr_code: ',tr_code) + # #print('hname: ',hname) + # #print('shcode: ',shcode) + + # param['hname']=hname + # param['shcode']=shcode + def OnReceiveMessage(self, error, nMessageCode, szMessage): + # #print('OnReceiveMessage: ',szMessage) + pass + + def insert_to_the_balance(self,stock_code,stock_name,new_index): + + try: + + self.balance_window.insert_row_on_stocks_table() + + # new_index=len(self.the_balance)+1 + #print('머고@#@#@#@#@: ',stock_name) + #print('머고@#@#@#@#@2: ',new_index) + self.balance_window.set_value_on_stocks_table(0,new_index-1,stock_name) + self.balance_window.set_value_on_stocks_table(1,new_index-1,stock_code) + self.balance_window.set_value_on_stocks_table(2,new_index-1,self.the_balance[stock_code]['janqty']) + self.balance_window.set_value_on_stocks_table(3,new_index-1,self.the_balance[stock_code]['pamt']) + self.balance_window.set_value_on_stocks_table(4,new_index-1,self.the_balance[stock_code]['pamt']) + self.balance_window.set_value_on_stocks_table(5,new_index-1,self.the_balance[stock_code]['mamt']) + self.balance_window.set_value_on_stocks_table(6,new_index-1,self.the_balance[stock_code]['appamt']) + self.balance_window.set_value_on_stocks_table(7,new_index-1,0) + + # self.the_balance[stock_code]={ + # 'stock_name':stock_name, + # 'stock_code':stock_code, + # 'the_index':new_index, + # 'pamt':contract_price, + # 'mamt':volume*contract_price, + # 'janqty':volume, + # 'appamt':volume*contract_price, + # 'dtsunik':0 + # } + + #print('inserted to the balance: ',self.the_balance) + + except Exception as e: + #print('remove_from_the_balance err: ',e) + pass + + def remove_from_the_balance(self,stock_code): + + try: + + the_index=self.the_balance[stock_code]['the_index'] + + self.balance_window.remove_row_on_stocks_table(the_index) + + + the_dict_from_master=tr_master.master_dict.get(stock_code,{}) + + if the_dict_from_master['gubun']=='1': + self.xreal.remove_item(stock_code) + elif the_dict_from_master['gubun']=='2': + self.xreal_daq.remove_item(stock_code) + + + del self.the_balance[stock_code] + + + for i,key in enumerate( self.the_balance): + self.the_balance[key]['the_index']=i + + #print('removed the balance: ',self.the_balance) + + return 1 + + except Exception as e: + #print('remove_from_the_balance err: ',e) + + return None + + def init_get_account(self,balance_window): + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\t0424.res" + self.balance_window=balance_window + + self.account=os.environ.get('ACCOUNT') + self.pw=os.environ.get('PW') + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\t0424.res" + + self.SetFieldData("t0424InBlock", "accno", 0, self.account) + self.SetFieldData("t0424InBlock", "passwd", 0, self.pw) + self.SetFieldData("t0424InBlock", "prcgb", 0, '1') + self.SetFieldData("t0424InBlock", "chegb", 0, '2') + self.SetFieldData("t0424InBlock", "dangb", 0, '0') + self.SetFieldData("t0424InBlock", "charge", 0, '0') + self.SetFieldData("t0424InBlock", "cts_expcode", 0, ' ') + + #print('계좌 불러옴: ',self.account) + + + + + err_code = self.Request(False) + if err_code < 0: + + pass + #print("error... {0}".format(err_code)) + + # def callback_from_balance_window(self,insert_row_on_stocks_table,set_value_on_stocks_table): + # insert_row_on_stocks_table() + # self.insert_row_on_stocks_table=insert_row_on_stocks_table + # self.set_value_on_stocks_table=set_value_on_stocks_table + + + def get_account(self): + + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\t0424.res" + + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\t0424.res" + + self.SetFieldData("t0424InBlock", "accno", 0, self.account) + self.SetFieldData("t0424InBlock", "passwd", 0, self.pw) + self.SetFieldData("t0424InBlock", "prcgb", 0, '1') + self.SetFieldData("t0424InBlock", "chegb", 0, '2') #0 결제기준, 2 체결기준 + self.SetFieldData("t0424InBlock", "dangb", 0, '0') + self.SetFieldData("t0424InBlock", "charge", 0, '0') + self.SetFieldData("t0424InBlock", "cts_expcode", 0, ' ') + + #print('계좌 불러옴') + + + + + err_code = self.Request(False) + if err_code < 0: + #print("error... {0}".format(err_code)) + + pass \ No newline at end of file diff --git a/sample_python/tr/tr_1857.py b/sample_python/tr/tr_1857.py new file mode 100644 index 0000000..32b8b2d --- /dev/null +++ b/sample_python/tr/tr_1857.py @@ -0,0 +1,245 @@ +#종목검색 +class Tr_1857: + stock_index_dict={} + + def __init__(self): + super().__init__() + self.AlertNum='' + + def OnReceiveData(self, code): + #print('종목검색 조회#####: ',code) + result_count=self.GetBlockCount("t1857OutBlock") + + if result_count is None: + return + + AlertNum=self.GetFieldData("t1857OutBlock",'AlertNum',0) + if AlertNum is not None: + self.AlertNum=AlertNum + #print('실시간 키: ',AlertNum) + #print('자기소개 Tr_1857: ',dir(self)) + + #조회 루프돔 + for i in range(0,1000): + stock_code=self.GetFieldData("t1857OutBlock1", "shcode",i) + stock_name=self.GetFieldData("t1857OutBlock1", "hname",i) + #현재가 + price=self.GetFieldData("t1857OutBlock1", "price",i) + #전일대비구분 + sign=self.GetFieldData("t1857OutBlock1", "sign",i) + #전일대비 + change=self.GetFieldData("t1857OutBlock1", "change",i) + #등락율 + diff=self.GetFieldData("t1857OutBlock1", "diff",i) + #거래량 + volume=self.GetFieldData("t1857OutBlock1", "volume",i) + + #N이 진입, R이 재진입, O가 이탈 + JobFlag=self.GetFieldData("t1857OutBlock1", "JobFlag",i) + + # #print('stock_code: ',JobFlag) + + if stock_code!="": + + self.insert_row_on_stocks_table() + self.stock_index_dict[stock_code]=i + + self.set_value_on_table(0,i,stock_name) + self.set_value_on_table(1,i,stock_code) + self.set_value_on_table(2,i,price) + self.set_value_on_table(3,i,change) + self.set_value_on_table(4,i,diff) + self.set_value_on_table(5,i,volume) + + if JobFlag=='N': + # #print('N은 진입이다') + self.set_value_on_table(6,i,'진입') + elif JobFlag=='R': + # #print('R은 재진입이다') + self.set_value_on_table(6,i,'재진입') + elif JobFlag=='O': + # #print('O는 아웃이다') + self.set_value_on_table(6,i,'아웃') + + + + # stock_name=self.the_master[stock_code]['hname'] + # gubun=self.the_master[stock_code]['gubun'] + # #print('stock_name: ',stock_name) + # #print('gubun: ',gubun) + # if gubun=='1': + # xreal.start(stock_code) + # elif gubun=='2': + # xreal_daq.start(stock_code) + # #print('index: ',i) + if stock_code=="": + break + + + #print('result_count: ',result_count) + # self.go_search('1') + + + + def OnReceiveMessage(self, error, nMessageCode, szMessage): + #print('nMessageCode: ',nMessageCode) + #print('szMessage: ',szMessage) + + pass + + + def init_callbacks(self,set_value_on_table,insert_row_on_stocks_table): + self.set_value_on_table=set_value_on_table + self.insert_row_on_stocks_table=insert_row_on_stocks_table + + + def OnReceiveSearchRealData(self, szTrCode): + # print('종목검색 리얼@@@@: ',szTrCode) + stock_code=self.GetFieldSearchRealData("t1857OutBlock1", "shcode") + + stock_name=self.GetFieldSearchRealData("t1857OutBlock1", "hname") + #현재가 + price=self.GetFieldSearchRealData("t1857OutBlock1", "price") + #전일대비구분 + sign=self.GetFieldSearchRealData("t1857OutBlock1", "sign") + #전일대비 + change=self.GetFieldSearchRealData("t1857OutBlock1", "change") + #등락율 + diff=self.GetFieldSearchRealData("t1857OutBlock1", "diff") + #거래량 + volume=self.GetFieldSearchRealData("t1857OutBlock1", "volume") + + #N이 진입, R이 재진입, O가 이탈 + JobFlag=self.GetFieldSearchRealData("t1857OutBlock1", "JobFlag") + + + + # if JobFlag=='N': + # # #print('N은 진입이다') + # table_cnt=self.insert_row_on_stocks_table() + # self.stock_index_dict[stock_code]=table_cnt + + # self.set_value_on_table(0,table_cnt,stock_name) + # self.set_value_on_table(1,table_cnt,stock_code) + # self.set_value_on_table(2,table_cnt,price) + # self.set_value_on_table(3,table_cnt,change) + # self.set_value_on_table(4,table_cnt,diff) + # self.set_value_on_table(5,table_cnt,volume) + # self.set_value_on_table(6,table_cnt,'진입') + + + # elif JobFlag=='R': + # # #print('R은 재진입이다') + # # table_cnt=self.insert_row_on_stocks_table() + # # self.stock_index_dict[stock_code]=table_cnt + # the_index=self.stock_index_dict.get(stock_code,-1) + + # self.set_value_on_table(0,the_index,''+stock_name) + # self.set_value_on_table(1,the_index,stock_code) + # self.set_value_on_table(2,the_index,price) + # self.set_value_on_table(3,the_index,change) + # self.set_value_on_table(4,the_index,diff) + # self.set_value_on_table(5,the_index,volume) + # self.set_value_on_table(6,the_index,'재진입') + + + # elif JobFlag=='O': + # # #print('O는 아웃이다') + # the_index=self.stock_index_dict.get(stock_code,-1) + # self.set_value_on_table(6,the_index,'이탈') + + + #널 체크 + if (stock_code is not None and + stock_name is not None and + price is not None and + sign is not None and + change is not None and + diff is not None and + volume is not None and + JobFlag is not None): + + if JobFlag=='N': + # #print('N은 진입이다') + table_cnt=self.insert_row_on_stocks_table() + self.stock_index_dict[stock_code]=table_cnt + + self.set_value_on_table(0,table_cnt,stock_name) + self.set_value_on_table(1,table_cnt,stock_code) + self.set_value_on_table(2,table_cnt,price) + self.set_value_on_table(3,table_cnt,change) + self.set_value_on_table(4,table_cnt,diff) + self.set_value_on_table(5,table_cnt,volume) + self.set_value_on_table(6,table_cnt,'진입') + + + elif JobFlag=='R': + # #print('R은 재진입이다') + # table_cnt=self.insert_row_on_stocks_table() + # self.stock_index_dict[stock_code]=table_cnt + the_index=self.stock_index_dict.get(stock_code,-1) + + self.set_value_on_table(0,the_index,''+stock_name) + self.set_value_on_table(1,the_index,stock_code) + self.set_value_on_table(2,the_index,price) + self.set_value_on_table(3,the_index,change) + self.set_value_on_table(4,the_index,diff) + self.set_value_on_table(5,the_index,volume) + self.set_value_on_table(6,the_index,'재진입') + + + elif JobFlag=='O': + # #print('O는 아웃이다') + the_index=self.stock_index_dict.get(stock_code,-1) + self.set_value_on_table(6,the_index,'이탈') + + # the_thing=master_dict.get(stock_code,None) + # gubun=the_thing.get('gubun',None) + + # #print('@@@@@master_dict: ',the_thing) + + + + # def OnReceiveRealSearchData(self, szTrCode,result): + # #print('szTrCode: ',szTrCode) + # #print('szTrCode result: ',result) + + def manually_stop(self): + #print('manually_stop') + if self.AlertNum !='': + res=self.RemoveService('t1857',self.AlertNum) + + if res is not None: + pass + + def go_search(self,the_path): + + self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\t1857.res" + #print('the_path: ',the_path) + + # the_path='C:\\eBEST\\xingAPI\\ConditionToApi.ACF' + # C:/eBEST/xingAPI/ConditionToApi.ACF + + sRealFlag=self.SetFieldData("t1857InBlock", "sRealFlag", 0, 1)#맽 끝에 있는애가 0이면 조회 1이면 실시간 + sSearchFlag=self.SetFieldData("t1857InBlock", "sSearchFlag", 0, 'F') + query_index=self.SetFieldData("t1857InBlock", "query_index", 0, the_path) + # err_code = self.Request(False) + + if self.AlertNum !='': + res=self.RemoveService('t1857',self.AlertNum) + if res is not None: + pass + + + # print('sRealFlag: ',sRealFlag) + # print('sSearchFlag: ',sSearchFlag) + # print('query_index: ',query_index) + + #api 상으로 저 변수 세 개는 None이 나오는게 맞으므로 널 체크가 의미 없음 + + + err_code = self.RequestService('t1857',the_path) + #print('GOGO: ',err_code) + if err_code < 0: + pass + #print("error2... {0}".format(err_code)) diff --git a/sample_python/tr/tr_cancel_order.py b/sample_python/tr/tr_cancel_order.py new file mode 100644 index 0000000..ee564bf --- /dev/null +++ b/sample_python/tr/tr_cancel_order.py @@ -0,0 +1,118 @@ + +from dotenv import load_dotenv +import os +load_dotenv() + +class Tr_cancel_order: + def __init__(self): + super().__init__() + self.account=os.environ.get('ACCOUNT') + + def OnReceiveData(self, tr_code): + #print('주문 에코: ',tr_code) + # if tr_code=='CSPAT00600': + + + # XAQueryEvents.query_state = True + # block_count=self.GetBlockCount("t8430OutBlock") + # #print('block_count: ',block_count) + + + # for i in range(block_count): + # hname = self.GetFieldData("t8430OutBlock", "hname", i).strip() + # shcode = self.GetFieldData("t8430OutBlock", "shcode", i).strip() + # gubun = self.GetFieldData("t8430OutBlock", "gubun", i).strip() #1은 코스피, 2는 코스닥 + + # master_dict[shcode]={ + # 'hname':hname, + # 'gubun':gubun + # } + + # #print('master_dict: ',master_dict['005930']) + # query_1857.set_master(master_dict) + + + # hname = self.GetFieldData("t8430OutBlock", "hname", 0) + # shcode = self.GetFieldData("t8430OutBlock", "shcode", 0) + # #print('tr_code: ',tr_code) + # #print('hname: ',hname) + # #print('shcode: ',shcode) + + # param['hname']=hname + # param['shcode']=shcode + pass + def OnReceiveMessage(self, error, nMessageCode, szMessage): + # #print('OnReceiveMessage: ',szMessage) + pass + + + def shoot_order(self,stock_code,how_many,price,open,order_price,order_style,order_type,org_no): + #order_style이 매수인지 매도인지 그거 말하는거임 + #order_type은 지정가인지 시장가인지 그거임 + + # 00@지정가 + # 03@시장가 + is_market='00' + + if order_type=='market': + is_market=='03' + + is_ask='1' + + + if order_style=='bid': + is_ask='2' + + + order_dict={ + 'account':self.account, + 'stock_code':stock_code, + 'how_many':how_many, + 'order_price':order_price, + 'is_ask':is_ask, + 'is_market':is_market, + 'org_no':org_no + } + + stock_code="A"+stock_code#모투라 이렇게 해놈 + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\CSPAT00800.res" + + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\CSPAT00800.res" + self.SetFieldData("CSPAT00800InBlock1", "OrgOrdNo", 0, org_no) + self.SetFieldData("CSPAT00800InBlock1", "AcntNo", 0, self.account) + self.SetFieldData("CSPAT00800InBlock1", "InptPwd", 0, "0000") #모투는 0000임 + self.SetFieldData("CSPAT00800InBlock1", "IsuNo", 0, stock_code) #모투는 앞에 A 더하래 + self.SetFieldData("CSPAT00800InBlock1", "OrdQty", 0, how_many) #얘네 왜 스트링임? + # self.SetFieldData("CSPAT00800InBlock1", "OrdPrc", 0, str(order_price))#얘네 왜 스트링임? + # self.SetFieldData("CSPAT00700InBlock1", "BnsTpCode", 0, is_ask)#1이 매도 2가 매수 + # 00@지정가 + # 03@시장가 + # 05@조건부지정가 + # 06@최유리지정가 + # 07@최우선지정가 + # 61@장개시전시간외종가 + # 81@시간외종가 + # 82@시간외단일가 + # self.SetFieldData("CSPAT00800InBlock1", "OrdprcPtnCode", 0, is_market) + # 000:보통 + # 003:유통/자기융자신규 + # 005:유통대주신규 + # 007:자기대주신규 + # 101:유통융자상환 + # 103:자기융자상환 + # 105:유통대주상환 + # 107:자기대주상환 + # 180:예탁담보대출상환(신용) + # self.SetFieldData("CSPAT00600InBlock1", "MgntrnCode", 0, '000') + # self.SetFieldData("CSPAT00600InBlock1", "LoanDt", 0, '')#대출일이라는데 일단 비워둠 + # self.SetFieldData("CSPAT00800InBlock1", "OrdCndiTpCode", 0, '0') #0:없음,1:IOC,2:FOK 주문조건구분 + + #print('ORDER!!!!!') + + err_code = self.Request(False) + if err_code < 0: + + pass + #print("error... {0}".format(err_code)) diff --git a/sample_python/tr/tr_kh.py b/sample_python/tr/tr_kh.py new file mode 100644 index 0000000..17d9e60 --- /dev/null +++ b/sample_python/tr/tr_kh.py @@ -0,0 +1,72 @@ + +# from tr.tr_0424 import Tr_0424 +# tr_0424=Tr_0424() +import os +#XReal_S3_ +class XReal_KH_: + def __init__(self): + super().__init__() + self.count = 0 + # self.tr_0424=tr_0424 + + def OnReceiveRealData(self, tr_code): # event handler + """ + 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler + """ + shcode = self.GetFieldData("OutBlock", "shcode") + price = self.GetFieldData("OutBlock", "price") + tvol = self.GetFieldData("OutBlock", "tvol") + tval = self.GetFieldData("OutBlock", "tval") + + + # print('@@프로그램: ',shcode) + # print('@@프로그램 price: ',price) + # print('@@프로그램 순매수 수량: ',tvol) + # print('@@프로그램 순매수 금액: ',tval) + + if shcode is not None and price is not None: + self.process_balance_change(shcode,price) + + # chetime = self.GetFieldData("OutBlock", "chetime") + + # #print('chetime: ',chetime) + # self.continue_draw_balance_table() + + + + def initialize_continue_draw_balance_table(self,continue_draw_balance_table): + #print('s3 initialize_continue_draw_balance_table @#@#@#@#@#@#@#') + self.continue_draw_balance_table=continue_draw_balance_table + + def initialize_process_balance_change(self,process_balance_change): + #print('s3 initialize_process_balance_change @#@#@#@#@#@#@#') + self.process_balance_change=process_balance_change + + def start(self,stock_code): + print('프로그램 리얼 스타트: ',stock_code) + # #print('왜 자꾸 콜하는겨') + """ + 이베스트 서버에 실시간 data 요청함. + """ + + the_path=os.environ.get('ROOT_FILE_PATH')+"\\Res\\KH_.res" + # print('the_path: ',the_path) + # the_path=os.environ.get('ROOT_FILE_PATH')+"\\Res\\S3_.res" + self.ResFileName = the_path # RES 파일 등록 + + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\S3_.res" # RES 파일 등록 + + self.SetFieldData("InBlock", "shcode", stock_code) + self.AdviseRealData() # 실시간데이터 요청 + + def add_item(self, stockcode): + # 실시간데이터 요청 종목 추가 + self.SetFieldData("InBlock", "shcode", stockcode) + self.AdviseRealData() + + def remove_item(self, stockcode): + # stockcode 종목만 실시간데이터 요청 취소 + self.UnadviseRealDataWithKey(stockcode) + + def end(self): + self.UnadviseRealData() # 실시간데이터 요청 모두 취소 diff --git a/sample_python/tr/tr_master.py b/sample_python/tr/tr_master.py new file mode 100644 index 0000000..2b68100 --- /dev/null +++ b/sample_python/tr/tr_master.py @@ -0,0 +1,67 @@ + +import os +the_path=os.path.dirname(__file__) +#XAQueryEvents +class Tr_master: + master_arr=[] + master_dict={} + query_state = False + def OnReceiveData(self, tr_code): + Tr_master.query_state = True + block_count=self.GetBlockCount("t8430OutBlock") + #print('block_count: ',block_count) + + if block_count is not None: + + + for i in range(block_count): + hname = self.GetFieldData("t8430OutBlock", "hname", i).strip() + shcode = self.GetFieldData("t8430OutBlock", "shcode", i).strip() + gubun = self.GetFieldData("t8430OutBlock", "gubun", i).strip() #1은 코스피, 2는 코스닥 + self.master_dict[shcode]={ + 'hname':hname, + 'shcode':shcode, + 'gubun':gubun + } + self.master_dict[hname]={ + 'hname':hname, + 'shcode':shcode, + 'gubun':gubun + } + + # print('삼전: ',self.master_dict['005930']) + #print('삼전2: ',self.master_dict['삼성전자']) + + self.tr_0424.init_get_account(self.balance_window)#잔고 + self.tr_pending.get_pending(self.balance_window)#미체결 + + self.tr_0424.init_sc1() + + # hname = self.GetFieldData("t8430OutBlock", "hname", 0) + # shcode = self.GetFieldData("t8430OutBlock", "shcode", 0) + # #print('tr_code: ',tr_code) + # #print('hname: ',hname) + # #print('shcode: ',shcode) + + # param['hname']=hname + # param['shcode']=shcode + def OnReceiveMessage(self, error, nMessageCode, szMessage): + # #print('OnReceiveMessage: ',szMessage) + pass + + def single_request(self,tr_0424,balance_window,tr_pending): + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\t8430.res" + self.tr_0424=tr_0424 + self.tr_pending=tr_pending + self.balance_window=balance_window + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\t8430.res" + #print('the_path2: ',the_path+"\\Res\\t8430.res") + self.SetFieldData("t8430InBlock", "gubun", 0, 0) + err_code = self.Request(False) + + if err_code is not None: + + if err_code < 0: + #print("error... {0}".format(err_code)) + pass \ No newline at end of file diff --git a/sample_python/tr/tr_order.py b/sample_python/tr/tr_order.py new file mode 100644 index 0000000..479b81b --- /dev/null +++ b/sample_python/tr/tr_order.py @@ -0,0 +1,197 @@ + +from dotenv import load_dotenv +import os +from tr.tr_0424 import Tr_0424 +from PySide2 import QtTest +from PySide2 import QtCore + +# from order_window import Order_window + +from balance_window import Balance_window +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 +load_dotenv() + + + +class Tr_order: + # class Worker(QtCore.QThread): + # # def __init__(self,tr_0424): + # # self.tr_0424=tr_0424 + + # def call(self,tr_0424): + # self.tr_0424=tr_0424 + + # def run(self): + # while True: + # self.sleep(2) + # self.tr_0424.get_account(Balance_window) + def __init__(self): + super().__init__() + self.account=os.environ.get('ACCOUNT') + # self.tr_0424=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_0424)#계좌티알 + # self.tr_0424.get_account(Balance_window) + + # self.worker = self.Worker() + # self.worker.call(self.tr_0424) + # self.worker.start() + + # self.order_window=Order_window() + + self.the_pending={}#미체결 + self.the_pending_list=[] + self.the_pending_temp={}#오더 에코 떨어지기 전에 메모리에 올려놓는 미체결 + + def init_set_text(self,func): + self.set_status_label=func + + + + def OnReceiveData(self, tr_code): + # print('주문 에코: ',tr_code) + + # self.tr_0424.get_account(Balance_window) + + OrdQty = self.GetFieldData("CSPAT00600OutBlock1", "OrdQty",0).strip() + + # print('AcntNo: ',OrdQty) + + + + # if tr_code=='CSPAT00600': + # df,df1=result + + + # XAQueryEvents.query_state = True + # block_count=self.GetBlockCount("t8430OutBlock") + # #print('block_count: ',block_count) + + + # for i in range(block_count): + # hname = self.GetFieldData("t8430OutBlock", "hname", i).strip() + # shcode = self.GetFieldData("t8430OutBlock", "shcode", i).strip() + # gubun = self.GetFieldData("t8430OutBlock", "gubun", i).strip() #1은 코스피, 2는 코스닥 + + # master_dict[shcode]={ + # 'hname':hname, + # 'gubun':gubun + # } + + # #print('master_dict: ',master_dict['005930']) + # query_1857.set_master(master_dict) + + + # hname = self.GetFieldData("t8430OutBlock", "hname", 0) + # shcode = self.GetFieldData("t8430OutBlock", "shcode", 0) + # #print('tr_code: ',tr_code) + # #print('hname: ',hname) + # #print('shcode: ',shcode) + + # param['hname']=hname + # param['shcode']=shcode + pass + def OnReceiveMessage(self, error, nMessageCode, szMessage): + # print('OnReceiveMessage nMessageCode: ',nMessageCode) + # print('OnReceiveMessage szMessage: ',szMessage) + + if nMessageCode=='00040': + #미체결 obj 메모리에 올리는 부분 + # print('the_pending: ',self.the_pending) + self.the_pending=self.the_pending_temp + # print('the_pending2: ',self.the_pending) + self.set_status_label(szMessage) + pass + + + def shoot_order(self,stock_code,how_many,price,open,order_price,order_style,order_type): + #order_style이 매수인지 매도인지 그거 말하는거임 + #order_type은 지정가인지 시장가인지 그거임 + + # 00@지정가 + # 03@시장가 + is_market='00' + + if order_type=='market': + is_market='03' + order_price=0 + + is_ask='1' + + + if order_style=='bid': + is_ask='2' + + + order_dict={ + 'account':self.account, + 'stock_code':stock_code, + 'how_many':how_many, + 'order_price':order_price, + 'is_ask':is_ask, + 'is_market':is_market, + 'order_type':order_type + } + +#미체결에 넣는다 같은 스톡코드라도 리스트로 뿌려야되는거 아님? +#걍 미체결 리얼에서 떨어지는거 찍어볼까 + # pending_stock=self.the_pending_temp.get(stock_code,None) + + # self.the_pending_list.append({ + + # }) + + + # if pending_stock is None: + + # self.the_pending_temp[stock_code]={ + # 'stock_code':stock_code, + # 'how_many':how_many, + # 'order_price':order_price, + # } + # else: + # self.the_pending_temp[stock_code]['how_many']=how_many + +#미체결에 넣는다 끝 + + + stock_code="A"+stock_code#모투라 이렇게 해놈 + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\CSPAT00600.res" + + self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\CSPAT00600.res" + self.SetFieldData("CSPAT00600InBlock1", "AcntNo", 0, self.account) + self.SetFieldData("CSPAT00600InBlock1", "InptPwd", 0, "0000") #모투는 0000임 + self.SetFieldData("CSPAT00600InBlock1", "IsuNo", 0, stock_code) #모투는 앞에 A 더하래 + self.SetFieldData("CSPAT00600InBlock1", "OrdQty", 0, how_many) #얘네 왜 스트링임? + self.SetFieldData("CSPAT00600InBlock1", "OrdPrc", 0, str(order_price))#얘네 왜 스트링임? + self.SetFieldData("CSPAT00600InBlock1", "BnsTpCode", 0, is_ask)#1이 매도 2가 매수 + # 00@지정가 + # 03@시장가 + # 05@조건부지정가 + # 06@최유리지정가 + # 07@최우선지정가 + # 61@장개시전시간외종가 + # 81@시간외종가 + # 82@시간외단일가 + self.SetFieldData("CSPAT00600InBlock1", "OrdprcPtnCode", 0, is_market) + # 000:보통 + # 003:유통/자기융자신규 + # 005:유통대주신규 + # 007:자기대주신규 + # 101:유통융자상환 + # 103:자기융자상환 + # 105:유통대주상환 + # 107:자기대주상환 + # 180:예탁담보대출상환(신용) + self.SetFieldData("CSPAT00600InBlock1", "MgntrnCode", 0, '000') + self.SetFieldData("CSPAT00600InBlock1", "LoanDt", 0, '')#대출일이라는데 일단 비워둠 + self.SetFieldData("CSPAT00600InBlock1", "OrdCndiTpCode", 0, '0') #0:없음,1:IOC,2:FOK 주문조건구분 + + #print('ORDER!!!!!') + + + err_code = self.Request(False) + if err_code < 0: + pass + #print("error... {0}".format(err_code)) diff --git a/sample_python/tr/tr_pending.py b/sample_python/tr/tr_pending.py new file mode 100644 index 0000000..5a59d96 --- /dev/null +++ b/sample_python/tr/tr_pending.py @@ -0,0 +1,326 @@ + +from dotenv import load_dotenv +import os +from tr.tr_0424 import Tr_0424 +from PySide2 import QtTest +from PySide2 import QtCore +import json + +# from order_window import Order_window + +from balance_window import Balance_window +import win32com.client #이베스트 관련 +import pythoncom #이베스트 관련 +load_dotenv() + +from tr.tr_master import Tr_master +tr_master=Tr_master() + + +from tr.tr_sc0 import Tr_sc0 + + +class Tr_pending: + # class Worker(QtCore.QThread): + # # def __init__(self,tr_0424): + # # self.tr_0424=tr_0424 + + # def call(self,tr_0424): + # self.tr_0424=tr_0424 + + # def run(self): + # while True: + # self.sleep(2) + # self.tr_0424.get_account(Balance_window) + def __init__(self): + super().__init__() + self.account=os.environ.get('ACCOUNT') + self.pw=os.environ.get('PW') + # self.tr_0424=win32com.client.DispatchWithEvents("XA_DataSet.XAQuery",Tr_0424)#계좌티알 + # self.tr_0424.get_account(Balance_window) + + # self.worker = self.Worker() + # self.worker.call(self.tr_0424) + # self.worker.start() + + # self.order_window=Order_window() + + # self.the_pending={}#미체결 + self.the_pending_list=[] + # self.the_pending_temp={}#오더 에코 떨어지기 전에 메모리에 올려놓는 미체결 + + + # self.sc0_real = win32com.client.DispatchWithEvents("XA_DataSet.XAReal", Tr_sc0) + # self.sc0_real.start(self.process_pending_change_echo) + + def init_set_text(self,func): + self.set_status_label=func + + + # def process_pending_change_echo(self,ord_no, ord_qty, ord_price, stock_code, stock_name): + # print('process_pending_change_echo: ',self.the_pending_list) + + + def get_pending(self,balance_window): + # print('펜딩부름') + + self.balance_window=balance_window + + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\t0424.res" + + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\CSPAQ13700.res" + + self.SetFieldData("CSPAQ13700InBlock1", "RecCnt", 0, "00001") + self.SetFieldData("CSPAQ13700InBlock1", "AcntNo", 0, os.environ.get('ACCOUNT')) + self.SetFieldData("CSPAQ13700InBlock1", "InptPwd", 0, os.environ.get('PW')) + self.SetFieldData("CSPAQ13700InBlock1", "OrdMktCode", 0, '00') + self.SetFieldData("CSPAQ13700InBlock1", "BnsTpCode", 0, '0') #0 결제기준, 2 체결기준 + self.SetFieldData("CSPAQ13700InBlock1", "IsuNo", 0, '') + self.SetFieldData("CSPAQ13700InBlock1", "ExecYn", 0, '3') + + self.SetFieldData("CSPAQ13700InBlock1", "OrdDt", 0, '') + + self.SetFieldData("CSPAQ13700InBlock1", "SrtOrdNo2", 0, '999999999') + self.SetFieldData("CSPAQ13700InBlock1", "BkseqTpCode", 0, '0') + self.SetFieldData("CSPAQ13700InBlock1", "OrdPtnCode", 0, '00') + + #print('계좌 불러옴') + + + + + err_code = self.Request(False) + if err_code < 0: + #print("error... {0}".format(err_code)) + + pass + + def init_draw_pending_table(self): + # self.balance_window.insert_row_on_pending_table() + # self.balance_window.set_value_on_pending_table(0,0,'stock_name') + # self.balance_window.set_value_on_pending_table(1,0,'stock_code') + + + for i,obj in enumerate( self.the_pending_list): + try: + + self.balance_window.insert_row_on_pending_table() + + self.balance_window.set_value_on_pending_table(0,i,obj['ord_no'] ) + self.balance_window.set_value_on_pending_table(1,i,obj['stock_name'] ) + self.balance_window.set_value_on_pending_table(2,i,obj['side']) + self.balance_window.set_value_on_pending_table(3,i,obj['stock_code']) + self.balance_window.set_value_on_pending_table(4,i,obj['ord_qty']) + self.balance_window.set_value_on_pending_table(5,i,obj['ord_price']) + self.balance_window.set_value_on_pending_table(6,i,obj['OrgOrdNo']) + self.balance_window.set_value_on_pending_table(7,i,obj['OrdTrxPtnNm']) + + + + + except: + pass + + def OnReceiveData(self, tr_code): + + # self.tr_0424.get_account(Balance_window) + block_count=self.GetBlockCount("CSPAQ13700OutBlock3") + self.the_pending_list=[] + os.environ['the_pending_list_length']=str(len(self.the_pending_list)) + os.environ['the_pending_list']=json.dumps(self.the_pending_list) + # if len(self.the_pending_list)>0: + # self.the_pending_list=[] + + + if block_count is not None: + # print('미체결 block_count: ',block_count) + + + for i in range(block_count): + + OrgOrdNo = self.GetFieldData("CSPAQ13700OutBlock3", "OrgOrdNo",i).strip() + ord_no = self.GetFieldData("CSPAQ13700OutBlock3", "OrdNo",i).strip() + ord_qty = self.GetFieldData("CSPAQ13700OutBlock3", "OrdQty",i).strip() + ExecQty = self.GetFieldData("CSPAQ13700OutBlock3", "ExecQty",i).strip()#체결수량 + ord_price = self.GetFieldData("CSPAQ13700OutBlock3", "OrdPrc",i).strip() + stock_code = self.GetFieldData("CSPAQ13700OutBlock3", "shcode",i).strip() + stock_name = self.GetFieldData("CSPAQ13700OutBlock3", "IsuNm",i).strip() + BnsTpCode = self.GetFieldData("CSPAQ13700OutBlock3", "BnsTpCode",i).strip()#매매구분 1 매도 2 매수 + + BnsTpNm = self.GetFieldData("CSPAQ13700OutBlock3", "BnsTpNm",i).strip() + OrdTrxPtnCode = self.GetFieldData("CSPAQ13700OutBlock3", "OrdTrxPtnCode",i).strip() + OrdTrxPtnNm = self.GetFieldData("CSPAQ13700OutBlock3", "OrdTrxPtnNm",i).strip() + # MrcTpCode = self.GetFieldData("CSPAQ13700OutBlock3", "MrcTpCode",i).strip() + # MrcTpNm = self.GetFieldData("CSPAQ13700OutBlock3", "MrcTpNm",i).strip() + + side='' + + if BnsTpCode=='1': + side='매도' + else: + side='매수' + + actual_qty=int(ord_qty)-int(ExecQty)#미체결량 구하기 + + # print('미체결 MrcTpCode: ',MrcTpCode) + # print('미체결 MrcTpNm: ',MrcTpNm) + + the_dict_from_master=tr_master.master_dict.get(stock_name,{}) + + + stock_code_from_master=the_dict_from_master.get('shcode',"") + + obj={ + "ord_no":ord_no, + "ord_qty":actual_qty, + "ord_price":int(float(ord_price)), + "stock_code":stock_code_from_master, + "stock_name":stock_name, + 'side':side, + 'OrgOrdNo':OrgOrdNo, + 'OrdTrxPtnNm':OrdTrxPtnNm + } + self.the_pending_list.append(obj) + + os.environ['the_pending_list_length']=str(len(self.the_pending_list)) + os.environ['the_pending_list']=json.dumps(self.the_pending_list) + + # print('tr_pending의 the_pending_list: ',json.loads(os.environ['the_pending_list']) ) + # print('tr_pending의 the_pending_list 길이: ',os.environ['the_pending_list_length']) + self.init_draw_pending_table() + + # if tr_code=='CSPAT00600': + # df,df1=result + + + # XAQueryEvents.query_state = True + # block_count=self.GetBlockCount("t8430OutBlock") + # #print('block_count: ',block_count) + + + # for i in range(block_count): + # hname = self.GetFieldData("t8430OutBlock", "hname", i).strip() + # shcode = self.GetFieldData("t8430OutBlock", "shcode", i).strip() + # gubun = self.GetFieldData("t8430OutBlock", "gubun", i).strip() #1은 코스피, 2는 코스닥 + + # master_dict[shcode]={ + # 'hname':hname, + # 'gubun':gubun + # } + + # #print('master_dict: ',master_dict['005930']) + # query_1857.set_master(master_dict) + + + # hname = self.GetFieldData("t8430OutBlock", "hname", 0) + # shcode = self.GetFieldData("t8430OutBlock", "shcode", 0) + # #print('tr_code: ',tr_code) + # #print('hname: ',hname) + # #print('shcode: ',shcode) + + # param['hname']=hname + # param['shcode']=shcode + pass + def OnReceiveMessage(self, error, nMessageCode, szMessage): + + if nMessageCode=='00040': + #미체결 obj 메모리에 올리는 부분 + self.the_pending=self.the_pending_temp + # self.set_status_label(szMessage) + + + +# def shoot_order(self,stock_code,how_many,price,open,order_price,order_style,order_type): +# #order_style이 매수인지 매도인지 그거 말하는거임 +# #order_type은 지정가인지 시장가인지 그거임 + +# # 00@지정가 +# # 03@시장가 +# is_market='00' + +# if order_type=='market': +# is_market='03' +# order_price=0 + +# is_ask='1' + + +# if order_style=='bid': +# is_ask='2' + + +# order_dict={ +# 'account':self.account, +# 'stock_code':stock_code, +# 'how_many':how_many, +# 'order_price':order_price, +# 'is_ask':is_ask, +# 'is_market':is_market, +# 'order_type':order_type +# } + +# #미체결에 넣는다 같은 스톡코드라도 리스트로 뿌려야되는거 아님? +# #걍 미체결 리얼에서 떨어지는거 찍어볼까 +# # pending_stock=self.the_pending_temp.get(stock_code,None) + +# # self.the_pending_list.append({ + +# # }) + + +# # if pending_stock is None: + +# # self.the_pending_temp[stock_code]={ +# # 'stock_code':stock_code, +# # 'how_many':how_many, +# # 'order_price':order_price, +# # } +# # else: +# # self.the_pending_temp[stock_code]['how_many']=how_many + +# #미체결에 넣는다 끝 + + +# stock_code="A"+stock_code#모투라 이렇게 해놈 + +# the_path=os.environ.get('ROOT_FILE_PATH') +# self.ResFileName = the_path+"\\Res\\CSPAT00600.res" + +# self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\CSPAT00600.res" +# self.SetFieldData("CSPAT00600InBlock1", "AcntNo", 0, self.account) +# self.SetFieldData("CSPAT00600InBlock1", "InptPwd", 0, "0000") #모투는 0000임 +# self.SetFieldData("CSPAT00600InBlock1", "IsuNo", 0, stock_code) #모투는 앞에 A 더하래 +# self.SetFieldData("CSPAT00600InBlock1", "OrdQty", 0, how_many) #얘네 왜 스트링임? +# self.SetFieldData("CSPAT00600InBlock1", "OrdPrc", 0, str(order_price))#얘네 왜 스트링임? +# self.SetFieldData("CSPAT00600InBlock1", "BnsTpCode", 0, is_ask)#1이 매도 2가 매수 +# # 00@지정가 +# # 03@시장가 +# # 05@조건부지정가 +# # 06@최유리지정가 +# # 07@최우선지정가 +# # 61@장개시전시간외종가 +# # 81@시간외종가 +# # 82@시간외단일가 +# self.SetFieldData("CSPAT00600InBlock1", "OrdprcPtnCode", 0, is_market) +# # 000:보통 +# # 003:유통/자기융자신규 +# # 005:유통대주신규 +# # 007:자기대주신규 +# # 101:유통융자상환 +# # 103:자기융자상환 +# # 105:유통대주상환 +# # 107:자기대주상환 +# # 180:예탁담보대출상환(신용) +# self.SetFieldData("CSPAT00600InBlock1", "MgntrnCode", 0, '000') +# self.SetFieldData("CSPAT00600InBlock1", "LoanDt", 0, '')#대출일이라는데 일단 비워둠 +# self.SetFieldData("CSPAT00600InBlock1", "OrdCndiTpCode", 0, '0') #0:없음,1:IOC,2:FOK 주문조건구분 + +# #print('ORDER!!!!!') + + +# err_code = self.Request(False) +# if err_code < 0: +# pass +# #print("error... {0}".format(err_code)) diff --git a/sample_python/tr/tr_redo_order.py b/sample_python/tr/tr_redo_order.py new file mode 100644 index 0000000..15c3a99 --- /dev/null +++ b/sample_python/tr/tr_redo_order.py @@ -0,0 +1,115 @@ + +from dotenv import load_dotenv +import os +load_dotenv() + +class Tr_redo_order: + def __init__(self): + super().__init__() + self.account=os.environ.get('ACCOUNT') + + def OnReceiveData(self, tr_code): + #print('주문 에코: ',tr_code) + + + # XAQueryEvents.query_state = True + # block_count=self.GetBlockCount("t8430OutBlock") + # #print('block_count: ',block_count) + + + # for i in range(block_count): + # hname = self.GetFieldData("t8430OutBlock", "hname", i).strip() + # shcode = self.GetFieldData("t8430OutBlock", "shcode", i).strip() + # gubun = self.GetFieldData("t8430OutBlock", "gubun", i).strip() #1은 코스피, 2는 코스닥 + + # master_dict[shcode]={ + # 'hname':hname, + # 'gubun':gubun + # } + + # #print('master_dict: ',master_dict['005930']) + # query_1857.set_master(master_dict) + + + # hname = self.GetFieldData("t8430OutBlock", "hname", 0) + # shcode = self.GetFieldData("t8430OutBlock", "shcode", 0) + # #print('tr_code: ',tr_code) + # #print('hname: ',hname) + # #print('shcode: ',shcode) + + # param['hname']=hname + # param['shcode']=shcode + pass + def OnReceiveMessage(self, error, nMessageCode, szMessage): + # #print('OnReceiveMessage: ',szMessage) + pass + + + def shoot_order(self,stock_code,how_many,price,open,order_price,order_style,order_type,org_no): + #order_style이 매수인지 매도인지 그거 말하는거임 + #order_type은 지정가인지 시장가인지 그거임 + + # 00@지정가 + # 03@시장가 + is_market='00' + + if order_type=='market': + is_market=='03' + + is_ask='1' + + + if order_style=='bid': + is_ask='2' + + + order_dict={ + 'account':self.account, + 'stock_code':stock_code, + 'how_many':how_many, + 'order_price':order_price, + 'is_ask':is_ask, + 'is_market':is_market, + 'org_no':org_no + } + stock_code="A"+stock_code#모투라 이렇게 해놈 + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\CSPAT00700.res" + + # self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\CSPAT00700.res" + self.SetFieldData("CSPAT00700InBlock1", "OrgOrdNo", 0, org_no) + self.SetFieldData("CSPAT00700InBlock1", "AcntNo", 0, self.account) + self.SetFieldData("CSPAT00700InBlock1", "InptPwd", 0, "0000") #모투는 0000임 + self.SetFieldData("CSPAT00700InBlock1", "IsuNo", 0, stock_code) #모투는 앞에 A 더하래 + self.SetFieldData("CSPAT00700InBlock1", "OrdQty", 0, how_many) #얘네 왜 스트링임? + self.SetFieldData("CSPAT00700InBlock1", "OrdPrc", 0, str(order_price))#얘네 왜 스트링임? + # self.SetFieldData("CSPAT00700InBlock1", "BnsTpCode", 0, is_ask)#1이 매도 2가 매수 + # 00@지정가 + # 03@시장가 + # 05@조건부지정가 + # 06@최유리지정가 + # 07@최우선지정가 + # 61@장개시전시간외종가 + # 81@시간외종가 + # 82@시간외단일가 + self.SetFieldData("CSPAT00700InBlock1", "OrdprcPtnCode", 0, is_market) + # 000:보통 + # 003:유통/자기융자신규 + # 005:유통대주신규 + # 007:자기대주신규 + # 101:유통융자상환 + # 103:자기융자상환 + # 105:유통대주상환 + # 107:자기대주상환 + # 180:예탁담보대출상환(신용) + # self.SetFieldData("CSPAT00600InBlock1", "MgntrnCode", 0, '000') + # self.SetFieldData("CSPAT00600InBlock1", "LoanDt", 0, '')#대출일이라는데 일단 비워둠 + self.SetFieldData("CSPAT00700InBlock1", "OrdCndiTpCode", 0, '0') #0:없음,1:IOC,2:FOK 주문조건구분 + + #print('ORDER!!!!!') + + err_code = self.Request(False) + if err_code < 0: + pass + #print("error... {0}".format(err_code)) diff --git a/sample_python/tr/tr_sc0.py b/sample_python/tr/tr_sc0.py new file mode 100644 index 0000000..abbab8c --- /dev/null +++ b/sample_python/tr/tr_sc0.py @@ -0,0 +1,108 @@ + +# from tr.tr_0424 import Tr_0424 +# tr_0424=Tr_0424() +import os + +class Tr_sc0: + def __init__(self): + super().__init__() + + def OnReceiveRealData(self,code): # event handler + """ + 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler + """ + # self.count += 1 + #print('yeah') + #print('자기소개2: ',dir(self)) + stock_code = self.GetFieldData("OutBlock", "expcode") + stock_name = self.GetFieldData("OutBlock", "hname") + ord_qty = self.GetFieldData("OutBlock", "ordqty")#주문수량 + ord_price = self.GetFieldData("OutBlock", "ordprice")#주문가격 + ord_no = self.GetFieldData("OutBlock", "ordno")#주문번호 + orgordno = self.GetFieldData("OutBlock", "orgordno")#원주문번호 + orgordundrqty = self.GetFieldData("OutBlock", "orgordundrqty")#원주문미체결수량 + bnstp = self.GetFieldData("OutBlock", "bnstp")#매매구분 1 매도 2 매수 + ordchegb = self.GetFieldData("OutBlock", "ordchegb") #01 주문 02 정정 03 취소 11체결 + + # OrdPtnCode = self.GetFieldData("OutBlock", "OrdPtnCode") + # OrdPtnNm = self.GetFieldData("OutBlock", "OrdPtnNm") + # OrdTrxPtnCode = self.GetFieldData("OutBlock", "OrdTrxPtnCode") + OrdTrxPtnNm = '' + + side='' + + if bnstp=='1': + side='매도' + else: + side='매수' + + + if ordchegb=='02': + OrdTrxPtnNm='정정확인' + + + + if len(stock_code) > 10: + stock_code=stock_code[3:-3] + + if OrdTrxPtnNm=='': + OrdTrxPtnNm='정상' + + # price = int(self.GetFieldData("OutBlock", "price")) + # if stock_code is not None and price is not None: + # self.process_balance_change(stock_code,price) + # open = int(self.GetFieldData("OutBlock", "open")) + # drate = float(self.GetFieldData("OutBlock", "drate")) + # #print('코스닥 코드: ',stock_code) + # # #print('drate: ',drate) + # # #print('chetime: ',chetime) + # # chetime = self.GetFieldData("OutBlock", "chetime") + # volume = int(self.GetFieldData("OutBlock", "cvolume"))#cvolume이 체결거래량이고 그냥 볼륨은 누적거래량임 + # accu_volume = int(self.GetFieldData("OutBlock", "volume"))#누적거래대금 + # value = int(self.GetFieldData("OutBlock", "value"))#누적거래대금 + # side = self.GetFieldData("OutBlock", "cgubun") + + # self.process_pending_change_echo(ord_no, ord_qty, ord_price, stock_code, stock_name,side,orgordno,OrdTrxPtnNm) + # print('##ordchegb222: ',ordchegb) + if ordchegb != '03': + # print('##ordchegb222: ',ordchegb) + + self.process_pending_change_echo(ord_no, ord_qty, ord_price, stock_code, stock_name,side,orgordno,OrdTrxPtnNm) + + + + + def initialize_process_balance_change(self,process_balance_change): + #print('k3 initialize_process_balance_change @#@#@#@#@#@#@#') + self.process_balance_change=process_balance_change + + def start(self,process_pending_change_echo): + self.process_pending_change_echo=process_pending_change_echo + # print('접수 리얼 스타트: ') + #print('자기소개: ',dir(self)) + """ + 이베스트 서버에 실시간 data 요청함. + """ + + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\SC0.res" + + self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\SC0.res" # RES 파일 등록 + # self.SetFieldData("InBlock", "shcode", stock_code) + self.AdviseRealData() # 실시간데이터 요청 + # self.AdviseLinkFromHTS() # 실시간데이터 요청 + #print('접수 리얼 스타트 끝: ') + + def add_item(self, stockcode): + # 실시간데이터 요청 종목 추가 + self.SetFieldData("InBlock", "shcode", stockcode) + + self.AdviseRealData() + + def remove_item(self, stockcode): + # stockcode 종목만 실시간데이터 요청 취소 + self.UnadviseRealDataWithKey(stockcode) + + def end(self): + self.UnadviseRealData() # 실시간데이터 요청 모두 취소 diff --git a/sample_python/tr/tr_sc1.py b/sample_python/tr/tr_sc1.py new file mode 100644 index 0000000..81b7fd9 --- /dev/null +++ b/sample_python/tr/tr_sc1.py @@ -0,0 +1,97 @@ + +# from tr.tr_0424 import Tr_0424 +# tr_0424=Tr_0424() +import os + +class Tr_sc1: + def __init__(self): + super().__init__() + + def OnReceiveRealData(self,code): # event handler + """ + 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler + """ + # self.count += 1 + # #print('yeah') + # #print('자기소개2: ',dir(self)) + stock_code = self.GetFieldData("OutBlock", "Isuno")[3:-3] + stock_name = self.GetFieldData("OutBlock", "Isunm") + # chetime = self.GetFieldData("OutBlock", "chetime") + ordno = self.GetFieldData("OutBlock", "ordno")#주문번호 + volume = int(self.GetFieldData("OutBlock", "execqty")) + #1 매도 2 매수 + side = int(self.GetFieldData("OutBlock", "bnstp")) + contract_price = int(self.GetFieldData("OutBlock", "execprc")) + + + + + if len(stock_code) > 10: + stock_code=stock_code[3:-3] + + + if (stock_code is not None and + stock_name is not None and + volume is not None and + side is not None and + contract_price is not None): + + + self.process_balance_change_echo(stock_code,volume,side,contract_price,stock_name,ordno) + + + # open = int(self.GetFieldData("OutBlock", "open")) + # drate = float(self.GetFieldData("OutBlock", "drate")) + # #print('코스닥 코드: ',stock_code) + # # #print('drate: ',drate) + # # #print('chetime: ',chetime) + # # chetime = self.GetFieldData("OutBlock", "chetime") + # volume = int(self.GetFieldData("OutBlock", "cvolume"))#cvolume이 체결거래량이고 그냥 볼륨은 누적거래량임 + # accu_volume = int(self.GetFieldData("OutBlock", "volume"))#누적거래대금 + # value = int(self.GetFieldData("OutBlock", "value"))#누적거래대금 + # side = self.GetFieldData("OutBlock", "cgubun") + + #print('스톡코드: ',stock_code) + #print('stock_name: ',stock_name) + #print('volume: ',volume) + #print('side: ',side) + #print('contract_price: ',contract_price) + + + + def initialize_process_balance_change(self,process_balance_change): + #print('k3 initialize_process_balance_change @#@#@#@#@#@#@#') + self.process_balance_change=process_balance_change + + def start(self,process_balance_change_echo): + self.process_balance_change_echo=process_balance_change_echo + #print('체결 리얼 스타트: ') + #print('자기소개 체결: ',dir(self)) + + """ + 이베스트 서버에 실시간 data 요청함. + """ + + + the_path=os.environ.get('ROOT_FILE_PATH') + # self.ResFileName = the_path+"\\Res\\SC1.res" + # self.LoadFromResFile = the_path+"\\Res\\SC1.res" + + self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\SC1.res" # RES 파일 등록 + # self.SetFieldData("InBlock", "shcode", stock_code) + self.AdviseRealData() # 실시간데이터 요청 + # self.AdviseLinkFromHTS() # 실시간데이터 요청 + #print('체결 리얼 스타트 끝: ') + + def add_item(self, stockcode): + # 실시간데이터 요청 종목 추가 + self.SetFieldData("InBlock", "shcode", stockcode) + + self.AdviseRealData() + + def remove_item(self, stockcode): + # stockcode 종목만 실시간데이터 요청 취소 + self.UnadviseRealDataWithKey(stockcode) + + def end(self): + self.UnadviseRealData() # 실시간데이터 요청 모두 취소 diff --git a/sample_python/tr/tr_sc2.py b/sample_python/tr/tr_sc2.py new file mode 100644 index 0000000..017087e --- /dev/null +++ b/sample_python/tr/tr_sc2.py @@ -0,0 +1,82 @@ + +# from tr.tr_0424 import Tr_0424 +# tr_0424=Tr_0424() +import os + +class Tr_sc2: + def __init__(self): + super().__init__() + + def OnReceiveRealData(self,code): # event handler + """ + 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler + """ + # self.count += 1 + #print('yeah') + #print('자기소개2: ',dir(self)) + + + # stock_code = self.GetFieldData("OutBlock", "Isuno")[3:-3] + # stock_name = self.GetFieldData("OutBlock", "Isunm") + ord_qty = self.GetFieldData("OutBlock", "ordqty")#주문수량 + ord_price = self.GetFieldData("OutBlock", "ordprc")#주문가격 + ord_no = self.GetFieldData("OutBlock", "ordno")#주문번호 + orgordno = self.GetFieldData("OutBlock", "orgordno")#원주문번호 + # bnstp = self.GetFieldData("OutBlock", "bnstp")#매매구분 1 매도 2 매수 + # side='' + + # if bnstp=='1': + # side='매도' + # else: + # side='매수' + + + + + # print('##bnstp: ',bnstp) + # print('##stock_code: ',stock_code) + # print('##stock_name: ',stock_name) + # print('##ord_qty: ',ord_qty) + # print('##ord_price: ',ord_price) + # print('##ord_no: ',ord_no) + # print('##orgordno: ',orgordno) + + # self.process_pending_fix_echo(orgordno,ord_qty,ord_price) + + + + + def initialize_process_balance_change(self,process_balance_change): + #print('k3 initialize_process_balance_change @#@#@#@#@#@#@#') + self.process_balance_change=process_balance_change + + def start(self): + # self.process_pending_fix_echo=process_pending_fix_echo + # print('정정 리얼 스타트: ') + #print('자기소개: ',dir(self)) + """ + 이베스트 서버에 실시간 data 요청함. + """ + + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\SC2.res" + + self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\SC2.res" # RES 파일 등록 + # self.SetFieldData("InBlock", "shcode", stock_code) + self.AdviseRealData() # 실시간데이터 요청 + # self.AdviseLinkFromHTS() # 실시간데이터 요청 + #print('접수 리얼 스타트 끝: ') + + def add_item(self, stockcode): + # 실시간데이터 요청 종목 추가 + self.SetFieldData("InBlock", "shcode", stockcode) + + self.AdviseRealData() + + def remove_item(self, stockcode): + # stockcode 종목만 실시간데이터 요청 취소 + self.UnadviseRealDataWithKey(stockcode) + + def end(self): + self.UnadviseRealData() # 실시간데이터 요청 모두 취소 diff --git a/sample_python/tr/tr_sc3.py b/sample_python/tr/tr_sc3.py new file mode 100644 index 0000000..2a3598b --- /dev/null +++ b/sample_python/tr/tr_sc3.py @@ -0,0 +1,88 @@ + +# from tr.tr_0424 import Tr_0424 +# tr_0424=Tr_0424() +import os + +class Tr_sc3: + def __init__(self): + super().__init__() + + def OnReceiveRealData(self,code): # event handler + """ + 이베스트 서버에서 ReceiveRealData 이벤트 받으면 실행되는 event handler + """ + # self.count += 1 + #print('yeah') + #print('자기소개2: ',dir(self)) + + + + + # stock_code = self.GetFieldData("OutBlock", "expcode") + # stock_name = self.GetFieldData("OutBlock", "hname") + ord_qty = self.GetFieldData("OutBlock", "ordqty")#주문수량 + # ord_price = self.GetFieldData("OutBlock", "ordprc")#주문가격 + ord_no = self.GetFieldData("OutBlock", "ordno")#주문번호 + orgordno = self.GetFieldData("OutBlock", "orgordno")#원주문번호 + # bnstp = self.GetFieldData("OutBlock", "bnstp")#매매구분 1 매도 2 매수 + # side='' + + # if bnstp=='1': + # side='매도' + # else: + # side='매수' + + + # price = int(self.GetFieldData("OutBlock", "price")) + # if stock_code is not None and price is not None: + # self.process_balance_change(stock_code,price) + # open = int(self.GetFieldData("OutBlock", "open")) + # drate = float(self.GetFieldData("OutBlock", "drate")) + # #print('코스닥 코드: ',stock_code) + # # #print('drate: ',drate) + # # #print('chetime: ',chetime) + # # chetime = self.GetFieldData("OutBlock", "chetime") + # volume = int(self.GetFieldData("OutBlock", "cvolume"))#cvolume이 체결거래량이고 그냥 볼륨은 누적거래량임 + # accu_volume = int(self.GetFieldData("OutBlock", "volume"))#누적거래대금 + # value = int(self.GetFieldData("OutBlock", "value"))#누적거래대금 + # side = self.GetFieldData("OutBlock", "cgubun") + + self.process_pending_cancel_echo(orgordno,ord_qty) + + + + + def initialize_process_balance_change(self,process_balance_change): + #print('k3 initialize_process_balance_change @#@#@#@#@#@#@#') + self.process_balance_change=process_balance_change + + def start(self,process_pending_cancel_echo): + self.process_pending_cancel_echo=process_pending_cancel_echo + # print('취소 리얼 스타트: ') + #print('자기소개: ',dir(self)) + """ + 이베스트 서버에 실시간 data 요청함. + """ + + + the_path=os.environ.get('ROOT_FILE_PATH') + self.ResFileName = the_path+"\\Res\\SC3.res" + + self.ResFileName = "C:\\eBEST\\xingAPI\\Res\\SC3.res" # RES 파일 등록 + # self.SetFieldData("InBlock", "shcode", stock_code) + self.AdviseRealData() # 실시간데이터 요청 + # self.AdviseLinkFromHTS() # 실시간데이터 요청 + #print('접수 리얼 스타트 끝: ') + + def add_item(self, stockcode): + # 실시간데이터 요청 종목 추가 + self.SetFieldData("InBlock", "shcode", stockcode) + + self.AdviseRealData() + + def remove_item(self, stockcode): + # stockcode 종목만 실시간데이터 요청 취소 + self.UnadviseRealDataWithKey(stockcode) + + def end(self): + self.UnadviseRealData() # 실시간데이터 요청 모두 취소 diff --git a/sample_python/ui/balance-window.ui b/sample_python/ui/balance-window.ui new file mode 100644 index 0000000..de24aec --- /dev/null +++ b/sample_python/ui/balance-window.ui @@ -0,0 +1,193 @@ + + + Balance_window + + + + 0 + 0 + 886 + 665 + + + + Form + + + + + + + + 35 + 100 + 621 + 51 + + + + + 1 + + + + + 추정자산 + + + + + 실현손익 + + + + + 매입금액 + + + + + 평가금액 + + + + + 평가손익 + + + + + 수익률 + + + + + + + 10 + 10 + 851 + 361 + + + + + 종목명 + + + + + 종목코드 + + + + + 보유수량 + + + + + 평균단가 + + + + + 현재가 + + + + + 매입금액 + + + + + 평가금액 + + + + + 수익률 + + + + + + + 10 + 420 + 861 + 221 + + + + + 주문번호 + + + + + 종목명 + + + + + 매매구분 + + + + + 종목코드 + + + + + 미체결 수량 + + + + + 주문가격 + + + + + 원주문번호 + + + + + 상태 + + + + + + + 20 + 400 + 111 + 16 + + + + 미체결 내역 + + + + + + 770 + 390 + 75 + 23 + + + + 재조회 + + + + + + diff --git a/sample_python/ui/main-window.ui b/sample_python/ui/main-window.ui new file mode 100644 index 0000000..ec07a56 --- /dev/null +++ b/sample_python/ui/main-window.ui @@ -0,0 +1,130 @@ + + + Test + + + + 0 + 0 + 354 + 310 + + + + Form + + + + + 20 + 40 + 91 + 31 + + + + 잔고조회 + + + + + + 120 + 40 + 91 + 31 + + + + 주문 페이지 + + + + + + 120 + 120 + 113 + 20 + + + + + + + 120 + 160 + 113 + 20 + + + + + + + 70 + 120 + 56 + 12 + + + + I D + + + + + + 50 + 160 + 56 + 12 + + + + 비밀번호 + + + + + + 120 + 210 + 121 + 31 + + + + 로그인 + + + + + + 220 + 40 + 91 + 31 + + + + 검색 페이지 + + + + + + 50 + 260 + 251 + 31 + + + + 로그인 해주세요 + + + + + + diff --git a/sample_python/ui/order-window.ui b/sample_python/ui/order-window.ui new file mode 100644 index 0000000..049ba97 --- /dev/null +++ b/sample_python/ui/order-window.ui @@ -0,0 +1,599 @@ + + + Order_window + + + + 0 + 0 + 358 + 264 + + + + Form + + + + + + + + 10 + 10 + 521 + 201 + + + + 0 + + + + 매도 + + + + + 30 + 60 + 90 + 16 + + + + 보통 + + + + + + 100 + 60 + 90 + 16 + + + + 시장 + + + + + + 20 + 100 + 56 + 12 + + + + 주문수량 + + + + + + 70 + 99 + 113 + 21 + + + + + + + 70 + 20 + 113 + 20 + + + + + + + 70 + 129 + 113 + 21 + + + + + + + 20 + 130 + 56 + 12 + + + + 주문단가 + + + + + + 230 + 120 + 91 + 31 + + + + 주 문 + + + + + + 20 + 20 + 32 + 16 + + + + 종 목 + + + + + + 190 + 20 + 91 + 21 + + + + + 100 + 0 + + + + + + + + + + 매수 + + + + + 30 + 60 + 90 + 16 + + + + 보통 + + + + + + 70 + 20 + 113 + 20 + + + + + + + 70 + 99 + 113 + 21 + + + + + + + 70 + 129 + 113 + 21 + + + + + + + 20 + 20 + 32 + 16 + + + + 종 목 + + + + + + 20 + 100 + 56 + 12 + + + + 주문수량 + + + + + + 230 + 120 + 91 + 31 + + + + 주 문 + + + + + + 20 + 130 + 56 + 12 + + + + 주문단가 + + + + + + 100 + 60 + 90 + 16 + + + + 시장 + + + + + + 190 + 20 + 91 + 21 + + + + + 100 + 0 + + + + + + + + + + 정정 + + + + + 210 + 70 + 90 + 16 + + + + 잔량 + + + + + + 70 + 30 + 113 + 20 + + + + + + + 70 + 109 + 113 + 21 + + + + + + + 70 + 139 + 113 + 21 + + + + + + + 20 + 30 + 32 + 16 + + + + 종 목 + + + + + + 20 + 110 + 56 + 12 + + + + 정정수량 + + + + + + 230 + 130 + 91 + 31 + + + + 주 문 + + + + + + 20 + 140 + 56 + 12 + + + + 정정단가 + + + + + + 280 + 70 + 90 + 16 + + + + 일부 + + + + + + 70 + 70 + 113 + 20 + + + + + + + 10 + 70 + 51 + 16 + + + + 원주문No + + + + + + 200 + 30 + 91 + 21 + + + + + 100 + 0 + + + + + + + + + + 취소 + + + + + 280 + 60 + 90 + 16 + + + + 일부 + + + + + + 230 + 120 + 91 + 31 + + + + 주 문 + + + + + + 70 + 99 + 113 + 21 + + + + + + + 70 + 20 + 113 + 20 + + + + + + + 20 + 100 + 56 + 12 + + + + 취소수량 + + + + + + 20 + 20 + 32 + 16 + + + + 종 목 + + + + + + 210 + 60 + 90 + 16 + + + + 잔량 + + + + + + 70 + 60 + 113 + 20 + + + + + + + 10 + 60 + 51 + 16 + + + + 원주문No + + + + + + 200 + 20 + 91 + 21 + + + + + 100 + 0 + + + + + + + + + + + + 20 + 220 + 311 + 20 + + + + + + + + + + diff --git a/sample_python/ui/search-window.ui b/sample_python/ui/search-window.ui new file mode 100644 index 0000000..024b0a4 --- /dev/null +++ b/sample_python/ui/search-window.ui @@ -0,0 +1,90 @@ + + + Form + + + + 0 + 0 + 769 + 817 + + + + Form + + + + + 0 + 0 + 75 + 23 + + + + ACF 선택 + + + + + + 0 + 30 + 771 + 791 + + + + + 종목명 + + + + + 종목코드 + + + + + 현재가 + + + + + 전일대비 + + + + + 등락률 + + + + + 거래량 + + + + + 상태 + + + + + + + 90 + 0 + 75 + 23 + + + + 종료 + + + + + + diff --git a/sample_python/ui/second-window.ui b/sample_python/ui/second-window.ui new file mode 100644 index 0000000..5902a61 --- /dev/null +++ b/sample_python/ui/second-window.ui @@ -0,0 +1,35 @@ + + + Second_Window + + + + 0 + 0 + 1096 + 734 + + + + Form + + + background-color: rgb(66, 69, 73); + + + + + 100 + 110 + 56 + 12 + + + + 2 + + + + + + diff --git a/sample_python/ui/test.ui b/sample_python/ui/test.ui new file mode 100644 index 0000000..07bb088 --- /dev/null +++ b/sample_python/ui/test.ui @@ -0,0 +1,32 @@ + + + Test + + + + 0 + 0 + 776 + 452 + + + + Form + + + + + 20 + 20 + 91 + 31 + + + + 잔고조회 + + + + + + diff --git a/sample_python/ui/third-window.ui b/sample_python/ui/third-window.ui new file mode 100644 index 0000000..864a5be --- /dev/null +++ b/sample_python/ui/third-window.ui @@ -0,0 +1,32 @@ + + + Third_Window + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 110 + 80 + 56 + 12 + + + + 3 + + + + + + diff --git a/sample_python/ui/ui_search_window.py b/sample_python/ui/ui_search_window.py new file mode 100644 index 0000000..53ec203 --- /dev/null +++ b/sample_python/ui/ui_search_window.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'search-window.ui' +## +## Created by: Qt User Interface Compiler version 5.15.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide2.QtCore import * +from PySide2.QtGui import * +from PySide2.QtWidgets import * + + +class Ui_Form(object): + def setupUi(self, Form): + if not Form.objectName(): + Form.setObjectName(u"Form") + Form.resize(769, 817) + self.file_select_button = QPushButton(Form) + self.file_select_button.setObjectName(u"file_select_button") + self.file_select_button.setGeometry(QRect(0, 0, 75, 23)) + self.search_stocks_table = QTableWidget(Form) + if (self.search_stocks_table.columnCount() < 7): + self.search_stocks_table.setColumnCount(7) + __qtablewidgetitem = QTableWidgetItem() + self.search_stocks_table.setHorizontalHeaderItem(0, __qtablewidgetitem) + __qtablewidgetitem1 = QTableWidgetItem() + self.search_stocks_table.setHorizontalHeaderItem(1, __qtablewidgetitem1) + __qtablewidgetitem2 = QTableWidgetItem() + self.search_stocks_table.setHorizontalHeaderItem(2, __qtablewidgetitem2) + __qtablewidgetitem3 = QTableWidgetItem() + self.search_stocks_table.setHorizontalHeaderItem(3, __qtablewidgetitem3) + __qtablewidgetitem4 = QTableWidgetItem() + self.search_stocks_table.setHorizontalHeaderItem(4, __qtablewidgetitem4) + __qtablewidgetitem5 = QTableWidgetItem() + self.search_stocks_table.setHorizontalHeaderItem(5, __qtablewidgetitem5) + __qtablewidgetitem6 = QTableWidgetItem() + self.search_stocks_table.setHorizontalHeaderItem(6, __qtablewidgetitem6) + self.search_stocks_table.setObjectName(u"search_stocks_table") + self.search_stocks_table.setGeometry(QRect(0, 30, 771, 791)) + + self.retranslateUi(Form) + + QMetaObject.connectSlotsByName(Form) + # setupUi + + def retranslateUi(self, Form): + Form.setWindowTitle(QCoreApplication.translate("Form", u"Form", None)) + self.file_select_button.setText(QCoreApplication.translate("Form", u" ACF \uc120\ud0dd ", None)) + ___qtablewidgetitem = self.search_stocks_table.horizontalHeaderItem(0) + ___qtablewidgetitem.setText(QCoreApplication.translate("Form", u"\uc885\ubaa9\uba85", None)); + ___qtablewidgetitem1 = self.search_stocks_table.horizontalHeaderItem(1) + ___qtablewidgetitem1.setText(QCoreApplication.translate("Form", u"\uc885\ubaa9\ucf54\ub4dc", None)); + ___qtablewidgetitem2 = self.search_stocks_table.horizontalHeaderItem(2) + ___qtablewidgetitem2.setText(QCoreApplication.translate("Form", u"\ud604\uc7ac\uac00", None)); + ___qtablewidgetitem3 = self.search_stocks_table.horizontalHeaderItem(3) + ___qtablewidgetitem3.setText(QCoreApplication.translate("Form", u"\uc804\uc77c\ub300\ube44", None)); + ___qtablewidgetitem4 = self.search_stocks_table.horizontalHeaderItem(4) + ___qtablewidgetitem4.setText(QCoreApplication.translate("Form", u"\ub4f1\ub77d\ub960", None)); + ___qtablewidgetitem5 = self.search_stocks_table.horizontalHeaderItem(5) + ___qtablewidgetitem5.setText(QCoreApplication.translate("Form", u"\uac70\ub798\ub7c9", None)); + ___qtablewidgetitem6 = self.search_stocks_table.horizontalHeaderItem(6) + ___qtablewidgetitem6.setText(QCoreApplication.translate("Form", u"\uc0c1\ud0dc", None)); + # retranslateUi + diff --git a/sample_python/ui/ui_second_window.py b/sample_python/ui/ui_second_window.py new file mode 100644 index 0000000..64c6fa2 --- /dev/null +++ b/sample_python/ui/ui_second_window.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'second-window.ui' +## +## Created by: Qt User Interface Compiler version 5.15.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide2.QtCore import * +from PySide2.QtGui import * +from PySide2.QtWidgets import * + + +class Ui_Second_Window(object): + def setupUi(self, Second_Window): + if not Second_Window.objectName(): + Second_Window.setObjectName(u"Second_Window") + Second_Window.resize(1096, 734) + Second_Window.setStyleSheet(u"background-color: rgb(66, 69, 73);") + self.label = QLabel(Second_Window) + self.label.setObjectName(u"label") + self.label.setGeometry(QRect(100, 110, 56, 12)) + + self.retranslateUi(Second_Window) + + QMetaObject.connectSlotsByName(Second_Window) + # setupUi + + def retranslateUi(self, Second_Window): + Second_Window.setWindowTitle(QCoreApplication.translate("Second_Window", u"Form", None)) + self.label.setText(QCoreApplication.translate("Second_Window", u"2", None)) + # retranslateUi + diff --git a/sample_python/ui/ui_test.py b/sample_python/ui/ui_test.py new file mode 100644 index 0000000..6a82063 --- /dev/null +++ b/sample_python/ui/ui_test.py @@ -0,0 +1,65 @@ +# # -*- coding: utf-8 -*- + +# ################################################################################ +# ## Form generated from reading UI file 'test.ui' +# ## +# ## Created by: Qt User Interface Compiler version 5.15.2 +# ## +# ## WARNING! All changes made in this file will be lost when recompiling UI file! +# ################################################################################ + +# from PySide2.QtCore import * +# from PySide2.QtGui import * +# from PySide2.QtWidgets import * + + +# class Ui_Test(object): +# def setupUi(self, Test): +# if not Test.objectName(): +# Test.setObjectName(u"Test") +# Test.resize(441, 218) +# self.name_label = QLabel(Test) +# self.name_label.setObjectName(u"name_label") +# self.name_label.setGeometry(QRect(11, 11, 32, 16)) +# self.name_line_edit = QLineEdit(Test) +# self.name_line_edit.setObjectName(u"name_line_edit") +# self.name_line_edit.setGeometry(QRect(49, 11, 301, 21)) +# self.login_label = QLabel(Test) +# self.login_label.setObjectName(u"login_label") +# self.login_label.setGeometry(QRect(10, 180, 94, 16)) +# self.label = QLabel(Test) +# self.label.setObjectName(u"label") +# self.label.setGeometry(QRect(110, 180, 16, 16)) +# self.stock_code_label = QLabel(Test) +# self.stock_code_label.setObjectName(u"stock_code_label") +# self.stock_code_label.setGeometry(QRect(120, 180, 48, 16)) +# self.go_to_2 = QPushButton(Test) +# self.go_to_2.setObjectName(u"go_to_2") +# self.go_to_2.setGeometry(QRect(10, 100, 351, 41)) +# self.job_line_edit = QLineEdit(Test) +# self.job_line_edit.setObjectName(u"job_line_edit") +# self.job_line_edit.setGeometry(QRect(49, 60, 301, 20)) +# self.job_line_edit.setBaseSize(QSize(0, 0)) +# self.go_to_3 = QPushButton(Test) +# self.go_to_3.setObjectName(u"go_to_3") +# self.go_to_3.setGeometry(QRect(100, 150, 101, 21)) +# self.job_label = QLabel(Test) +# self.job_label.setObjectName(u"job_label") +# self.job_label.setGeometry(QRect(10, 60, 17, 16)) + +# self.retranslateUi(Test) + +# QMetaObject.connectSlotsByName(Test) +# # setupUi + +# def retranslateUi(self, Test): +# Test.setWindowTitle(QCoreApplication.translate("Test", u"Form", None)) +# self.name_label.setText(QCoreApplication.translate("Test", u"name", None)) +# self.login_label.setText(QCoreApplication.translate("Test", u"\uc0bc\uc804 \ud2f1\ub370\uc774\ud130", None)) +# self.label.setText(QCoreApplication.translate("Test", u":", None)) +# self.stock_code_label.setText(QCoreApplication.translate("Test", u"\ud2f1\ud2f1", None)) +# self.go_to_2.setText(QCoreApplication.translate("Test", u"go to 2", None)) +# self.go_to_3.setText(QCoreApplication.translate("Test", u"\ud2f1\ub370\uc774\ud130 \u3131\u3131", None)) +# self.job_label.setText(QCoreApplication.translate("Test", u"job", None)) +# # retranslateUi + diff --git a/sample_python/ui/ui_third_window.py b/sample_python/ui/ui_third_window.py new file mode 100644 index 0000000..859e74c --- /dev/null +++ b/sample_python/ui/ui_third_window.py @@ -0,0 +1,34 @@ +# # -*- coding: utf-8 -*- + +# ################################################################################ +# ## Form generated from reading UI file 'third-window.ui' +# ## +# ## Created by: Qt User Interface Compiler version 5.15.2 +# ## +# ## WARNING! All changes made in this file will be lost when recompiling UI file! +# ################################################################################ + +# from PySide2.QtCore import * +# from PySide2.QtGui import * +# from PySide2.QtWidgets import * + + +# class Ui_Third_Window(object): +# def setupUi(self, Third_Window): +# if not Third_Window.objectName(): +# Third_Window.setObjectName(u"Third_Window") +# Third_Window.resize(400, 300) +# self.label = QLabel(Third_Window) +# self.label.setObjectName(u"label") +# self.label.setGeometry(QRect(110, 80, 56, 12)) + +# self.retranslateUi(Third_Window) + +# QMetaObject.connectSlotsByName(Third_Window) +# # setupUi + +# def retranslateUi(self, Third_Window): +# Third_Window.setWindowTitle(QCoreApplication.translate("Third_Window", u"Form", None)) +# self.label.setText(QCoreApplication.translate("Third_Window", u"3", None)) +# # retranslateUi + diff --git a/sample_python/uic.exe b/sample_python/uic.exe new file mode 100644 index 0000000..e4b4534 Binary files /dev/null and b/sample_python/uic.exe differ diff --git a/scripts/append_tail_optuna_compare.py b/scripts/append_tail_optuna_compare.py index b63ba0b..e85d51d 100644 --- a/scripts/append_tail_optuna_compare.py +++ b/scripts/append_tail_optuna_compare.py @@ -45,9 +45,6 @@ COMPARE_KEYS = [ "symbol_daily_loss_limit_pct", "reentry_min_edge_krw", "reentry_require_nonneg", - "trail_tiers", - "trail_drop_pct", - "trail_arm_krw", "pattern_pin", "pattern_engulfing", "pattern_piercing", diff --git a/scripts/collect_ls_condition_history.py b/scripts/collect_ls_condition_history.py new file mode 100644 index 0000000..fc9557c --- /dev/null +++ b/scripts/collect_ls_condition_history.py @@ -0,0 +1,654 @@ +#!/usr/bin/env python3 +""" +LS 서버저장조건(동명) → ls_candidates_history 단독 수집기 +======================================================== + +⚠️ 운영 기본 경로가 아님. + ``LS_CONDITION_HISTORY_ENABLED=true`` 이면 **kis_trader_main** 이 + 조건 매니저 + (FOLLOW 시) LS WS 를 기동한다. + 단독 수집기와 main 을 **동시에** 돌리면 AFR/유량 충돌 가능 → 둘 중 하나만. + +실매(kis_trader_main) / 키움 조건검색 / target_candidates_history 를 **건드리지 않음**. + +흐름: + 1) t1866 목록 → 이름(breakout/tail/momentum/scalp_re)으로 query_index 해결 + 2) t1859 스냅샷 → 초기 유니버스 + 3) t1860 실시간등록 → WS AFR(tr_key=sAlertNum) REG + 4) AFR 편입/이탈·주기 스냅샷 → ``ls_candidates_history`` INSERT + +시세(US3) FOR 미러는 기본 OFF. + --also-ticks 를 켜면 **현재 조건 유니버스 코드만** 천천히 US3 REG + (조건명은 t1866 단계에서만 사용 — LS 시세 REG 는 코드/tr_key 만 받음). + +사용: + # 기존 LS 히스토리 비우고 수집 시작 + python3 scripts/collect_ls_condition_history.py --purge --run + + # 목록만 + python3 scripts/collect_ls_condition_history.py --list-only + +로그: + logs/ls_condition_history_YYYYMMDD_HHMMSS.log +""" +from __future__ import annotations + +import argparse +import importlib +import json +import logging +import os +import sys +import threading +import time +from datetime import datetime +from pathlib import Path +from typing import Any, Dict, List, Optional, Set, Tuple + +ROOT = Path(__file__).resolve().parents[1] +if str(ROOT) not in sys.path: + sys.path.insert(0, str(ROOT)) + +# 기존 단독 테스트의 REST/WS 헬퍼 재사용 (실매 미의존) +_rt = importlib.import_module("_test_ls_condition_realtime") + +# LS query_name → 전략 id (키움 CONDITION_*_KIWOOM_NAME 과 동일) +DEFAULT_NAME_TO_SID: Dict[str, str] = { + "breakout": "BREAKOUT", + "tail": "SHORT", + "momentum": "MOMENTUM", + "scalp_re": "SCALP", +} + +DDL = """ +CREATE TABLE IF NOT EXISTS ls_candidates_history ( + id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + slot_key VARCHAR(12) NOT NULL, + scan_time VARCHAR(30) NOT NULL, + code VARCHAR(20) NOT NULL, + name VARCHAR(100) NOT NULL DEFAULT '', + score DOUBLE NOT NULL DEFAULT 0, + price DOUBLE NOT NULL DEFAULT 0, + market CHAR(1) DEFAULT 'Q', + sector VARCHAR(100) NULL, + theme VARCHAR(100) NULL, + strategy_id VARCHAR(32) NOT NULL DEFAULT '', + event_time VARCHAR(30) NOT NULL DEFAULT '', + query_name VARCHAR(64) NOT NULL DEFAULT '', + query_index VARCHAR(32) NOT NULL DEFAULT '', + source VARCHAR(16) NOT NULL DEFAULT 'ls_afr', + INDEX idx_ls_cand_slot (slot_key), + INDEX idx_ls_cand_sid_evt (strategy_id, event_time), + INDEX idx_ls_cand_code (code), + INDEX idx_ls_cand_scan (scan_time) +) CHARACTER SET utf8mb4 +""" + + +def _setup_logger(log_path: Path) -> logging.Logger: + logger = logging.getLogger("ls_cond_hist") + logger.setLevel(logging.INFO) + logger.handlers.clear() + fmt = logging.Formatter("[%(asctime)s] %(message)s", datefmt="%H:%M:%S") + sh = logging.StreamHandler(sys.stdout) + sh.setFormatter(fmt) + logger.addHandler(sh) + log_path.parent.mkdir(parents=True, exist_ok=True) + fh = logging.FileHandler(log_path, encoding="utf-8") + fh.setFormatter(fmt) + logger.addHandler(fh) + return logger + + +def _ensure_table(db) -> None: + db.conn.execute(DDL) + + +def _purge_ls_history(db, logger: logging.Logger) -> None: + """기존 LS 쪽 히스토리만 비움 (키움 target_candidates_history / 실매 테이블 제외).""" + for tbl in ("ls_universe_history", "ls_candidates_history"): + try: + db.conn.execute(f"CREATE TABLE IF NOT EXISTS {tbl} (id INT)") # no-op if missing weird + except Exception: + pass + try: + n = db.conn.execute(f"SELECT COUNT(*) c FROM {tbl}").fetchone()["c"] + except Exception as e: + logger.warning("purge skip %s (없음?): %s", tbl, e) + continue + db.conn.execute(f"DELETE FROM {tbl}") + logger.info("🗑️ purge %s rows_was=%s → 0", tbl, n) + + +def _slot_key_now() -> str: + return datetime.now().strftime("%Y%m%d%H%M") + + +def _event_time_now() -> str: + return datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + +def insert_ls_snapshot( + db, + *, + strategy_id: str, + query_name: str, + query_index: str, + items: List[Dict[str, Any]], + event_time: Optional[str] = None, + source: str = "ls_afr", +) -> int: + """풀 유니버스 스냅샷 → ls_candidates_history (동일 event_time 재기록).""" + et = event_time or _event_time_now() + sk = et.replace("-", "").replace(":", "").replace(" ", "")[:12] + sid = (strategy_id or "").strip().upper() + qn = (query_name or "")[:64] + qi = (query_index or "")[:32] + inserted = 0 + with db.conn: + db.conn.execute( + "DELETE FROM ls_candidates_history " + "WHERE strategy_id=%s AND event_time=%s", + (sid, et), + ) + for it in items: + code = str(it.get("code") or "").strip() + if not code: + continue + name = str(it.get("name") or code)[:100] + try: + price = float(it.get("price") or 0) + except (TypeError, ValueError): + price = 0.0 + db.conn.execute( + """ + INSERT INTO ls_candidates_history + (slot_key, scan_time, code, name, score, price, + market, sector, theme, strategy_id, event_time, + query_name, query_index, source) + VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) + """, + ( + sk, et, code, name, 0.0, price, + "Q", "", "", sid, et, qn, qi, source[:16], + ), + ) + inserted += 1 + return inserted + + +class ConditionState: + def __init__( + self, + *, + strategy_id: str, + query_name: str, + query_index: str, + alert_num: str = "", + ) -> None: + self.strategy_id = strategy_id + self.query_name = query_name + self.query_index = query_index + self.alert_num = alert_num + self.codes: Dict[str, Dict[str, Any]] = {} # code → {name, price} + self.lock = threading.Lock() + + def set_from_snapshot(self, rows: List[Dict[str, Any]]) -> None: + with self.lock: + self.codes.clear() + for r in rows: + code = str(r.get("shcode") or r.get("code") or "").strip() + if not code: + continue + self.codes[code] = { + "code": code, + "name": str(r.get("hname") or r.get("name") or code)[:100], + "price": r.get("price") or 0, + } + + def apply_afr(self, body: Dict[str, Any]) -> Tuple[str, Optional[str]]: + """반환: (job, code) job=N/R/O.""" + job = str(body.get("gsJobFlag") or "").strip().upper() + code = str(body.get("gsCode") or body.get("shcode") or "").strip() + if not code: + return job, None + name = str(body.get("gsHname") or body.get("hname") or code)[:100] + try: + price = float(str(body.get("gsPrice") or body.get("price") or 0).replace(",", "")) + except (TypeError, ValueError): + price = 0.0 + with self.lock: + if job in ("N", "R"): + self.codes[code] = {"code": code, "name": name, "price": price} + elif job == "O": + self.codes.pop(code, None) + return job, code + + def items(self) -> List[Dict[str, Any]]: + with self.lock: + return [dict(v) for v in self.codes.values()] + + +class AfrHistoryWatcher: + """AFR 전용 WS — 프로토콜 ping OFF (클라 ping 대기 타임아웃 방지).""" + + def __init__( + self, + token: str, + ws_url: str, + logger: logging.Logger, + *, + by_alert: Dict[str, ConditionState], + on_change, + also_tick_codes: Optional[Set[str]] = None, + tick_gap_ms: int = 200, + ) -> None: + import websocket + + self._websocket = websocket + self.token = token + self.ws_url = ws_url + self.logger = logger + self.by_alert = by_alert + self.on_change = on_change + self.also_tick_codes = set(also_tick_codes or ()) + self.tick_gap_ms = max(50, int(tick_gap_ms)) + self._ws: Any = None + self._thread: Optional[threading.Thread] = None + self.opened = threading.Event() + self._stop = threading.Event() + self.msg_count = 0 + self.afr_count = 0 + self._tick_sub: Set[str] = set() + self._send_lock = threading.Lock() + # 죽은 alert / rematch 전 미매칭 — 조용히 drop 하지 않음 + self._last_unmatched_afr_log = 0.0 + self._unmatched_afr_warn_sec = 30.0 + + def start(self) -> None: + self._ws = self._websocket.WebSocketApp( + self.ws_url, + on_open=self._on_open, + on_message=self._on_message, + on_error=self._on_error, + on_close=self._on_close, + ) + self._thread = threading.Thread(target=self._run, name="ls-afr-hist", daemon=True) + self._thread.start() + + def _run(self) -> None: + assert self._ws is not None + # ping OFF — LS 가 클라 ping 에 pong 안 주는 케이스 회피 + self._ws.run_forever() + + def wait_open(self, timeout: float = 15.0) -> bool: + return self.opened.wait(timeout=timeout) + + def _send(self, payload: dict) -> None: + if self._ws is None: + return + with self._send_lock: + self._ws.send(json.dumps(payload, ensure_ascii=False)) + + def reg_afr(self, alert_num: str, *, tr_type: str = "3") -> None: + self._send( + { + "header": {"token": self.token, "tr_type": tr_type}, + "body": {"tr_cd": "AFR", "tr_key": alert_num}, + } + ) + self.logger.info( + "AFR %s tr_key=%r (조건명→alert 매핑 후 키만 전송)", + "REG" if tr_type == "3" else "UNREG", + alert_num, + ) + + def reg_us3(self, code: str, *, tr_type: str = "3") -> None: + """시세 미러(옵션). tr_key = U+6자리 — 이름은 WS REG 에 없음.""" + key = code if code.startswith("U") else f"U{code}" + self._send( + { + "header": {"token": self.token, "tr_type": tr_type}, + "body": {"tr_cd": "US3", "tr_key": key}, + } + ) + + def sync_ticks(self, codes: Set[str]) -> None: + if not self.also_tick_codes and not codes: + return + # also_tick_codes 가 비어있으면 유니버스 전체, 아니면 교집합만 + want = set(codes) + if self.also_tick_codes: + # True sentinel: empty set means "all current universe" when flag set + pass + add = want - self._tick_sub + rem = self._tick_sub - want + for c in sorted(rem): + self.reg_us3(c, tr_type="4") + self._tick_sub.discard(c) + time.sleep(self.tick_gap_ms / 1000.0) + for c in sorted(add): + self.reg_us3(c, tr_type="3") + self._tick_sub.add(c) + time.sleep(self.tick_gap_ms / 1000.0) + + def stop(self) -> None: + self._stop.set() + if self._ws is not None: + try: + self._ws.close() + except Exception: + pass + + def _on_open(self, _ws: Any) -> None: + self.logger.info("WS OPEN %s ping=off", self.ws_url) + self.opened.set() + # 재연결 시 AFR 재 REG (갈아끼우기 = alert 몇 개만) + for alert, st in self.by_alert.items(): + if alert: + try: + self.reg_afr(alert, tr_type="3") + time.sleep(0.3) + except Exception as e: + self.logger.warning("AFR re-REG 실패 %s: %s", alert, e) + + def _on_close(self, _ws: Any, status: Any, msg: Any) -> None: + self.opened.clear() + self.logger.warning("WS CLOSE status=%s msg=%s", status, msg) + + def _on_error(self, _ws: Any, err: Any) -> None: + self.logger.warning("WS ERROR %s", err) + + def _on_message(self, _ws: Any, message: Any) -> None: + try: + data = json.loads(message) if isinstance(message, str) else message + except Exception: + return + self.msg_count += 1 + header = data.get("header") or {} + body = data.get("body") or {} + if not isinstance(body, dict): + return + tr_cd = str(header.get("tr_cd") or "") + tr_key = str(header.get("tr_key") or body.get("tr_key") or "") + if tr_cd != "AFR" and not body.get("gsCode"): + return + st = self.by_alert.get(tr_key) + if st is None and len(self.by_alert) == 1: + st = next(iter(self.by_alert.values())) + if st is None: + # REG ACK 등 tr_key 빈 프레임은 무시 (미매칭 경고 폭주 방지) + if not str(tr_key or "").strip(): + return + now = time.time() + if now - float(self._last_unmatched_afr_log or 0.0) >= float( + self._unmatched_afr_warn_sec or 30.0 + ): + self._last_unmatched_afr_log = now + self.logger.warning( + "⚠️ AFR 미매칭 tr_key=%r (등록 alert=%s) — " + "서버 조건 CRUD 후 죽은 키일 수 있음. " + "LS rematch(t1866) 대기/확인", + tr_key, + list(self.by_alert.keys()), + ) + return + job, code = st.apply_afr(body) + if not code: + return + self.afr_count += 1 + self.logger.info( + "AFR %s %s sid=%s name=%s px=%s alert=%s", + _rt.AFR_JOB_KO.get(job, job or "?"), + code, + st.strategy_id, + st.query_name, + (body.get("gsPrice") or body.get("price")), + tr_key, + ) + try: + self.on_change(st) + except Exception as e: + self.logger.warning("on_change: %s", e) + + +def _parse_names(s: str) -> List[str]: + return [x.strip() for x in (s or "").split(",") if x.strip()] + + +def main() -> int: + ap = argparse.ArgumentParser(description="LS 조건식 → ls_candidates_history 단독 수집") + ap.add_argument("--list-only", action="store_true") + ap.add_argument("--purge", action="store_true", help="ls_universe/ls_candidates history DELETE") + ap.add_argument("--run", action="store_true", help="수집 루프 실행") + ap.add_argument( + "--names", + default="breakout,tail,momentum,scalp_re", + help="LS query_name 콤마목록 (기본=키움 동명)", + ) + ap.add_argument( + "--flush-sec", + type=int, + default=60, + help="변동 없어도 N초마다 풀스냅샷 재저장 (기본 60)", + ) + ap.add_argument( + "--also-ticks", + action="store_true", + help="조건 유니버스 코드만 US3 시세 REG (느린 gap, 기본 OFF)", + ) + ap.add_argument("--tick-gap-ms", type=int, default=200) + ap.add_argument("--mock", action="store_true") + ap.add_argument("--user-id", default="") + args = ap.parse_args() + + ts = datetime.now().strftime("%Y%m%d_%H%M%S") + log_path = ROOT / "logs" / f"ls_condition_history_{ts}.log" + logger = _setup_logger(log_path) + logger.info("log → %s", log_path) + logger.info( + "purge=%s run=%s names=%r also_ticks=%s flush=%ds", + args.purge, args.run, args.names, args.also_ticks, args.flush_sec, + ) + + from database import TradeDB + + db = TradeDB() + _ensure_table(db) + if args.purge: + _purge_ls_history(db, logger) + + user_id = (args.user_id or "").strip() + if not user_id: + try: + from kis_trader.utils.env import get_env_from_db + + user_id = (get_env_from_db("LS_USER_ID", "") or "").strip() + except Exception: + user_id = "" + if not user_id: + user_id = (os.environ.get("LS_USER_ID") or "").strip() + if not user_id: + logger.error("LS_USER_ID 필요") + return 1 + + app_key, app_secret = _rt.load_ls_creds(use_mock=bool(args.mock)) + if not app_key or not app_secret: + logger.error("LS 앱키 없음") + return 1 + token = _rt.fetch_access_token(app_key, app_secret) + logger.info("token OK user_id=%s", user_id) + + rows = _rt.t1866_list_conditions(token, user_id, logger=logger) + logger.info("서버저장조건 %d건", len(rows)) + for i, r in enumerate(rows): + logger.info( + " [%d] index=%s name=%s group=%s", + i, r["query_index"], r["query_name"], r["group_name"], + ) + if args.list_only and not args.run: + return 0 + + want_names = _parse_names(args.names) + states: List[ConditionState] = [] + for nm in want_names: + hit = _rt._resolve_query(rows, name=nm, query_index="") + if not hit or not hit.get("query_index"): + logger.error("조건명 미매칭: %r", nm) + return 3 + sid = DEFAULT_NAME_TO_SID.get(nm.lower(), nm.upper()) + st = ConditionState( + strategy_id=sid, + query_name=str(hit.get("query_name") or nm), + query_index=str(hit["query_index"]), + ) + states.append(st) + logger.info( + "매핑 name=%s → sid=%s query_index=%s", + st.query_name, st.strategy_id, st.query_index, + ) + + # 스냅샷 + for st in states: + snap = _rt.t1859_snapshot(token, st.query_index, logger=logger) + st.set_from_snapshot(snap) + n = insert_ls_snapshot( + db, + strategy_id=st.strategy_id, + query_name=st.query_name, + query_index=st.query_index, + items=st.items(), + source="ls_t1859", + ) + logger.info( + "📸 [%s/%s] snap=%d → ls_candidates_history +%d", + st.strategy_id, st.query_name, len(st.items()), n, + ) + + if not args.run: + logger.info("스냅샷만 완료 (--run 없음). log=%s", log_path) + return 0 + + # 실시간 등록 + by_alert: Dict[str, ConditionState] = {} + for st in states: + ob = _rt.t1860_realtime( + token, st.query_index, flag="E", alert_num="", logger=logger, + ) + logger.info("t1860[%s] %s", st.query_name, json.dumps(ob, ensure_ascii=False)) + if str(ob.get("sResultFlag") or "").strip() != "S": + logger.error("t1860 실패 name=%s", st.query_name) + return 5 + alert = str(ob.get("sAlertNum") or "").strip() + if not alert: + logger.error("sAlertNum 없음 name=%s", st.query_name) + return 5 + st.alert_num = alert + by_alert[alert] = st + logger.info( + "✅ 등록 name=%s sid=%s alert=%s (WS에는 alert만 REG — 이름은 로그/DB용)", + st.query_name, st.strategy_id, alert, + ) + + save_lock = threading.Lock() + last_flush = time.monotonic() + + def on_change(st: ConditionState) -> None: + nonlocal last_flush + with save_lock: + n = insert_ls_snapshot( + db, + strategy_id=st.strategy_id, + query_name=st.query_name, + query_index=st.query_index, + items=st.items(), + source="ls_afr", + ) + last_flush = time.monotonic() + logger.info( + "💾 [%s] universe=%d saved=%d", + st.strategy_id, len(st.items()), n, + ) + + ws_url = _rt.LS_WS_MOCK if args.mock else _rt.LS_WS_REAL + watcher = AfrHistoryWatcher( + token, + ws_url, + logger, + by_alert=by_alert, + on_change=on_change, + also_tick_codes=set() if args.also_ticks else None, + tick_gap_ms=args.tick_gap_ms, + ) + # also_ticks: 빈 set 이면 "유니버스 전부" 의미로 sync — flag만 True 일 때 + if args.also_ticks: + watcher.also_tick_codes = set() # unused marker; sync uses universe + # AFR REG 는 on_open 에서만 (재연결 복구 포함) — 여기서 또내면 이중 REG + watcher.start() + if not watcher.wait_open(20.0): + logger.error("WS OPEN 타임아웃") + watcher.stop() + return 4 + time.sleep(0.5 + 0.35 * max(1, len(by_alert))) + + if args.also_ticks: + all_codes: Set[str] = set() + for st in states: + all_codes |= {it["code"] for it in st.items()} + logger.info("US3 시세 미러 시작 codes=%d gap=%dms", len(all_codes), args.tick_gap_ms) + watcher.sync_ticks(all_codes) + + logger.info("수집 루프 시작 (Ctrl+C 종료). flush=%ds", args.flush_sec) + try: + while not watcher._stop.is_set(): + time.sleep(1.0) + if time.monotonic() - last_flush >= max(10, int(args.flush_sec)): + with save_lock: + for st in states: + n = insert_ls_snapshot( + db, + strategy_id=st.strategy_id, + query_name=st.query_name, + query_index=st.query_index, + items=st.items(), + source="ls_flush", + ) + logger.info( + "⏱️ flush [%s/%s] n=%d univ=%d", + st.strategy_id, st.query_name, n, len(st.items()), + ) + last_flush = time.monotonic() + if args.also_ticks: + all_codes = set() + for st in states: + all_codes |= {it["code"] for it in st.items()} + watcher.sync_ticks(all_codes) + except KeyboardInterrupt: + logger.info("KeyboardInterrupt → 정리") + finally: + for st in states: + if not st.alert_num: + continue + try: + watcher.reg_afr(st.alert_num, tr_type="4") + except Exception as e: + logger.warning("AFR UNREG: %s", e) + try: + _rt.t1860_realtime( + token, + st.query_index, + flag="D", + alert_num=st.alert_num, + logger=logger, + ) + except Exception as e: + logger.warning("t1860 D: %s", e) + watcher.stop() + logger.info( + "종료 afr_events≈%d ws_msg=%d log=%s", + watcher.afr_count, watcher.msg_count, log_path, + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/collect_ls_universe_history.py b/scripts/collect_ls_universe_history.py new file mode 100644 index 0000000..465a1f1 --- /dev/null +++ b/scripts/collect_ls_universe_history.py @@ -0,0 +1,401 @@ +#!/usr/bin/env python3 +""" +LS 섀도 시세 유니버스 히스토리 수집 + 종목 히스토리 퀄리티 리포트 (단독 실행). + +테이블: ``ls_universe_history`` + - target_candidates_history(키움 조건식)와 분리 + - 슬롯(기본 1분)마다 LS가 실제로 틱/봉을 쌓은 종목을 스냅샷 + +사용: + # 오늘 틱으로 슬롯 백필 + 퀄리티 출력 + python3 scripts/collect_ls_universe_history.py --day 2026-07-27 --backfill --quality + + # 현재 시각 슬롯 1회 수집만 + python3 scripts/collect_ls_universe_history.py --collect + + # N초마다 수집 (Ctrl+C 종료) + python3 scripts/collect_ls_universe_history.py --loop 60 --quality-every 5 + + # 퀄리티만 (이미 쌓인 테이블/틱/봉 기준) + python3 scripts/collect_ls_universe_history.py --day 2026-07-27 --quality +""" +from __future__ import annotations + +import argparse +import os +import sys +import time +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional, Sequence, Tuple + +_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +if _ROOT not in sys.path: + sys.path.insert(0, _ROOT) + + +DDL = """ +CREATE TABLE IF NOT EXISTS ls_universe_history ( + id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, + slot_key VARCHAR(12) NOT NULL, + scan_time VARCHAR(30) NOT NULL, + code VARCHAR(20) NOT NULL, + name VARCHAR(100) NOT NULL DEFAULT '', + price DOUBLE NOT NULL DEFAULT 0, + tick_count INT NOT NULL DEFAULT 0, + candle_1m_count INT NOT NULL DEFAULT 0, + last_tick_ts DATETIME(3) NULL, + last_candle_dt VARCHAR(20) NULL, + gap_1m_missing INT NOT NULL DEFAULT 0, + source VARCHAR(16) NOT NULL DEFAULT 'ls_ws', + note VARCHAR(200) NULL, + UNIQUE KEY uq_ls_univ_slot_code (slot_key, code), + INDEX idx_ls_univ_slot (slot_key), + INDEX idx_ls_univ_code (code), + INDEX idx_ls_univ_scan (scan_time) +) CHARACTER SET utf8mb4 +""" + + +def _parse_day(s: str) -> str: + s = (s or "").strip() + if not s: + return datetime.now().strftime("%Y-%m-%d") + if len(s) == 8 and s.isdigit(): + return f"{s[:4]}-{s[5:7]}-{s[6:8]}" if False else f"{s[0:4]}-{s[4:6]}-{s[6:8]}" + return s[:10] + + +def _day_compact(day: str) -> str: + return day.replace("-", "")[:8] + + +def _slot_key_from_dt(dt: datetime, slot_min: int = 1) -> str: + slot_min = max(1, int(slot_min)) + m = (dt.minute // slot_min) * slot_min + return dt.strftime("%Y%m%d%H") + f"{m:02d}" + + +def _ensure_table(db) -> None: + db.conn.execute(DDL) + + +def _name_map(db, codes: Sequence[str]) -> Dict[str, str]: + out: Dict[str, str] = {} + if not codes: + return out + # target_candidates 에 있으면 이름 재사용 + try: + cols = [r["Field"] for r in db.conn.execute("SHOW COLUMNS FROM target_candidates").fetchall()] + if "code" in cols and "name" in cols: + # chunk + codes = [str(c) for c in codes] + for i in range(0, len(codes), 200): + chunk = codes[i : i + 200] + ph = ",".join(["%s"] * len(chunk)) + rows = db.conn.execute( + f"SELECT code, name FROM target_candidates WHERE code IN ({ph})", + tuple(chunk), + ).fetchall() + for r in rows: + out[str(r["code"])] = str(r.get("name") or "") + except Exception: + pass + return out + + +def _market_1m_slots(day: str) -> List[str]: + """정규장 09:00~15:29 1분 슬롯 키 목록.""" + d = _day_compact(day) + out: List[str] = [] + t0 = datetime.strptime(d + "0900", "%Y%m%d%H%M") + t1 = datetime.strptime(d + "1530", "%Y%m%d%H%M") + cur = t0 + while cur < t1: + out.append(cur.strftime("%Y%m%d%H%M")) + cur += timedelta(minutes=1) + return out + + +def collect_slot(db, *, slot_key: Optional[str] = None, slot_min: int = 1) -> int: + """현재(또는 지정) 슬롯에 LS 틱이 있는 종목을 ls_universe_history 에 upsert.""" + _ensure_table(db) + now = datetime.now() + sk = slot_key or _slot_key_from_dt(now, slot_min) + # 슬롯 구간 + try: + slot_dt = datetime.strptime(sk, "%Y%m%d%H%M") + except ValueError: + slot_dt = now.replace(second=0, microsecond=0) + slot_end = slot_dt + timedelta(minutes=max(1, slot_min)) + ts0 = slot_dt.strftime("%Y-%m-%d %H:%M:%S") + ts1 = slot_end.strftime("%Y-%m-%d %H:%M:%S") + day = slot_dt.strftime("%Y-%m-%d") + + rows = db.conn.execute( + "SELECT a.code AS code, a.tick_count AS tick_count, a.last_tick_ts AS last_tick_ts, " + "b.price AS last_price " + "FROM (" + " SELECT code, COUNT(*) AS tick_count, MAX(ts) AS last_tick_ts " + " FROM ls_ws_ticks WHERE ts >= %s AND ts < %s " + " GROUP BY code" + ") a " + "LEFT JOIN ls_ws_ticks b ON b.code = a.code AND b.ts = a.last_tick_ts", + (ts0, ts1), + ).fetchall() + if not rows: + return 0 + + codes = [str(r["code"]) for r in rows] + names = _name_map(db, codes) + scan_time = now.strftime("%Y-%m-%d %H:%M:%S") + n = 0 + for r in rows: + code = str(r["code"]) + # 당일 1분봉 수 + 최신 봉 + cinfo = db.conn.execute( + "SELECT COUNT(*) n, MAX(datetime) mx FROM ls_ws_candles " + "WHERE code=%s AND tf_min=1 AND datetime LIKE %s", + (code, f"{day}%"), + ).fetchone() + c_n = int((cinfo or {}).get("n") or 0) + c_mx = (cinfo or {}).get("mx") + # 간단 갭: 장 시작~해당 슬롯까지 기대 1분봉 − 보유 + expect = sum(1 for s in _market_1m_slots(day) if s <= sk) + gap = max(0, expect - c_n) if expect > 0 else 0 + price = float(r.get("last_price") or 0) + db.conn.execute( + "INSERT INTO ls_universe_history " + "(slot_key, scan_time, code, name, price, tick_count, candle_1m_count, " + " last_tick_ts, last_candle_dt, gap_1m_missing, source, note) " + "VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) " + "ON DUPLICATE KEY UPDATE " + "scan_time=VALUES(scan_time), name=VALUES(name), price=VALUES(price), " + "tick_count=VALUES(tick_count), candle_1m_count=VALUES(candle_1m_count), " + "last_tick_ts=VALUES(last_tick_ts), last_candle_dt=VALUES(last_candle_dt), " + "gap_1m_missing=VALUES(gap_1m_missing), note=VALUES(note)", + ( + sk, + scan_time, + code, + names.get(code, ""), + price, + int(r.get("tick_count") or 0), + c_n, + r.get("last_tick_ts"), + str(c_mx or "")[:20] or None, + int(gap), + "ls_ws", + f"slot_min={slot_min}", + ), + ) + n += 1 + return n + + +def backfill_day(db, day: str, *, slot_min: int = 1) -> Tuple[int, int]: + """해당 일의 ls_ws_ticks 를 분 슬롯으로 묶어 히스토리 upsert. (slots, rows)""" + _ensure_table(db) + d = _day_compact(day) + ts0 = f"{day} 00:00:00" + ts1 = f"{day} 23:59:59.999" + slots = db.conn.execute( + "SELECT DATE_FORMAT(ts, '%%Y%%m%%d%%H%%i') sk FROM ls_ws_ticks " + "WHERE ts >= %s AND ts <= %s GROUP BY sk ORDER BY sk", + (ts0, ts1), + ).fetchall() + # DATE_FORMAT minute is exact; for slot_min>1 floor in python + seen = set() + slot_list: List[str] = [] + for r in slots: + sk_raw = str(r["sk"]) + if len(sk_raw) < 12: + continue + if slot_min <= 1: + sk = sk_raw[:12] + else: + dt = datetime.strptime(sk_raw[:12], "%Y%m%d%H%M") + sk = _slot_key_from_dt(dt, slot_min) + if sk not in seen: + seen.add(sk) + slot_list.append(sk) + total_rows = 0 + for sk in slot_list: + if not sk.startswith(d): + continue + total_rows += collect_slot(db, slot_key=sk, slot_min=slot_min) + return len(slot_list), total_rows + + +def quality_report(db, day: str, *, top: int = 20) -> None: + """LS 틱/봉/히스토리/키움후보 대비 퀄리티 출력.""" + _ensure_table(db) + d = _day_compact(day) + print("=" * 72) + print(f"LS 종목 히스토리 퀄리티 — day={day}") + print("=" * 72) + + tick = db.conn.execute( + "SELECT COUNT(*) n, COUNT(DISTINCT code) codes, MIN(ts) mn, MAX(ts) mx " + "FROM ls_ws_ticks WHERE ts >= %s AND ts <= %s", + (f"{day} 00:00:00", f"{day} 23:59:59.999"), + ).fetchone() + print(f"[ls_ws_ticks] n={tick['n']:,} codes={tick['codes']} range={tick['mn']} ~ {tick['mx']}") + + cndl = db.conn.execute( + "SELECT COUNT(*) n, COUNT(DISTINCT code) codes, MIN(datetime) mn, MAX(datetime) mx " + "FROM ls_ws_candles WHERE tf_min=1 AND datetime LIKE %s", + (f"{day}%",), + ).fetchone() + print( + f"[ls_ws_candles 1m] n={cndl['n']:,} codes={cndl['codes']} " + f"range={cndl['mn']} ~ {cndl['mx']}" + ) + + hist = db.conn.execute( + "SELECT COUNT(*) n, COUNT(DISTINCT code) codes, COUNT(DISTINCT slot_key) slots " + "FROM ls_universe_history WHERE slot_key LIKE %s", + (f"{d}%",), + ).fetchone() + print( + f"[ls_universe_history] rows={hist['n']:,} codes={hist['codes']} " + f"slots={hist['slots']}" + ) + + # 종목별 틱/봉 + per = db.conn.execute( + "SELECT code, COUNT(*) ticks, MIN(ts) mn, MAX(ts) mx " + "FROM ls_ws_ticks WHERE ts >= %s AND ts <= %s " + "GROUP BY code ORDER BY ticks DESC LIMIT %s", + (f"{day} 00:00:00", f"{day} 23:59:59.999", int(top)), + ).fetchall() + print(f"\n--- 틱 상위 {top} 종목 ---") + print(f"{'code':8} {'ticks':>8} {'candle_1m':>9} {'gap_est':>7} {'last_tick'}") + expect_full = len(_market_1m_slots(day)) + now_sk = _slot_key_from_dt(datetime.now(), 1) + if now_sk.startswith(d): + expect_now = sum(1 for s in _market_1m_slots(day) if s <= now_sk) + else: + expect_now = expect_full + for r in per: + code = str(r["code"]) + cn = db.conn.execute( + "SELECT COUNT(*) n FROM ls_ws_candles WHERE code=%s AND tf_min=1 AND datetime LIKE %s", + (code, f"{day}%"), + ).fetchone()["n"] + gap = max(0, int(expect_now) - int(cn)) + print( + f"{code:8} {int(r['ticks']):8d} {int(cn):9d} {gap:7d} {r['mx']}" + ) + + # 키움 후보 히스토리와 교집합 (오늘) + try: + kw = db.conn.execute( + "SELECT COUNT(DISTINCT code) n FROM target_candidates_history " + "WHERE slot_key LIKE %s", + (f"{d}%",), + ).fetchone()["n"] + both = db.conn.execute( + "SELECT COUNT(DISTINCT h.code) n FROM ls_universe_history h " + "INNER JOIN target_candidates_history t " + " ON t.code=h.code AND t.slot_key LIKE %s " + "WHERE h.slot_key LIKE %s", + (f"{d}%", f"{d}%"), + ).fetchone()["n"] + ls_only = db.conn.execute( + "SELECT COUNT(DISTINCT code) n FROM ls_universe_history WHERE slot_key LIKE %s", + (f"{d}%",), + ).fetchone()["n"] + print(f"\n--- 키움 후보(history) vs LS 히스토리 ---") + print(f"키움 distinct codes(today): {kw}") + print(f"LS history distinct: {ls_only}") + print(f"교집합(대략): {both}") + except Exception as e: + print(f"(키움 교차 비교 스킵: {e})") + + # KIS↔LS 갭 (validation) + try: + v = db.conn.execute( + "SELECT COUNT(*) n, " + "AVG(ABS(diff_kis_ls_pct)) avg_abs, " + "MAX(ABS(diff_kis_ls_pct)) max_abs " + "FROM ws_price_validation_ls " + "WHERE ts >= %s AND ts <= %s AND diff_kis_ls_pct IS NOT NULL", + (f"{day} 00:00:00", f"{day} 23:59:59.999"), + ).fetchone() + print( + f"\n[ws_price_validation_ls] samples={v['n']:,} " + f"avg|kis-ls|%={v['avg_abs']} max|kis-ls|%={v['max_abs']}" + ) + except Exception as e: + print(f"(validation_ls 스킵: {e})") + + # 최근 슬롯 커버 + recent = db.conn.execute( + "SELECT slot_key, COUNT(*) n FROM ls_universe_history " + "WHERE slot_key LIKE %s GROUP BY slot_key ORDER BY slot_key DESC LIMIT 8", + (f"{d}%",), + ).fetchall() + print("\n--- 최근 슬롯 종목수 ---") + for r in recent: + print(f" {r['slot_key']}: {r['n']} codes") + print("=" * 72) + + +def main() -> int: + ap = argparse.ArgumentParser(description="LS universe history collect + quality") + ap.add_argument("--day", default="", help="YYYY-MM-DD (기본=오늘)") + ap.add_argument("--slot-min", type=int, default=1, help="슬롯 분 (기본 1)") + ap.add_argument("--collect", action="store_true", help="현재 슬롯 1회 수집") + ap.add_argument("--backfill", action="store_true", help="해당일 틱→슬롯 백필") + ap.add_argument("--quality", action="store_true", help="퀄리티 리포트 출력") + ap.add_argument("--loop", type=int, default=0, help="N초마다 --collect 반복 (0=OFF)") + ap.add_argument("--quality-every", type=int, default=0, help="루프 N회마다 quality") + ap.add_argument("--top", type=int, default=20, help="퀄리티 상위 종목 수") + args = ap.parse_args() + + day = _parse_day(args.day) + from database import TradeDB + + db = TradeDB() + try: + _ensure_table(db) + print(f"[ok] ls_universe_history ready | day={day} slot_min={args.slot_min}") + + if args.backfill: + ns, nr = backfill_day(db, day, slot_min=max(1, args.slot_min)) + print(f"[backfill] slots={ns} upsert_rows≈{nr}") + + if args.collect and not args.loop: + n = collect_slot(db, slot_min=max(1, args.slot_min)) + print(f"[collect] upsert codes={n} slot={_slot_key_from_dt(datetime.now(), args.slot_min)}") + + if args.quality and not args.loop: + quality_report(db, day, top=max(5, args.top)) + + if args.loop and args.loop > 0: + i = 0 + print(f"[loop] every {args.loop}s — Ctrl+C to stop") + while True: + n = collect_slot(db, slot_min=max(1, args.slot_min)) + sk = _slot_key_from_dt(datetime.now(), args.slot_min) + print(f"[{datetime.now():%H:%M:%S}] collect slot={sk} codes={n}") + i += 1 + if args.quality_every > 0 and i % args.quality_every == 0: + quality_report(db, day, top=max(5, args.top)) + time.sleep(max(5, args.loop)) + + # 아무 플래그 없으면 backfill+quality 기본 + if not any([args.collect, args.backfill, args.quality, args.loop]): + ns, nr = backfill_day(db, day, slot_min=max(1, args.slot_min)) + print(f"[backfill] slots={ns} upsert_rows≈{nr}") + quality_report(db, day, top=max(5, args.top)) + finally: + try: + db.close() + except Exception: + pass + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/post_optuna_mid_enroll_verify.py b/scripts/post_optuna_mid_enroll_verify.py new file mode 100755 index 0000000..15120fc --- /dev/null +++ b/scripts/post_optuna_mid_enroll_verify.py @@ -0,0 +1,214 @@ +#!/usr/bin/env python3 +"""Optuna apply 이후 — 현재 DB로 웹정렬 백테 1회씩 + 요약 리포트. + + .venv/bin/python -u scripts/post_optuna_mid_enroll_verify.py \\ + --start 2026-07-21 --end 2026-07-23 --report logs/report.txt +""" +from __future__ import annotations + +import argparse +import json +import subprocess +import sys +import time +from pathlib import Path +from typing import Any, Dict, List + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT)) + + +def _run_kr_cli(strat: str, start: str, end: str) -> Dict[str, Any]: + py = ROOT / ".venv" / "bin" / "python" + if not py.exists(): + py = Path(sys.executable) + out_json = ROOT / "logs" / f"verify_bt_{strat}_{int(time.time())}.json" + cmd = [ + str(py), "-u", str(ROOT / "scripts" / "run_strategy_backtest_cli.py"), + "--strategy", strat, + "--start", start, + "--end", end, + "--universe", "history", + ] + # CLI may print summary; also try to capture via env if supported + p = subprocess.run(cmd, cwd=str(ROOT), capture_output=True, text=True, timeout=3600) + text = (p.stdout or "") + "\n" + (p.stderr or "") + summary: Dict[str, Any] = { + "strategy": strat, + "rc": p.returncode, + "tail": "\n".join(text.strip().splitlines()[-40:]), + } + # parse common lines + for line in text.splitlines(): + low = line.lower() + if "total_pnl" in low or "총손익" in line or "trades=" in low or "거래" in line: + summary.setdefault("hits", []).append(line.strip()) + out_json.write_text(json.dumps(summary, ensure_ascii=False, indent=2), encoding="utf-8") + summary["log_json"] = str(out_json) + return summary + + +def _run_us_web(start: str, end: str, symbol: str = "") -> Dict[str, Any]: + """US 웹백테 — Flask 핸들러와 동일 경로가 아니면 엔진 params+포트폴리오 요약만.""" + from database import TradeDB + from kis_trader.utils.env import invalidate_merged_env_cache + from kis_trader.backtest import scalping_backtest_common as sbc + from kis_trader.backtest.us_momentum_web_backtest import ( + build_us_momentum_engine_params, + load_us_candles, + ) + from kis_trader.engine.momentum_engine import get_momentum_defaults_from_db + + invalidate_merged_env_cache() + db = TradeDB() + ui_def = get_momentum_defaults_from_db() + args: Dict[str, Any] = {"start": start, "end": end, "use_saved_history": True} + if symbol: + args["symbol"] = symbol + args["use_stock_cfg"] = True + try: + from kis_trader.backtest.us_momentum_web_backtest import run_us_momentum_web_backtest + out = run_us_momentum_web_backtest(args, db=db, ui_def=ui_def) + trades = out.get("trades") or out.get("trade_list") or [] + if not isinstance(trades, list): + trades = [] + pnl = sum(float(t.get("pnl") or 0) for t in trades) + wins = sum(1 for t in trades if float(t.get("pnl") or 0) > 0) + n = len(trades) + return { + "strategy": f"us_momentum:{symbol or 'GLOBAL'}", + "rc": 0, + "trades": n, + "wins": wins, + "pnl": pnl, + "wr": (wins / n * 100.0) if n else 0.0, + } + except Exception as e: + # 최소 로드 스모크 + filt = [symbol] if symbol else None + codes_candles, _, _, codes = load_us_candles(db, start, end, codes_filter=filt) + return { + "strategy": f"us_momentum:{symbol or 'GLOBAL'}", + "rc": 1, + "error": str(e), + "codes": len(codes or []), + "candle_codes": len(codes_candles or {}), + "trades": 0, + "wins": 0, + "pnl": 0.0, + "wr": 0.0, + } + + +def _latest_optuna_json(prefix: str) -> str: + d = ROOT / "kis_trader" / "backtest" / "results" + files = sorted(d.glob(f"optuna_{prefix}*.json"), key=lambda p: p.stat().st_mtime) + return str(files[-1]) if files else "" + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--start", required=True) + ap.add_argument("--end", required=True) + ap.add_argument("--report", required=True) + ap.add_argument( + "--us-only", + action="store_true", + help="해외 모멘텀 스모크만 (국장 CLI 스킵)", + ) + args = ap.parse_args() + + lines: List[str] = [] + lines.append(f"# mid-enroll verify {args.start}..{args.end}") + lines.append(f"ts={time.strftime('%Y-%m-%d %H:%M:%S')}") + if args.us_only: + lines.append("scope=us_only") + lines.append("") + + # 최근 Optuna JSON 경로 + prefs = [ + "us_momentum_tpe_", + "us_momentum_tpe_fee_", + "us_momentum_QQQM_", + "us_momentum_SPCX_", + "us_momentum_SPYM_", + "us_momentum_TSLA_", + ] + if not args.us_only: + prefs.extend( + ( + "momentum_tpe_", + "tail_tpe_", + "breakout_tpe_", + "scalp_tpe_", + ) + ) + for pref in prefs: + p = _latest_optuna_json(pref) + if p: + lines.append(f"json:{pref} -> {p}") + + if not args.us_only: + lines.append("") + lines.append("## KR web-aligned BT (current DB after apply)") + for strat in ("momentum", "tail", "breakout", "scalp"): + print(f"[verify] KR {strat} ...", flush=True) + try: + s = _run_kr_cli(strat, args.start, args.end) + lines.append(f"### {strat} rc={s.get('rc')}") + for h in s.get("hits") or []: + lines.append(f" {h}") + lines.append(f" log={s.get('log_json')}") + except Exception as e: + lines.append(f"### {strat} ERR {e}") + + lines.append("") + lines.append("## US web BT (global + cfg symbols)") + for sym in ("", "QQQM", "SPCX", "SPYM", "TSLA"): + tag = sym or "GLOBAL" + print(f"[verify] US {tag} ...", flush=True) + try: + s = _run_us_web(args.start, args.end, sym) + lines.append( + f"### us:{tag} trades={s.get('trades')} wr={s.get('wr'):.1f}% " + f"pnl={s.get('pnl'):.4f}" + ) + if s.get("error"): + lines.append(f" error={s.get('error')}") + except Exception as e: + lines.append(f"### us:{tag} ERR {e}") + + # 실매 봇 재시작 (apply 반영) + lines.append("") + lines.append("## restart kis_trader_main") + try: + r = subprocess.run( + ["sudo", "systemctl", "restart", "kis_trader_main.service"], + capture_output=True, text=True, timeout=120, + ) + time.sleep(2) + a = subprocess.run( + ["systemctl", "is-active", "kis_trader_main.service"], + capture_output=True, text=True, timeout=30, + ) + lines.append(f"restart_rc={r.returncode} active={a.stdout.strip()}") + except Exception as e: + lines.append(f"restart ERR {e}") + + # 실매 정합 메모 + lines.append("") + lines.append("## live match notes") + lines.append("- ALIGN_DEFER_MID_BAR_ENROLL + LIVE_ALIGN_ENTRY_FROM_TICK_BUFFER 가 실매·백테 공통") + lines.append("- 장중 실매 체결 로그의 entry_src=ws_ticks|ohlc_open / 탈락-중편입시가애매 로 확인") + lines.append("- 미장 10시(22:00 KST) 전 us apply 완료 여부: master 로그 US 구간 END 시각 확인") + + report = Path(args.report) + report.parent.mkdir(parents=True, exist_ok=True) + report.write_text("\n".join(lines) + "\n", encoding="utf-8") + print("\n".join(lines), flush=True) + print(f"REPORT={report}", flush=True) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/run_optuna_4strat_5d_apply_20260721_27.sh b/scripts/run_optuna_4strat_5d_apply_20260721_27.sh new file mode 100755 index 0000000..8c21fe8 --- /dev/null +++ b/scripts/run_optuna_4strat_5d_apply_20260721_27.sh @@ -0,0 +1,121 @@ +#!/bin/bash +# 4전략 Optuna 5거래일(2026-07-21~27) 순차 + --apply-best +# 거래일: 21,22,23,24,27 (토·일 제외) +# mode=tpe · trials=200 · 호가 OFF · SKIP_HTS 건드리지 않음(실매/기본 false) +# +# nohup bash scripts/run_optuna_4strat_5d_apply_20260721_27.sh \ +# >> logs/optuna_4strat_5d_apply_nohup.out 2>&1 & +# tail -f "$(cat logs/optuna_4strat_5d_apply_latest_master.logpath)" +# +# 완료 후 실매 봇 재시작(DB 파람 로드). 서버는 켜 둔 채 PC만 꺼도 됨. + +set -euo pipefail +cd /home/hoon/kis_bot +mkdir -p logs kis_trader/backtest/results + +START="${START:-2026-07-21}" +END="${END:-2026-07-27}" +MODE="${MODE:-tpe}" +TRIALS="${TRIALS:-200}" +MIN_TRADES="${MIN_TRADES:-1}" +MIN_WIN_RATE="${MIN_WIN_RATE:-0}" +MIN_PF="${MIN_PF:-0}" +STRATEGIES="${STRATEGIES:-scalp momentum breakout tail}" +PY="${PY:-}" +if [[ -z "$PY" ]]; then + if [[ -x .venv/bin/python ]]; then + PY=".venv/bin/python" + else + PY="python3" + fi +fi +RESTART_BOT="${RESTART_BOT:-1}" +TS0="$(date +%Y%m%d_%H%M%S)" +MASTER="logs/optuna_4strat_5d_apply_${START//-/}_${END//-/}_${TS0}_master.log" + +{ + echo "======== Optuna 4전략 5일+apply-best 시작 $(date -Is) ========" + echo "START=$START END=$END (거래일 5: 21~24,27)" + echo "MODE=$MODE TRIALS=$TRIALS STRATEGIES=$STRATEGIES" + echo "apply-best=ON orderbook=off n_jobs=1 RESTART_BOT=$RESTART_BOT" + echo "PY=$PY" + echo "master_log=$MASTER" + free -h | sed -n '1,2p' + df -h / | tail -1 +} | tee -a "$MASTER" +echo "$MASTER" > logs/optuna_4strat_5d_apply_latest_master.logpath + +run_one() { + local strat="$1" + local ts study log sort_by + ts="$(date +%Y%m%d_%H%M%S)" + study="${strat}_${MODE}_5d_apply_${START//-/}_${END//-/}_${ts}" + log="logs/optuna_${strat}_${MODE}_5d_apply_${ts}.log" + sort_by="pnl" + case "$strat" in + momentum|us_momentum|scalp) sort_by="score" ;; + esac + + { + echo "" + echo "-------- [$strat] START $(date -Is) study=$study --------" + echo "LOG=$log" + } | tee -a "$MASTER" + echo "$log" > "logs/optuna_${strat}_5d_apply_latest.logpath" + echo "$study" > "logs/optuna_${strat}_5d_apply_latest.study" + + set +e + "$PY" -u kis_trader/backtest/param_search_optuna.py \ + --strategy "$strat" \ + --mode "$MODE" \ + --start "$START" \ + --end "$END" \ + --trials "$TRIALS" \ + --min_trades "$MIN_TRADES" \ + --min_win_rate "$MIN_WIN_RATE" \ + --min_pf "$MIN_PF" \ + --sort-by "$sort_by" \ + --orderbook-filter off \ + --no-progress \ + --n-jobs 1 \ + --study-name "$study" \ + --apply-best \ + >"$log" 2>&1 + local rc=$? + set -e + + { + echo "-------- [$strat] END rc=$rc $(date -Is) --------" + if [[ "$rc" -ne 0 ]]; then + echo "⚠️ [$strat] 실패 rc=$rc — 다음 전략 계속. tail: $log" + else + echo "✅ [$strat] 완료(+apply-best 시도). log=$log" + fi + grep -E 'OPTUNA_RESULT_JSON=|OPTUNA_BRIEFING_MD=|Best trial|optuna_best|apply-best|DB 적용|env_config|스킵|gated|Traceback|KeyError' "$log" | tail -n 30 || true + free -h | sed -n '2p' + } | tee -a "$MASTER" + + return 0 +} + +for s in $STRATEGIES; do + run_one "$s" +done + +{ + echo "" + echo "======== ALL DONE $(date -Is) ========" + echo "JSON/briefing: kis_trader/backtest/results/optuna_*_tpe_*5d* 또는 로그의 OPTUNA_RESULT_JSON=" + echo "개별 로그: logs/optuna_*_5d_apply_*.log" +} | tee -a "$MASTER" + +if [[ "$RESTART_BOT" == "1" ]]; then + { + echo "$(date -Is) 실매 봇 재시작 (적용 파람 로드)..." + sudo systemctl restart kis_trader_main.service + sleep 2 + systemctl is-active kis_trader_main.service || true + } | tee -a "$MASTER" +fi + +echo "$(date -Is) script exit 0" | tee -a "$MASTER" diff --git a/scripts/run_optuna_4strat_tpe_seq.sh b/scripts/run_optuna_4strat_tpe_seq.sh new file mode 100755 index 0000000..53e27d0 --- /dev/null +++ b/scripts/run_optuna_4strat_tpe_seq.sh @@ -0,0 +1,103 @@ +#!/bin/bash +# 4전략 Optuna mode=tpe 순차 실행 (병렬 X — RAM/틱 로딩 OOM 방지) +# 기본 기간: 어제~오늘(호출 시 START/END 오버라이드) +# --apply-best 없음 — 결과 JSON만. apply 는 사용자 승인 후. +# +# 사용: +# nohup bash scripts/run_optuna_4strat_tpe_seq.sh >> logs/optuna_4strat_tpe_master.log 2>&1 & +# tail -f logs/optuna_4strat_tpe_latest_master.logpath # 경로만 +# tail -f "$(cat logs/optuna_4strat_tpe_latest_master.logpath)" +# +# START=2026-07-20 END=2026-07-21 TRIALS=200 bash scripts/run_optuna_4strat_tpe_seq.sh + +set -euo pipefail +cd /home/hoon/kis_bot +mkdir -p logs kis_trader/backtest/results + +START="${START:-2026-07-20}" +END="${END:-2026-07-21}" +MODE="${MODE:-tpe}" +TRIALS="${TRIALS:-200}" +MIN_TRADES="${MIN_TRADES:-1}" +# 탐색 게이트 OFF — TPE 학습. 사후 후보는 JSON results_gated (REPORT_MIN_*) +MIN_WIN_RATE="${MIN_WIN_RATE:-0}" +MIN_PF="${MIN_PF:-0}" +# 공백 구분 — 기본 국내4 (해외 us_momentum 은 STRATEGIES 에 넣을 때만) +# STRATEGIES="momentum tail" bash ... +# STRATEGIES="us_momentum momentum" bash ... +STRATEGIES="${STRATEGIES:-momentum tail breakout scalp}" +PY="${PY:-.venv/bin/python}" +TS0="$(date +%Y%m%d_%H%M%S)" +MASTER="logs/optuna_4strat_tpe_${START}_${END}_${TS0}_master.log" + +{ + echo "======== Optuna 4전략 TPE 순차 시작 $(date -Is) ========" + echo "START=$START END=$END MODE=$MODE TRIALS=$TRIALS" + echo "STRATEGIES=$STRATEGIES" + echo "min_wr=$MIN_WIN_RATE min_pf=$MIN_PF min_trades=$MIN_TRADES" + echo "apply-best=OFF orderbook=off n_jobs=1 (사후 results_gated + briefing.md)" + echo "master_log=$MASTER" + free -h | sed -n '1,2p' + df -h / | tail -1 +} | tee -a "$MASTER" +echo "$MASTER" > logs/optuna_4strat_tpe_latest_master.logpath + +run_one() { + local strat="$1" + local ts study log sort_by + ts="$(date +%Y%m%d_%H%M%S)" + study="${strat}_tpe_${START//-/}_${END//-/}_${ts}" + log="logs/optuna_${strat}_tpe_${ts}.log" + sort_by="pnl" + case "$strat" in + momentum|us_momentum|scalp) sort_by="score" ;; + esac + + { + echo "" + echo "-------- [$strat] START $(date -Is) study=$study --------" + } | tee -a "$MASTER" + echo "$log" > "logs/optuna_${strat}_tpe_latest.logpath" + echo "$study" > "logs/optuna_${strat}_tpe_latest.study" + + set +e + "$PY" -u kis_trader/backtest/param_search_optuna.py \ + --strategy "$strat" \ + --mode "$MODE" \ + --start "$START" \ + --end "$END" \ + --trials "$TRIALS" \ + --min_trades "$MIN_TRADES" \ + --min_win_rate "$MIN_WIN_RATE" \ + --min_pf "$MIN_PF" \ + --orderbook-filter off \ + --no-progress \ + --study-name "$study" \ + --sort-by "$sort_by" \ + >"$log" 2>&1 + local rc=$? + set -e + + { + echo "-------- [$strat] END rc=$rc $(date -Is) --------" + echo "LOG=$log" + grep -E 'OPTUNA_RESULT_JSON=|OPTUNA_BRIEFING_MD=|Best trial|optuna_best|❌|KeyError|Traceback' "$log" | tail -n 24 || true + } | tee -a "$MASTER" + + if [[ "$rc" -ne 0 ]]; then + echo "⚠️ [$strat] 실패 rc=$rc — 다음 전략 계속" | tee -a "$MASTER" + fi + return 0 +} + +for s in $STRATEGIES; do + run_one "$s" +done + +{ + echo "" + echo "======== ALL DONE $(date -Is) ========" + echo "apply 하지 않음. JSON= kis_trader/backtest/results/optuna_*_tpe_*.json" + echo "브리핑= 같은 이름 .briefing.md (이전 장 / 앞으로 장)" + echo "검증: .venv/bin/python scripts/verify_optuna_tpe_apply_dryrun.py" +} | tee -a "$MASTER" diff --git a/scripts/run_optuna_after_scalp_4d_20260721_24.sh b/scripts/run_optuna_after_scalp_4d_20260721_24.sh new file mode 100755 index 0000000..792d84f --- /dev/null +++ b/scripts/run_optuna_after_scalp_4d_20260721_24.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# SCALP Optuna(현재 PID) 종료 후 → tail · momentum · breakout 순차 실행 +# 기간 2026-07-21~24 · mode=tpe · trials=200 · apply-best 없음 · 호가 OFF +# +# nohup bash scripts/run_optuna_after_scalp_4d_20260721_24.sh >> logs/optuna_after_scalp_waiter.log 2>&1 & +# tail -f logs/optuna_4strat_seq_*_master.log # 체인 시작 후 +# cat logs/optuna_after_scalp_waiter_latest.logpath + +set -euo pipefail +cd /home/hoon/kis_bot +mkdir -p logs + +WAIT_PID="${WAIT_PID:-2656890}" +START="${START:-2026-07-21}" +END="${END:-2026-07-24}" +MODE="${MODE:-tpe}" +TRIALS="${TRIALS:-200}" +# scalp 는 이미 돌고 있으므로 나머지 3개만 +STRATEGIES="${STRATEGIES:-tail momentum breakout}" + +WAITER_LOG="logs/optuna_after_scalp_waiter_$(date +%Y%m%d_%H%M%S).log" +echo "$WAITER_LOG" > logs/optuna_after_scalp_waiter_latest.logpath + +{ + echo "======== waiter start $(date -Is) ========" + echo "WAIT_PID=$WAIT_PID (scalp 종료 대기)" + echo "THEN: STRATEGIES=$STRATEGIES START=$START END=$END MODE=$MODE TRIALS=$TRIALS" + echo "apply-best=OFF" +} | tee -a "$WAITER_LOG" + +if kill -0 "$WAIT_PID" 2>/dev/null; then + echo "$(date -Is) waiting for PID $WAIT_PID ..." | tee -a "$WAITER_LOG" + while kill -0 "$WAIT_PID" 2>/dev/null; do + sleep 30 + done + echo "$(date -Is) PID $WAIT_PID exited" | tee -a "$WAITER_LOG" +else + echo "$(date -Is) PID $WAIT_PID already gone — 바로 체인 시작" | tee -a "$WAITER_LOG" +fi + +# 잔여 param_search_optuna 있으면 잠깐 더 대기 (락/중복 기동 방지) +for _ in 1 2 3 4 5 6; do + if pgrep -f 'param_search_optuna.py' >/dev/null 2>&1; then + echo "$(date -Is) 다른 param_search_optuna 잔여 — 30s 대기" | tee -a "$WAITER_LOG" + sleep 30 + else + break + fi +done + +export START END MODE TRIALS STRATEGIES +echo "$(date -Is) launching 4strat seq (remaining) ..." | tee -a "$WAITER_LOG" +bash scripts/run_optuna_4strat_seq_20260715_16.sh >> "$WAITER_LOG" 2>&1 +echo "$(date -Is) chain finished rc=$?" | tee -a "$WAITER_LOG" diff --git a/scripts/run_optuna_mid_enroll_full_apply.sh b/scripts/run_optuna_mid_enroll_full_apply.sh new file mode 100755 index 0000000..d986d29 --- /dev/null +++ b/scripts/run_optuna_mid_enroll_full_apply.sh @@ -0,0 +1,138 @@ +#!/bin/bash +# 중편입·틱가 주입 후 전전략 Optuna 재탐색 + 1위 적용 +# 순서: 미장(전역+종목cfg) 우선 → 국장4 (내일용) +# 이후: 웹백테 스모크 + 요약 리포트 +# +# nohup bash scripts/run_optuna_mid_enroll_full_apply.sh >> logs/optuna_mid_enroll_master_nohup.log 2>&1 & +# tail -f "$(cat logs/optuna_mid_enroll_latest_master.logpath)" + +set -euo pipefail +cd /home/hoon/kis_bot +mkdir -p logs kis_trader/backtest/results + +START="${START:-2026-07-21}" +END="${END:-2026-07-23}" +MODE="${MODE:-tpe}" +# 미장 22시 전 우선: US는 100, 국장은 200 (필요 시 env 오버라이드) +US_TRIALS="${US_TRIALS:-100}" +KR_TRIALS="${KR_TRIALS:-200}" +MIN_TRADES="${MIN_TRADES:-1}" +MIN_WIN_RATE="${MIN_WIN_RATE:-0}" +MIN_PF="${MIN_PF:-0}" +# 종목 cfg — DB us_momentum_stock_config +US_SYMBOLS="${US_SYMBOLS:-QQQM SPCX SPYM TSLA}" +PY="${PY:-.venv/bin/python}" +TS0="$(date +%Y%m%d_%H%M%S)" +MASTER="logs/optuna_mid_enroll_${START}_${END}_${TS0}_master.log" +REPORT="logs/optuna_mid_enroll_${START}_${END}_${TS0}_report.txt" + +{ + echo "======== mid-enroll/tick Optuna FULL+APPLY $(date -Is) ========" + echo "START=$START END=$END MODE=$MODE" + echo "US_TRIALS=$US_TRIALS KR_TRIALS=$KR_TRIALS" + echo "US_SYMBOLS=$US_SYMBOLS" + echo "apply-best=ON (gated 1위, pnl<=0 스킵)" + echo "master=$MASTER" + free -h | sed -n '1,2p' +} | tee -a "$MASTER" +echo "$MASTER" > logs/optuna_mid_enroll_latest_master.logpath +echo "$REPORT" > logs/optuna_mid_enroll_latest_report.path + +run_one() { + local strat="$1" + local trials="$2" + local symbol="${3:-}" + local ts study log sort_by tag + ts="$(date +%Y%m%d_%H%M%S)" + tag="$strat" + if [[ -n "$symbol" ]]; then + tag="${strat}_${symbol}" + fi + study="${tag}_${MODE}_${START//-/}_${END//-/}_${ts}" + log="logs/optuna_${tag}_${MODE}_${ts}.log" + sort_by="pnl" + case "$strat" in + momentum|us_momentum|scalp) sort_by="score" ;; + esac + + { + echo "" + echo "-------- [$tag] START $(date -Is) study=$study trials=$trials --------" + } | tee -a "$MASTER" + echo "$log" > "logs/optuna_${tag}_${MODE}_latest.logpath" + echo "$study" > "logs/optuna_${tag}_${MODE}_latest.study" + + set +e + local cmd=( + "$PY" -u kis_trader/backtest/param_search_optuna.py + --strategy "$strat" + --mode "$MODE" + --start "$START" + --end "$END" + --trials "$trials" + --min_trades "$MIN_TRADES" + --min_win_rate "$MIN_WIN_RATE" + --min_pf "$MIN_PF" + --orderbook-filter off + --no-progress + --study-name "$study" + --sort-by "$sort_by" + --apply-best + ) + if [[ -n "$symbol" ]]; then + cmd+=(--symbol "$symbol") + fi + "${cmd[@]}" >"$log" 2>&1 + local rc=$? + set -e + + { + echo "-------- [$tag] END rc=$rc $(date -Is) --------" + echo "LOG=$log" + grep -E 'OPTUNA_RESULT_JSON=|Best trial|apply-best|gated|DB 미적용|❌|KeyError|Traceback' "$log" | tail -n 30 || true + } | tee -a "$MASTER" + + if [[ "$rc" -ne 0 ]]; then + echo "⚠️ [$tag] 실패 rc=$rc — 계속" | tee -a "$MASTER" + fi + return 0 +} + +# ── 1) 미장 전역 + 종목 cfg (22시 오픈 우선) ── +run_one us_momentum "$US_TRIALS" +for sym in $US_SYMBOLS; do + run_one us_momentum "$US_TRIALS" "$sym" +done + +# ── 2) 국장 4전략 (내일) ── +for s in momentum tail breakout scalp; do + run_one "$s" "$KR_TRIALS" +done + +{ + echo "" + echo "======== Optuna ALL DONE $(date -Is) ========" +} | tee -a "$MASTER" + +# ── 3) 웹백테 스모크(현재 DB) + 요약 ── +{ + echo "" + echo "======== POST: web backtest smoke $(date -Is) ========" +} | tee -a "$MASTER" + +set +e +"$PY" -u scripts/post_optuna_mid_enroll_verify.py \ + --start "$START" --end "$END" \ + --report "$REPORT" \ + >>"$MASTER" 2>&1 +vrc=$? +set -e +echo "verify_rc=$vrc report=$REPORT" | tee -a "$MASTER" + +{ + echo "" + echo "======== ALL PIPELINE DONE $(date -Is) ========" + echo "master=$MASTER" + echo "report=$REPORT" + echo "봇 재시작은 verify 스크립트가 필요 시 수행" +} | tee -a "$MASTER" diff --git a/scripts/run_optuna_momentum_ls_then_bt.sh b/scripts/run_optuna_momentum_ls_then_bt.sh new file mode 100755 index 0000000..5df2eea --- /dev/null +++ b/scripts/run_optuna_momentum_ls_then_bt.sh @@ -0,0 +1,147 @@ +#!/bin/bash +# 모멘텀 Optuna (LS 유니버스 이력) → 현재 DB 백테(LS) 비교용 +# --apply-best 없음 · 실매 미적용 · 봇 재시작 없음 +# +# nohup bash scripts/run_optuna_momentum_ls_then_bt.sh \ +# >> logs/optuna_mom_ls_then_bt_nohup.out 2>&1 & +# tail -f "$(cat logs/optuna_mom_ls_then_bt_latest_master.logpath)" + +set -euo pipefail +cd /home/hoon/kis_bot +mkdir -p logs kis_trader/backtest/results + +# LS 이력은 수집 시작일(현재 ~2026-07-27 10:45~) 이전 슬롯이 없음. +# 키움 타임라인 혼입 버그 수정 후: LS 데이터가 있는 구간만 탐색. +START="${START:-2026-07-27}" +END="${END:-2026-07-28}" +MODE="${MODE:-tpe}" +TRIALS="${TRIALS:-200}" +MIN_TRADES="${MIN_TRADES:-1}" +HIST_SRC="${HIST_SRC:-ls}" +PY="${PY:-}" +if [[ -z "$PY" ]]; then + if [[ -x .venv/bin/python ]]; then + PY=".venv/bin/python" + else + PY="python3" + fi +fi + +TS0="$(date +%Y%m%d_%H%M%S)" +STUDY="momentum_${MODE}_ls_${START//-/}_${END//-/}_${TS0}" +MASTER="logs/optuna_mom_ls_then_bt_${TS0}_master.log" +OPTUNA_LOG="logs/optuna_momentum_${MODE}_ls_${TS0}.log" +BT_LOG="logs/bt_momentum_ls_currdb_${TS0}.log" + +{ + echo "======== 모멘텀 Optuna(LS)→백테 시작 $(date -Is) ========" + echo "START=$START END=$END MODE=$MODE TRIALS=$TRIALS" + echo "universe_history_source=$HIST_SRC apply-best=OFF 실매적용=없음" + echo "study=$STUDY" + echo "optuna_log=$OPTUNA_LOG" + echo "bt_log=$BT_LOG" + echo "master=$MASTER" + free -h | sed -n '1,2p' +} | tee -a "$MASTER" +echo "$MASTER" > logs/optuna_mom_ls_then_bt_latest_master.logpath +echo "$OPTUNA_LOG" > logs/optuna_mom_ls_then_bt_latest_optuna.logpath +echo "$STUDY" > logs/optuna_mom_ls_then_bt_latest.study + +set +e +"$PY" -u kis_trader/backtest/param_search_optuna.py \ + --strategy momentum \ + --mode "$MODE" \ + --start "$START" \ + --end "$END" \ + --trials "$TRIALS" \ + --min_trades "$MIN_TRADES" \ + --min_win_rate 0 \ + --min_pf 0 \ + --sort-by score \ + --orderbook-filter off \ + --universe-history-source "$HIST_SRC" \ + --study-name "$STUDY" \ + --no-progress \ + --n-jobs 1 \ + >> "$OPTUNA_LOG" 2>&1 +RC_OPT=$? +set -e + +{ + echo "" + echo "-------- Optuna 종료 rc=$RC_OPT $(date -Is) --------" + if [[ $RC_OPT -ne 0 ]]; then + echo "❌ Optuna 실패 — 백테 스킵. log=$OPTUNA_LOG" + fi + # best 요약 (있으면) + "$PY" - <> "$BT_LOG" 2>&1 +RC_BT=$? +set -e + +{ + echo "-------- 현재 DB 백테 종료 rc=$RC_BT $(date -Is) --------" + echo "optuna_log=$OPTUNA_LOG" + echo "bt_log=$BT_LOG" + echo "실매 미적용(apply-best 없음) · 봇 재시작 없음" + echo "======== 전체 종료 $(date -Is) ========" +} | tee -a "$MASTER" + +exit "$RC_BT" diff --git a/scripts/run_optuna_scalp_breakout_ls.sh b/scripts/run_optuna_scalp_breakout_ls.sh new file mode 100755 index 0000000..7c3dbef --- /dev/null +++ b/scripts/run_optuna_scalp_breakout_ls.sh @@ -0,0 +1,128 @@ +#!/bin/bash +# 스캘핑 → 돌파 Optuna (LS 유니버스) 순차 실행 +# --apply-best 없음 · 실매 미적용 · 봇 재시작 없음 +# +# nohup bash scripts/run_optuna_scalp_breakout_ls.sh \ +# >> logs/optuna_scalp_bo_ls_nohup.out 2>&1 & +# tail -f "$(cat logs/optuna_scalp_bo_ls_latest_master.logpath)" + +set -euo pipefail +cd /home/hoon/kis_bot +mkdir -p logs kis_trader/backtest/results + +START="${START:-2026-07-27}" +END="${END:-2026-07-28}" +MODE="${MODE:-tpe}" +TRIALS="${TRIALS:-200}" +MIN_TRADES="${MIN_TRADES:-1}" +HIST_SRC="${HIST_SRC:-ls}" +PY="${PY:-}" +if [[ -z "$PY" ]]; then + if [[ -x .venv/bin/python ]]; then + PY=".venv/bin/python" + else + PY="python3" + fi +fi + +TS0="$(date +%Y%m%d_%H%M%S)" +MASTER="logs/optuna_scalp_bo_ls_${TS0}_master.log" +{ + echo "======== 스캘핑+돌파 Optuna(LS) 시작 $(date -Is) ========" + echo "START=$START END=$END MODE=$MODE TRIALS=$TRIALS HIST=$HIST_SRC" + echo "apply-best=OFF 실매적용=없음 · 순차: scalp → breakout" + echo "master=$MASTER" + free -h | sed -n '1,2p' +} | tee -a "$MASTER" +echo "$MASTER" > logs/optuna_scalp_bo_ls_latest_master.logpath + +run_one() { + local STRAT="$1" + # breakout/tail: pnl|win_rate 만 허용. scalp/momentum: score|pnl|win_rate + local SORT_BY="score" + if [[ "$STRAT" == "breakout" || "$STRAT" == "tail" ]]; then + SORT_BY="pnl" + fi + local STUDY="${STRAT}_${MODE}_ls_${START//-/}_${END//-/}_${TS0}" + local OPTUNA_LOG="logs/optuna_${STRAT}_${MODE}_ls_${TS0}.log" + echo "$STUDY" > "logs/optuna_${STRAT}_ls_latest.study" + echo "$OPTUNA_LOG" > "logs/optuna_${STRAT}_ls_latest.logpath" + + { + echo "" + echo "-------- ${STRAT} Optuna START $(date -Is) --------" + echo "study=$STUDY sort_by=$SORT_BY" + echo "optuna_log=$OPTUNA_LOG" + } | tee -a "$MASTER" + + set +e + "$PY" -u kis_trader/backtest/param_search_optuna.py \ + --strategy "$STRAT" \ + --mode "$MODE" \ + --start "$START" \ + --end "$END" \ + --trials "$TRIALS" \ + --min_trades "$MIN_TRADES" \ + --min_win_rate 0 \ + --min_pf 0 \ + --sort-by "$SORT_BY" \ + --orderbook-filter off \ + --universe-history-source "$HIST_SRC" \ + --study-name "$STUDY" \ + --no-progress \ + --n-jobs 1 \ + >> "$OPTUNA_LOG" 2>&1 + local RC=$? + set -e + + { + echo "-------- ${STRAT} Optuna 종료 rc=$RC $(date -Is) --------" + if [[ $RC -ne 0 ]]; then + echo "❌ ${STRAT} 실패 log=$OPTUNA_LOG" + else + "$PY" - <> logs/optuna_us_fee_master_nohup.log 2>&1 & +# tail -f "$(cat logs/optuna_us_fee_latest_master.logpath)" + +set -euo pipefail +cd /home/hoon/kis_bot +mkdir -p logs kis_trader/backtest/results + +START="${START:-2026-07-21}" +END="${END:-2026-07-23}" +MODE="${MODE:-tpe}" +US_TRIALS="${US_TRIALS:-100}" +MIN_TRADES="${MIN_TRADES:-1}" +MIN_WIN_RATE="${MIN_WIN_RATE:-0}" +MIN_PF="${MIN_PF:-0}" +US_SYMBOLS="${US_SYMBOLS:-QQQM SPCX SPYM TSLA}" +PY="${PY:-.venv/bin/python}" +TS0="$(date +%Y%m%d_%H%M%S)" +MASTER="logs/optuna_us_fee_${START}_${END}_${TS0}_master.log" +REPORT="logs/optuna_us_fee_${START}_${END}_${TS0}_report.txt" + +{ + echo "======== US fee/FX Optuna FULL+APPLY $(date -Is) ========" + echo "START=$START END=$END MODE=$MODE US_TRIALS=$US_TRIALS" + echo "US_SYMBOLS=$US_SYMBOLS" + echo "apply-best=ON" + echo "master=$MASTER" + "$PY" - <<'PY' +from kis_trader.engine.us_momentum_env_keys import us_momentum_trading_cost_rates +from kis_trader.utils.env import invalidate_merged_env_cache +invalidate_merged_env_cache() +print("cost_rates", us_momentum_trading_cost_rates()) +PY +} | tee -a "$MASTER" +echo "$MASTER" > logs/optuna_us_fee_latest_master.logpath +echo "$REPORT" > logs/optuna_us_fee_latest_report.path + +run_one() { + local symbol="${1:-}" + local ts study log tag + ts="$(date +%Y%m%d_%H%M%S)" + tag="us_momentum" + if [[ -n "$symbol" ]]; then + tag="us_momentum_${symbol}" + fi + # 새 study — fee 반영 재탐색 (구 study 재사용 금지) + study="${tag}_${MODE}_fee_${START//-/}_${END//-/}_${ts}" + log="logs/optuna_${tag}_${MODE}_fee_${ts}.log" + + { + echo "" + echo "-------- [$tag] START $(date -Is) study=$study trials=$US_TRIALS --------" + } | tee -a "$MASTER" + echo "$log" > "logs/optuna_${tag}_${MODE}_latest.logpath" + echo "$study" > "logs/optuna_${tag}_${MODE}_latest.study" + + set +e + local cmd=( + "$PY" -u kis_trader/backtest/param_search_optuna.py + --strategy us_momentum + --mode "$MODE" + --start "$START" + --end "$END" + --trials "$US_TRIALS" + --min_trades "$MIN_TRADES" + --min_win_rate "$MIN_WIN_RATE" + --min_pf "$MIN_PF" + --orderbook-filter off + --no-progress + --study-name "$study" + --sort-by score + --apply-best + ) + if [[ -n "$symbol" ]]; then + cmd+=(--symbol "$symbol") + fi + "${cmd[@]}" >"$log" 2>&1 + local rc=$? + set -e + + { + echo "-------- [$tag] END rc=$rc $(date -Is) --------" + echo "LOG=$log" + grep -E 'OPTUNA_RESULT_JSON=|Best trial|apply-best|gated|DB 미적용|❌|KeyError|Traceback|fee_rate|fx_fee' "$log" | tail -n 40 || true + } | tee -a "$MASTER" + + if [[ "$rc" -ne 0 ]]; then + echo "⚠️ [$tag] 실패 rc=$rc — 계속" | tee -a "$MASTER" + fi + return 0 +} + +run_one "" +for sym in $US_SYMBOLS; do + run_one "$sym" +done + +{ + echo "" + echo "======== US Optuna ALL DONE $(date -Is) ========" +} | tee -a "$MASTER" + +{ + echo "" + echo "======== POST: US web backtest smoke $(date -Is) ========" +} | tee -a "$MASTER" + +set +e +"$PY" -u scripts/post_optuna_mid_enroll_verify.py \ + --start "$START" --end "$END" \ + --report "$REPORT" \ + --us-only \ + >>"$MASTER" 2>&1 +vrc=$? +set -e +echo "verify_rc=$vrc report=$REPORT" | tee -a "$MASTER" + +{ + echo "" + echo "======== ALL PIPELINE DONE $(date -Is) ========" + echo "master=$MASTER" + echo "report=$REPORT" +} | tee -a "$MASTER" diff --git a/scripts/run_strategy_backtest_cli.py b/scripts/run_strategy_backtest_cli.py new file mode 100644 index 0000000..681dc61 --- /dev/null +++ b/scripts/run_strategy_backtest_cli.py @@ -0,0 +1,240 @@ +#!/usr/bin/env python3 +""" +전략 백테 CLI 1회 — 웹 API 와 동일 핸들러 (Flask test_request_context). + + python3 -u scripts/run_strategy_backtest_cli.py \\ + --strategy scalp|breakout|momentum|tail \\ + --start 2026-07-20 --end 2026-07-22 + +꼬리(tail)는 세밀 progress 가 필요하면 scripts/run_tail_backtest_cli.py 를 쓰세요. +이 스크립트는 스캘핑·돌파·모멘텀(+ tail 폴백)용. +DB 미저장. Optuna 아님. +""" +from __future__ import annotations + +import argparse +import json +import logging +import sys +import threading +import time +from datetime import datetime +from pathlib import Path +from typing import Any, Dict, Optional +from urllib.parse import urlencode + +ROOT = Path(__file__).resolve().parents[1] +if str(ROOT) not in sys.path: + sys.path.insert(0, str(ROOT)) + +from kis_trader.utils.kr_trading_day import clamp_to_prev_kr_trading_day + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s [%(levelname)s] %(message)s", + datefmt="%H:%M:%S", +) +logger = logging.getLogger("strategy_bt_cli") + +_ROUTE = { + "scalp": ("/api/backtest/scalping", "api_backtest_scalping"), + "breakout": ("/api/backtest/breakout", "api_backtest_breakout"), + "momentum": ("/api/backtest/momentum", "api_backtest_momentum"), + "tail": ("/api/backtest/tail", "api_backtest_tail"), +} + + +def _write_progress( + path: Optional[str], + *, + pct: float, + phase: str, + message: str = "", +) -> None: + if not path: + return + try: + payload = { + "pct": int(max(0, min(100, round(float(pct))))), + "phase": str(phase or ""), + "message": str(message or ""), + "ts": time.time(), + } + p = Path(path) + p.parent.mkdir(parents=True, exist_ok=True) + tmp = p.with_suffix(".tmp") + tmp.write_text(json.dumps(payload, ensure_ascii=False), encoding="utf-8") + tmp.replace(p) + except Exception: + pass + + +def _bool_arg(val: Optional[str], default: Optional[bool] = None) -> Optional[bool]: + if val is None or str(val).strip() == "": + return default + return str(val).strip().lower() in ("1", "true", "t", "y", "yes", "on") + + +def _heartbeat(prog_file: Optional[str], stop_evt: threading.Event) -> None: + """엔진 중 조악 progress (웹 핸들러는 내부 progress 없음).""" + pct = 30.0 + while not stop_evt.wait(2.0): + pct = min(88.0, pct + 2.5) + _write_progress(prog_file, pct=pct, phase="engine", message="웹엔진 실행중") + + +def main() -> int: + ap = argparse.ArgumentParser(description="전략 백테 CLI (웹 동일 핸들러)") + ap.add_argument( + "--strategy", + required=True, + choices=sorted(_ROUTE.keys()), + help="scalp|breakout|momentum|tail", + ) + ap.add_argument("--start", required=True) + ap.add_argument("--end", required=True) + ap.add_argument("--timeframe", type=int, default=0, help="꼬리만 사용(3/5/15/60), 0=기본") + ap.add_argument( + "--universe", + default="history", + help="history|all|sim (전략별 웹 파서 따름)", + ) + ap.add_argument( + "--universe-history-source", + default="", + choices=["", "kiwoom", "ls"], + help="이력 테이블: kiwoom(기본) | ls (BACKTEST_UNIVERSE_HISTORY_SOURCE)", + ) + ap.add_argument("--job-id", default="") + ap.add_argument("--out-dir", default="") + ap.add_argument("--progress-file", default="") + ap.add_argument("--orderbook-filter", choices=["off", "on", "auto"], default="off") + ap.add_argument("--tick-db", default="", help="1/0/빈칸") + ap.add_argument("--env-timeline", action="store_true") + ap.add_argument("--params-json", default="", help="미사용(예약) — 웹폼 저장 후 DB 반영 권장") + args = ap.parse_args() + + strat = args.strategy.strip().lower() + start = clamp_to_prev_kr_trading_day(str(args.start).strip()) + end = clamp_to_prev_kr_trading_day(str(args.end).strip()) + if start > end: + start, end = end, start + + ts = datetime.now().strftime("%Y%m%d_%H%M%S") + job_id = (args.job_id or f"{strat}_bt_cli_{start.replace('-', '')}_{end.replace('-', '')}_{ts}").strip() + out_dir = Path(args.out_dir) if args.out_dir else (ROOT / "kis_trader" / "backtest" / "results") + out_dir.mkdir(parents=True, exist_ok=True) + out_json = out_dir / f"{job_id}.json" + prog_file = (args.progress_file or "").strip() or None + + logger.info( + "🚀 %s BT CLI 시작 job=%s | %s~%s univ=%s hist_src=%s", + strat, job_id, start, end, args.universe, args.universe_history_source or "env/kiwoom", + ) + t0 = time.time() + _write_progress(prog_file, pct=5, phase="init", message="초기화") + + q: Dict[str, Any] = { + "start": start, + "end": end, + "universe": args.universe or "history", + } + if (args.universe_history_source or "").strip(): + q["universe_history_source"] = str(args.universe_history_source).strip() + if args.timeframe and int(args.timeframe) > 0: + q["timeframe"] = int(args.timeframe) + if args.env_timeline: + q["env_timeline"] = "1" + tick = _bool_arg(args.tick_db, None) + if tick is not None: + q["backtest_use_tick_db"] = "1" if tick else "0" + ob = (args.orderbook_filter or "off").strip().lower() + if ob == "off": + q["ob_filter"] = "0" + elif ob == "on": + q["ob_filter"] = "1" + + qs = urlencode({k: str(v) for k, v in q.items() if v is not None and str(v) != ""}) + path, fn_name = _ROUTE[strat] + + _write_progress(prog_file, pct=20, phase="import", message="웹모듈 로드") + import backtest_web as bw # noqa: WPS433 — CLI 전용, 웹과 동일 핸들러 + + fn = getattr(bw, fn_name, None) + if not callable(fn): + logger.error("핸들러 없음: %s", fn_name) + _write_progress(prog_file, pct=100, phase="error", message=f"핸들러 없음 {fn_name}") + return 1 + + stop_hb = threading.Event() + hb = threading.Thread(target=_heartbeat, args=(prog_file, stop_hb), daemon=True) + hb.start() + _write_progress(prog_file, pct=30, phase="engine", message="웹엔진 실행중") + try: + with bw.app.test_request_context(f"{path}?{qs}"): + resp = fn() + if isinstance(resp, tuple): + resp = resp[0] + data = resp.get_json(silent=True) if hasattr(resp, "get_json") else None + if not isinstance(data, dict): + raise RuntimeError(f"응답 JSON 아님: {type(resp)}") + if data.get("error") and not data.get("summary") and not data.get("ok", True): + raise RuntimeError(str(data.get("error"))) + finally: + stop_hb.set() + try: + hb.join(timeout=1.0) + except Exception: + pass + + elapsed = time.time() - t0 + summary = data.get("summary") or {} + trades = data.get("trades") or [] + out = dict(data) + out["ok"] = True + out["job_id"] = job_id + out["kind"] = "strategy_bt_cli" + out["strategy"] = strat + out["start"] = start + out["end"] = end + out["elapsed_sec"] = round(elapsed, 1) + out["n_trades"] = len(trades) if isinstance(trades, list) else int(summary.get("total_trades") or 0) + out["note"] = f"웹 {path} 동일 핸들러 · DB 미저장 · Optuna 아님" + out_json.write_text(json.dumps(out, ensure_ascii=False, indent=2, default=str), encoding="utf-8") + + _write_progress( + prog_file, + pct=100, + phase="done", + message=f"완료 trades={out['n_trades']} PnL={summary.get('total_pnl')}", + ) + logger.info( + "✅ 완료 %.1fs | trades=%s WR=%s PnL=%s | %s", + elapsed, + out["n_trades"], + summary.get("win_rate"), + summary.get("total_pnl"), + out_json, + ) + print( + json.dumps( + { + "ok": True, + "job_id": job_id, + "strategy": strat, + "result_json": str(out_json), + "summary": summary, + "elapsed_sec": round(elapsed, 1), + }, + ensure_ascii=False, + ) + ) + return 0 + + +if __name__ == "__main__": + try: + raise SystemExit(main()) + except Exception as exc: + logger.exception("실패: %s", exc) + raise SystemExit(1) diff --git a/scripts/run_tail_backtest_cli.py b/scripts/run_tail_backtest_cli.py new file mode 100755 index 0000000..d76640b --- /dev/null +++ b/scripts/run_tail_backtest_cli.py @@ -0,0 +1,376 @@ +#!/usr/bin/env python3 +""" +꼬리(SHORT) 웹백테와 동일 엔진 1회 — CLI 잡 (타임아웃 없음). + + # 현재 DB 파라미터 · 저장 이력 유니버스 · 틱 ON(DB/env 기본) + python3 -u scripts/run_tail_backtest_cli.py \\ + --start 2026-07-20 --end 2026-07-22 + + # Optuna/폼 JSON 덮어쓰기 (flat params dict) + python3 -u scripts/run_tail_backtest_cli.py \\ + --start 2026-07-22 --end 2026-07-22 \\ + --params-json /path/to/params.json + + # 백그라운드 + nohup python3 -u scripts/run_tail_backtest_cli.py \\ + --start 2026-07-20 --end 2026-07-22 \\ + --out-dir kis_trader/backtest/results \\ + > logs/tail_bt_cli_YYYYMMDD_HHMMSS.log 2>&1 & + tail -f logs/tail_bt_cli_....log + +결과 JSON: {out_dir}/tail_bt_cli_{start}_{end}_{ts}.json +DB 미저장. Optuna 탐색 아님. +""" +from __future__ import annotations + +import argparse +import json +import logging +import sys +import time +from datetime import datetime +from pathlib import Path +from typing import Any, Dict, Optional + +ROOT = Path(__file__).resolve().parents[1] +if str(ROOT) not in sys.path: + sys.path.insert(0, str(ROOT)) + +from database import TradeDB +from kis_trader.backtest import tail_backtest_common as tbc +from kis_trader.backtest.backtest_portfolio_common import load_portfolio_env_row +from kis_trader.engine import tail_engine as te +from kis_trader.utils.kr_trading_day import clamp_to_prev_kr_trading_day + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s [%(levelname)s] %(message)s", + datefmt="%H:%M:%S", +) +logger = logging.getLogger("tail_bt_cli") + + +def _write_progress( + path: Optional[str], + *, + pct: float, + phase: str, + message: str = "", + step: Optional[int] = None, + total: Optional[int] = None, +) -> None: + if not path: + return + try: + payload = { + "pct": int(max(0, min(100, round(float(pct))))), + "phase": str(phase or ""), + "message": str(message or ""), + "ts": time.time(), + } + if step is not None: + payload["step"] = int(step) + if total is not None: + payload["total"] = int(total) + p = Path(path) + p.parent.mkdir(parents=True, exist_ok=True) + tmp = p.with_suffix(".tmp") + tmp.write_text(json.dumps(payload, ensure_ascii=False), encoding="utf-8") + tmp.replace(p) + except Exception: + pass + + +def _load_params_json(path: Optional[str]) -> Dict[str, Any]: + if not path: + return {} + p = Path(path) + if not p.is_file(): + raise FileNotFoundError(f"params-json 없음: {p}") + data = json.loads(p.read_text(encoding="utf-8")) + if not isinstance(data, dict): + raise ValueError("params-json 은 object 여야 함") + # Optuna 결과 파일 형태면 params / mode_combo.params 우선 + if "params" in data and isinstance(data["params"], dict): + return dict(data["params"]) + mc = data.get("mode_combo") + if isinstance(mc, dict) and isinstance(mc.get("params"), dict): + return dict(mc["params"]) + # gated row 덤프 + if "merged_params" in data and isinstance(data["merged_params"], dict): + return dict(data["merged_params"]) + return dict(data) + + +def _bool_arg(val: Optional[str], default: bool) -> bool: + if val is None or str(val).strip() == "": + return bool(default) + return str(val).strip().lower() in ("1", "true", "t", "y", "yes", "on") + + +def main() -> int: + ap = argparse.ArgumentParser(description="꼬리 백테 CLI 1회 (웹 동일 엔진)") + ap.add_argument("--start", required=True, help="YYYY-MM-DD") + ap.add_argument("--end", required=True, help="YYYY-MM-DD") + ap.add_argument("--timeframe", type=int, default=3, choices=[3, 5, 15, 60]) + ap.add_argument( + "--universe", + choices=["history", "all"], + default="history", + help="history=후보 이력(키움/LS) / all=ws_candles 전 종목", + ) + ap.add_argument( + "--universe-history-source", + default="", + choices=["", "kiwoom", "ls"], + help="이력 테이블: kiwoom(기본) | ls", + ) + ap.add_argument("--params-json", default="", help="덮어쓸 params JSON 경로") + ap.add_argument("--out-dir", default="", help="결과 JSON 디렉터리 (기본 results/)") + ap.add_argument("--job-id", default="", help="잡 ID (로그/파일명용, 비우면 자동)") + ap.add_argument( + "--tick-db", + default="", + help="1/0/빈칸 — 빈칸이면 DB/env 기본 (backtest_use_tick_db)", + ) + ap.add_argument( + "--tick-exit", + default="", + help="1/0/빈칸 — 빈칸이면 DB/env 기본 (backtest_use_tick_exit)", + ) + ap.add_argument( + "--orderbook-filter", + choices=["off", "on", "auto"], + default="off", + help="호가필터 (웹/Optuna와 동일 의미, 기본 off)", + ) + ap.add_argument( + "--env-timeline", + action="store_true", + help="그 시각 DB env 타임라인 재현 (웹 체크와 동일 계열)", + ) + ap.add_argument( + "--progress-file", + default="", + help="진행률 JSON 경로 (웹 폴링용)", + ) + args = ap.parse_args() + prog_file = (args.progress_file or "").strip() or None + + start = clamp_to_prev_kr_trading_day(str(args.start).strip()) + end = clamp_to_prev_kr_trading_day(str(args.end).strip()) + if start > end: + start, end = end, start + + ts = datetime.now().strftime("%Y%m%d_%H%M%S") + job_id = (args.job_id or f"tail_bt_cli_{start.replace('-', '')}_{end.replace('-', '')}_{ts}").strip() + out_dir = Path(args.out_dir) if args.out_dir else (ROOT / "kis_trader" / "backtest" / "results") + out_dir.mkdir(parents=True, exist_ok=True) + out_json = out_dir / f"{job_id}.json" + + logger.info("🚀 tail BT CLI 시작 job=%s | %s~%s tf=%s univ=%s", job_id, start, end, args.timeframe, args.universe) + t0 = time.time() + _write_progress(prog_file, pct=3, phase="init", message="초기화") + + db = TradeDB() + _write_progress(prog_file, pct=8, phase="db", message="DB·파라미터") + base = te.get_tail_defaults_from_db(db) + r = load_portfolio_env_row(db) + fee_rate, sell_tax, slot_from_fee = tbc.fee_and_slot_from_env_row(r) + portfolio = tbc.resolve_tail_portfolio_params( + r, base, slot_money=slot_from_fee, max_stocks=None, total_budget_krw=None, + ) + params = dict(base) + tbc.merge_tail_portfolio_into_params(params, portfolio) + params["capital"] = float(r.get("BACKTEST_CAPITAL") or params.get("capital") or 100_000_000.0) + params["timeframe"] = int(args.timeframe) + + overrides = _load_params_json(args.params_json or None) + if overrides: + # Optuna UI/% 혼재 키는 엔진이 쓰는 키만 병합 (그대로 update — 웹 폼반영과 동일 가정) + params.update(overrides) + logger.info("📌 params-json 병합 %d키", len(overrides)) + + from kis_trader.engine.tail_tick_replay import ( + tail_backtest_use_tick_db, + tail_backtest_use_tick_exit, + ) + if str(args.tick_db).strip() != "": + params["backtest_use_tick_db"] = _bool_arg(args.tick_db, True) + else: + params.setdefault("backtest_use_tick_db", tail_backtest_use_tick_db(params)) + if str(args.tick_exit).strip() != "": + params["backtest_use_tick_exit"] = _bool_arg(args.tick_exit, True) + else: + params.setdefault("backtest_use_tick_exit", tail_backtest_use_tick_exit(params)) + # 절대규칙: CLI 백테도 OHLC 폴백으로 숫자 변조 금지 + params["backtest_tick_fallback_ohlc"] = False + + ob_mode = (args.orderbook_filter or "off").strip().lower() + if ob_mode == "off": + params["_orderbook_filter_enabled"] = False + elif ob_mode == "on": + params["_orderbook_filter_enabled"] = True + + # 다단트레일 — 실매 SHORT_DAILY_PROFIT_* (apply_daily_profit_halt_sim 이 env/params 추종) + params["_daily_profit_strategy_id"] = "SHORT" + params.setdefault("_backtest_daily_profit_trail", None) # None → DB ENABLED 추종 + + if args.env_timeline: + params["_backtest_env_timeline"] = True + + start_key, end_key, start_ymd, end_ymd = tbc.date_keys(start, end) + use_hist = args.universe == "history" + hist_src = (args.universe_history_source or "").strip() or None + universe_by_slot, universe_source, universe_history_slots, scan_iv = ( + tbc.resolve_tail_universe( + start_ymd, end_ymd, use_saved_history=use_hist, history_source=hist_src, + ) + ) + params["scan_interval_min"] = scan_iv + logger.info( + "📌 유니버스=%s slots=%s | tick_db=%s tick_exit=%s", + universe_source, + universe_history_slots, + params.get("backtest_use_tick_db"), + params.get("backtest_use_tick_exit"), + ) + + rsi_period = int(params.get("rsi_period") or 14) + _write_progress(prog_file, pct=15, phase="candles", message="분봉 로드") + candles_by_code, n_bars, _ = tbc.load_tail_candles_by_code( + db, start_key, end_key, int(args.timeframe), rsi_period=rsi_period, + ) + if not candles_by_code: + logger.error("❌ 봉 없음 — 종료") + _write_progress(prog_file, pct=100, phase="error", message="봉 없음") + return 1 + logger.info("📌 봉 로드 codes=%d bars≈%s", len(candles_by_code), n_bars) + _write_progress(prog_file, pct=35, phase="candles_done", message=f"봉 {len(candles_by_code)}종") + if params.get("backtest_use_tick_db") or params.get("backtest_use_tick_exit"): + _write_progress(prog_file, pct=40, phase="ticks", message="틱 로드·리플레이 준비") + if prog_file: + params["_bt_progress_file"] = prog_file + params["_bt_progress_base_pct"] = 45 + params["_bt_progress_span_pct"] = 50 + + slot_money = float(portfolio["slot_money"]) + max_stocks = int(portfolio["max_stocks"]) + total_budget = float(portfolio["total_budget_krw"]) + # params-json 이 포트 키를 덮었으면 그쪽 우선 + if overrides.get("slot_money") is not None: + slot_money = float(overrides["slot_money"]) + if overrides.get("short_max_buy_amount") is not None and overrides.get("slot_money") is None: + slot_money = float(overrides["short_max_buy_amount"]) + if overrides.get("max_stocks") is not None: + max_stocks = int(overrides["max_stocks"]) + if overrides.get("total_budget_krw") is not None: + total_budget = float(overrides["total_budget_krw"]) + + meta: Dict[str, Any] = { + "start_key": start_key, + "end_key": end_key, + "job_id": job_id, + "universe_source": universe_source, + "universe_history_slots": universe_history_slots, + "db": db, # 틱 청산·진입 로드용 (없으면 OHLC만 → 실매와 괴리) + } + _write_progress(prog_file, pct=45, phase="engine", message="엔진 실행") + trades = tbc.run_tail_backtest_web_aligned( + candles_by_code, + params, + universe_by_slot, + slot_money=slot_money, + fee_rate=fee_rate, + sell_tax=sell_tax, + max_stocks=max_stocks, + total_budget_krw=total_budget, + meta_out=meta, + ) + # 가상거래 종목명 (웹 _enrich_trades_with_names 와 동일 소스) + try: + from kis_trader.utils.stock_name import resolve_stock_display_name + for t in trades: + c = str(t.get("code") or "").strip() + if not c: + continue + if t.get("name"): + continue + t["name"] = resolve_stock_display_name(db, c, fallback=c) + except Exception as exc: + logger.debug("종목명 enrich 스킵: %s", exc) + _write_progress(prog_file, pct=96, phase="summarize", message="요약") + period_days = max( + 1, + (datetime.strptime(end, "%Y-%m-%d") - datetime.strptime(start, "%Y-%m-%d")).days + 1, + ) + summary = tbc.summarize_tail_trades( + trades, + total_budget_krw=total_budget, + period_days=period_days, + ) + elapsed = time.time() - t0 + out = { + "ok": True, + "job_id": job_id, + "kind": "tail_bt_cli", + "strategy": "tail", + "start": start, + "end": end, + "timeframe": int(args.timeframe), + "universe": args.universe, + "universe_source": universe_source, + "elapsed_sec": round(elapsed, 1), + "summary": summary, + "n_trades": len(trades), + "trades": trades, + "meta": { + k: meta[k] + for k in meta + if k not in ("engine_params",) + }, + "params_used": { + k: params.get(k) + for k in sorted(params.keys()) + if not str(k).startswith("_") or k in ( + "_orderbook_filter_enabled", + "_backtest_daily_profit_trail", + "_daily_profit_strategy_id", + ) + }, + "note": "웹 /api/backtest/tail 동일 엔진 · DB 미저장 · Optuna 아님", + } + out_json.write_text(json.dumps(out, ensure_ascii=False, indent=2, default=str), encoding="utf-8") + _write_progress( + prog_file, pct=100, phase="done", + message=f"완료 trades={len(trades)} PnL={summary.get('total_pnl')}", + ) + logger.info( + "✅ 완료 %.1fs | trades=%s WR=%s%% PnL=%s | %s", + elapsed, + summary.get("total_trades") or summary.get("n_trades") or len(trades), + summary.get("win_rate"), + summary.get("total_pnl"), + out_json, + ) + print( + json.dumps( + { + "ok": True, + "job_id": job_id, + "result_json": str(out_json), + "summary": summary, + "elapsed_sec": round(elapsed, 1), + }, + ensure_ascii=False, + ) + ) + return 0 + + +if __name__ == "__main__": + try: + raise SystemExit(main()) + except Exception as exc: + logger.exception("실패: %s", exc) + raise SystemExit(1) diff --git a/scripts/run_tail_backtest_job.sh b/scripts/run_tail_backtest_job.sh new file mode 100755 index 0000000..cab0504 --- /dev/null +++ b/scripts/run_tail_backtest_job.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +# 꼬리 백테 CLI 잡 — nohup 래퍼 (웹 타임아웃 회피) +# 사용: +# ./scripts/run_tail_backtest_job.sh 2026-07-20 2026-07-22 +# ./scripts/run_tail_backtest_job.sh 2026-07-22 2026-07-22 --params-json /path/params.json +# ./scripts/run_tail_backtest_job.sh 2026-07-22 2026-07-22 --tick-db 0 --tick-exit 0 +set -euo pipefail +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$ROOT" +START="${1:-}" +END="${2:-}" +if [[ -z "$START" || -z "$END" ]]; then + echo "usage: $0 START END [extra args...]" >&2 + exit 2 +fi +shift 2 +TS="$(date +%Y%m%d_%H%M%S)" +JOB="tail_bt_cli_${START//-/}_${END//-/}_${TS}" +LOG_DIR="$ROOT/logs" +mkdir -p "$LOG_DIR" "$ROOT/kis_trader/backtest/results" +LOG="$LOG_DIR/${JOB}.log" +PY="${ROOT}/.venv/bin/python" +if [[ ! -x "$PY" ]]; then + PY="python3" +fi +nohup "$PY" -u "$ROOT/scripts/run_tail_backtest_cli.py" \ + --start "$START" --end "$END" \ + --job-id "$JOB" \ + --out-dir "$ROOT/kis_trader/backtest/results" \ + "$@" \ + >"$LOG" 2>&1 & +echo "pid=$!" +echo "log=$LOG" +echo "tail -f $LOG" diff --git a/scripts/verify_live_portfolio_align.py b/scripts/verify_live_portfolio_align.py index 6c242ce..2fd5115 100644 --- a/scripts/verify_live_portfolio_align.py +++ b/scripts/verify_live_portfolio_align.py @@ -25,8 +25,14 @@ class _FakeDB: def __init__(self, rows: List[Dict]): self._rows = rows - def get_universe_at(self, *, strategy_id: str, at_time: str) -> List[Dict]: - eligible = [r for r in self._rows if r["event_time"] <= at_time] + def get_universe_at( + self, *, strategy_id: str, at_time: str, history_source: str = "kiwoom", + ) -> List[Dict]: + eligible = [ + r for r in self._rows + if r["event_time"] <= at_time + and r.get("strategy_id", strategy_id) == strategy_id + ] if not eligible: return [] et = max(r["event_time"] for r in eligible) diff --git a/scripts/verify_optuna_tpe_apply_dryrun.py b/scripts/verify_optuna_tpe_apply_dryrun.py new file mode 100755 index 0000000..77ac290 --- /dev/null +++ b/scripts/verify_optuna_tpe_apply_dryrun.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python3 +""" +verify_optuna_tpe_apply_dryrun.py — TPE 결과 JSON → apply 패치 dry-run +DB INSERT 없음. 소수·키·setup_* 누락만 검사. (모멘텀 DB 오류 재발 방지) + + .venv/bin/python scripts/verify_optuna_tpe_apply_dryrun.py + .venv/bin/python scripts/verify_optuna_tpe_apply_dryrun.py --json path/to.json +""" +from __future__ import annotations + +import argparse +import json +import sys +from pathlib import Path +from typing import Any, Dict, List, Optional, Tuple + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT)) + + +def _latest_tpe_json(strategy: str) -> Optional[Path]: + d = ROOT / "kis_trader" / "backtest" / "results" + files = sorted(d.glob(f"optuna_{strategy}_tpe_*.json"), key=lambda p: p.stat().st_mtime) + return files[-1] if files else None + + +def _patch_for(strategy: str, merged: Dict[str, Any]) -> Dict[str, str]: + from kis_trader.backtest.backtest_portfolio_common import ( + session_env_patch, + strip_portfolio_keys_from_apply_patch, + ) + if strategy == "momentum": + from kis_trader.backtest.param_search_apply_snapshot import _patch_from_momentum_merged + patch = _patch_from_momentum_merged(merged) + patch.update(session_env_patch("MOMENTUM", merged)) + return strip_portfolio_keys_from_apply_patch(patch, "MOMENTUM") + if strategy == "breakout": + from kis_trader.backtest.param_search_apply_snapshot import _patch_from_breakout_merged + patch = _patch_from_breakout_merged(merged) + patch.update(session_env_patch("BREAKOUT", merged)) + return strip_portfolio_keys_from_apply_patch(patch, "BREAKOUT") + if strategy == "scalp": + from kis_trader.backtest.param_search_scalping import _params_to_db_snapshot + return _params_to_db_snapshot(merged) + if strategy == "tail": + from kis_trader.backtest.tail_param_search import _tail_params_to_env_map + patch = _tail_params_to_env_map(merged) + return strip_portfolio_keys_from_apply_patch(patch, "TAIL", "SHORT") + raise ValueError(strategy) + + +def _check_hm(key: str, val: Any) -> Optional[str]: + try: + hm = int(float(val)) + except (TypeError, ValueError): + return f"{key}={val!r} not int" + h, m = divmod(hm, 100) + if h < 0 or h > 23 or m < 0 or m > 59: + return f"{key}={hm} invalid HHMM (분>59 등)" + return None + + +def verify_one(path: Path) -> Tuple[bool, List[str]]: + msgs: List[str] = [] + data = json.loads(path.read_text(encoding="utf-8")) + strategy = str(data.get("strategy") or "") + mode = str(data.get("mode") or "") + results = data.get("results") or [] + if not results: + return False, [f"{path.name}: results empty"] + top = results[0] + merged = dict(top.get("merged_params") or top.get("params") or {}) + pnl = float(top.get("total_pnl") or 0) + msgs.append( + f"{path.name} | {strategy}/{mode} trial#{top.get('optuna_trial_number')} " + f"pnl={pnl} trades={top.get('total_trades')} wr={top.get('win_rate')}" + ) + # HHMM sanity on params + for k in ( + "time_start_hm", "time_end_hm", "mom_time_end_hm", + ): + if k in merged and merged[k] not in (None, ""): + err = _check_hm(k, merged[k]) + if err: + msgs.append(f" ❌ {err}") + return False, msgs + try: + patch = _patch_for(strategy, merged) + except Exception as e: + msgs.append(f" ❌ patch build failed: {e}") + return False, msgs + if not patch: + msgs.append(" ❌ empty patch") + return False, msgs + # float string should be finite; ratio keys ending _PCT often /100 already + bad_float = [] + for k, v in patch.items(): + if any(x in k for x in ("_PCT", "_MULT", "RATIO", "THR")): + try: + float(v) + except (TypeError, ValueError): + bad_float.append(k) + if bad_float: + msgs.append(f" ❌ non-float patch values: {bad_float[:8]}") + return False, msgs + # momentum setup keys must be present if in merged + if strategy == "momentum": + for src, envk in ( + ("setup_vol_max_mult", "MOMENTUM_SETUP_VOL_MAX_MULT"), + ("setup_bear_bars_min", "MOMENTUM_SETUP_BEAR_BARS_MIN"), + ("mom_time_end_hm", "MOMENTUM_TIME_END_HM"), + ): + if src in merged and envk not in patch: + msgs.append(f" ❌ missing apply key {envk} (from {src})") + return False, msgs + msgs.append(f" ✅ dry-run patch keys={len(patch)} (DB 미적용)") + sample = sorted(patch.items())[:8] + for k, v in sample: + msgs.append(f" {k}={v}") + return True, msgs + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--json", action="append", default=[]) + ap.add_argument( + "--strategies", + default="momentum,tail,breakout,scalp", + help="comma list when --json 미지정", + ) + args = ap.parse_args() + paths: List[Path] = [Path(p) for p in args.json] + if not paths: + for s in [x.strip() for x in args.strategies.split(",") if x.strip()]: + p = _latest_tpe_json(s) + if p: + paths.append(p) + else: + print(f"⏳ {s}: tpe JSON 아직 없음") + if not paths: + print("검증할 JSON 없음") + return 1 + ok_all = True + for p in paths: + ok, msgs = verify_one(p) + for m in msgs: + print(m) + ok_all = ok_all and ok + return 0 if ok_all else 2 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify_optuna_tpe_parity_checklist.py b/scripts/verify_optuna_tpe_parity_checklist.py new file mode 100644 index 0000000..8648e1d --- /dev/null +++ b/scripts/verify_optuna_tpe_parity_checklist.py @@ -0,0 +1,283 @@ +#!/usr/bin/env python3 +""" +verify_optuna_tpe_parity_checklist.py — 전전략 TPE 수정사항 스모크 검증 +DB/실매 미변경. suggest 1회 + 축/게이트/TIME apply OFF 검사. + + .venv/bin/python scripts/verify_optuna_tpe_parity_checklist.py +""" +from __future__ import annotations + +import sys +from pathlib import Path +from typing import Any, Dict, List, Tuple + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT)) + + +def _ok(msg: str) -> None: + print(f" ✅ {msg}") + + +def _fail(msg: str) -> None: + print(f" ❌ {msg}") + + +def _suggest_once(name: str, fn) -> Tuple[bool, Dict[str, Any], str]: + import optuna + import optuna.logging as ol + + ol.set_verbosity(ol.WARNING) + study = optuna.create_study(direction="maximize") + combo: Dict[str, Any] = {} + pruned = False + + def objective(trial: optuna.Trial) -> float: + nonlocal combo, pruned + try: + combo = fn(trial) + except optuna.TrialPruned: + pruned = True + raise + return 1.0 + + try: + study.optimize(objective, n_trials=1, show_progress_bar=False) + except Exception as exc: + return False, {}, str(exc) + if pruned or not combo: + return False, {}, "pruned_or_empty" + return True, combo, "" + + +def main() -> int: + fails: List[str] = [] + print("=== Optuna TPE 전전략 수정사항 검증 ===") + + # 1) 게이트 기본값 + print("\n[1] 탐색/사후 게이트") + from kis_trader.backtest.optuna_common import ( + OPTUNA_REPORT_MIN_PF_DEFAULT, + OPTUNA_REPORT_MIN_WIN_RATE_DEFAULT, + optuna_report_gate_defaults, + optuna_search_gate_defaults, + ) + + sw, sp, st = optuna_search_gate_defaults() + if float(sw) != 0.0: + fails.append(f"search min_win_rate={sw} (want 0)") + _fail(f"탐색 min_win_rate={sw}") + else: + _ok("탐색 min_win_rate 기본 0") + if float(sp) != 0.0: + fails.append(f"search min_pf={sp}") + _fail(f"탐색 min_pf={sp}") + else: + _ok("탐색 min_pf 기본 0") + if int(st) != 1: + fails.append(f"search min_trades={st}") + _fail(f"탐색 min_trades={st}") + else: + _ok("탐색 min_trades 기본 1") + rw, rp, rt = optuna_report_gate_defaults() + if float(rw) != float(OPTUNA_REPORT_MIN_WIN_RATE_DEFAULT) or float(rp) != float(OPTUNA_REPORT_MIN_PF_DEFAULT): + fails.append(f"report gates wr/pf={rw}/{rp}") + _fail(f"report gates {rw}/{rp}") + else: + _ok(f"사후 게이트 WR≥{rw} PF≥{rp} min_trades≥{rt}") + + # 2) TIME apply OFF + print("\n[2] session_env_patch / TIME apply") + from kis_trader.backtest.backtest_portfolio_common import session_env_patch + from kis_trader.utils.env import get_env_bool + + if get_env_bool("PARAM_SEARCH_APPLY_SESSION_TIME", False): + fails.append("PARAM_SEARCH_APPLY_SESSION_TIME is ON") + _fail("PARAM_SEARCH_APPLY_SESSION_TIME=ON (기본은 OFF여야 함)") + else: + _ok("PARAM_SEARCH_APPLY_SESSION_TIME 기본 OFF") + for strat in ("MOMENTUM", "BREAKOUT", "SCALP", "TAIL"): + patch = session_env_patch(strat, {"time_start_hm": 900, "time_end_hm": 1300}) + if patch: + fails.append(f"session_env_patch({strat})={patch}") + _fail(f"{strat} session_env_patch 비어있지 않음: {patch}") + else: + _ok(f"{strat} session_env_patch → {{}}") + + # 3) TPE space: no time_*, skip_hts=false, ratchet numeric + print("\n[3] TPE suggest 스모크 (전략별 1 trial)") + from kis_trader.backtest.optuna_breakout_tpe_space import ( + breakout_tpe_axis_keys, + suggest_breakout_params_tpe, + ) + from kis_trader.backtest.optuna_momentum_tpe_space import ( + momentum_tpe_axis_keys, + suggest_momentum_params_tpe, + ) + from kis_trader.backtest.optuna_scalping_tpe_space import ( + scalp_tpe_axis_keys, + suggest_scalp_params_tpe, + ) + from kis_trader.backtest.optuna_tail_tpe_space import ( + suggest_tail_params_tpe, + tail_tpe_axis_keys, + ) + from kis_trader.backtest.optuna_tpe_common import ( + RATCHET_TPE_AXIS_KEYS, + format_ratchet_tiers_string, + finalize_ratchet_combo, + ) + + specs = [ + ("momentum", suggest_momentum_params_tpe, momentum_tpe_axis_keys, True, ""), + ("breakout", suggest_breakout_params_tpe, breakout_tpe_axis_keys, True, ""), + ("tail", suggest_tail_params_tpe, tail_tpe_axis_keys, True, "off"), + ("scalp", suggest_scalp_params_tpe, scalp_tpe_axis_keys, False, ""), + ] + for name, fn, keys_fn, has_ratchet, off_tok in specs: + # 래칫 ON/OFF 둘 다 볼 수 있게 여러 번 + seen_on = False + seen_off = False + last_combo: Dict[str, Any] = {} + last_err = "" + ok_any = False + for _ in range(20): + ok, combo, err = _suggest_once(name, fn) + if not ok: + last_err = err + continue + ok_any = True + last_combo = combo + if has_ratchet: + if combo.get("ratchet_on") is False: + seen_off = True + else: + seen_on = True + else: + break + if seen_on and seen_off: + break + if not ok_any: + fails.append(f"{name} suggest: {last_err}") + _fail(f"{name} suggest 실패: {last_err}") + continue + combo = last_combo + keys = keys_fn() + time_keys = [k for k in keys if "time_" in k or k.endswith("_hm")] + if time_keys: + fails.append(f"{name} time axes={time_keys}") + _fail(f"{name} 시간축 잔존: {time_keys}") + else: + _ok(f"{name} 시간축 없음") + if combo.get("skip_hts_scan_dupes") is not False: + fails.append(f"{name} skip_hts={combo.get('skip_hts_scan_dupes')}") + _fail(f"{name} skip_hts_scan_dupes!=False") + else: + _ok(f"{name} skip_hts_scan_dupes=False") + if has_ratchet: + for rk in ("ratchet_on", "ratchet_n", "ratchet_tiers"): + if rk not in combo: + fails.append(f"{name} missing {rk}") + _fail(f"{name} {rk} 누락") + for rk in RATCHET_TPE_AXIS_KEYS: + if rk not in keys: + fails.append(f"{name} axis missing {rk}") + _fail(f"{name} axis에 {rk} 없음") + if not seen_off: + fails.append(f"{name} OFF sample missing") + _fail(f"{name} OFF 샘플 미관측") + else: + _ok(f"{name} OFF 샘플 확인") + if not seen_on: + fails.append(f"{name} ON sample missing") + _fail(f"{name} ON 샘플 미관측") + else: + _ok(f"{name} ON 샘플 확인") + # ON 고정 샘플로 문자열 형식 검사 + on_combo = None + for _ in range(24): + ok, c2, _e = _suggest_once(name, fn) + if ok and c2.get("ratchet_on"): + on_combo = c2 + break + if on_combo is None and not seen_on: + fails.append(f"{name} could not sample ON") + _fail(f"{name} ON 샘플 확보 실패") + elif on_combo: + tiers = str(on_combo.get("ratchet_tiers") or "") + if ":" not in tiers: + fails.append(f"{name} ON tiers empty/bad={tiers!r}") + _fail(f"{name} ON tiers={tiers!r}") + else: + _ok(f"{name} ON → ratchet_tiers={tiers!r}") + fin = finalize_ratchet_combo(dict(on_combo), off_token=off_tok) + if str(fin.get("ratchet_tiers")) != str(on_combo.get("ratchet_tiers")): + fails.append(f"{name} finalize mismatch") + _fail( + f"{name} finalize {fin.get('ratchet_tiers')!r} " + f"!= {on_combo.get('ratchet_tiers')!r}" + ) + else: + _ok(f"{name} finalize 일치") + off_combo = {"ratchet_on": False, "ratchet_n": 0} + fin_off = finalize_ratchet_combo(off_combo, off_token=off_tok) + if fin_off.get("ratchet_tiers") != off_tok: + fails.append(f"{name} OFF finalize={fin_off.get('ratchet_tiers')!r}") + _fail(f"{name} OFF finalize={fin_off.get('ratchet_tiers')!r}") + else: + _ok(f"{name} OFF finalize → {off_tok!r}") + else: + if "ratchet_tiers" in combo or "ratchet_on" in combo: + fails.append(f"{name} unexpected ratchet") + _fail(f"{name} 래칫 축이 있으면 안 됨") + else: + _ok(f"{name} 래칫 축 없음(의도)") + _ok(f"{name} suggest OK keys={len(keys)} combo={len(combo)}") + + # 조립 헬퍼 단위 + s = format_ratchet_tiers_string([(5.0, 2.0), (10.0, 1.0)]) + if s != "5:2,10:1": + fails.append(f"format={s}") + _fail(f"format_ratchet={s}") + else: + _ok("format_ratchet_tiers_string") + + # 4) 브리핑 min_trades 문구 + print("\n[4] 브리핑 min_trades") + from kis_trader.backtest.optuna_briefing import build_rule_briefing + + md = build_rule_briefing( + { + "strategy": "momentum", + "mode": "tpe", + "start": "2026-07-20", + "end": "2026-07-21", + "backtest_days": 2, + "optuna_n_trials_requested": 1, + "optuna_trials_completed": 1, + "min_win_rate": 0, + "min_pf": 0, + "min_trades": 1, + "results_all": [], + "results_gated": [], + "report_gates": {"min_win_rate": 40, "min_pf": 1, "min_trades": 1}, + }, + ) + if "min_trades" not in md or "최소 거래" not in md: + fails.append("briefing missing min_trades expl") + _fail("브리핑에 min_trades 설명 없음") + else: + _ok("브리핑에 min_trades 설명 포함") + + print("\n=== 결과 ===") + if fails: + print(f"FAIL {len(fails)}건") + for f in fails: + print(f" - {f}") + return 1 + print("ALL PASS") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/static/css/backtest.css b/static/css/backtest.css index a1cba56..905a406 100644 --- a/static/css/backtest.css +++ b/static/css/backtest.css @@ -87,6 +87,22 @@ .ratio-fill-r { height: 100%; border-radius: 0 4px 4px 0; background: var(--red); display: inline-block; float: right; } .text-pnl-pos { color: var(--green) !important; } .text-pnl-neg { color: var(--red) !important; } + /* 보유·실거래 보유중 — 업비트식 틱 플래시 (표시만) */ + .live-quote-flash-up { + animation: liveQuoteFlashUp 0.45s ease; + } + .live-quote-flash-down { + animation: liveQuoteFlashDown 0.45s ease; + } + @keyframes liveQuoteFlashUp { + from { background-color: rgba(63, 185, 80, 0.35); } + to { background-color: transparent; } + } + @keyframes liveQuoteFlashDown { + from { background-color: rgba(248, 81, 73, 0.35); } + to { background-color: transparent; } + } + .live-quote-stale { opacity: 0.55; } /* 파라미터 설명 툴팁 */ .param-help { font-size: 10px; color: var(--muted); margin-top: 2px; } /* 운영 설정 탭 — 최대 2열, 위에서 아래로 읽기 */ @@ -177,3 +193,64 @@ .lc-strat-updow .lc-strat-head { color: #58a6ff; } .lc-strat-scalp .lc-strat-head { color: #c9d1d9; } .lc-strat-common .lc-strat-head { color: #8b949e; } + + /* OHLC 폴백 — 정합 위험 (절대규칙: 틱 모드에서 숫자 변조 금지). UI만 경고 표시 */ + .lc-field-danger, + .bt-ohlc-fallback-danger { + background: rgba(248, 81, 73, 0.18) !important; + border: 1px solid rgba(248, 81, 73, 0.65) !important; + border-radius: 6px; + padding: 6px 10px !important; + margin: 4px 0; + } + .lc-field-danger .lc-field-label, + .bt-ohlc-fallback-danger label, + .bt-ohlc-fallback-danger .form-check-label { + color: #ff7b72 !important; + font-weight: 600; + } + .lc-field-danger .lc-field-hint, + .bt-ohlc-fallback-danger .bt-ohlc-fallback-warn { + color: #ffa198 !important; + font-size: 11px; + } + + /* 거래표 — 정합 예외 경로(OHLC폴백·틱공백EOD 등) */ + tr.trade-row-parity-ex { + background: rgba(248, 81, 73, 0.16) !important; + position: relative; + } + tr.trade-row-parity-ex td { + border-color: rgba(248, 81, 73, 0.35) !important; + } + td.trade-name-cell { position: relative; padding-top: 14px !important; } + .parity-cause-corner { + position: absolute; + top: 2px; + right: 4px; + font-size: 9px; + font-weight: 700; + color: #ff7b72; + background: rgba(248, 81, 73, 0.25); + border: 1px solid rgba(248, 81, 73, 0.55); + border-radius: 3px; + padding: 0 4px; + line-height: 1.4; + white-space: nowrap; + max-width: 110px; + overflow: hidden; + text-overflow: ellipsis; + } + + /* Optuna 전역/탭 프로그레스 */ + .optuna-nav-bar { min-width: 180px; } + .optuna-nav-bar.d-none { display: none !important; } + .optuna-prog-track { + height: 6px; border-radius: 4px; background: var(--border); overflow: hidden; + } + .optuna-prog-fill { + height: 100%; border-radius: 4px; background: var(--accent); + transition: width .35s ease; + } + .optuna-prog-fill.is-done { background: var(--green); } + .optuna-prog-fill.is-error { background: var(--red); } diff --git a/static/js/backtest.js b/static/js/backtest.js index 6eca332..2a3df9a 100644 --- a/static/js/backtest.js +++ b/static/js/backtest.js @@ -15,6 +15,45 @@ const fmtKrw = n => { const w = fmtWon(n); return w === '—' ? w : w + '원'; }; +/** 달러 금액 — $1,234.56 */ +const fmtUsd = n => { + if (n == null || n === '' || !Number.isFinite(Number(n))) return '—'; + const v = Number(n); + const sign = v < 0 ? '-' : ''; + return sign + '$' + Math.abs(v).toLocaleString('en-US', { + minimumFractionDigits: 2, + maximumFractionDigits: 2, + }); +}; +/** 표시용 환율 (캐시/폴백). 외부 HTTP 안 탐. */ +let _displayFxRate = 0; +function setDisplayFxRate(r) { + const v = Number(r); + if (Number.isFinite(v) && v > 0) _displayFxRate = v; +} +function getDisplayFxRate(fallback) { + const f = Number(fallback); + if (Number.isFinite(f) && f > 0) return f; + if (_displayFxRate > 0) return _displayFxRate; + return 0; +} +/** 해외 탭: $USD + (원 · 환율) — fxRate 없으면 원만 생략 */ +const fmtUsdWithKrw = (usd, fxRate) => { + const u = fmtUsd(usd); + if (u === '—') return u; + const r = getDisplayFxRate(fxRate); + if (!Number.isFinite(r) || r <= 0) return u; + const krw = Math.round(Number(usd) * r); + return `${u} (${fmtWon(krw)}원 · ${r.toFixed(2)})`; +}; +/** 요약 카드용 — HTML 없이 텍스트 ($ + 원) */ +const fmtUsdWithKrwText = (usd, fxRate) => { + const u = fmtUsd(usd); + if (u === '—') return u; + const r = getDisplayFxRate(fxRate); + if (!Number.isFinite(r) || r <= 0) return u; + return `${u} (${fmtWon(Math.round(Number(usd) * r))}원)`; +}; /** 수익률(%) — 거래내역·가상체결 테이블 공용 */ const fmtPct = n => { if (n == null || n === '' || !Number.isFinite(Number(n))) return '—'; @@ -90,10 +129,21 @@ function _tradeTimeSortKey(raw) { function normalizeVirtualTrade(t, meta) { meta = meta || {}; - const ep = Math.round(Number(t.buy_price ?? t.avg_price ?? t.entry ?? 0)); - const xp = Math.round(Number(t.sell_price ?? t.exit_price ?? t.exit ?? 0)); + const isUsd = String(meta.currency || '').toUpperCase() === 'USD'; + const roundPx = v => { + const n = Number(v); + if (!Number.isFinite(n)) return 0; + return isUsd ? Math.round(n * 10000) / 10000 : Math.round(n); + }; + const roundMoney = v => { + const n = Number(v); + if (!Number.isFinite(n)) return 0; + return isUsd ? Math.round(n * 100) / 100 : Math.round(n); + }; + const ep = roundPx(t.buy_price ?? t.avg_price ?? t.entry ?? 0); + const xp = roundPx(t.sell_price ?? t.exit_price ?? t.exit ?? 0); const qty = Number(t.qty || 0) || (ep > 0 ? Math.max(1, Math.floor(1000000 / ep)) : 0); - const pnl = Math.round(Number(t.pnl ?? t.realized_pnl ?? t.unrealized_pnl ?? 0)); + const pnl = roundMoney(t.pnl ?? t.realized_pnl ?? t.unrealized_pnl ?? 0); let rateNum = Number(t.profit_rate); if (!Number.isFinite(rateNum) && ep > 0) rateNum = (xp - ep) / ep * 100; if (!Number.isFinite(rateNum)) rateNum = 0; @@ -102,6 +152,21 @@ function normalizeVirtualTrade(t, meta) { const sellRaw = isOpen ? '' : (t.sell_time || t.exit_time || t.sell_date || ''); const code = t.code || meta.code || ''; const name = t.name || meta.name || ''; + const fxRate = (() => { + const r = Number(t.fx_rate); + if (Number.isFinite(r) && r > 0) return r; + const ymd = String(t.fx_ymd || sellRaw || buyRaw || '').slice(0, 10); + const map = meta.fxRates || {}; + const m = Number(map[ymd]); + if (Number.isFinite(m) && m > 0) return m; + return getDisplayFxRate(meta.fxRate); + })(); + const pnlKrw = (() => { + const k = Number(t.pnl_krw); + if (Number.isFinite(k)) return Math.round(k); + if (Number.isFinite(fxRate) && fxRate > 0) return Math.round(pnl * fxRate); + return NaN; + })(); return { code, name, @@ -113,6 +178,9 @@ function normalizeVirtualTrade(t, meta) { xp, qty, pnl, + pnlKrw, + fxRate, + isUsd, isOpen, rateNum, hold: t.hold_min ?? t.hold_days ?? t.hold_minutes ?? 0, @@ -121,11 +189,38 @@ function normalizeVirtualTrade(t, meta) { entrySource: t.entry_source_label || t.entry_source || '', exitSource: t.exit_source_label || t.exit_source || '', debugTick: t.debug_tick || '', - cumPnl: (() => { const v = Number(t.cum_pnl); return Number.isFinite(v) ? Math.round(v) : NaN; })(), + parityException: !!(t.parity_exception) || _detectParityExceptionCauses(t).length > 0, + parityCause: t.parity_cause || _detectParityExceptionCauses(t).join('+'), + cumPnl: (() => { + const v = Number(t.cum_pnl); + if (!Number.isFinite(v)) return NaN; + return isUsd ? Math.round(v * 100) / 100 : Math.round(v); + })(), cumReturnPct: Number(t.cum_return_pct ?? NaN), }; } +function _detectParityExceptionCauses(t) { + const causes = []; + const es = String(t.entry_source || '').toLowerCase(); + const xs = String(t.exit_source || '').toLowerCase(); + const reason = String(t.sell_reason || t.reason || ''); + const el = String(t.entry_source_label || t.entrySource || ''); + const xl = String(t.exit_source_label || t.exitSource || ''); + if (['ohlc_low', 'ohlc_fallback', 'ohlc_high', 'ohlc_intrabar', 'ohlc_bar'].includes(es) + || /진입OHLC|OHLC 폴백|OHLC high/i.test(el)) { + causes.push('진입OHLC'); + } + if (['ohlc_bar', 'ohlc_fallback'].includes(xs) || /청산OHLC|^OHLC$/i.test(xl)) { + causes.push('청산OHLC'); + } + if (['eod_flat', 'wallclock_eod'].includes(xs) || /틱공백EOD/i.test(xl)) { + causes.push('틱공백EOD'); + } + if (/ghost_purge/i.test(reason)) causes.push('ghost_purge'); + return causes; +} + function sortVirtualTradeRows(rows, mode) { const list = [...rows]; const cmpExit = (a, b) => String(a.sellKey).localeCompare(String(b.sellKey)); @@ -152,12 +247,23 @@ function fillTradePnLContext(elOrId, opts) { const peak = Number(opts.peakCum || 0); const peakAt = opts.peakAt ? fmtTradeTime(opts.peakAt) : ''; const label = opts.label || '거래내역'; - let line = `📋 ${label} · 한도 ${tb > 0 ? fmtWon(tb) : '—'}원`; + const isUsd = String(opts.currency || '').toUpperCase() === 'USD'; + const fx = Number(opts.fxRate || 0); + const fmtMoney = (n) => isUsd ? fmtUsdWithKrwText(n, fx) : (fmtWon(n) + '원'); + let line = `📋 ${label} · 한도 ${tb > 0 ? (isUsd ? fmtUsd(tb) : fmtWon(tb) + '원') : '—'}`; if (peak > 0 && peakAt) { - line += ` | 장중 누적 최고 +${fmtWon(peak)}원 (${peakAt})`; + line += ` | 장중 누적 최고 +${fmtMoney(peak)} (${peakAt})`; } if (opts.totalPnl != null && Number.isFinite(Number(opts.totalPnl))) { - line += ` | 최종 누적 ${fmtKrw(opts.totalPnl)}`; + const pnlHtml = isUsd + ? fmtUsdWithKrw(opts.totalPnl, fx > 0 ? fx : (Number(opts.totalPnlKrw) ? (Number(opts.totalPnl) ? Number(opts.totalPnlKrw) / Number(opts.totalPnl) : fx) : fx)) + : fmtKrw(opts.totalPnl); + // 원 환산 금액이 별도로 있으면 그걸로 병기 + if (isUsd && opts.totalPnlKrw != null && Number.isFinite(Number(opts.totalPnlKrw))) { + line += ` | 최종 누적 ${fmtUsd(opts.totalPnl)} (${fmtWon(opts.totalPnlKrw)}원)`; + } else { + line += ` | 최종 누적 ${pnlHtml}`; + } } el.innerHTML = line; el.style.display = 'block'; @@ -195,9 +301,16 @@ function renderVirtualTrades(tbodyId, trades, opts) { _virtualTradesOpts[tbodyId] = opts; if (!_virtualTradesSort[tbodyId]) _virtualTradesSort[tbodyId] = 'exit_desc'; const mode = _virtualTradesSort[tbodyId]; - const meta = opts.meta || {}; + const meta = Object.assign({}, opts.meta || {}, { + currency: opts.currency || (opts.meta && opts.meta.currency) || '', + fxRates: opts.fxRates || (opts.meta && opts.meta.fxRates) || {}, + }); + const isUsd = String(meta.currency || '').toUpperCase() === 'USD'; + const defaultFx = getDisplayFxRate(meta.fxRate || opts.fxRate); + const fmtPx = (n, fx) => isUsd ? fmtUsdWithKrw(n, getDisplayFxRate(fx || defaultFx)) : fmtWon(n); + const fmtPnlCell = (n, fx) => isUsd ? fmtUsdWithKrw(n, getDisplayFxRate(fx || defaultFx)) : fmtWon(n); const rows = sortVirtualTradeRows( - (_virtualTradesCache[tbodyId] || []).map(t => normalizeVirtualTrade(t, meta)), + (_virtualTradesCache[tbodyId] || []).map(t => normalizeVirtualTrade(t, Object.assign({}, meta, { fxRate: defaultFx }))), mode, ); const tbody = $(tbodyId); @@ -217,8 +330,9 @@ function renderVirtualTrades(tbodyId, trades, opts) { : (r.entrySource || r.exitSource ? `${r.entrySource || '-'}→${r.exitSource || '-'}` : '-'); + const rowFx = getDisplayFxRate(r.fxRate || defaultFx); const cumPnlHtml = Number.isFinite(r.cumPnl) - ? `${fmtWon(r.cumPnl)}` + ? `${fmtPnlCell(r.cumPnl, rowFx)}` : '-'; const cumPctHtml = Number.isFinite(r.cumReturnPct) ? `${fmtPct(r.cumReturnPct)}` @@ -227,21 +341,32 @@ function renderVirtualTrades(tbodyId, trades, opts) { ? '보유중' : `${fmtTradeTime(r.sellRaw)}`; const exitPxCell = r.isOpen - ? `${fmtWon(r.xp)} 현재가` - : fmtWon(r.xp); + ? `${fmtPx(r.xp, rowFx)} 현재가` + : fmtPx(r.xp, rowFx); const pnlCell = r.isOpen - ? `${fmtWon(r.pnl)} 평가` - : fmtWon(r.pnl); - const rowStyle = r.isOpen ? ' style="background:rgba(210,153,34,.06)"' : ''; - let html = ` - + ? `${fmtPnlCell(r.pnl, rowFx)} 평가` + : fmtPnlCell(r.pnl, rowFx); + const isParityEx = !!r.parityException; + const rowCls = [ + r.isOpen ? 'trade-row-open' : '', + isParityEx ? 'trade-row-parity-ex' : '', + ].filter(Boolean).join(' '); + const causeBadge = isParityEx + ? `${r.parityCause || '예외'}` + : ''; + const rowStyle = r.isOpen && !isParityEx ? ' style="background:rgba(210,153,34,.06)"' : ''; + const liveAttrs = r.isOpen && r.code && r.ep > 0 && r.qty > 0 + ? ` data-live-code="${String(r.code).replace(/"/g, '')}" data-live-buy="${r.ep}" data-live-qty="${r.qty}" data-live-usd="${r.isUsd ? '1' : '0'}"` + : ''; + let html = ` + - - + + - - `; + + `; if (opts.showCumulative) { html += ``; } @@ -253,6 +378,9 @@ function renderVirtualTrades(tbodyId, trades, opts) { tbody.insertAdjacentHTML('beforeend', html); }); _syncTradeSortButtons(tbodyId, mode); + if (rows.some(r => r.isOpen)) { + liveQuoteStartFromDom(tbody); + } } function setVirtualTradesSort(tbodyId, mode) { @@ -384,6 +512,8 @@ document.querySelectorAll('[data-tab]').forEach(el => { $('tab-breakout').style.display = tab === 'breakout' ? '' : 'none'; $('tab-range_break').style.display = tab === 'range_break' ? '' : 'none'; $('tab-momentum').style.display = tab === 'momentum' ? '' : 'none'; + $('tab-us_momentum').style.display = tab === 'us_momentum' ? '' : 'none'; + $('tab-optuna').style.display = tab === 'optuna' ? '' : 'none'; $('tab-holding').style.display = tab === 'holding' ? '' : 'none'; $('tab-updownbox').style.display = tab === 'updownbox'? '' : 'none'; $('tab-updow').style.display = tab === 'updow' ? '' : 'none'; @@ -394,10 +524,27 @@ document.querySelectorAll('[data-tab]').forEach(el => { if (tab === 'portfolio') pfLoad(true); if (tab === 'holding') hdLoadStocks(); if (tab === 'updow') permLoad(); + if (tab === 'us_momentum') { + updateUsMomFxHint(); + usmomLoadStocks(false); + usmomOptSyncDatesFromMain(); + if (_usmomOptJobId) usmomStockOptunaStartPolling(); + } if (tab === 'dart') dartOnTabShow(); if (tab === 'updownbox') ubxOnTabShow(); if (tab === 'dbband') dbLoadStocks(); if (tab === 'breakout' && typeof boSyncSlModeColors === 'function') boSyncSlModeColors(); + if (tab === 'optuna') optunaOnTabShow(); + // 보유 라이브 시세: 보유·실거래 탭에서만 SSE/폴링 (다른 탭 이탈 시 중지) + if (tab === 'portfolio') { + /* pfRenderTable 에서 start */ + } else if (tab === 'actual') { + const at = $('act_tbody'); + if (at && at.querySelector('[data-live-code]')) liveQuoteStartFromDom(at); + else liveQuoteStop(); + } else { + liveQuoteStop(); + } }); }); @@ -502,20 +649,90 @@ async function dartRunBacktest() { // ════════════════════════════════════════════════════════════════ // 영구구독 관리 (permanent_subscriptions: KR 국내WS / US 해외WS) // ════════════════════════════════════════════════════════════════ +let _permRefreshTimer = null; +let _permRefreshSec = 15; + function permOnMarket() { // 시장 선택 시 거래소 기본값 자동 보정 (KR→KRX, US→NASD) const mk = $('perm_market') ? $('perm_market').value : 'KR'; if ($('perm_exch')) $('perm_exch').value = (mk === 'US') ? 'NASD' : 'KRX'; } -async function permLoad() { +function permFmtQuoteTime(t) { + const s = String(t || ''); + if (s.length >= 12) { + return s.slice(4, 6) + '/' + s.slice(6, 8) + ' ' + s.slice(8, 10) + ':' + s.slice(10, 12); + } + if (s.length >= 8) return s.slice(0, 4) + '-' + s.slice(4, 6) + '-' + s.slice(6, 8); + return s; +} + +function permFmtPriceCell(x, fxRate) { + const px = Number(x.price); + if (!(px > 0)) { + return '
시세대기'; + } + const isUs = String(x.market_type || '').toUpperCase() === 'US'; + const fx = getDisplayFxRate(fxRate != null ? fxRate : x.fx_rate); + let main; + if (isUs) { + const krw = (x.price_krw != null && Number(x.price_krw) > 0) + ? Number(x.price_krw) + : (fx > 0 ? Math.round(px * fx) : 0); + main = '$' + px.toFixed(4) + ''; + if (krw > 0) { + main += '
(' + + Math.round(krw).toLocaleString('ko-KR') + '원' + + (fx > 0 ? (' · ' + fx.toFixed(2)) : '') + + ')'; + } + } else { + main = '' + Math.round(px).toLocaleString('ko-KR') + ''; + } + let chgHtml = ''; + const chg = x.chg_pct; + if (chg != null && chg !== '' && Number.isFinite(Number(chg))) { + const v = Number(chg); + const cls = v >= 0 ? 'text-pnl-pos' : 'text-pnl-neg'; + chgHtml = '
' + + (v >= 0 ? '+' : '') + v.toFixed(2) + '%'; + } + const t = (x.price_src === 'tick' && x.tick_time) + ? x.tick_time + : (x.candle_time || x.tick_time || ''); + const src = (x.price_src === 'tick') ? 'tick' : (x.price_src === 'candle' ? '봉' : ''); + const meta = permFmtQuoteTime(t) + (src ? (' ·' + src) : ''); + return main + chgHtml + + (meta ? ('
' + meta + '') : ''); +} + +function permEnsureAutoRefresh(sec) { + const s = Math.max(5, Number(sec) || _permRefreshSec || 15); + _permRefreshSec = s; + if (_permRefreshTimer) clearInterval(_permRefreshTimer); + _permRefreshTimer = setInterval(function () { + const tab = $('tab-updow'); + if (tab && tab.style.display !== 'none') permLoad({ quiet: true }); + }, s * 1000); +} + +async function permLoad(opt) { + const quiet = !!(opt && opt.quiet); const tb = $('perm_tbody'); if (!tb) return; try { - const r = await fetch('/api/permanent_subs'); + const url = quiet ? '/api/permanent_subs?light=1' : '/api/permanent_subs'; + const r = await fetch(url); const j = await r.json(); const rows = (j && j.rows) || []; - if (!rows.length) { tb.innerHTML = ''; return; } + const baseTf = Number((j && j.base_tf_min) || 1) || 1; + if (j && j.fx_rate) setDisplayFxRate(j.fx_rate); + if (j && j.refresh_sec) permEnsureAutoRefresh(j.refresh_sec); + const fx = getDisplayFxRate(j && j.fx_rate); + if (!rows.length) { + tb.innerHTML = ''; + return; + } tb.innerHTML = rows.map(function (x) { const onBadge = x.enabled ? 'ON' @@ -523,21 +740,35 @@ async function permLoad() { const mkBadge = (String(x.market_type).toUpperCase() === 'US') ? 'US' : 'KR'; + const nm = (x.name || '').trim(); + const code = x.code || ''; + const title = nm && nm !== code + ? ('' + code + '
' + nm + '') + : ('' + code + ''); + const editPayload = JSON.stringify({ + code: x.code, + market_type: x.market_type, + exchange: x.exchange, + symbol: x.symbol, + note: x.note || '', + }); return '' - + '' + + '' + + '' + '' + '' - + '' - + '' - + '' + + '' + + '' + '' - + '' - + '' + + '' + + '' + ''; }).join(''); } catch (e) { - tb.innerHTML = ''; + if (!quiet) { + tb.innerHTML = ''; + } } } @@ -548,8 +779,8 @@ function permEdit(jsonStr) { if ($('perm_market')) $('perm_market').value = String(x.market_type || 'KR').toUpperCase(); if ($('perm_exch')) $('perm_exch').value = x.exchange || 'KRX'; if ($('perm_symbol')) $('perm_symbol').value = x.symbol || ''; - if ($('perm_tf')) $('perm_tf').value = x.tf_min || 15; if ($('perm_note')) $('perm_note').value = x.note || ''; + permOnMarket(); } async function permSave() { @@ -560,7 +791,6 @@ async function permSave() { market_type: $('perm_market') ? $('perm_market').value : 'KR', exchange: $('perm_exch') ? $('perm_exch').value : '', symbol: $('perm_symbol') ? $('perm_symbol').value.trim().toUpperCase() : '', - tf_min: $('perm_tf') ? parseInt($('perm_tf').value || '15', 10) : 15, enabled: true, note: $('perm_note') ? $('perm_note').value : '', }; @@ -703,6 +933,7 @@ function dashDrill(strategyId) { $('tab-breakout').style.display = 'none'; $('tab-range_break').style.display = 'none'; $('tab-momentum').style.display = 'none'; + $('tab-us_momentum').style.display = 'none'; $('tab-holding').style.display = 'none'; $('tab-updow').style.display = 'none'; loadActual(); @@ -712,6 +943,199 @@ function dashGoActual() { } dashInitDate(); +// ──────────────────────────────────────────── +// 보유중 라이브 시세 (ws_ticks SELECT via API — 매매 비접촉) +// ──────────────────────────────────────────── +let _liveQuoteES = null; +let _liveQuotePoll = null; +let _liveQuotePrevPx = {}; +let _liveQuoteCodesKey = ''; + +function liveQuoteStop() { + if (_liveQuoteES) { + try { _liveQuoteES.close(); } catch (e) { /* ignore */ } + _liveQuoteES = null; + } + if (_liveQuotePoll) { + clearInterval(_liveQuotePoll); + _liveQuotePoll = null; + } + _liveQuoteCodesKey = ''; +} + +function liveQuoteCollectCodes(root) { + const scope = root || document; + const codes = []; + const seen = new Set(); + scope.querySelectorAll('[data-live-code]').forEach(el => { + const c = String(el.getAttribute('data-live-code') || '').trim(); + if (!c || seen.has(c)) return; + seen.add(c); + codes.push(c); + }); + return codes; +} + +function liveQuoteFlash(el, dir) { + if (!el) return; + el.classList.remove('live-quote-flash-up', 'live-quote-flash-down'); + void el.offsetWidth; + el.classList.add(dir > 0 ? 'live-quote-flash-up' : 'live-quote-flash-down'); +} + +function liveQuoteFmtPx(px, isUsd) { + const n = Number(px); + if (!Number.isFinite(n) || n <= 0) return '—'; + if (isUsd) return fmtUsdWithKrw(n, getDisplayFxRate()); + return fmtWon(n); +} + +function liveQuoteFmtPnl(pnl, isUsd) { + if (!Number.isFinite(pnl)) return '—'; + if (isUsd) return fmtUsdWithKrw(pnl, getDisplayFxRate()); + return fmtWon(pnl); +} + +function liveQuoteFmtPctNum(pct) { + if (!Number.isFinite(pct)) return '—'; + const sign = pct >= 0 ? '+' : ''; + return `${sign}${pct.toFixed(2)}%`; +} + +function liveQuoteApplyPctBadge(el, pct) { + if (!el) return; + el.classList.remove('badge-win', 'badge-loss', 'badge-flat', 'text-pnl-pos', 'text-pnl-neg'); + if (!Number.isFinite(pct)) { + if (el.tagName === 'SPAN') el.classList.add('badge-flat'); + return; + } + if (el.tagName === 'SPAN') { + el.classList.add(pct > 0 ? 'badge-win' : (pct < 0 ? 'badge-loss' : 'badge-flat')); + } else { + el.classList.add(pct >= 0 ? 'text-pnl-pos' : 'text-pnl-neg'); + } +} + +function liveQuoteApplyPayload(d) { + if (!d || !d.ok || d.enabled === false) return; + const quotes = d.quotes || {}; + document.querySelectorAll('tr[data-live-code]').forEach(tr => { + const code = String(tr.getAttribute('data-live-code') || '').trim(); + const q = quotes[code]; + if (!q || !(Number(q.price) > 0)) return; + const px = Number(q.price); + const buy = Number(tr.getAttribute('data-live-buy') || 0); + const qty = Number(tr.getAttribute('data-live-qty') || 0); + const isUsd = String(tr.getAttribute('data-live-usd') || '') === '1'; + const prev = _liveQuotePrevPx[code]; + const pxEl = tr.querySelector('[data-live-cell="px"]'); + const pnlEl = tr.querySelector('[data-live-cell="pnl"]'); + const pctEl = tr.querySelector('[data-live-cell="pct"]'); + const dayEl = tr.querySelector('[data-live-cell="day"]'); + const evalEl = tr.querySelector('[data-live-cell="eval"]'); + if (pxEl) { + pxEl.textContent = liveQuoteFmtPx(px, isUsd); + if (prev != null && Number.isFinite(prev) && prev > 0 && px !== prev) { + liveQuoteFlash(pxEl, px > prev ? 1 : -1); + } + pxEl.classList.toggle('live-quote-stale', !!q.stale); + } + const pnl = (buy > 0 && qty > 0) ? (px - buy) * qty : NaN; + const buyPct = buy > 0 ? ((px - buy) / buy) * 100 : NaN; + const dayPct = (q.day_chg_pct != null && Number.isFinite(Number(q.day_chg_pct))) + ? Number(q.day_chg_pct) : NaN; + if (pnlEl && Number.isFinite(pnl)) { + const label = tr.classList.contains('trade-row-open') + ? `${liveQuoteFmtPnl(pnl, isUsd)} 평가` + : liveQuoteFmtPnl(pnl, isUsd); + pnlEl.innerHTML = label; + pnlEl.classList.toggle('text-pnl-pos', pnl > 0); + pnlEl.classList.toggle('text-pnl-neg', pnl < 0); + } + // 당일 등락(전일종가 대비)=메인, 매수가 대비=보조 + if (dayEl) { + dayEl.textContent = liveQuoteFmtPctNum(dayPct); + liveQuoteApplyPctBadge(dayEl, dayPct); + if (prev != null && Number.isFinite(prev) && px !== prev) { + liveQuoteFlash(dayEl, px > prev ? 1 : -1); + } + } + if (pctEl) { + if (dayEl) { + pctEl.innerHTML = Number.isFinite(buyPct) + ? `${liveQuoteFmtPctNum(buyPct)}` + + `
매수대비
` + : '—'; + liveQuoteApplyPctBadge(pctEl, buyPct); + } else { + pctEl.innerHTML = Number.isFinite(dayPct) + ? `
${liveQuoteFmtPctNum(dayPct)}
` + + `
당일` + + (Number.isFinite(buyPct) ? ` · 매수 ${liveQuoteFmtPctNum(buyPct)}` : '') + + `
` + : (Number.isFinite(buyPct) + ? `${liveQuoteFmtPctNum(buyPct)}
매수대비
` + : '—'); + liveQuoteApplyPctBadge(pctEl, Number.isFinite(dayPct) ? dayPct : buyPct); + if (prev != null && Number.isFinite(prev) && px !== prev) { + liveQuoteFlash(pctEl, px > prev ? 1 : -1); + } + } + } + if (evalEl && qty > 0) { + evalEl.textContent = liveQuoteFmtPx(px * qty, isUsd); + } + _liveQuotePrevPx[code] = px; + }); +} + +function liveQuoteStartFromDom(root) { + const codes = liveQuoteCollectCodes(root); + const key = codes.slice().sort().join(','); + if (!codes.length) { + liveQuoteStop(); + return; + } + if (key === _liveQuoteCodesKey && (_liveQuoteES || _liveQuotePoll)) { + return; + } + liveQuoteStop(); + _liveQuoteCodesKey = key; + const q = 'codes=' + encodeURIComponent(codes.join(',')); + const url = '/api/portfolio/live_quotes_stream?' + q; + if (typeof EventSource !== 'undefined') { + try { + _liveQuoteES = new EventSource(url); + _liveQuoteES.onmessage = (ev) => { + try { + liveQuoteApplyPayload(JSON.parse(ev.data)); + } catch (e) { /* ignore */ } + }; + _liveQuoteES.onerror = () => { + if (_liveQuoteES) { + try { _liveQuoteES.close(); } catch (e2) { /* ignore */ } + _liveQuoteES = null; + } + if (!_liveQuotePoll) { + _liveQuotePoll = setInterval(() => { + fetch('/api/portfolio/live_quotes?' + q) + .then(r => r.json()) + .then(liveQuoteApplyPayload) + .catch(() => {}); + }, 500); + } + }; + return; + } catch (e) { /* fall through */ } + } + _liveQuotePoll = setInterval(() => { + fetch('/api/portfolio/live_quotes?' + q) + .then(r => r.json()) + .then(liveQuoteApplyPayload) + .catch(() => {}); + }, 400); +} + // ──────────────────────────────────────────── // 보유·매도 (active_trades + OrderManager 시장가) // ──────────────────────────────────────────── @@ -845,8 +1269,15 @@ function pfRenderTable() { onclick="pfSell('${codeEsc}','${stratEsc}','${String(it.name).replace(/'/g, '')}',${it.db_qty})"> 시장가 전량` : '매도불가'; + const isUs = String(it.strategy || '').toUpperCase() === 'US_MOMENTUM' + || (!/^\d{6}$/.test(String(it.code || ''))); + const buyRef = Number(it.broker_avg_price > 0 ? it.broker_avg_price : it.buy_price) || 0; + const qtyRef = Number(it.broker_qty != null && it.broker_qty > 0 ? it.broker_qty : it.db_qty) || 0; + const liveAttrs = (String(it.code || '') && buyRef > 0 && qtyRef > 0) + ? ` data-live-code="${String(it.code).replace(/"/g, '')}" data-live-buy="${buyRef}" data-live-qty="${qtyRef}" data-live-usd="${isUs ? '1' : '0'}"` + : ''; tbody.insertAdjacentHTML('beforeend', ` - + @@ -857,12 +1288,14 @@ function pfRenderTable() { - - - + + + + `); }); + liveQuoteStartFromDom(tbody); } // 보유·매도 정렬 버튼 (다른 탭과 동일 UX) — pf-sort-btn 클릭 시 재조회 없이 정렬만 갱신 @@ -1130,6 +1563,8 @@ function initDefaultDates(datesPayload) { setDateVal('rb_end', endKst); setDateVal('mom_start', startKst); setDateVal('mom_end', endKst); + setDateVal('usmom_start', startKst); + setDateVal('usmom_end', endKst); setDateVal('hd_start', tradingDayKst); setDateVal('hd_end', tradingDayKst); setDateVal('hd_fetch_start', tradingDayKst); @@ -1209,6 +1644,7 @@ function initDefaultDates(datesPayload) { // 모멘텀 탭 — config_momentum + env_config fillMomentumFormFromApi(d.momentum || {}); + fillUsMomentumFormFromApi(d.us_momentum || d.momentum || {}); // 돌파 탭 — DB(env_config BREAKOUT_*) = 백테 API _bo_defaults_from_db 와 동일 const b = d.breakout || {}; @@ -1273,6 +1709,9 @@ function initDefaultDates(datesPayload) { if (b.daily_profit_enabled !== undefined && $('bo_daily_profit_enabled')) { $('bo_daily_profit_enabled').checked = !!b.daily_profit_enabled; } + if (b.daily_risk_budget_enabled !== undefined && $('bo_daily_risk_budget_enabled')) { + $('bo_daily_risk_budget_enabled').checked = !!b.daily_risk_budget_enabled; + } if ($('bo_daily_trail_tiers')) { $('bo_daily_trail_tiers').value = (b.daily_trail_tiers != null ? String(b.daily_trail_tiers) : ''); } @@ -1307,8 +1746,14 @@ function initDefaultDates(datesPayload) { setM('rb_slot', rb.slot_money); if (rb.max_stocks != null) setM('rb_max_stocks', rb.max_stocks); if (rb.total_budget_krw != null) setM('rb_total_budget', rb.total_budget_krw); + + // 날짜(거래일) 확정 후 실거래 분석 1회 — 빈 날짜로 전체 조회·고스트 노출 방지 + loadActual(); }) - .catch(() => { /* DB 연결 실패 시 HTML 기본값 유지 */ }); + .catch(() => { + /* DB 연결 실패 시 HTML 기본값 유지 — 로컬 거래일로라도 조회 */ + loadActual(); + }); const defChk = $('bt_use_defense'); if (defChk) { @@ -1342,18 +1787,36 @@ function renderActual(d) { const s = d.summary; const p = d.params || {}; const filtered = Number((d.meta || {}).filtered_forced_rows || 0); + const isUs = String(d.currency || p.market || '').toUpperCase() === 'USD' + || String(document.querySelector('input[name=act_strategy]:checked')?.value || '').toUpperCase() === 'US_MOMENTUM'; + const fxEnd = Number(s.fx_rate_end || 0) || getDisplayFxRate(); + if (fxEnd > 0) setDisplayFxRate(fxEnd); $('a_total').textContent = fmt(s.total_trades) + '건'; $('a_winrate').textContent = s.win_rate + '%'; colorPnl($('a_winrate'), s.win_rate - 50); - $('a_pnl').textContent = fmtKrw(s.total_pnl); - colorPnl($('a_pnl'), s.total_pnl); + if (isUs) { + if (s.total_pnl_krw != null && Number.isFinite(Number(s.total_pnl_krw))) { + $('a_pnl').innerHTML = `${fmtUsd(s.total_pnl)} (${fmtWon(s.total_pnl_krw)}원)`; + } else { + $('a_pnl').innerHTML = fmtUsdWithKrw(s.total_pnl, fxEnd); + } + colorPnl($('a_pnl'), s.total_pnl); + if (s.max_drawdown_krw != null && Number.isFinite(Number(s.max_drawdown_krw))) { + $('a_mdd').innerHTML = `-${fmtUsd(s.max_drawdown)} (${fmtWon(s.max_drawdown_krw)}원)`; + } else { + $('a_mdd').textContent = '-' + fmtUsdWithKrwText(s.max_drawdown, fxEnd); + } + } else { + $('a_pnl').textContent = fmtKrw(s.total_pnl); + colorPnl($('a_pnl'), s.total_pnl); + $('a_mdd').textContent = '-' + fmtWon(s.max_drawdown) + '원'; + } $('a_pf').textContent = s.profit_factor >= 999 ? '∞' : s.profit_factor; colorPnl($('a_pf'), s.profit_factor - 1); - $('a_mdd').textContent = '-' + fmtWon(s.max_drawdown) + '원'; $('a_hold').textContent = s.avg_hold_min + '분'; // 운용한도 대비 수익률 — API summary에 없으면 params.total_budget_krw 로 계산 @@ -1434,7 +1897,7 @@ function renderActual(d) { } } if (filtered > 0) { - console.log(`[실거래 분석] 0원 강제정리 ${filtered}건 제외 후 집계`); + console.log(`[실거래 분석] ghost_purge·강제정리 ${filtered}건 제외 후 집계`); } // 승/패 바 @@ -1469,6 +1932,9 @@ function renderActual(d) { showDebug: true, showCumulative: true, totalBudget: Number(p.total_budget_krw || 0), + currency: isUs ? 'USD' : '', + fxRates: d.fx_rates || {}, + fxRate: fxEnd, }); } @@ -1529,6 +1995,7 @@ function runBreakoutBacktest() { max_stocks: $('bo_max_stocks')?.value || '20', total_budget_krw: $('bo_total_budget')?.value || '0', universe: $('bo_use_univ_history')?.checked ? 'history' : 'all', + universe_history_source: univHistorySourceParam('bo_univ_history_source'), ob_filter: $('bo_ob_filter')?.checked ? 1 : 0, pg_filter: $('bo_pg_filter')?.checked ? 1 : 0, max_spread_pct: $('bo_max_spread_pct')?.value, @@ -1537,6 +2004,7 @@ function runBreakoutBacktest() { daily_trail_arm_krw: $('bo_daily_trail_arm')?.value || '0', daily_profit_mode: ($('bo_daily_profit_mode') && $('bo_daily_profit_mode').value) || 'trailing', daily_profit_enabled: $('bo_daily_profit_enabled')?.checked ? 1 : 0, + daily_risk_budget_enabled: $('bo_daily_risk_budget_enabled')?.checked ? 1 : 0, eod_enabled: $('bo_eod_enabled')?.checked ? 1 : 0, eod_hm: ($('bo_eod_hm') && $('bo_eod_hm').value.trim()) || '15:15', skip_hts_scan_dupes: $('bo_skip_hts_dupes')?.checked ? 1 : 0, @@ -1599,9 +2067,10 @@ function saveBreakoutConfig() { daily_trail_tiers: ($('bo_daily_trail_tiers') && $('bo_daily_trail_tiers').value.trim()) || '', daily_profit_mode: ($('bo_daily_profit_mode') && $('bo_daily_profit_mode').value) || 'trailing', daily_profit_enabled: !!($('bo_daily_profit_enabled')?.checked), + daily_risk_budget_enabled: !!($('bo_daily_risk_budget_enabled')?.checked), skip_hts_scan_dupes: !!($('bo_skip_hts_dupes')?.checked), }; - if (!confirm('💾 돌파 봇(BREAKOUT_* env)에 현재 탭 값을 저장할까요?\n실행 중이면 다음 루프부터 반영됩니다.\n다단트레일: ' + (body.daily_profit_enabled ? 'ON' : 'OFF'))) return; + if (!confirm('💾 돌파 봇(BREAKOUT_* env)에 현재 탭 값을 저장할까요?\n실행 중이면 다음 루프부터 반영됩니다.\n다단트레일: ' + (body.daily_profit_enabled ? 'ON' : 'OFF') + ' · 리스크버짓(B): ' + (body.daily_risk_budget_enabled ? 'ON' : 'OFF'))) return; fetch('/api/backtest/breakout/save_config', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(body), @@ -1632,7 +2101,7 @@ function renderBreakoutBacktest(d) { const tr = (v) => (typeof v === 'number' ? Number(v).toFixed(1) : (v != null ? v : '—')); const periodHint = (p.start && p.end) ? ` | ${p.start}~${p.end}` : ''; const summaryLine = - `${universeLabel} ` + + `${universeLabel} ` + `진입 ${(p.entry_mode || 'intrabar').toUpperCase()} | ` + `Lookback ${p.lookback_min}분 | 회전율≥${tr(p.min_turnover_1m_pct)}%` + (Number(p.vol_mult) > 0 ? ` · VolWin${p.vol_window}분×${tr(p.vol_mult)}배` : '') + ` | ` + @@ -1994,11 +2463,13 @@ function runMomentumBacktest() { mom_max_from_open_pct: v('mom_max_from_open') || '999', mom_min_from_open_pct: v('mom_min_from_open') || '-999', universe: $('mom_use_univ_history')?.checked ? 'history' : 'sim', + universe_history_source: univHistorySourceParam('mom_univ_history_source'), daily_trail_tiers: (v('mom_daily_trail_tiers') || '').trim(), daily_trail_drop_pct: v('mom_daily_trail_drop') || '0', daily_trail_arm_krw: v('mom_daily_trail_arm') || '0', daily_profit_mode: ($('mom_daily_profit_mode') && $('mom_daily_profit_mode').value) || 'trailing', daily_profit_enabled: $('mom_daily_profit_enabled')?.checked ? 1 : 0, + daily_risk_budget_enabled: $('mom_daily_risk_budget_enabled')?.checked ? 1 : 0, eod_enabled: $('mom_eod_enabled')?.checked ? 1 : 0, eod_hm: ($('mom_eod_hm') && $('mom_eod_hm').value.trim()) || '15:25', backtest_skip_pre_subscribe: $('mom_skip_pre_sub')?.checked ? 1 : 0, @@ -2022,6 +2493,1018 @@ function runMomentumBacktest() { } } +/** 해외 모멘텀 백테 — /api/backtest/us_momentum (국내 momentum API 분기 사용 안 함) */ +function runUsMomentumBacktest() { + try { + showSpinner(true); + let start = $('usmom_start')?.value || ''; + let end = $('usmom_end')?.value || ''; + if (!start) { + start = kstMonthStartIso(); + setDateVal('usmom_start', start); + } + if (!end) { + end = kstTodayParts().iso; + setDateVal('usmom_end', end); + } + if (end && start && end < start) { + showSpinner(false); + alert('종료일이 시작일보다 앞섭니다.'); + return; + } + const v = id => { const el = $(id); return el ? el.value : ''; }; + const params = { + start, + end, + sl_pct: v('usmom_sl'), + tp_pct: v('usmom_tp'), + tp_max_pct: v('usmom_tp_max'), + slot_money: v('usmom_slot_money'), + slots: v('usmom_slots'), + total_budget_krw: v('usmom_total_budget') || '0', + cooldown_min: v('usmom_cooldown'), + shoulder_min_high: v('usmom_smin'), + shoulder_cut_pct: v('usmom_scut'), + trail_pct: v('usmom_trail') || '0', + trail_arm_pct: v('usmom_trail_arm') || '0', + max_hold_bars: v('usmom_max_hold') || '0', + ratchet_tiers: ($('usmom_ratchet')?.value || '').trim(), + time_start: v('usmom_time_start') || '2230', + time_end: v('usmom_time_end') || '500', + max_daily: v('usmom_max_daily') || '5', + high_chase_thr: v('usmom_high_chase') || '0.96', + max_daily_chg: v('usmom_max_daily_chg') || '20', + min_price: v('usmom_min_price') || '1', + max_loss_krw: v('usmom_max_loss') || '0', + min_margin: v('usmom_min_margin') || '0.2', + use_defense_filters: $('usmom_use_defense')?.checked ? 1 : 0, + use_high_chase_filter: $('usmom_use_high_chase_f')?.checked ? 1 : 0, + use_daily_range_filter: $('usmom_use_daily_range')?.checked ? 1 : 0, + use_ema_filter: $('usmom_use_ema_f')?.checked ? 1 : 0, + use_rsi_max_filter: $('usmom_use_rsi_max_f')?.checked ? 1 : 0, + pattern_breakout: $('usmom_pat_breakout')?.checked ? 1 : 0, + pattern_pullback: $('usmom_pat_pullback')?.checked ? 1 : 0, + chase_lookback_min: v('usmom_chase_lookback') || '10', + pullback_lookback_min: v('usmom_pullback_lookback') || '15', + pullback_min_pct: v('usmom_pullback_min') || '0.3', + pullback_max_pct: v('usmom_pullback_max') || '3.0', + setup_vol_max_mult: v('usmom_setup_vol') || '0.8', + setup_bear_bars_min: v('usmom_setup_bear') || '1', + ema_fast_period: v('usmom_ema_fast') || '9', + ema_slow_period: v('usmom_ema_slow') || '21', + mom_rsi_min: v('usmom_rsi_min'), + mom_rsi_max: v('usmom_rsi_max'), + mom_vol_mult: v('usmom_vol_mult'), + mom_vol_win: v('usmom_vol_win') || '5', + mom_time_end: v('usmom_time_end') || '500', + mom_max_from_open_pct: v('usmom_max_from_open') || '999', + mom_min_from_open_pct: v('usmom_min_from_open') || '-999', + eod_enabled: $('usmom_eod_enabled')?.checked ? 1 : 0, + eod_hm: ($('usmom_eod_hm') && $('usmom_eod_hm').value.trim()) || '05:00', + backtest_skip_pre_subscribe: 0, + daily_profit_enabled: $('usmom_daily_profit_enabled')?.checked ? 1 : 0, + daily_risk_budget_enabled: $('usmom_daily_risk_budget_enabled')?.checked ? 1 : 0, + daily_trail_tiers: ($('usmom_daily_trail_tiers')?.value || '').trim(), + daily_profit_mode: ($('usmom_daily_profit_mode')?.value || 'trailing'), + codes: ($('usmom_bt_codes')?.value || '').trim(), + }; + const qs = new URLSearchParams(params).toString(); + fetch('/api/backtest/us_momentum?' + qs) + .then(async r => { + const d = await r.json().catch(() => ({})); + if (!r.ok) throw new Error(d.error || ('HTTP ' + r.status)); + return d; + }) + .then(d => { showSpinner(false); renderUsMomentumBacktest(d); }) + .catch(err => { + showSpinner(false); + alert('해외 모멘텀 백테 오류: ' + err); + }); + } catch (err) { + showSpinner(false); + alert('해외 모멘텀 실행 오류: ' + err); + } +} + +function renderUsMomentumBacktest(d) { + if (!d || d.error) { + alert('❌ ' + (d && d.error ? d.error : '백테스트 응답 없음')); + return; + } + const s = d.summary || {}; + const trades = d.trades || []; + const p = d.params || {}; + const fxRates = d.fx_rates || {}; + const fxEnd = Number(s.fx_rate_end || 0) || getDisplayFxRate(); + if (fxEnd > 0) setDisplayFxRate(fxEnd); + const ra = $('usmom_result_area'); + if (ra) ra.style.display = 'block'; + const pb = $('usmom_params_bar'); + if (pb) { + pb.style.display = 'block'; + const sess = p.time_window + || `${p.time_start_hm ?? '?'}~${p.mom_time_end_hm ?? p.mom_time_end ?? p.time_end_hm ?? '?'}`; + const slot = Number(p.slot_money || 0); + const bud = Number(p.total_budget_krw || 0); + const slotTxt = fxEnd > 0 ? fmtUsdWithKrwText(slot, fxEnd) : fmtUsd(slot); + const budTxt = fxEnd > 0 ? fmtUsdWithKrwText(bud, fxEnd) : fmtUsd(bud); + const fxNote = fxEnd > 0 ? ` · FX ${fxEnd.toFixed(2)}원/$` : ''; + pb.innerHTML = + `market=${p.market || 'US'} | 유니버스=${p.universe_source || 'permanent_us'} | ` + + `종목 ${p.codes_analyzed || '—'} · 1회 ${slotTxt} · 한도 ${budTxt} · ` + + `세션 ${sess}` + + (p.max_hold_bars != null ? ` · max_hold=${p.max_hold_bars}` : '') + + (p.start && p.end ? ` · ${p.start}~${p.end}` : '') + + fxNote; + } + const ctx = $('usmom_trade_context'); + if (ctx) { + fillTradePnLContext(ctx, { + label: '백테 US_MOMENTUM', + totalBudget: Number(p.total_budget_krw || 0), + peakCum: Number(s.peak_cum_pnl || 0), + peakAt: s.peak_cum_at || '', + totalPnl: s.total_pnl, + currency: 'USD', + fxRate: fxEnd, + }); + } + const setTxt = (id, txt) => { const el = $(id); if (el) el.textContent = txt; }; + const setHtml = (id, html) => { const el = $(id); if (el) el.innerHTML = html; }; + setTxt('usmom_total', (s.total_trades || 0) + '건'); + setTxt('usmom_winrate', (s.win_rate || 0) + '%'); + colorPnl($('usmom_winrate'), (s.win_rate || 0) - 50); + if (s.total_pnl_krw != null && Number.isFinite(Number(s.total_pnl_krw))) { + setHtml('usmom_pnl', `${fmtUsd(s.total_pnl)} (${fmtWon(s.total_pnl_krw)}원)`); + } else { + setHtml('usmom_pnl', fmtUsdWithKrw(s.total_pnl, fxEnd)); + } + colorPnl($('usmom_pnl'), s.total_pnl); + setTxt('usmom_pf', (s.profit_factor || 0) >= 999 ? '∞' : String(s.profit_factor || 0)); + colorPnl($('usmom_pf'), (s.profit_factor || 0) - 1); + if (s.max_drawdown_krw != null && Number.isFinite(Number(s.max_drawdown_krw))) { + setHtml('usmom_mdd', `-${fmtUsd(s.max_drawdown)} (${fmtWon(s.max_drawdown_krw)}원)`); + } else { + setTxt('usmom_mdd', '-' + fmtUsdWithKrwText(s.max_drawdown, fxEnd)); + } + setTxt('usmom_hold', (s.avg_hold_min || 0) + '분'); + const usSign = v => (v > 0 ? '+' : ''); + setTxt('usmom_bot_pct', usSign(s.bot_pct || 0) + (s.bot_pct || 0) + '%'); + colorPnl($('usmom_bot_pct'), s.bot_pct || 0); + setTxt('usmom_daily_avg_pct', usSign(s.daily_avg_pct || 0) + (s.daily_avg_pct || 0) + '%'); + colorPnl($('usmom_daily_avg_pct'), s.daily_avg_pct || 0); + + const winbar = $('usmom_winbar_card'); + if ((s.total_trades || 0) > 0) { + if (winbar) winbar.style.display = 'block'; + const wr = s.win_rate || 0; + setTxt('usmom_win_label', `🟢 승 ${s.win_trades || 0}건 (${wr}%)`); + setTxt('usmom_loss_label', `🔴 패 ${s.loss_trades || 0}건 (${(100 - wr).toFixed(1)}%)`); + const rg = $('usmom_ratio_g'); if (rg) rg.style.width = wr + '%'; + const rr = $('usmom_ratio_r'); if (rr) rr.style.width = (100 - wr) + '%'; + } else if (winbar) { + winbar.style.display = 'none'; + } + + try { + if (d.equity && d.equity.length) { + lineChart('usmom_equity_chart', + d.equity.map(e => e.date), + d.equity.map(e => e.cum_pnl), + '가상누적손익($)', '#3fb950'); + } else { + destroyChart('usmom_equity_chart'); + } + const rKeys = Object.keys(d.reasons || {}); + if (rKeys.length) { + doughnutChart('usmom_reason_chart', rKeys, rKeys.map(k => d.reasons[k])); + } else { + destroyChart('usmom_reason_chart'); + } + if (d.daily && d.daily.length) { + barChart('usmom_daily_chart', + d.daily.map(e => e.date.slice(5)), + d.daily.map(e => e.pnl)); + } else { + destroyChart('usmom_daily_chart'); + } + } catch (chartErr) { + console.error('usmom chart render', chartErr); + } + + renderVirtualTrades('usmom_tbody', trades || [], { + showDebug: true, + showCumulative: true, + totalBudget: Number(p.total_budget_krw || 0), + currency: 'USD', + fxRates, + fxRate: fxEnd, + }); + if (ra) ra.scrollIntoView({ behavior: 'smooth', block: 'start' }); +} + +function usmomGoOptuna() { + /* Optuna 탭 = 전역 US_MOMENTUM_* 만 (종목 cfg는 이 탭 종목 Optuna) */ + document.querySelectorAll('.opt-strat-cb').forEach(cb => { + cb.checked = (cb.value === 'us_momentum'); + }); + const el = document.querySelector('[data-tab="optuna"]'); + if (el) el.click(); +} + +/** 해외 모멘텀 → 실거래 분석 탭 (국내 전략 탭과 동일: 전략탭에 실거래 UI 없음) */ +function usmomActGoActualTab() { + const radio = document.querySelector('input[name=act_strategy][value=US_MOMENTUM]'); + if (radio) radio.checked = true; + const day = ($('act_start')?.value || '').trim() || kstTradingDayIso(_krHolidays); + setDateVal('act_start', day); + setDateVal('act_end', day); + const el = document.querySelector('[data-tab="actual"]'); + if (el) el.click(); + loadActual(); +} + +/** @deprecated 임베드 실거래/페이퍼 UI 제거 — 실거래 분석 탭으로 */ +function loadUsMomActual() { usmomActGoActualTab(); } +function loadUsMomPaper() { usmomActGoActualTab(); } + +let _usmomStockCache = []; + +function usmomLoadStocks(seed) { + const q = seed ? '?seed=1' : ''; + fetch('/api/us_momentum/stocks' + q) + .then(r => r.json()) + .then(d => { + _usmomStockCache = d.stocks || []; + const sel = $('usmom_stock_code'); + const tb = $('usmom_stock_tbody'); + if (sel) { + const cur = sel.value; + sel.innerHTML = _usmomStockCache.map(s => + `` + ).join('') || ''; + if (cur && [...sel.options].some(o => o.value === cur)) sel.value = cur; + } + if (tb) { + if (!_usmomStockCache.length) { + tb.innerHTML = ''; + } else { + tb.innerHTML = _usmomStockCache.map(s => + ` + + + ` + ).join(''); + } + } + if (sel && sel.value) usmomOnStockSelect(); + }) + .catch(e => { + const tb = $('usmom_stock_tbody'); + if (tb) tb.innerHTML = ``; + }); +} + +function usmomPickStock(code) { + const sel = $('usmom_stock_code'); + if (sel) sel.value = code; + usmomOnStockSelect(); +} + +function usmomOnStockSelect() { + const code = ($('usmom_stock_code')?.value || '').trim().toUpperCase(); + if (!code) return; + const meta = (_usmomStockCache || []).find(s => s.code === code) || {}; + if ($('usmom_stock_group')) $('usmom_stock_group').value = meta.stock_group || 'STOCK'; + if ($('usmom_stock_exch')) $('usmom_stock_exch').value = meta.exchange || 'NASD'; + const badge = $('usmom_stock_cfg_badge'); + fetch('/api/us_momentum/stock_cfg?code=' + encodeURIComponent(code)) + .then(r => r.json()) + .then(d => { + if (badge) { + badge.textContent = d.has_stock_cfg + ? `핀 있음 · ${code}` + : `전역 폴백 · ${code}`; + badge.style.color = d.has_stock_cfg ? 'var(--accent,#58a6ff)' : 'var(--muted)'; + } + const c = d.cfg || {}; + const setN = (id, v) => { const el = $(id); if (el && v != null && v !== '') el.value = v; }; + setN('usmom_sl', c.sl_pct); + setN('usmom_tp', c.tp_pct); + setN('usmom_tp_max', c.tp_max_pct); + setN('usmom_smin', c.shoulder_min_high_pct); + setN('usmom_scut', c.shoulder_cut_pct); + setN('usmom_trail', c.trail_pct); + setN('usmom_trail_arm', c.trail_arm_pct); + setN('usmom_max_hold', c.max_hold_bars); + if (c.ratchet_tiers != null && $('usmom_ratchet')) $('usmom_ratchet').value = c.ratchet_tiers; + if (c.cooldown_sec != null && $('usmom_cooldown')) + $('usmom_cooldown').value = String(Math.round(Number(c.cooldown_sec) / 60 * 10) / 10); + setN('usmom_max_daily', c.max_daily); + setN('usmom_slot_money', c.slot_money); + setN('usmom_rsi_min', c.rsi_min); + setN('usmom_rsi_max', c.rsi_max); + setN('usmom_vol_mult', c.vol_mult); + setN('usmom_vol_win', c.vol_win); + setN('usmom_chase_lookback', c.chase_lookback_min); + setN('usmom_pullback_lookback', c.pullback_lookback_min); + setN('usmom_pullback_min', c.pullback_min_pct); + setN('usmom_pullback_max', c.pullback_max_pct); + if ($('usmom_bt_codes')) $('usmom_bt_codes').value = code; + }) + .catch(e => console.warn('[usmom stock_cfg]', e)); +} + +function usmomSaveStockCfg() { + const code = ($('usmom_stock_code')?.value || '').trim().toUpperCase(); + if (!code) { alert('종목을 선택하세요'); return; } + const numOrNull = (id) => { + const el = $(id); + if (!el || el.value === '' || el.value == null) return null; + const n = Number(el.value); + return Number.isFinite(n) ? n : null; + }; + const body = { + code, + exchange: ($('usmom_stock_exch')?.value || 'NASD').trim(), + symbol: code, + name: code, + stock_group: ($('usmom_stock_group')?.value || 'STOCK'), + sl_pct: numOrNull('usmom_sl'), + tp_pct: numOrNull('usmom_tp'), + tp_max_pct: numOrNull('usmom_tp_max'), + shoulder_min_high_pct: numOrNull('usmom_smin'), + shoulder_cut_pct: numOrNull('usmom_scut'), + trail_pct: numOrNull('usmom_trail'), + trail_arm_pct: numOrNull('usmom_trail_arm'), + ratchet_tiers: ($('usmom_ratchet')?.value || '').trim() || null, + max_hold_bars: numOrNull('usmom_max_hold'), + cooldown_sec: (() => { + const m = numOrNull('usmom_cooldown'); + return m == null ? null : Math.round(m * 60); + })(), + max_daily: numOrNull('usmom_max_daily'), + slot_money: numOrNull('usmom_slot_money'), + rsi_min: numOrNull('usmom_rsi_min'), + rsi_max: numOrNull('usmom_rsi_max'), + vol_mult: numOrNull('usmom_vol_mult'), + vol_win: numOrNull('usmom_vol_win'), + chase_lookback_min: numOrNull('usmom_chase_lookback'), + pullback_lookback_min: numOrNull('usmom_pullback_lookback'), + pullback_min_pct: numOrNull('usmom_pullback_min'), + pullback_max_pct: numOrNull('usmom_pullback_max'), + setup_vol_max_mult: numOrNull('usmom_setup_vol'), + setup_bear_bars_min: numOrNull('usmom_setup_bear'), + high_chase_thr: numOrNull('usmom_high_chase'), + max_daily_chg: numOrNull('usmom_max_daily_chg'), + min_price: numOrNull('usmom_min_price'), + ema_fast_period: numOrNull('usmom_ema_fast'), + ema_slow_period: numOrNull('usmom_ema_slow'), + use_defense_filters: $('usmom_use_defense')?.checked ? 1 : 0, + use_high_chase_filter: $('usmom_use_high_chase_f')?.checked ? 1 : 0, + use_daily_range_filter: $('usmom_use_daily_range')?.checked ? 1 : 0, + use_ema_filter: $('usmom_use_ema_f')?.checked ? 1 : 0, + use_rsi_max_filter: $('usmom_use_rsi_max_f')?.checked ? 1 : 0, + pattern_breakout: $('usmom_pat_breakout')?.checked ? 1 : 0, + pattern_pullback: $('usmom_pat_pullback')?.checked ? 1 : 0, + }; + fetch('/api/us_momentum/stock_cfg', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(body), + }) + .then(r => r.json()) + .then(d => { + if (d.error) throw new Error(d.error); + alert('✅ ' + code + ' 종목 파람 저장'); + usmomLoadStocks(false); + }) + .catch(e => alert('종목 저장 실패: ' + e)); +} + +function usmomClearStockCfg() { + const code = ($('usmom_stock_code')?.value || '').trim().toUpperCase(); + if (!code) return; + if (!confirm(code + ' 종목 핀을 삭제하고 전역 US_MOMENTUM_* 로 복귀할까요?')) return; + fetch('/api/us_momentum/stock_cfg?code=' + encodeURIComponent(code), { method: 'DELETE' }) + .then(r => r.json()) + .then(d => { + if (d.error) throw new Error(d.error); + usmomLoadStocks(false); + }) + .catch(e => alert('삭제 실패: ' + e)); +} + +const USMOM_OPT_LS_KEY = 'kis_usmom_stock_optuna_job'; +let _usmomOptJobId = localStorage.getItem(USMOM_OPT_LS_KEY) || ''; +let _usmomOptPollTimer = null; +/** @type {{source:string, rank:number}|null} */ +let _usmomOptSelected = null; +window._usmomOptLastSummary = null; + +function usmomOptSetStatus(html, isErr) { + const el = $('usmom_opt_status'); + if (!el) return; + el.innerHTML = html; + el.style.color = isErr ? 'var(--danger, #f85149)' : 'var(--muted)'; +} + +function usmomOptSyncSelectedButtons() { + const has = !!( + _usmomOptSelected && _usmomOptSelected.source && _usmomOptSelected.rank + ); + const fl = $('usmom_opt_btn_fill_sel'); + const ap = $('usmom_opt_btn_apply_sel'); + if (fl) fl.disabled = !has; + if (ap) ap.disabled = !has; + const sel = $('usmom_opt_detail_sel'); + if (sel) { + sel.textContent = has + ? `${_usmomOptSelected.source} #${_usmomOptSelected.rank}` + : '미선택'; + } +} + +function usmomOptSetButtons(running, done) { + const st = $('usmom_opt_btn_start'); + const sp = $('usmom_opt_btn_stop'); + const ap = $('usmom_opt_btn_apply'); + const fl = $('usmom_opt_btn_fill'); + if (st) st.disabled = !!running; + if (sp) sp.disabled = !running; + if (ap) ap.disabled = !done; + if (fl) fl.disabled = !done; + const box = $('usmom_opt_results_box'); + if (box) { + if (done) { + box.style.display = 'block'; + box.dataset.forceShow = '1'; + } else if (running) { + box.style.display = 'none'; + box.dataset.forceShow = ''; + } + } + usmomOptSyncSelectedButtons(); +} + +function usmomOptFmtUsdOrNum(v, digits) { + const n = Number(v); + if (!Number.isFinite(n)) return '—'; + if (digits == null) return n.toLocaleString(undefined, { maximumFractionDigits: 2 }); + return n.toFixed(digits); +} + +function usmomOptRenderTopTable(tbodyId, rows, source) { + const tb = $(tbodyId); + if (!tb) return; + if (!rows || !rows.length) { + tb.innerHTML = ``; + return; + } + const src = source; + tb.innerHTML = rows.map(r => { + const rank = r.rank || 1; + const sel = _usmomOptSelected + && _usmomOptSelected.source === src + && Number(_usmomOptSelected.rank) === Number(rank); + const outline = sel ? 'outline:1px solid var(--accent)' : ''; + return ` + + + + + + + + `; + }).join(''); +} + +function usmomStockOptunaRenderResults(sum) { + window._usmomOptLastSummary = sum || null; + const box = $('usmom_opt_results_box'); + if (!sum) { + if (box) box.style.display = 'none'; + return; + } + if (box) { + box.style.display = 'block'; + box.dataset.forceShow = '1'; + } + usmomOptRenderTopTable('usmom_opt_top5_learn', sum.top5_learn || [], 'learn'); + usmomOptRenderTopTable('usmom_opt_top5_gated', sum.top5_gated || [], 'gated'); +} + +function usmomOptSyncDatesFromMain() { + const s = ($('usmom_start')?.value || '').trim(); + const e = ($('usmom_end')?.value || '').trim(); + if ($('usmom_opt_start') && s) $('usmom_opt_start').value = s; + if ($('usmom_opt_end') && e) $('usmom_opt_end').value = e; +} + +function usmomOptSyncDatesToMain() { + const s = ($('usmom_opt_start')?.value || '').trim(); + const e = ($('usmom_opt_end')?.value || '').trim(); + if ($('usmom_start') && s) setDateVal('usmom_start', s); + if ($('usmom_end') && e) setDateVal('usmom_end', e); +} + +function usmomStockOptunaRender(job) { + if (!job) return; + const st = job.status || ''; + const prog = job.progress || {}; + const pct = Number(prog.pct || 0); + const doneN = prog.trials_done ?? 0; + const totN = prog.trials_total ?? job.trials ?? '—'; + const fill = $('usmom_opt_fill'); + if (fill) { + fill.style.width = `${Math.min(100, Math.max(0, pct))}%`; + fill.classList.toggle('is-done', st === 'done'); + fill.classList.toggle('is-error', st === 'error'); + } + if ($('usmom_opt_prog_label')) { + const met = optunaBestMetricsText(prog, job); + $('usmom_opt_prog_label').textContent = + `trial ${doneN} / ${totN} (${pct}%)` + + (job.symbol ? ` · ${job.symbol}` : '') + + (met ? ` · ${met}` : ''); + } + const log = job.log_path ? `
${job.log_path}` : ''; + usmomOptSetStatus( + `${job.label || '종목 Optuna'} · ${st}` + + (job.error ? `
❌ ${job.error}` : '') + + (job.result_json ? `
JSON: ${job.result_json}` : '') + + log, + st === 'error' + ); + const tail = $('usmom_opt_log_tail'); + if (tail) { + const t = (job.log_tail || '').trim(); + if (t) { + tail.textContent = t; + tail.classList.remove('d-none'); + } else if (st !== 'running') { + tail.classList.add('d-none'); + } + } + usmomOptSetButtons(st === 'running', st === 'done'); + if (st === 'done' && job.result_summary) { + usmomStockOptunaRenderResults(job.result_summary); + } + // 상단 네비 프로그레스도 동일 갱신 (Optuna 탭과 공유 바) + if (typeof optunaSetNav === 'function') optunaSetNav(job); +} + +async function usmomStockOptunaView(source, rank) { + if (!_usmomOptJobId) { + _usmomOptJobId = localStorage.getItem(USMOM_OPT_LS_KEY) || ''; + } + if (!_usmomOptJobId) { alert('종목 Optuna job 없음'); return; } + const src = source || 'learn'; + const rk = Number(rank) || 1; + _usmomOptSelected = { source: src, rank: rk }; + usmomOptSyncSelectedButtons(); + const title = $('usmom_opt_detail_title'); + const met = $('usmom_opt_detail_metrics'); + const pre = $('usmom_opt_detail_params'); + if (title) title.textContent = `로딩 ${src} #${rk}…`; + if (met) met.textContent = '불러오는 중…'; + try { + const qs = new URLSearchParams({ + job_id: _usmomOptJobId, + source: src, + rank: String(rk), + }); + const r = await fetch('/api/optuna/candidate?' + qs.toString()); + const j = await r.json(); + if (!j.ok) { + if (met) met.textContent = '❌ ' + (j.error || '실패'); + if (pre) { pre.textContent = '—'; pre.classList.add('d-none'); } + return; + } + const m = j.metrics || {}; + if (title) { + title.textContent = + `${j.strategy || 'us_momentum'} · ${m.label || src} · trial ${ + m.optuna_trial_number != null ? '#' + m.optuna_trial_number : '—' + }`; + } + if (met) { + met.innerHTML = + `거래 ${usmomOptFmtUsdOrNum(m.total_trades, 0)} · ` + + `승률 ${usmomOptFmtUsdOrNum(m.win_rate, 1)}% · ` + + `PF ${usmomOptFmtUsdOrNum(m.pf, 2)} · ` + + `PnL ${usmomOptFmtUsdOrNum(m.total_pnl)}` + + (j.start && j.end ? ` · ${j.start}~${j.end}` : ''); + } + if (pre) { + pre.textContent = JSON.stringify(j.params_preview || j.params_full || {}, null, 2); + pre.classList.remove('d-none'); + } + window._optunaJobId = _usmomOptJobId; + window._optunaCandidateCache = { + strategy: j.strategy || 'us_momentum', + start: j.start, + end: j.end, + params: j.params_full || j.params_preview || {}, + }; + usmomStockOptunaRenderResults(window._usmomOptLastSummary); + } catch (e) { + if (met) met.textContent = '오류: ' + e; + } +} + +async function usmomStockOptunaFillSelected() { + if (!_usmomOptSelected) { alert('먼저 Top에서「보기」로 후보를 고르세요'); return; } + return usmomStockOptunaFillForm(_usmomOptSelected.source, _usmomOptSelected.rank); +} + +async function usmomStockOptunaApplySelected() { + if (!_usmomOptSelected) { alert('먼저 Top에서「보기」로 후보를 고르세요'); return; } + return usmomStockOptunaApply(_usmomOptSelected.source, _usmomOptSelected.rank); +} + +async function usmomStockOptunaStart() { + const code = ($('usmom_stock_code')?.value || '').trim().toUpperCase(); + if (!code) { alert('종목을 선택하세요'); return; } + usmomOptSyncDatesFromMain(); + let start = ($('usmom_opt_start')?.value || '').trim() || ($('usmom_start')?.value || '').trim(); + let end = ($('usmom_opt_end')?.value || '').trim() || ($('usmom_end')?.value || '').trim(); + if (!start || !end) { alert('시작·종료일을 입력하세요'); return; } + usmomOptSyncDatesToMain(); + if ($('usmom_bt_codes')) $('usmom_bt_codes').value = code; + const trials = parseInt($('usmom_opt_trials')?.value || '100', 10) || 100; + const mode = ($('usmom_opt_mode')?.value || 'tpe').trim() || 'tpe'; + if (!confirm( + `종목 Optuna 시작?\n${code} (1종목 유니버스)\n${start}~${end} trials=${trials}\n` + + `완료 후 「폼에 넣기」→백테 검증 · 「종목행에 적용」→ stock_config\n(전역 US_MOMENTUM_* 미적용)` + )) return; + try { + const r = await fetch('/api/optuna/start', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + strategy: 'us_momentum', + symbol: code, + start, end, trials, mode, + }), + }); + const j = await r.json(); + if (!j.ok) { alert('❌ ' + (j.error || '시작 실패')); return; } + _usmomOptJobId = j.job.job_id; + localStorage.setItem(USMOM_OPT_LS_KEY, _usmomOptJobId); + usmomStockOptunaRender(j.job); + usmomStockOptunaStartPolling(); + } catch (e) { + alert('오류: ' + e); + } +} + +async function usmomStockOptunaStop() { + if (!_usmomOptJobId) return; + if (!confirm('종목 Optuna를 중지할까요?')) return; + try { + const r = await fetch('/api/optuna/stop/' + encodeURIComponent(_usmomOptJobId), { method: 'POST' }); + const j = await r.json(); + if (!j.ok) { alert(j.error || '중지 실패'); return; } + usmomStockOptunaRender(j.job); + if (_usmomOptPollTimer) { clearInterval(_usmomOptPollTimer); _usmomOptPollTimer = null; } + } catch (e) { alert('오류: ' + e); } +} + +async function usmomStockOptunaPollOnce() { + if (!_usmomOptJobId) return; + try { + const r = await fetch('/api/optuna/status/' + encodeURIComponent(_usmomOptJobId)); + const j = await r.json(); + if (!j.ok) { + usmomOptSetStatus('job 없음', true); + _usmomOptJobId = ''; + localStorage.removeItem(USMOM_OPT_LS_KEY); + usmomOptSetButtons(false, false); + const fill = $('usmom_opt_fill'); + if (fill) { fill.style.width = '0%'; fill.classList.remove('is-done', 'is-error'); } + if ($('usmom_opt_prog_label')) $('usmom_opt_prog_label').textContent = 'trial —'; + return; + } + usmomStockOptunaRender(j.job); + const st = j.job.status; + if (st === 'done' || st === 'error') { + if (_usmomOptPollTimer) { clearInterval(_usmomOptPollTimer); _usmomOptPollTimer = null; } + } + } catch (e) { + usmomOptSetStatus('폴링 오류: ' + e, true); + } +} + +function usmomStockOptunaStartPolling() { + if (_usmomOptPollTimer) clearInterval(_usmomOptPollTimer); + usmomStockOptunaPollOnce(); + _usmomOptPollTimer = setInterval(usmomStockOptunaPollOnce, 4000); +} + +async function usmomStockOptunaFillForm(source, rank) { + /* source/rank 없으면 학습1위(진행바 best). Top「폼」·선택 버튼에서 지정 가능. */ + if (!_usmomOptJobId) { + _usmomOptJobId = localStorage.getItem(USMOM_OPT_LS_KEY) || ''; + } + if (!_usmomOptJobId) { alert('완료된 종목 Optuna job 없음'); return; } + const src = (source || 'learn').toString(); + const rk = Number(rank) || 1; + _usmomOptSelected = { source: src, rank: rk }; + usmomOptSyncSelectedButtons(); + const code = ($('usmom_stock_code')?.value || '').trim().toUpperCase() + || ($('usmom_bt_codes')?.value || '').trim().toUpperCase(); + try { + const qs = new URLSearchParams({ + job_id: _usmomOptJobId, + source: src, + rank: String(rk), + }); + const r = await fetch('/api/optuna/candidate?' + qs.toString()); + const j = await r.json(); + if (!j.ok) { alert('❌ ' + (j.error || '후보 없음')); return; } + window._optunaJobId = _usmomOptJobId; + window._optunaCandidateCache = { + strategy: j.strategy || 'us_momentum', + start: j.start, + end: j.end, + params: j.params_full || j.params_preview || {}, + }; + // 이미 🇺🇸탭 — tab.click 스킵 (핀 cfg 재로드로 덮어쓰기 방지) + await optunaFillFormFromCandidate(src, rk); + if (code && $('usmom_bt_codes')) $('usmom_bt_codes').value = code; + if (j.start) { + setDateVal('usmom_start', j.start); + if ($('usmom_opt_start')) $('usmom_opt_start').value = j.start; + } + if (j.end) { + setDateVal('usmom_end', j.end); + if ($('usmom_opt_end')) $('usmom_opt_end').value = j.end; + } + } catch (e) { + alert('폼에 넣기 오류: ' + e); + } +} + +async function usmomStockOptunaApply(source, rank) { + if (!_usmomOptJobId) { + _usmomOptJobId = localStorage.getItem(USMOM_OPT_LS_KEY) || ''; + } + if (!_usmomOptJobId) { alert('완료된 종목 Optuna job 없음'); return; } + const code = ($('usmom_stock_code')?.value || '').trim().toUpperCase(); + if (!code) { alert('종목 선택 필요'); return; } + const src = (source || 'learn').toString(); + const rk = Number(rank) || 1; + _usmomOptSelected = { source: src, rank: rk }; + usmomOptSyncSelectedButtons(); + if (!confirm( + `${code} ${src} #${rk} → us_momentum_stock_config?\n` + + `(전역 US_MOMENTUM_* / 다단트레일 미변경)` + )) return; + try { + const r = await fetch('/api/optuna/apply', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + job_id: _usmomOptJobId, + source: src, + rank: rk, + symbol: code, + exchange: ($('usmom_stock_exch')?.value || 'NASD').trim(), + stock_group: ($('usmom_stock_group')?.value || 'STOCK').trim(), + }), + }); + const j = await r.json(); + if (!j.ok) { alert('❌ ' + (j.error || '적용 실패')); return; } + alert( + `✅ ${code} 종목행 적용 (${src} #${rk})\n` + + `PnL=${j.metrics?.total_pnl} trades=${j.metrics?.total_trades}\n` + + (j.apply_target || '') + ); + usmomLoadStocks(false); + } catch (e) { + alert('오류: ' + e); + } +} + +/** US_MOMENTUM_* 만 저장 — 국내 MOMENTUM_/SCALP_ 미오염 */ +function saveUsMomentumConfig() { + const body = { + sl_pct: parseFloat($('usmom_sl')?.value), + tp_pct: parseFloat($('usmom_tp')?.value), + tp_max_pct: parseFloat($('usmom_tp_max')?.value), + slot_money: parseInt($('usmom_slot_money')?.value || '0', 10) || 0, + slots: parseInt($('usmom_slots')?.value || '4', 10) || 4, + total_budget_krw: parseInt($('usmom_total_budget')?.value || '0', 10), + cooldown_min: parseFloat($('usmom_cooldown')?.value || '0'), + shoulder_min_high: parseFloat($('usmom_smin')?.value), + shoulder_cut_pct: parseFloat($('usmom_scut')?.value), + trail_pct: parseFloat($('usmom_trail')?.value || '0'), + trail_arm_pct: parseFloat($('usmom_trail_arm')?.value || '0'), + max_hold_bars: parseInt($('usmom_max_hold')?.value || '0', 10), + ratchet_tiers: ($('usmom_ratchet')?.value || '').trim(), + time_start: parseInt($('usmom_time_start')?.value || '2230', 10), + time_end: parseInt($('usmom_time_end')?.value || '500', 10), + sell_time_end: parseInt($('usmom_sell_time_end')?.value || '630', 10), + max_daily: parseInt($('usmom_max_daily')?.value || '5', 10), + high_chase_thr: parseFloat($('usmom_high_chase')?.value || '0.96'), + max_daily_chg: parseFloat($('usmom_max_daily_chg')?.value || '20'), + min_price: parseFloat($('usmom_min_price')?.value || '1'), + max_loss_krw: parseInt($('usmom_max_loss')?.value || '0', 10), + min_margin: parseFloat($('usmom_min_margin')?.value || '0.2'), + use_defense_filters: !!($('usmom_use_defense')?.checked), + use_high_chase_filter: !!($('usmom_use_high_chase_f')?.checked), + use_daily_range_filter: !!($('usmom_use_daily_range')?.checked), + use_ema_filter: !!($('usmom_use_ema_f')?.checked), + use_rsi_max_filter: !!($('usmom_use_rsi_max_f')?.checked), + pattern_breakout: !!($('usmom_pat_breakout')?.checked), + pattern_pullback: !!($('usmom_pat_pullback')?.checked), + chase_lookback_min: parseInt($('usmom_chase_lookback')?.value || '10', 10), + pullback_lookback_min: parseInt($('usmom_pullback_lookback')?.value || '15', 10), + pullback_min_pct: parseFloat($('usmom_pullback_min')?.value || '0.3'), + pullback_max_pct: parseFloat($('usmom_pullback_max')?.value || '3.0'), + setup_vol_max_mult: parseFloat($('usmom_setup_vol')?.value || '0.8'), + setup_bear_bars_min: parseInt($('usmom_setup_bear')?.value || '1', 10), + ema_fast_period: parseInt($('usmom_ema_fast')?.value || '9', 10), + ema_slow_period: parseInt($('usmom_ema_slow')?.value || '21', 10), + mom_rsi_min: parseFloat($('usmom_rsi_min')?.value), + mom_rsi_max: parseFloat($('usmom_rsi_max')?.value), + mom_vol_mult: parseFloat($('usmom_vol_mult')?.value), + mom_vol_win: parseInt($('usmom_vol_win')?.value || '5', 10), + mom_max_from_open_pct: parseFloat($('usmom_max_from_open')?.value || '999'), + mom_min_from_open_pct: parseFloat($('usmom_min_from_open')?.value || '-999'), + daily_trail_tiers: ($('usmom_daily_trail_tiers')?.value || '').trim(), + daily_profit_mode: ($('usmom_daily_profit_mode')?.value || 'trailing'), + daily_profit_enabled: !!($('usmom_daily_profit_enabled')?.checked), + daily_risk_budget_enabled: !!($('usmom_daily_risk_budget_enabled')?.checked), + eod_enabled: !!($('usmom_eod_enabled')?.checked), + eod_hm: ($('usmom_eod_hm')?.value || '').trim() || '05:00', + }; + fetch('/api/backtest/us_momentum/save_config', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(body), + }) + .then(r => r.json()) + .then(d => { + if (d.error) throw new Error(d.error); + alert('✅ 해외 모멘텀 설정 저장 (' + (d.saved_keys || []).length + '키 · US_MOMENTUM_* only)'); + }) + .catch(err => alert('해외 모멘텀 저장 오류: ' + err)); +} + +function updateUsMomFxHint() { + const apply = (fx) => { + if (fx > 0) setDisplayFxRate(fx); + const el = $('usmom_fx_hint'); + if (!el) return; + const r = getDisplayFxRate(); + if (!(r > 0)) { + el.textContent = '$↔원 = 표시용(캐시/폴백)'; + return; + } + const slot = Number($('usmom_slot_money')?.value || 0); + const bud = Number($('usmom_total_budget')?.value || 0); + el.textContent = + `FX ${r.toFixed(2)} · 1회≈${fmtWon(Math.round(slot * r))}원 · 한도≈${fmtWon(Math.round(bud * r))}원`; + }; + const cached = getDisplayFxRate(); + if (cached > 0) apply(cached); + fetch('/api/fx/usd_krw') + .then(r => r.json()) + .then(j => { + const fx = Number(j.display_rate || 0); + if (fx > 0) apply(fx); + }) + .catch(() => {}); +} + +function fillUsMomentumFormFromApi(m) { + if (!m || typeof m !== 'object') return; + const set = (id, val) => { if (val !== null && val !== undefined && $(id)) $(id).value = val; }; + set('usmom_rsi_min', m.mom_rsi_min); + set('usmom_rsi_max', m.mom_rsi_max); + set('usmom_vol_mult', m.mom_vol_mult); + set('usmom_vol_win', m.mom_vol_win); + set('usmom_time_start', m.mom_time_start_hm || m.time_start); + set('usmom_time_end', m.mom_time_end_hm || m.time_end); + set('usmom_sell_time_end', m.sell_time_end); + if (m.eod_enabled !== undefined && $('usmom_eod_enabled')) { + $('usmom_eod_enabled').checked = !!m.eod_enabled; + } + if (m.eod_hm != null) set('usmom_eod_hm', m.eod_hm); + set('usmom_sl', m.sl_pct); + set('usmom_tp', m.tp_pct); + set('usmom_tp_max', m.tp_max_pct); + set('usmom_smin', m.shoulder_min_high); + set('usmom_scut', m.shoulder_cut_pct); + if (m.trail_pct != null) set('usmom_trail', m.trail_pct); + if (m.trail_arm_pct != null) set('usmom_trail_arm', m.trail_arm_pct); + if (m.max_hold_bars != null) set('usmom_max_hold', m.max_hold_bars); + if ($('usmom_ratchet')) $('usmom_ratchet').value = (m.ratchet_tiers != null ? String(m.ratchet_tiers) : ''); + set('usmom_cooldown', m.cooldown_min); + set('usmom_max_daily', m.max_daily); + set('usmom_slot_money', m.slot_money); + set('usmom_slots', m.mom_slots || m.slots); + if (m.total_budget_krw != null) set('usmom_total_budget', m.total_budget_krw); + set('usmom_high_chase', m.high_chase_thr); + set('usmom_max_daily_chg', m.max_daily_chg); + set('usmom_min_price', m.min_price); + set('usmom_max_loss', m.max_loss_krw); + set('usmom_min_margin', m.min_margin); + set('usmom_max_from_open', m.mom_max_from_open_pct); + set('usmom_min_from_open', m.mom_min_from_open_pct); + if ($('usmom_pat_breakout') && m.pattern_breakout !== undefined) { + $('usmom_pat_breakout').checked = !!m.pattern_breakout; + } + if ($('usmom_pat_pullback') && m.pattern_pullback !== undefined) { + $('usmom_pat_pullback').checked = !!m.pattern_pullback; + } + set('usmom_chase_lookback', m.chase_lookback_min); + set('usmom_pullback_lookback', m.pullback_lookback_min); + set('usmom_pullback_min', m.pullback_min_pct); + set('usmom_pullback_max', m.pullback_max_pct); + set('usmom_setup_vol', m.setup_vol_max_mult); + set('usmom_setup_bear', m.setup_bear_bars_min); + if (m.use_defense_filters !== undefined && $('usmom_use_defense')) { + $('usmom_use_defense').checked = !!m.use_defense_filters; + } + if ($('usmom_use_high_chase_f') && m.use_high_chase_filter !== undefined) { + $('usmom_use_high_chase_f').checked = !!m.use_high_chase_filter; + } + if ($('usmom_use_daily_range') && m.use_daily_range_filter !== undefined) { + $('usmom_use_daily_range').checked = !!m.use_daily_range_filter; + } + if ($('usmom_use_ema_f') && m.use_ema_filter !== undefined) { + $('usmom_use_ema_f').checked = !!m.use_ema_filter; + } + if ($('usmom_use_rsi_max_f') && m.use_rsi_max_filter !== undefined) { + $('usmom_use_rsi_max_f').checked = !!m.use_rsi_max_filter; + } + if (m.ema_fast_period != null) set('usmom_ema_fast', m.ema_fast_period); + if (m.ema_slow_period != null) set('usmom_ema_slow', m.ema_slow_period); + if (m.daily_profit_enabled !== undefined && $('usmom_daily_profit_enabled')) { + $('usmom_daily_profit_enabled').checked = !!m.daily_profit_enabled; + } + if (m.daily_risk_budget_enabled !== undefined && $('usmom_daily_risk_budget_enabled')) { + $('usmom_daily_risk_budget_enabled').checked = !!m.daily_risk_budget_enabled; + } + if (m.daily_trail_tiers != null) set('usmom_daily_trail_tiers', m.daily_trail_tiers); + if (m.daily_profit_mode != null) set('usmom_daily_profit_mode', m.daily_profit_mode); + updateUsMomFxHint(); +} + +/** 영구구독 US 전 종목 → KIS 해외 1분봉 → ws_candles.market=US */ +function usmomFetchCandles(tf) { + const start = $('usmom_start')?.value || ''; + const end = $('usmom_end')?.value || ''; + if (!start || !end) { + alert('시작일·종료일을 먼저 넣으세요.'); + return; + } + const st = $('usmom_fetch_status'); + if (st) st.textContent = '수집 시작…'; + fetch('/api/ws_candles/fetch_us', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ start, end, tf: tf || 1, rollup_3m: true }), + }) + .then(r => r.json()) + .then(d => { + if (d.error) throw new Error(d.error); + const jobId = d.job_id; + if (!jobId) throw new Error('job_id 없음'); + const poll = () => { + fetch('/api/ws_candles/fetch_us/status/' + jobId) + .then(r => r.json()) + .then(j => { + if (st) { + st.textContent = + `${j.status || '?'} · ${j.current || ''} saved=${j.saved || 0}` + + (j.error ? ' · ' + j.error : ''); + } + if (j.status === 'running') setTimeout(poll, 1500); + else if (j.status === 'done' && st) { + st.textContent = + `완료 · 종목 ${j.codes || 0} · 저장 ${j.saved || 0}봉` + + (j.rollup_3m ? ` · 3m롤업 ${j.rollup_3m}` : ''); + } + }) + .catch(e => { if (st) st.textContent = '폴링 오류: ' + e; }); + }; + poll(); + }) + .catch(err => { + if (st) st.textContent = '실패: ' + err; + alert('US 봉 수집 오류: ' + err); + }); +} + function saveMomentumConfig() { const body = { sl_pct: parseFloat($('mom_sl').value), @@ -2071,11 +3554,12 @@ function saveMomentumConfig() { daily_trail_tiers: ($('mom_daily_trail_tiers') && $('mom_daily_trail_tiers').value.trim()) || '', daily_profit_mode: ($('mom_daily_profit_mode') && $('mom_daily_profit_mode').value) || 'trailing', daily_profit_enabled: !!($('mom_daily_profit_enabled')?.checked), + daily_risk_budget_enabled: !!($('mom_daily_risk_budget_enabled')?.checked), eod_enabled: !!($('mom_eod_enabled')?.checked), eod_hm: ($('mom_eod_hm') && $('mom_eod_hm').value.trim()) || '15:25', backtest_skip_pre_subscribe: !!($('mom_skip_pre_sub')?.checked), }; - if (!confirm('💾 모멘텀 봇(MOMENTUM_*)에 현재 탭 값을 저장할까요?\n실행 중이면 다음 루프부터 반영됩니다.\n다단트레일: ' + (body.daily_profit_enabled ? 'ON' : 'OFF'))) return; + if (!confirm('💾 모멘텀 봇(MOMENTUM_*)에 현재 탭 값을 저장할까요?\n실행 중이면 다음 루프부터 반영됩니다.\n다단트레일: ' + (body.daily_profit_enabled ? 'ON' : 'OFF') + ' · 리스크버짓(B): ' + (body.daily_risk_budget_enabled ? 'ON' : 'OFF'))) return; fetch('/api/backtest/momentum/save_config', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(body), @@ -2118,7 +3602,7 @@ function renderMomentumBacktest(d) { ? `RSI ${p.mom_rsi_min}~${p.mom_rsi_max}` : `RSI≥${p.mom_rsi_min}`; const momSummaryLine = - `${momUnivLabel} ` + + `${momUnivLabel} ` + `${patLabel}(${p.chase_lookback_min || '—'}분) | ${rsiLabel} | 거래량×${p.mom_vol_mult} | ` + `손절-${p.sl_pct}% | 어깨(${p.shoulder_min_high}%/${p.shoulder_cut_pct}%)` + `${p.ratchet_tiers ? '·래칫' + p.ratchet_tiers : ''} | ` + @@ -2422,12 +3906,21 @@ function fillTailFormFromApi(t) { if (t.daily_profit_enabled !== undefined && $('tl_daily_profit_enabled')) { $('tl_daily_profit_enabled').checked = !!t.daily_profit_enabled; } + if (t.daily_risk_budget_enabled !== undefined && $('tl_daily_risk_budget_enabled')) { + $('tl_daily_risk_budget_enabled').checked = !!t.daily_risk_budget_enabled; + } if ($('tl_daily_trail_tiers')) { $('tl_daily_trail_tiers').value = (t.daily_trail_tiers != null ? String(t.daily_trail_tiers) : ''); } if (t.daily_profit_mode && $('tl_daily_profit_mode')) { $('tl_daily_profit_mode').value = t.daily_profit_mode; } + if ($('tl_daily_trail_arm') && t.daily_trail_arm_krw != null) { + $('tl_daily_trail_arm').value = String(t.daily_trail_arm_krw); + } + if ($('tl_daily_trail_drop') && t.daily_trail_drop_pct != null) { + $('tl_daily_trail_drop').value = String(t.daily_trail_drop_pct); + } // DB(env)에 저장된 사용자 프리셋 목록(세미콜론) → 드롭다운 ★옵션 복원 btFillPresetOptions('tl_ratchet_preset', t.ratchet_presets); btFillPresetOptions('tl_daily_trail_preset', t.daily_trail_presets); @@ -2609,6 +4102,9 @@ function fillMomentumFormFromApi(m) { if (m.daily_profit_enabled !== undefined && $('mom_daily_profit_enabled')) { $('mom_daily_profit_enabled').checked = !!m.daily_profit_enabled; } + if (m.daily_risk_budget_enabled !== undefined && $('mom_daily_risk_budget_enabled')) { + $('mom_daily_risk_budget_enabled').checked = !!m.daily_risk_budget_enabled; + } if ($('mom_daily_trail_tiers')) { $('mom_daily_trail_tiers').value = (m.daily_trail_tiers != null ? String(m.daily_trail_tiers) : ''); } @@ -2910,6 +4406,7 @@ function saveTailConfig() { daily_trail_tiers: ($('tl_daily_trail_tiers') && $('tl_daily_trail_tiers').value.trim()) || '', daily_profit_mode: ($('tl_daily_profit_mode') && $('tl_daily_profit_mode').value) || 'trailing', daily_profit_enabled: !!($('tl_daily_profit_enabled')?.checked), + daily_risk_budget_enabled: !!($('tl_daily_risk_budget_enabled')?.checked), max_hold_bars: 0, trail_pct: parseFloat($('tl_trail')?.value || '0'), trail_arm_pct: parseFloat($('tl_trail_arm')?.value || '0'), @@ -2935,7 +4432,7 @@ function saveTailConfig() { `ATR손절: ${body.stop_atr_mult}배 | ATR익절: ${body.target_atr_mult}배 | ` + `캡 SL ${body.atr_sl_min_pct}~${body.atr_sl_max_pct}% TP ${body.atr_tp_min_pct}~${body.atr_tp_max_pct}%\n` + `래칫: ${body.ratchet_tiers || '(OFF·단일어깨)'}\n` + - `다단트레일: ${body.daily_profit_enabled ? 'ON' : 'OFF'} | 다단규칙: ${body.daily_trail_tiers || '(미설정)'}\n\n` + + `다단트레일: ${body.daily_profit_enabled ? 'ON' : 'OFF'} | 리스크버짓(B): ${body.daily_risk_budget_enabled ? 'ON' : 'OFF'} | 다단규칙: ${body.daily_trail_tiers || '(미설정)'}\n\n` + `저장: config_short (SHORT·tail_engine·tail_param_search 와 동일 키)`)) return; fetch('/api/backtest/tail/save_config', { method: 'POST', headers: {'Content-Type': 'application/json'}, @@ -2951,12 +4448,21 @@ function saveTailConfig() { } // 유니버스 배지 문구 (저장 이력 / 시뮬 / 전종목) +function isHistoryUniverseSource(src) { + return String(src || '').startsWith('history'); +} +function univHistorySourceParam(selectId) { + const el = $(selectId); + const v = (el && el.value) ? String(el.value).trim().toLowerCase() : 'kiwoom'; + return (v === 'ls') ? 'ls' : 'kiwoom'; +} function formatUniverseLabel(p) { - const histSrc = p.universe_source === 'history' || p.universe_source === 'history_strict'; + const histSrc = isHistoryUniverseSource(p.universe_source); if (histSrc && (p.universe_history_slots || 0) > 0) { - const strictTag = (p.universe_timing === 'strict' || p.universe_source === 'history_strict') + const strictTag = (p.universe_timing === 'strict' || String(p.universe_source || '').includes('strict')) ? '·strict' : ''; - return `유니버스: 저장 이력 ${p.universe_history_slots}슬롯${strictTag}`; + const lsTag = String(p.universe_source || '').includes('history_ls') ? '·LS' : ''; + return `유니버스: 저장 이력 ${p.universe_history_slots}슬롯${lsTag}${strictTag}`; } if (p.universe_source === 'sim') return '유니버스: 시뮬레이션'; if (p.universe_source === 'all') return '유니버스: 전체 ws_candles 종목'; @@ -3003,6 +4509,7 @@ function runBacktest() { env_timeline: envTimelineParam('bt_env_timeline'), }; params.universe = $('bt_use_univ_history')?.checked ? 'history' : 'sim'; + params.universe_history_source = univHistorySourceParam('bt_univ_history_source'); const qs = new URLSearchParams(params).toString(); showSpinner(true); fetch('/api/backtest/scalping?' + qs) @@ -3019,7 +4526,7 @@ function renderBacktest(d) { const universeLabel = formatUniverseLabel(p); const tr = (v) => (typeof v === 'number' ? Number(v).toFixed(1) : v); const btSummaryLine = - `${universeLabel} ` + + `${universeLabel} ` + `방어:${p.use_defense_filters ? 'ON' : 'OFF'} ` + `MACD:${p.use_macd_cross ? 'ON' : 'OFF'} ` + `EOD:${p.eod_enabled ? 'ON' : 'OFF'} ${p.eod_hm || ''} ` + @@ -3684,6 +5191,7 @@ function runTailBacktest() { atr_tp_min_pct: $('tl_atr_tp_min').value, atr_tp_max_pct: $('tl_atr_tp_max').value, universe: $('tl_use_univ_history')?.checked ? 'history' : 'all', + universe_history_source: univHistorySourceParam('tl_univ_history_source'), entry_mode: ($('tl_entry_mode') && $('tl_entry_mode').value) || 'limit_atr', limit_atr_mult: $('tl_limit_atr_mult')?.value || '1.5', limit_anchor: ($('tl_limit_anchor') && $('tl_limit_anchor').value) || 'signal_low', @@ -3720,6 +5228,7 @@ function runTailBacktest() { daily_trail_arm_krw: $('tl_daily_trail_arm')?.value || '0', daily_profit_mode: ($('tl_daily_profit_mode') && $('tl_daily_profit_mode').value) || 'trailing', daily_profit_enabled: $('tl_daily_profit_enabled')?.checked ? 1 : 0, + daily_risk_budget_enabled: $('tl_daily_risk_budget_enabled')?.checked ? 1 : 0, eod_enabled: $('tl_eod_enabled')?.checked ? 1 : 0, eod_hm: ($('tl_eod_hm') && $('tl_eod_hm').value.trim()) || '15:25', env_timeline: envTimelineParam('tl_env_timeline'), @@ -3732,6 +5241,416 @@ function runTailBacktest() { .catch(err => { showSpinner(false); alert('오류: ' + err); }); } +// ════════════════════════════════════════════════════════════════ +// 전략 백테 CLI 잡 (꼬리·스캘핑·돌파·모멘텀) — 전역 1잡 · 탭 이동 OK · 좀비방지 +// ════════════════════════════════════════════════════════════════ +const BTJOB_LS_KEY = 'kis_bt_job_id'; +const BTJOB_LS_KEY_LEGACY = 'kis_tail_bt_job_id'; +let _btJobPollTimer = null; +let _btJobId = localStorage.getItem(BTJOB_LS_KEY) + || localStorage.getItem(BTJOB_LS_KEY_LEGACY) || ''; +let _btJobRenderedId = ''; +let _btJobStrategy = ''; + +const BTJOB_CFG = { + tail: { + tab: 'tail', + label: '꼬리 백테', + startId: 'tl_start', endId: 'tl_end', tfId: 'tl_tf', + univId: 'tl_use_univ_history', univSrcId: 'tl_univ_history_source', tickId: 'tl_use_tick_db', + envId: 'tl_env_timeline', obId: 'tl_ob_filter', + stopBtn: 'tl_btn_stop_bg', tabFill: 'tlbt_tab_fill', tabStatus: 'tlbt_tab_status', + clearPrefix: 'tl_', + universeOn: 'history', universeOff: 'all', + }, + scalp: { + tab: 'backtest', + label: '스캘핑 백테', + startId: 'bt_start', endId: 'bt_end', tfId: null, + univId: 'bt_use_univ_history', univSrcId: 'bt_univ_history_source', tickId: null, + envId: 'bt_env_timeline', obId: null, + stopBtn: 'bt_btn_stop_bg', tabFill: 'scalp_bt_tab_fill', tabStatus: 'scalp_bt_tab_status', + clearPrefix: 'b_', + universeOn: 'history', universeOff: 'sim', + }, + breakout: { + tab: 'breakout', + label: '돌파 백테', + startId: 'bo_start', endId: 'bo_end', tfId: null, + univId: 'bo_use_univ_history', univSrcId: 'bo_univ_history_source', tickId: null, + envId: 'bo_env_timeline', obId: null, + stopBtn: 'bo_btn_stop_bg', tabFill: 'bo_bt_tab_fill', tabStatus: 'bo_bt_tab_status', + clearPrefix: 'bo_', + universeOn: 'history', universeOff: 'all', + }, + momentum: { + tab: 'momentum', + label: '모멘텀 백테', + startId: 'mom_start', endId: 'mom_end', tfId: null, + univId: 'mom_use_univ_history', univSrcId: 'mom_univ_history_source', tickId: null, + envId: 'mom_env_timeline', obId: 'mom_ob_filter', + stopBtn: 'mom_btn_stop_bg', tabFill: 'mom_bt_tab_fill', tabStatus: 'mom_bt_tab_status', + clearPrefix: 'mom_', + universeOn: 'history', universeOff: 'sim', + }, +}; + +function btJobGoTab(strat) { + const s = strat || _btJobStrategy || 'tail'; + const cfg = BTJOB_CFG[s] || BTJOB_CFG.tail; + const el = document.querySelector('[data-tab="' + cfg.tab + '"]'); + if (el) el.click(); +} + +function btJobClearUi(strat, msg) { + const cfg = BTJOB_CFG[strat] || BTJOB_CFG.tail; + const map = { + tail: ['tl_total','tl_winrate','tl_pnl','tl_pf','tl_mdd','tl_hold','tl_bot_pct','tl_daily_avg_pct'], + scalp: ['b_total','b_winrate','b_pnl','b_pf','b_mdd','b_hold','b_bot_pct','b_daily_avg_pct'], + breakout: ['bo_total','bo_winrate','bo_pnl','bo_pf','bo_mdd','bo_hold','bo_bot_pct','bo_daily_avg_pct'], + momentum: ['mom_total','mom_winrate','mom_pnl','mom_pf','mom_mdd','mom_hold','mom_bot_pct','mom_daily_avg_pct'], + }; + const ids = map[strat] || map.tail; + ids.forEach((id, i) => { + const el = $(id); + if (!el) return; + if (i === 2) el.textContent = '실행중'; + else el.textContent = i < 2 ? '…' : '—'; + }); + const tbody = strat === 'tail' ? $('tl_tbody') + : (strat === 'scalp' ? $('bt_tbody') + : (strat === 'breakout' ? $('bo_tbody') : $('mom_tbody'))); + if (tbody) { + tbody.innerHTML = ``; + } + if (cfg.tabStatus && $(cfg.tabStatus)) { + $(cfg.tabStatus).textContent = msg || '실행중…'; + } +} + +function btJobSetNav(job) { + const bar = $('btjob_nav_bar'); + if (!bar) return; + if (!job) { + bar.classList.add('d-none'); + return; + } + const strat = job.strategy || _btJobStrategy || 'tail'; + _btJobStrategy = strat; + const cfg = BTJOB_CFG[strat] || BTJOB_CFG.tail; + const prog = job.progress || {}; + const pct = Number(prog.pct || 0); + const st = job.status || ''; + const label = (job.label || cfg.label) + + (st === 'running' ? ' 실행중' : (st === 'done' ? ' 완료' : (st === 'error' ? ' 오류' : ''))); + const range = (job.start && job.end) ? ` ${job.start}~${job.end}` : ''; + if ($('btjob_nav_label')) $('btjob_nav_label').textContent = label + range; + if ($('btjob_nav_pct')) $('btjob_nav_pct').textContent = `${pct}%`; + const fill = $('btjob_nav_fill'); + if (fill) { + fill.style.width = `${Math.min(100, pct)}%`; + fill.classList.toggle('is-done', st === 'done'); + fill.classList.toggle('is-error', st === 'error'); + } + bar.classList.remove('d-none'); + bar.onclick = () => btJobGoTab(strat); + + const tabFill = cfg.tabFill && $(cfg.tabFill); + if (tabFill) { + tabFill.style.width = `${Math.min(100, pct)}%`; + tabFill.classList.toggle('is-done', st === 'done'); + tabFill.classList.toggle('is-error', st === 'error'); + } + const stEl = cfg.tabStatus && $(cfg.tabStatus); + if (stEl) { + const msg = prog.message || ''; + stEl.innerHTML = + `${st} ${pct}%` + range + + (msg ? ` · ${msg}` : '') + + (job.log_path ? ` · ${job.log_path}` : '') + + ' · 전역 1잡 · 탭 이동 OK'; + } + // 모든 전략 중지 버튼 동기화 + Object.values(BTJOB_CFG).forEach(c => { + const b = c.stopBtn && $(c.stopBtn); + if (b) b.disabled = st !== 'running'; + }); +} + +async function btJobLoadResult(jobId, strategy) { + const rr = await fetch('/api/backtest/job/result?job_id=' + encodeURIComponent(jobId)); + const rd = await rr.json(); + if (!rd.ok) throw new Error(rd.error || '결과 없음'); + const strat = strategy || rd.strategy || 'tail'; + const payload = rd.data || rd.raw || rd; + if (strat === 'scalp') { + renderBacktest(payload); + } else if (strat === 'breakout') { + renderBreakoutBacktest(payload); + } else if (strat === 'momentum') { + renderMomentumBacktest(payload); + } else { + if (payload && payload.equity) renderTailBacktest(payload); + else if (rd.ok) renderTailBacktestFromCli(rd); + } +} + +async function btJobPollOnce() { + const requestedId = _btJobId; + if (!requestedId) return; + try { + const r = await fetch('/api/backtest/job/status?job_id=' + encodeURIComponent(requestedId)); + if (requestedId !== _btJobId) return; + const j = await r.json(); + if (!j.ok) { + if (r.status === 404 && requestedId === _btJobId) { + _btJobId = ''; + localStorage.removeItem(BTJOB_LS_KEY); + localStorage.removeItem(BTJOB_LS_KEY_LEGACY); + btJobSetNav(null); + } + return; + } + const job = j.job || {}; + const jid = String(job.job_id || requestedId); + if (jid !== _btJobId) return; + btJobSetNav(job); + const st = job.status; + if (st === 'done' && _btJobRenderedId !== jid) { + try { + await btJobLoadResult(jid, job.strategy); + if (jid !== _btJobId) return; + _btJobRenderedId = jid; + try { btJobGoTab(job.strategy); } catch (e2) {} + } catch (e) { + console.warn('btJobLoadResult', e); + } + } + } catch (e) { /* ignore */ } +} + +function btJobStartPolling() { + if (_btJobPollTimer) clearInterval(_btJobPollTimer); + btJobPollOnce(); + _btJobPollTimer = setInterval(btJobPollOnce, 2000); +} + +function btJobCollectBody(strategy) { + const cfg = BTJOB_CFG[strategy]; + if (!cfg) throw new Error('알 수 없는 전략: ' + strategy); + const univOn = !!(cfg.univId && $(cfg.univId)?.checked); + const body = { + strategy, + start: $(cfg.startId)?.value, + end: $(cfg.endId)?.value, + universe: univOn ? cfg.universeOn : cfg.universeOff, + universe_history_source: cfg.univSrcId ? univHistorySourceParam(cfg.univSrcId) : 'kiwoom', + orderbook_filter: (cfg.obId && $(cfg.obId)?.checked) ? 'on' : 'off', + env_timeline: cfg.envId ? envTimelineParam(cfg.envId) : 0, + }; + if (cfg.tfId && $(cfg.tfId)) body.timeframe = $(cfg.tfId).value || 3; + if (cfg.tickId) body.backtest_use_tick_db = $(cfg.tickId)?.checked !== false ? 1 : 0; + return body; +} + +async function btJobStart(strategy) { + const body = btJobCollectBody(strategy); + if (!body.start || !body.end) { alert('시작·종료일을 입력하세요'); return; } + if (!confirm( + `${BTJOB_CFG[strategy].label} 백그라운드 시작?\n${body.start}~${body.end}\n` + + `파라미터=현재 DB (+기간/유니버스)\n다른 전략 백테와 동시 실행 불가(전역 1잡).\n탭 이동 OK.` + )) return; + try { + const r = await fetch('/api/backtest/job/start', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(body), + }); + const j = await r.json(); + if (!j.ok) { alert('❌ ' + (j.error || '시작 실패')); return; } + _btJobId = j.job.job_id; + _btJobStrategy = strategy; + _btJobRenderedId = ''; + localStorage.setItem(BTJOB_LS_KEY, _btJobId); + localStorage.removeItem(BTJOB_LS_KEY_LEGACY); + btJobClearUi(strategy, `실행중 ${body.start}~${body.end}`); + btJobSetNav(j.job); + btJobStartPolling(); + } catch (e) { + alert('오류: ' + e); + } +} + +async function btJobStop() { + if (!_btJobId) return; + if (!confirm('백그라운드 백테를 중지할까요? (프로세스 정리)')) return; + try { + const r = await fetch('/api/backtest/job/stop', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ job_id: _btJobId }), + }); + const j = await r.json(); + if (!j.ok) { alert(j.error || '중지 실패'); return; } + btJobSetNav(j.job); + } catch (e) { alert('오류: ' + e); } +} + +// 하위호환 +function runTailBacktestJob() { return btJobStart('tail'); } +function tlBtStop() { return btJobStop(); } +function tlBtGoTab() { return btJobGoTab('tail'); } + +function renderTailBacktestFromCli(rd) { + // CLI JSON → 웹 /api/backtest/tail 과 동일 스키마 (equity/daily/reasons/win_trades) + // 없으면 renderTailBacktest 가 equity.map 에서 터져 승패·차트·거래내역이 안 나옴 + const summary = rd.summary || (rd.data && rd.data.summary) || {}; + const trades = rd.trades || (rd.data && rd.data.trades) || []; + const meta = rd.meta || (rd.data && rd.data.meta) || {}; + const pu = rd.params_used || (rd.data && rd.data.params_used) || {}; + + const sorted = trades.slice().sort((a, b) => + String(a.exit_time || a.sell_time || '').localeCompare(String(b.exit_time || b.sell_time || '')) + ); + let cum = 0; + let peak = 0; + let peakAt = ''; + let mdd = 0; + const equity = []; + const dailyMap = {}; + const reasons = {}; + for (const t of sorted) { + const pnl = Number(t.pnl ?? t.realized_pnl ?? 0) || 0; + cum += pnl; + if (cum > peak) { + peak = cum; + peakAt = String(t.exit_time || t.sell_time || ''); + } + const dd = peak - cum; + if (dd > mdd) mdd = dd; + const et = String(t.exit_time || t.sell_time || '').replace(/[-: T]/g, ''); + const day = et.length >= 8 + ? `${et.slice(0, 4)}-${et.slice(4, 6)}-${et.slice(6, 8)}` + : (et || '—'); + equity.push({ date: day, cum_pnl: Math.round(cum), pnl: Math.round(pnl) }); + dailyMap[day] = (dailyMap[day] || 0) + pnl; + const rk = String(t.reason || t.sell_reason || '기타'); + reasons[rk] = (reasons[rk] || 0) + 1; + } + const daily = Object.keys(dailyMap).sort().map(d => ({ + date: d, + pnl: Math.round(dailyMap[d]), + })); + + const winsN = Number( + summary.win_trades != null ? summary.win_trades + : (summary.wins != null ? summary.wins + : trades.filter(t => Number(t.pnl ?? t.realized_pnl ?? 0) > 0).length) + ); + const lossN = Number( + summary.loss_trades != null ? summary.loss_trades + : (summary.losses != null ? summary.losses + : Math.max(0, trades.length - winsN)) + ); + + const fake = { + summary: { + total_trades: summary.total_trades != null ? summary.total_trades : trades.length, + win_trades: winsN, + loss_trades: lossN, + win_rate: summary.win_rate || 0, + total_pnl: summary.total_pnl || 0, + profit_factor: summary.profit_factor != null ? summary.profit_factor : (summary.pf || 0), + max_drawdown: summary.max_drawdown != null ? summary.max_drawdown + : (summary.mdd != null ? summary.mdd : Math.round(mdd)), + avg_hold_min: summary.avg_hold_min || 0, + bot_pct: summary.bot_pct || 0, + daily_avg_pct: summary.daily_avg_pct || 0, + peak_cum_pnl: summary.peak_cum_pnl != null ? summary.peak_cum_pnl : Math.round(peak), + peak_cum_at: summary.peak_cum_at || peakAt, + tick_backtest: summary.tick_backtest || meta.tick_backtest, + backtest_buy_source: summary.backtest_buy_source || meta.backtest_buy_source, + tick_entry_sources: summary.tick_entry_sources || meta.tick_entry_sources, + skip_stats: summary.skip_stats || meta.skip_stats || {}, + }, + params: { + universe_source: meta.universe_source || rd.universe_source || 'history', + timeframe: rd.timeframe || pu.timeframe || 3, + slot_money: pu.slot_money || 0, + max_stocks: pu.max_stocks || 0, + total_budget_krw: pu.total_budget_krw || 0, + codes_analyzed: meta.codes_analyzed || meta.n_codes + || (Array.isArray(meta.codes) ? meta.codes.length : (trades.length || 0)), + min_drop_rate: (function () { + const v = Number(pu.min_drop_rate); + if (!Number.isFinite(v)) return pu.min_drop_rate ?? ''; + // 엔진 비율(0.055) → UI % (5.5) + return (v > 0 && v <= 1) ? (v * 100) : v; + })(), + min_recovery_ratio: (function () { + const v = Number(pu.min_recovery_ratio); + if (!Number.isFinite(v)) return pu.min_recovery_ratio ?? ''; + return (v > 0 && v <= 1) ? (v * 100) : v; + })(), + tail_ratio_min: pu.tail_ratio_min ?? '', + sl_pct: (function () { + const v = Number(pu.sl_pct); + if (!Number.isFinite(v)) return pu.sl_pct ?? ''; + return (v > 0 && v <= 1) ? (v * 100) : v; + })(), + tp_pct: (function () { + const v = Number(pu.tp_pct); + if (!Number.isFinite(v)) return pu.tp_pct ?? ''; + return (v > 0 && v <= 1) ? (v * 100) : v; + })(), + shoulder_min_high: (function () { + const v = Number(pu.shoulder_min_high ?? pu.shoulder_min_high_pct); + if (!Number.isFinite(v)) return ''; + return (v > 0 && v <= 1) ? (v * 100) : v; + })(), + shoulder_cut_pct: (function () { + const v = Number(pu.shoulder_cut_pct); + if (!Number.isFinite(v)) return ''; + return (v > 0 && v <= 1) ? (v * 100) : v; + })(), + trail_pct: pu.trail_pct ?? 0, + trail_arm_pct: pu.trail_arm_pct ?? 0, + max_loss_krw: pu.max_loss_krw, + rsi_period: pu.rsi_period ?? '', + rsi_threshold: pu.rsi_threshold ?? '', + cooldown_min: pu.cooldown_min ?? '', + time_window: pu.time_window || ( + (pu.time_start != null && pu.time_end != null) + ? `${pu.time_start}-${pu.time_end}` : '' + ), + max_daily: pu.max_daily ?? '', + entry_mode: pu.entry_mode, + limit_atr_mult: pu.limit_atr_mult, + limit_anchor: pu.limit_anchor, + limit_valid_bars: pu.limit_valid_bars, + limit_fill_slip_pct: pu.limit_fill_slip_pct, + }, + equity, + daily, + reasons, + trades, + }; + try { + renderTailBacktest(fake); + } catch (e) { + console.warn('renderTailBacktestFromCli', e); + alert( + `백그라운드 완료(화면 렌더 실패)\n거래 ${summary.total_trades} · WR ${summary.win_rate}% · PnL ${summary.total_pnl}\n` + + (rd.result_json || '') + `\n${e}` + ); + } +} + +// 페이지 로드 시 이전 잡 폴링 재개 (탭 무관) +if (_btJobId) { + setTimeout(() => btJobStartPolling(), 800); +} + function renderTailBacktest(d) { const s = d.summary; const p = d.params; @@ -3739,7 +5658,7 @@ function renderTailBacktest(d) { $('tl_params_bar').style.display = ''; const tlUniverseLabel = formatUniverseLabel(p); const tlSummaryLine = - `${tlUniverseLabel} ` + + `${tlUniverseLabel} ` + (p.timeframe != null ? `${p.timeframe}분봉 ` : '') + `낙폭≥${p.min_drop_rate}% | 회복률≥${p.min_recovery_ratio}% | 꼬리/몸통≥${p.tail_ratio_min} | ` + `손절-${p.sl_pct}% 익절+${p.tp_pct}% | 어깨컷(${p.shoulder_min_high}%발동/${p.shoulder_cut_pct}%하락)` + @@ -3767,10 +5686,10 @@ function renderTailBacktest(d) { $('tl_pnl').textContent = fmtKrw(s.total_pnl); colorPnl($('tl_pnl'), s.total_pnl); - $('tl_pf').textContent = (s.profit_factor||0) >= 999 ? '∞' : (s.profit_factor||0); - colorPnl($('tl_pf'), (s.profit_factor||0) - 1); + $('tl_pf').textContent = ((s.profit_factor ?? s.pf) || 0) >= 999 ? '∞' : ((s.profit_factor ?? s.pf) || 0); + colorPnl($('tl_pf'), ((s.profit_factor ?? s.pf) || 0) - 1); - $('tl_mdd').textContent = '-' + fmtWon(s.max_drawdown) + '원'; + $('tl_mdd').textContent = '-' + fmtWon(s.max_drawdown ?? s.mdd ?? 0) + '원'; $('tl_hold').textContent = (s.avg_hold_min||0) + '분'; const tlSign = v => (v > 0 ? '+' : ''); @@ -3833,26 +5752,31 @@ function renderTailBacktest(d) { if ((s.total_trades||0) > 0) { $('tl_winbar_card').style.display = ''; const wr = s.win_rate||0; - $('tl_win_label').textContent = `🟢 승 ${s.win_trades}건 (${wr}%)`; - $('tl_loss_label').textContent = `🔴 패 ${s.loss_trades}건 (${(100-wr).toFixed(1)}%)`; + const winN = s.win_trades != null ? s.win_trades : (s.wins || 0); + const lossN = s.loss_trades != null ? s.loss_trades : (s.losses || 0); + $('tl_win_label').textContent = `🟢 승 ${winN}건 (${wr}%)`; + $('tl_loss_label').textContent = `🔴 패 ${lossN}건 (${(100-wr).toFixed(1)}%)`; $('tl_ratio_g').style.width = wr + '%'; $('tl_ratio_r').style.width = (100 - wr) + '%'; } - // 누적 손익 곡선 + // 누적 손익 곡선 (백그라운드 CLI 결과는 equity 없을 수 있음 → 빈 배열 허용) + const tlEquity = Array.isArray(d.equity) ? d.equity : []; lineChart('tl_equity_chart', - d.equity.map(e => e.date), - d.equity.map(e => e.cum_pnl), + tlEquity.map(e => e.date), + tlEquity.map(e => e.cum_pnl), '가상누적손익', '#3fb950'); // 매도 이유 도넛 - const rKeys = Object.keys(d.reasons || {}); - doughnutChart('tl_reason_chart', rKeys, rKeys.map(k => d.reasons[k])); + const tlReasons = d.reasons || {}; + const rKeys = Object.keys(tlReasons); + doughnutChart('tl_reason_chart', rKeys, rKeys.map(k => tlReasons[k])); // 일별 바 + const tlDaily = Array.isArray(d.daily) ? d.daily : []; barChart('tl_daily_chart', - d.daily.map(e => e.date.slice(5)), - d.daily.map(e => e.pnl)); + tlDaily.map(e => String(e.date || '').slice(5)), + tlDaily.map(e => e.pnl)); renderVirtualTrades('tl_tbody', d.trades || [], { showDebug: true, @@ -4591,25 +6515,41 @@ function lcFieldInput(f) { const keyTag = f.key ? `${lcEsc(f.key)}` : ''; + const isDanger = !!(f.danger) || /FALLBACK_OHLC/i.test(String(f.key || '')); + const wrapCls = isDanger ? 'lc-field lc-field-danger' : 'lc-field'; if (f.type === 'bool') { const chk = f.value ? 'checked' : ''; - return `
+ return `
${tbl}${hint}
`; } if (f.type === 'text') { const val = f.value != null ? f.value : ''; - return `
+ return `
${tbl} ${hint}
`; } + if (f.type === 'select' && Array.isArray(f.choices)) { + const val = f.value != null ? String(f.value) : ''; + const opts = f.choices.map(c => { + const cv = (typeof c === 'object') ? String(c.value) : String(c); + const cl = (typeof c === 'object') ? String(c.label != null ? c.label : c.value) : String(c); + const sel = (cv === val) ? ' selected' : ''; + return ``; + }).join(''); + return `
+ ${tbl} + + ${hint} +
`; + } const step = f.type === 'int' ? '1' : '0.01'; const val = f.value != null ? f.value : ''; - return `
+ return `
${tbl} @@ -5309,7 +7249,747 @@ function showSpinner(v) { $('spinner').classList.toggle('show', v); } +// ════════════════════════════════════════════════════════════════ +// Optuna 웹 잡 (상단 미니바 + Optuna 탭) +// ════════════════════════════════════════════════════════════════ +const OPTUNA_LS_KEY = 'kis_optuna_job_id'; +let _optunaPollTimer = null; +let _optunaJobId = localStorage.getItem(OPTUNA_LS_KEY) || ''; + +function optunaGoTab() { + const el = document.querySelector('[data-tab="optuna"]'); + if (el) el.click(); +} + +function optunaOnTabShow() { + optunaLoadDefaults(); + optunaRefreshJobs(); + if (_optunaJobId) optunaPollOnce(); +} + +async function optunaLoadDefaults() { + try { + const r = await fetch('/api/optuna/defaults'); + const j = await r.json(); + if (!j.ok) return; + if ($('opt_start') && !$('opt_start').value) $('opt_start').value = j.start; + if ($('opt_end') && !$('opt_end').value) $('opt_end').value = j.end; + if ($('opt_trials') && !$('opt_trials').dataset.touched) $('opt_trials').value = j.trials; + } catch (e) { /* ignore */ } +} + +function optunaSetNav(job) { + const bar = $('optuna_nav_bar'); + if (!bar) return; + if (!job) { + bar.classList.add('d-none'); + return; + } + const prog = job.progress || {}; + const pct = Number(prog.pct || 0); + const st = job.status || ''; + const label = (job.label || job.strategy || 'Optuna') + + (st === 'running' ? ' 실행중' : (st === 'done' ? ' 완료' : (st === 'error' ? ' 오류' : ''))); + const done = prog.trials_done != null ? prog.trials_done : '?'; + const tot = prog.trials_total != null ? prog.trials_total : '?'; + $('optuna_nav_label').textContent = `${label} ${done}/${tot}`; + const met = optunaBestMetricsText(prog, job); + $('optuna_nav_pct').textContent = met ? `${pct}% · ${met}` : `${pct}%`; + const fill = $('optuna_nav_fill'); + fill.style.width = `${Math.min(100, pct)}%`; + fill.classList.toggle('is-done', st === 'done'); + fill.classList.toggle('is-error', st === 'error'); + bar.classList.remove('d-none'); +} + +function optunaFmtNum(v, dig) { + if (v == null || v === '') return '—'; + const n = Number(v); + if (!Number.isFinite(n)) return String(v); + if (dig == null) return n.toLocaleString(); + return n.toFixed(dig); +} + +/** progress.best_* → 사람이 읽는 WR/PnL/PF/MDD (score 숨김) */ +function optunaBestMetricsText(prog, job) { + if (!prog || prog.best_pnl == null && prog.best_win_rate == null) return ''; + const strat = String((job && (job.strategy || job.label)) || '').toLowerCase(); + const isUs = !!((job && job.symbol) || strat.includes('us_momentum') || strat.includes('해외')); + const pnl = Number(prog.best_pnl); + const pnlStr = !Number.isFinite(pnl) ? '—' + : (isUs + ? `$${pnl.toLocaleString(undefined, { maximumFractionDigits: 2 })}` + : `${Math.round(pnl).toLocaleString()}원`); + const wr = prog.best_win_rate != null ? `${Number(prog.best_win_rate).toFixed(1)}%` : '—'; + const pf = prog.best_pf != null ? Number(prog.best_pf).toFixed(2) : '—'; + const mdd = prog.best_mdd != null + ? (isUs + ? `$${Number(prog.best_mdd).toLocaleString(undefined, { maximumFractionDigits: 2 })}` + : `${Math.round(Number(prog.best_mdd)).toLocaleString()}`) + : '—'; + const tr = prog.best_trades != null ? `${prog.best_trades}건` : ''; + const tn = prog.best_trial != null ? `#${prog.best_trial}` : ''; + return `best${tn} WR ${wr} · PnL ${pnlStr} · PF ${pf} · MDD ${mdd}` + + (tr ? ` · ${tr}` : ''); +} + +function optunaRenderCompare(sum) { + const tb = $('opt_compare_tbody'); + const vsEl = $('opt_vs_best'); + const gatesEl = $('opt_stable_gates'); + if (!tb) return; + const rows = (sum && sum.compare_rows) || []; + if (!rows.length) { + tb.innerHTML = '
'; + if (vsEl) vsEl.textContent = '—'; + if (gatesEl) gatesEl.textContent = '—'; + optunaRenderTrailRec(null); + return; + } + tb.innerHTML = rows.map(r => ` + + + + + + + + + + `).join(''); + const vs = sum && sum.vs_best; + if (vsEl) { + if (vs) { + vsEl.innerHTML = + `mode vs 학습1위: Δpnl ${optunaFmtNum(vs.delta_pnl)}` + + ` · Δwr ${optunaFmtNum(vs.delta_wr, 1)}%p · Δpf ${optunaFmtNum(vs.delta_pf, 2)}` + + ` (best ${optunaFmtNum(vs.best_pnl)} / mode ${optunaFmtNum(vs.mode_pnl)})`; + } else { + vsEl.textContent = 'vs_best 없음 (mode 실측 전/실패 가능)'; + } + } + if (gatesEl) { + const g = sum && sum.stable_gates; + if (g) { + gatesEl.textContent = + `stable 게이트: 손실일≤${g.max_losing_days} · 최악일≥${Number(g.min_worst_day_pnl).toLocaleString()} · ` + + `활성일≥${g.min_active_days} · λ=${g.stability_lambda}` + + (g.score_note ? ` · ${g.score_note}` : ''); + } else { + gatesEl.textContent = 'stable 게이트: 구 JSON이거나 미기록 (Optuna 재실행 시 생성)'; + } + } + optunaRenderTrailRec(sum); +} + +function optunaRenderTrailRec(sum) { + const body = $('opt_daily_trail_rec_body'); + if (!body) return; + const rec = sum && sum.daily_trail_recommend; + if (!rec) { + body.textContent = '완료 후 표시'; + return; + } + if (!rec.ok) { + body.innerHTML = + `추천 없음 — ${rec.reason || '양수 PnL 앵커 없음'}`; + return; + } + const arm = Number(rec.arm_krw || 0).toLocaleString(); + const anchor = Number(rec.anchor_krw || 0).toLocaleString(); + body.innerHTML = + `${rec.prefix || ''} · ENABLED=true · MODE=${rec.mode || 'trailing'}` + + `
ARM ${arm}원 · TIERS ${rec.tiers || ''}` + + `
앵커 ${anchor}원 (mode/median/best×frac) · apply 시에만 DB 기록 · 이후 운영탭에서 끄기/수정 가능`; +} + +function optunaRenderTop5(sum) { + const tb = $('opt_top5_tbody'); + if (!tb) return; + const rows = (sum && sum.top5_gated) || []; + if (!rows.length) { + tb.innerHTML = ''; + } else { + tb.innerHTML = rows.map(r => { + const rank = r.rank || 1; + return ` + + + + + + + + `; + }).join(''); + } + optunaRenderTop5Stable(sum); +} + +function optunaRenderTop5Stable(sum) { + const tb = $('opt_top5_stable_tbody'); + if (!tb) return; + const rows = (sum && sum.top5_stable) || []; + if (!rows.length) { + tb.innerHTML = ''; + return; + } + tb.innerHTML = rows.map(r => { + const rank = r.rank || 1; + return ` + + + + + + + + + + `; + }).join(''); +} + +function optunaHighlightGated(rank) { + optunaShowCandidate('gated', rank || 1); +} + +async function optunaShowCandidate(source, rank) { + if (!_optunaJobId) { + alert('선택된 job 없음 — 최근 잡에서「보기」로 job을 먼저 고르세요'); + return; + } + const src = source || 'gated'; + const rk = rank || 1; + const title = $('opt_detail_title'); + const met = $('opt_detail_metrics'); + const pre = $('opt_detail_params'); + if (title) title.textContent = `로딩 ${src} #${rk}…`; + if (met) met.textContent = '불러오는 중…'; + try { + const qs = new URLSearchParams({ + job_id: _optunaJobId, + source: src, + rank: String(rk), + }); + const r = await fetch('/api/optuna/candidate?' + qs.toString()); + const j = await r.json(); + if (!j.ok) { + if (met) met.textContent = '❌ ' + (j.error || '실패'); + if (pre) pre.textContent = '—'; + return; + } + const m = j.metrics || {}; + if (title) { + title.textContent = + `${j.strategy || ''} · ${m.label || src} · trial ${m.optuna_trial_number != null ? '#' + m.optuna_trial_number : '—'}`; + } + if (met) { + const daily = m.daily_pnl && typeof m.daily_pnl === 'object' + ? Object.keys(m.daily_pnl).sort().map(d => `${d}:${Number(m.daily_pnl[d]).toLocaleString()}`).join(' · ') + : ''; + met.innerHTML = + `거래 ${optunaFmtNum(m.total_trades, 0)} · ` + + `승률 ${optunaFmtNum(m.win_rate, 1)}% · ` + + `PF ${optunaFmtNum(m.pf, 2)} · ` + + `PnL ${optunaFmtNum(m.total_pnl)}` + + (m.stability_score != null + ? ` · 안정 ${optunaFmtNum(m.stability_score, 2)} (손실일 ${optunaFmtNum(m.n_losing_days, 0)} · 최악 ${optunaFmtNum(m.worst_day_pnl)})` + : '') + + ` · 파라미터 ${j.params_count || 0}개` + + (j.start && j.end ? ` · 기간 ${j.start}~${j.end}` : '') + + (daily ? `
일별 PnL: ${daily}
` : '') + + ` ` + + ` `; + } + if (pre) { + pre.textContent = JSON.stringify(j.params_preview || j.params_full || {}, null, 2); + } + // 폼 반영용 캐시 + window._optunaCandidateCache = { + strategy: j.strategy, + start: j.start, + end: j.end, + params: j.params_full || j.params_preview || {}, + }; + // Top5 행 하이라이트 + document.querySelectorAll('#opt_top5_tbody tr').forEach((tr, i) => { + tr.style.outline = (i + 1 === rk) ? '1px solid var(--accent)' : ''; + }); + const card = $('opt_detail_card'); + if (card) card.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); + } catch (e) { + if (met) met.textContent = '오류: ' + e; + } +} + +function optunaRenderJob(job) { + if (!job) return; + const prog = job.progress || {}; + const pct = Number(prog.pct || 0); + const fill = $('opt_tab_fill'); + if (fill) { + fill.style.width = `${Math.min(100, pct)}%`; + fill.classList.toggle('is-done', job.status === 'done'); + fill.classList.toggle('is-error', job.status === 'error'); + } + if ($('opt_st_status')) $('opt_st_status').textContent = job.status || '—'; + if ($('opt_st_job')) $('opt_st_job').textContent = job.job_id || '—'; + if ($('opt_st_study')) $('opt_st_study').textContent = job.study_name || '—'; + if ($('opt_st_trials')) { + const met = optunaBestMetricsText(prog, job); + $('opt_st_trials').textContent = + `${prog.trials_done ?? '—'} / ${prog.trials_total ?? job.trials ?? '—'} (${pct}%)` + + (job.current_strategy ? ` · now=${job.current_strategy}` : '') + + (met ? ` · ${met}` : ''); + } + if ($('opt_st_log')) $('opt_st_log').textContent = job.log_path || '—'; + if ($('opt_st_json')) $('opt_st_json').textContent = job.result_json || '—'; + const sum = job.result_summary; + if ($('opt_st_top')) { + if (sum && sum.top) { + const t = sum.top; + $('opt_st_top').innerHTML = + `상위(${t.source}): trial #${t.optuna_trial_number} · ` + + `거래 ${t.total_trades} · WR ${Number(t.win_rate || 0).toFixed(1)}% · ` + + `PF ${Number(t.pf || 0).toFixed(2)} · PnL ${Number(t.total_pnl || 0).toLocaleString()}원` + + ` · gated ${sum.n_gated}/${sum.n_all}` + + (sum.n_stable != null ? ` · stable ${sum.n_stable}` : ''); + } else { + $('opt_st_top').textContent = job.error || '결과 요약 없음'; + } + } + if ($('opt_log_tail')) $('opt_log_tail').textContent = job.log_tail || ''; + if ($('opt_briefing')) { + $('opt_briefing').textContent = job.briefing_preview || '—'; + } + const running = job.status === 'running'; + const done = job.status === 'done'; + if ($('opt_btn_start')) $('opt_btn_start').disabled = running; + if ($('opt_btn_stop')) $('opt_btn_stop').disabled = !running; + const applyBox = $('opt_apply_box'); + if (applyBox) { + applyBox.classList.toggle('d-none', !done); + const canGate = !!(sum && sum.apply_ready); + const canStable = !!(sum && sum.apply_stable_ready); + if ($('opt_btn_apply_gated')) $('opt_btn_apply_gated').disabled = !canGate; + if ($('opt_btn_apply_stable')) $('opt_btn_apply_stable').disabled = !canStable; + if ($('opt_btn_apply_mode')) { + const hasMode = !!(sum && (sum.compare_rows || []).some(r => r.source === 'mode')); + $('opt_btn_apply_mode').disabled = !done || !hasMode; + } + } + optunaRenderCompare(sum); + optunaRenderTop5(sum); + window._optunaLastSummary = sum || null; + optunaSetNav(job); +} + +async function optunaFillFormFromCandidate(source, rank) { + // 캐시 없으면 다시 fetch + let cache = window._optunaCandidateCache; + if (!cache || !cache.params) { + await optunaShowCandidate(source || 'gated', rank || 1); + cache = window._optunaCandidateCache; + } + const p = (cache && cache.params) || {}; + const strat = String((cache && cache.strategy) || '').toLowerCase(); + const isUs = strat === 'us_momentum' || String(p.market || '').toUpperCase() === 'US'; + const set = (id, val) => { + const el = $(id); + if (!el || val === undefined || val === null) return; + if (el.type === 'checkbox') el.checked = !!(val === true || val === 1 || val === '1'); + else el.value = val; + }; + const prefix = isUs ? 'usmom_' : 'mom_'; + // 기간 = Optuna study 기간 (비교 시 필수) + if (cache.start) setDateVal(isUs ? 'usmom_start' : 'mom_start', cache.start); + if (cache.end) setDateVal(isUs ? 'usmom_end' : 'mom_end', cache.end); + + set(prefix + 'sl', p.sl_pct); + set(prefix + 'tp', p.tp_pct); + set(prefix + 'tp_max', p.tp_max_pct); + set(prefix + 'slot_money', p.slot_money); + set(prefix + (isUs ? 'slots' : 'slots'), p.max_stocks || p.slots || p.mom_slots); + if (isUs) set('usmom_slots', p.max_stocks || p.slots); + else set('mom_slots', p.max_stocks || p.mom_slots || p.slots); + set(prefix + 'total_budget', p.total_budget_krw); + set(prefix + 'cooldown', p.cooldown_min); + set(prefix + 'smin', p.shoulder_min_high); + set(prefix + 'scut', p.shoulder_cut_pct); + set(prefix + 'trail', p.trail_pct); + set(prefix + 'trail_arm', p.trail_arm_pct); + set(prefix + 'max_hold', p.max_hold_bars); + set(prefix + 'ratchet', p.ratchet_tiers != null ? p.ratchet_tiers : ''); + set(prefix + 'time_start', p.time_start_hm || p.mom_time_start_hm); + set(prefix + 'time_end', p.time_end_hm || p.mom_time_end_hm || p.mom_time_end); + set(prefix + 'max_daily', p.max_daily); + set(prefix + 'high_chase', p.high_chase_thr); + set(prefix + 'max_daily_chg', p.max_daily_chg); + set(prefix + 'min_price', p.min_price); + set(prefix + 'max_loss', p.max_loss_krw); + set(prefix + 'min_margin', p.min_margin); + set(prefix + 'rsi_min', p.mom_rsi_min); + set(prefix + 'rsi_max', p.mom_rsi_max); + set(prefix + 'vol_mult', p.mom_vol_mult); + set(prefix + 'vol_win', p.mom_vol_win); + set(prefix + 'max_from_open', p.mom_max_from_open_pct); + set(prefix + 'min_from_open', p.mom_min_from_open_pct); + set(prefix + 'chase_lookback', p.chase_lookback_min); + set(prefix + 'pullback_lookback', p.pullback_lookback_min); + set(prefix + 'pullback_min', p.pullback_min_pct); + set(prefix + 'pullback_max', p.pullback_max_pct); + set(prefix + 'setup_vol', p.setup_vol_max_mult); + set(prefix + 'setup_bear', p.setup_bear_bars_min); + set(prefix + 'ema_fast', p.ema_fast_period); + set(prefix + 'ema_slow', p.ema_slow_period); + set(prefix + 'eod_hm', p.eod_hm); + const defId = isUs ? 'usmom_use_defense' : 'mom_use_defense'; + if ($(defId) && p.use_defense_filters !== undefined) $(defId).checked = !!p.use_defense_filters; + const mapCb = [ + ['use_high_chase_filter', isUs ? 'usmom_use_high_chase_f' : 'mom_use_high_chase_f'], + ['use_daily_range_filter', isUs ? 'usmom_use_daily_range' : 'mom_use_daily_range'], + ['use_ema_filter', isUs ? 'usmom_use_ema_f' : 'mom_use_ema_f'], + ['use_rsi_max_filter', isUs ? 'usmom_use_rsi_max_f' : 'mom_use_rsi_max_f'], + ['pattern_breakout', isUs ? 'usmom_pat_breakout' : 'mom_pat_breakout'], + ['pattern_pullback', isUs ? 'usmom_pat_pullback' : 'mom_pat_pullback'], + ['eod_enabled', isUs ? 'usmom_eod_enabled' : 'mom_eod_enabled'], + ]; + mapCb.forEach(([k, id]) => { + if ($(id) && p[k] !== undefined) $(id).checked = !!p[k]; + }); + + // 이미 해당 탭이면 click 금지 — us_momentum 탭 click 시 usmomLoadStocks→핀 cfg 가 + // Optuna 폼 반영을 즉시 덮어씀 (폼에 넣기 무효화 버그). + const wantTab = isUs ? 'us_momentum' : 'momentum'; + const tab = document.querySelector(`[data-tab="${wantTab}"]`); + if (tab && !tab.classList.contains('active')) tab.click(); + alert( + (isUs ? '해외 모멘텀' : '모멘텀') + + ' 폼에 반영했습니다.\n기간 ' + (cache.start || '') + '~' + (cache.end || '') + + '\n같은 기간으로 백테 실행해 Optuna와 비교하세요.\n(DB 저장 아님)' + ); +} + +async function optunaApply(source, rank) { + if (!_optunaJobId) { alert('선택된 job 없음 — 최근 잡에서 보기 먼저'); return; } + const src = source || 'gated'; + const rk = rank || 1; + let trailLine = ''; + try { + const sum = (window._optunaLastSummary) || null; + const rec = sum && sum.daily_trail_recommend; + if (rec && rec.ok) { + trailLine = + `\n\n다단트레일 추천도 함께 반영됩니다:\n` + + `${rec.prefix}_DAILY_PROFIT_TRAIL_TIERS=${rec.tiers}\n` + + `(ARM=${Number(rec.arm_krw || 0).toLocaleString()} · 이후 운영탭에서 끄기/수정 가능)`; + } else if (rec && !rec.ok) { + trailLine = `\n\n다단트레일 추천 없음(${rec.reason || 'n/a'}) — TRAIL 미변경`; + } + } catch (e) { /* ignore */ } + const msg = (src === 'mode' + ? 'mode_combo 파라미터를 DB에 적용할까요?\n(TIME_* 미변경 · 실매 즉시 영향)' + : src === 'stable' + ? `안정(stable) #${rk} 을 DB에 적용할까요?\n(손실일·최악일 게이트 통과 · TIME_* 미변경 · 실매 즉시 영향)` + : `사후합격(gated) #${rk} 을 DB에 적용할까요?\n(TIME_* 미변경 · 실매 즉시 영향)`) + trailLine; + if (!confirm(msg)) return; + try { + const r = await fetch('/api/optuna/apply', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ job_id: _optunaJobId, source: src, rank: rk }), + }); + const j = await r.json(); + if (!j.ok) { alert('❌ ' + (j.error || '적용 실패')); return; } + const m = j.metrics || {}; + const ta = j.daily_trail_apply || {}; + let trailOk = ''; + if (ta.applied) { + const patch = ta.patch || {}; + const tiersKey = Object.keys(patch).find(k => k.endsWith('_DAILY_PROFIT_TRAIL_TIERS')); + trailOk = `\n다단트레일: ${tiersKey ? patch[tiersKey] : '반영됨'}`; + } else if (ta.reason) { + trailOk = `\n다단트레일 미반영: ${ta.reason}`; + } + alert( + `✅ ${j.strategy} 적용 완료` + + (j.env_id != null ? ` (env_id=${j.env_id})` : '') + + `\ntrial #${m.optuna_trial_number ?? '—'} · PnL ${m.total_pnl} · WR ${m.win_rate}` + + trailOk + + `\n${j.note || ''}`, + ); + } catch (e) { + alert('오류: ' + e); + } +} + +async function optunaPollOnce() { + if (!_optunaJobId) { + // 외부 CLI / latest + try { + const r = await fetch('/api/optuna/active'); + const j = await r.json(); + if (j.running && j.running[0]) { + _optunaJobId = j.running[0].job_id; + localStorage.setItem(OPTUNA_LS_KEY, _optunaJobId); + optunaRenderJob(j.running[0]); + return; + } + if (j.latest) { + optunaRenderJob(j.latest); + if (j.latest.status === 'running') { + _optunaJobId = j.latest.job_id; + localStorage.setItem(OPTUNA_LS_KEY, _optunaJobId); + } else if (j.latest.status === 'done' || j.latest.status === 'error') { + optunaSetNav(j.latest); + } + } else if (j.external) { + optunaSetNav({ + label: 'CLI Optuna', + status: 'running', + progress: { pct: 5, trials_done: '?', trials_total: '?' }, + study_name: j.external.cmdline, + }); + } else { + optunaSetNav(null); + } + } catch (e) { /* ignore */ } + return; + } + try { + const r = await fetch('/api/optuna/status/' + encodeURIComponent(_optunaJobId)); + const j = await r.json(); + if (!j.ok) { + _optunaJobId = ''; + localStorage.removeItem(OPTUNA_LS_KEY); + return; + } + optunaRenderJob(j.job); + if (j.job.status === 'done' || j.job.status === 'error') { + // 완료 후에도 상단 바는 잠시 유지 (클릭해 결과 확인) + } + } catch (e) { /* ignore */ } +} + +function optunaStartPolling() { + if (_optunaPollTimer) clearInterval(_optunaPollTimer); + optunaPollOnce(); + _optunaPollTimer = setInterval(optunaPollOnce, 3000); +} + +function optunaSelectedStrategies() { + const order = ['momentum', 'us_momentum', 'tail', 'breakout', 'scalp']; + const checked = new Set( + Array.from(document.querySelectorAll('.opt-strat-cb:checked')).map(cb => cb.value) + ); + return order.filter(s => checked.has(s)); +} + +function optunaPickKr4() { + const kr = new Set(['momentum', 'tail', 'breakout', 'scalp']); + document.querySelectorAll('.opt-strat-cb').forEach(cb => { + cb.checked = kr.has(cb.value); + }); +} + +function optunaPickNone() { + document.querySelectorAll('.opt-strat-cb').forEach(cb => { cb.checked = false; }); +} + +async function optunaStart() { + const strategies = optunaSelectedStrategies(); + const start = $('opt_start')?.value; + const end = $('opt_end')?.value; + const trials = parseInt($('opt_trials')?.value || '200', 10); + const mode = $('opt_mode')?.value || 'tpe'; + if (!strategies.length) { alert('전략을 1개 이상 체크하세요'); return; } + if (!start || !end) { alert('시작·종료일을 입력하세요'); return; } + const how = strategies.length >= 2 ? `순차 ${strategies.length}개` : strategies[0]; + if (!confirm(`Optuna 시작?\n${how}: ${strategies.join(', ')}\n${start}~${end} trials=${trials}\n(DB 미적용)`)) return; + try { + const r = await fetch('/api/optuna/start', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ strategies, start, end, trials, mode }), + }); + const j = await r.json(); + if (!j.ok) { alert('❌ ' + (j.error || '시작 실패')); return; } + _optunaJobId = j.job.job_id; + localStorage.setItem(OPTUNA_LS_KEY, _optunaJobId); + optunaRenderJob(j.job); + optunaStartPolling(); + optunaRefreshJobs(); + } catch (e) { + alert('오류: ' + e); + } +} + +async function optunaStop() { + if (!_optunaJobId) return; + if (!confirm('실행 중 Optuna를 중지할까요?')) return; + try { + const r = await fetch('/api/optuna/stop/' + encodeURIComponent(_optunaJobId), { method: 'POST' }); + const j = await r.json(); + if (!j.ok) { alert(j.error || '중지 실패'); return; } + optunaRenderJob(j.job); + optunaRefreshJobs(); + } catch (e) { alert('오류: ' + e); } +} + +async function optunaRefreshJobs() { + try { + const sort = $('opt_jobs_sort')?.value || 'started'; + const r = await fetch('/api/optuna/jobs?limit=20&sort=' + encodeURIComponent(sort)); + const j = await r.json(); + const tb = $('opt_jobs_tbody'); + if (!tb) return; + if (!j.ok || !(j.jobs || []).length) { + tb.innerHTML = ''; + return; + } + tb.innerHTML = j.jobs.map(job => { + const prog = job.progress || {}; + const jid = job.job_id; + const label = job.label || job.strategy || ''; + return ` + + + + + + + + + `; + }).join(''); + } catch (e) { + const tb = $('opt_jobs_tbody'); + if (tb) tb.innerHTML = ``; + } +} + +function optunaWatch(jobId) { + _optunaJobId = jobId; + localStorage.setItem(OPTUNA_LS_KEY, jobId); + optunaPollOnce(); + optunaStartPolling(); +} + +function optunaBoot() { + optunaLoadDefaults(); + optunaStartPolling(); +} + +// ──────────────────────────────────────────── +// 상단 매매 모의/실전 (KIS_MOCK) — DB 저장 + kis_trader_main 재시작 +// ──────────────────────────────────────────── +let _kisMockBusy = false; +let _kisMockCurrent = null; // true=모의, false=실전, null=미로드 + +function kisMockApplyUi(d) { + const mock = !!(d && d.kis_mock); + _kisMockCurrent = mock; + const btnM = $('kis_mock_btn_mock'); + const btnL = $('kis_mock_btn_live'); + if (btnM) { + btnM.classList.toggle('active', mock); + btnM.classList.toggle('btn-warning', mock); + btnM.classList.toggle('btn-outline-warning', !mock); + btnM.disabled = _kisMockBusy; + } + if (btnL) { + btnL.classList.toggle('active', !mock); + btnL.classList.toggle('btn-danger', !mock); + btnL.classList.toggle('btn-outline-danger', mock); + btnL.disabled = _kisMockBusy; + } + const st = $('kis_mock_status'); + if (st) { + const bot = d && d.bot_active ? 'active' : ((d && d.bot_status) || '?'); + const label = (d && d.label) || (mock ? '모의' : '실전'); + st.textContent = label + ' · ' + bot; + st.className = mock ? 'text-warning' : 'text-danger'; + st.style.fontSize = '11px'; + st.style.whiteSpace = 'nowrap'; + } +} + +async function kisMockLoad() { + try { + const r = await fetch('/api/ops/kis_mock'); + const d = await r.json(); + if (!d || !d.ok) { + const st = $('kis_mock_status'); + if (st) st.textContent = (d && d.error) || '조회실패'; + return; + } + kisMockApplyUi(d); + } catch (e) { + const st = $('kis_mock_status'); + if (st) st.textContent = '조회오류'; + } +} + +async function kisMockSet(wantMock) { + if (_kisMockBusy) return; + if (_kisMockCurrent === wantMock) { + await kisMockLoad(); + return; + } + const label = wantMock ? '모의' : '실전'; + const msg = wantMock + ? '매매를 모의 계좌로 전환합니다.\n시세는 실키 유지 · kis_trader_main 이 재시작됩니다.\n계속할까요?' + : '⚠️ 매매를 실전 계좌로 전환합니다.\n실주문이 나갑니다. 시세는 실키 유지 · 봇이 재시작됩니다.\n정말 전환할까요?'; + if (!confirm(msg)) return; + + _kisMockBusy = true; + kisMockApplyUi({ kis_mock: _kisMockCurrent, label: _kisMockCurrent ? '모의' : '실전', bot_active: false, bot_status: '재시작중' }); + const st = $('kis_mock_status'); + if (st) { + st.textContent = '저장·재시작중…'; + st.className = 'text-muted'; + } + try { + const r = await fetch('/api/ops/kis_mock', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ kis_mock: !!wantMock }), + }); + const d = await r.json().catch(() => ({})); + if (!r.ok || !d.ok) { + alert( + (d && d.error) || + ('전환 실패 (HTTP ' + r.status + ')\n' + + 'db_ok=' + (d && d.db_ok) + ' restart_ok=' + (d && d.restart_ok)) + ); + await kisMockLoad(); + return; + } + kisMockApplyUi(d); + alert('✅ 매매 ' + label + ' 전환 완료\n봇: ' + (d.bot_status || '') + '\n' + (d.note || '')); + } catch (e) { + alert('전환 오류: ' + e); + await kisMockLoad(); + } finally { + _kisMockBusy = false; + await kisMockLoad(); + } +} + +function kisMockBoot() { + kisMockLoad(); +} + // ──────────────────────────────────────────── // 최초 로드 +// ※ loadActual 은 /api/env/params 날짜 확정 후 호출 (위 fetch then) // ──────────────────────────────────────────── -loadActual(); +optunaBoot(); +kisMockBoot(); diff --git a/templates/backtest.html b/templates/backtest.html index 5150c21..aa20ab8 100644 --- a/templates/backtest.html +++ b/templates/backtest.html @@ -15,9 +15,45 @@
-
${nameCell}
${causeBadge}${nameCell} ${fmtTradeTime(r.buyRaw)} ${sellCell}${fmtWon(r.ep)}${exitPxCell}${fmtPx(r.ep, rowFx)}${exitPxCell} ${r.qty}${pnlCell}${fmtPct(r.rateNum)}${pnlCell}${fmtPct(r.rateNum)}${cumPnlHtml}${cumPctHtml}
등록된 영구구독 없음
등록된 영구구독 없음
' + x.code + '' + title + '' + permFmtPriceCell(x, fx) + '' + mkBadge + '' + (x.exchange || '') + '' + (x.symbol || '') + '' + (x.tf_min || '') + '' + (x.ws_tr_key || '') + '' + baseTf + '분' + (x.ws_tr_key || '') + '' + onBadge + '' + (x.note || '') + ' ' - + '' + (x.note || '') + ' ' + + '
로드 실패: ' + e + '
로드 실패: ' + e + '
${stratLbl} ${it.name}
${it.code}
${pfFmtBuyDate(it.buy_date)}${it.broker_avg_price != null && it.broker_avg_price > 0 ? fmtWon(it.broker_avg_price) : '—'}${fmtWon(it.current_price)}${it.pnl_pct >= 0 ? '+' : ''}${it.pnl_pct}%${fmtWon(it.eval_amt)}${fmtWon(it.current_price)}${it.pnl_pct >= 0 ? '+' : ''}${it.pnl_pct}%${fmtWon(it.eval_amt)} ${sellBtn}
영구구독 US 없음
${s.code}${s.stock_group || ''}${s.exchange || ''}${s.has_stock_cfg ? '✅' : '—'}${s.enabled ? 'ON' : 'OFF'}
${e}
${source} 후보 없음
${rank}#${r.optuna_trial_number ?? '—'}${usmomOptFmtUsdOrNum(r.total_trades, 0)}${usmomOptFmtUsdOrNum(r.win_rate, 1)}%${usmomOptFmtUsdOrNum(r.pf, 2)}${usmomOptFmtUsdOrNum(r.total_pnl)} + + + +
${msg || '백그라운드 실행 중…'}
완료 후 표시
${r.label || r.source}${r.optuna_trial_number != null ? '#' + r.optuna_trial_number : '—'}${optunaFmtNum(r.total_trades, 0)}${optunaFmtNum(r.win_rate, 1)}${optunaFmtNum(r.pf, 2)}${optunaFmtNum(r.total_pnl)}${r.n_losing_days != null ? optunaFmtNum(r.n_losing_days, 0) : '—'}${r.worst_day_pnl != null ? optunaFmtNum(r.worst_day_pnl) : '—'}${r.stability_score != null ? optunaFmtNum(r.stability_score, 2) : '—'}
gated 후보 없음 / 미완료
${rank}#${r.optuna_trial_number ?? '—'}${optunaFmtNum(r.total_trades, 0)}${optunaFmtNum(r.win_rate, 1)}%${optunaFmtNum(r.pf, 2)}${optunaFmtNum(r.total_pnl)} + + +
stable 후보 없음 (구 JSON은 재실행 필요 / 게이트 미충족)
${rank}#${r.optuna_trial_number ?? '—'}${optunaFmtNum(r.total_trades, 0)}${optunaFmtNum(r.win_rate, 1)}%${optunaFmtNum(r.total_pnl)}${r.n_losing_days != null ? optunaFmtNum(r.n_losing_days, 0) : '—'}${r.worst_day_pnl != null ? optunaFmtNum(r.worst_day_pnl) : '—'}${r.stability_score != null ? optunaFmtNum(r.stability_score, 2) : '—'} + + +
잡 없음
${jid}${label}${job.start || ''}~${job.end || ''}${job.status || ''}${prog.trials_done ?? '—'}/${prog.trials_total ?? job.trials ?? '—'}${job.started_at || ''}${job.finished_at || '—'}
${e}
- + + + +
전략종목매수시각DB수량실계좌동기DB매수가실평단현재가수익률평가금매도DB매수가실평단현재가당일%매수대비%평가금매도
@@ -443,9 +494,17 @@
+
+ + +
-
- +
+ + + - 탐색: CLI param_search_scalping.py + 탐색: CLI param_search_scalping.py · 전역 1잡(전략 충돌 방지) +
+
+
+
+
+
+ 백그라운드=CLI 잡 · 탭 이동 OK · 파라미터=DB(+기간/유니버스) · 동기=짧을 때 +
@@ -744,9 +813,17 @@
+
+ + +
-
+
-
@@ -834,13 +913,19 @@
-
📅 다단트레일 ON이면 당일 실현손익 고점 대비 되돌릴 때 신규매수만 중단. DB=SHORT_DAILY_PROFIT_TARGET_ENABLED. 이번만 끄려면 체크 해제 후 실행(봇저장 X면 DB 유지).
+
📅 다단트레일 ON이면 당일 실현손익 고점 대비 되돌릴 때 신규매수만 중단. 리스크버짓(B) ON이면 hit 후 보유최악손절합>cushion 이면 전량정리. DB=SHORT_DAILY_PROFIT_*.
+
+
+ + +
+
+
+
+ + +
+
+
+ + +
-
- +
+ + + - 탐색: CLI param_search_breakout.py · 입력 기본값=최신 fast 1위 + 탐색: CLI · 전역 1잡 +
+
+
+
+
+
백그라운드=CLI 잡 · 탭 이동 OK · DB 파라미터
@@ -2027,10 +2145,18 @@
+
+ + +
@@ -2265,13 +2391,19 @@ -
📅 다단트레일 ON이면 당일 실현손익 고점 대비 되돌릴 때 신규매수만 중단. DB=MOMENTUM_DAILY_PROFIT_TARGET_ENABLED. 이번만 끄려면 체크 해제 후 실행(봇저장 X면 DB 유지).
+
📅 다단트레일 ON이면 당일 실현손익 고점 대비 되돌릴 때 신규매수만 중단. 리스크버짓(B) ON이면 hit 후 보유최악손절합>cushion 이면 전량정리. DB=MOMENTUM_DAILY_PROFIT_*.
+
+
+ + +
+
@@ -2314,11 +2447,19 @@
-
- +
+ + + - 탐색: CLI param_search_momentum.py · 표에서 폼반영/DB저장 · 저장 후보 이력 체크 시 1~3분 + 탐색: CLI · 전역 1잡 +
+
+
+
+
+
백그라운드=CLI 잡 · 탭 이동 OK · DB 파라미터
@@ -2434,6 +2575,520 @@ + + + + + + diff --git a/test_kiwoom_ws_sub_limit.py b/test_kiwoom_ws_sub_limit.py new file mode 100644 index 0000000..2a1a7fa --- /dev/null +++ b/test_kiwoom_ws_sub_limit.py @@ -0,0 +1,453 @@ +#!/usr/bin/env python3 +""" +test_kiwoom_ws_sub_limit.py — 키움 WS 구독 한도(~100) 실측 + 로테이션 +==================================================================== + +목적 +---- +1) 클라이언트 한도를 잠시 풀어 **120종목 REG** 를 보내 서버 반응 확인 +2) 한도 초과 시 **REMOVE → REG** 로테이션이 되는지 확인 + (국장/미장 시간대가 달라도, 구독 슬롯을 비우고 다시 넣는 패턴) + +주의 (필수 읽기) +---------------- +- 키움은 **앱키/토큰당 WS 1접속** 경향. 실매 ``kis_trader_main`` 이 + ``WS_PROVIDER=kis_with_validation`` 이면 키움 WS 를 이미 쓰고 있음. +- 이 테스트가 붙으면 **실매 키움 세션이 끊길 수 있음** (보통 재접속). +- 기본은 실매 감지 시 **중단**. 강제로 돌리려면 ``--force``. + +사용법 +------ +:: + + # 안전: 실매 키움 사용 중이면 중단 + python3 -u test_kiwoom_ws_sub_limit.py --count 120 + + # 실매 떠 있어도 강제 (장외·검증용) + nohup python3 -u test_kiwoom_ws_sub_limit.py --count 120 --force \\ + --rotate-every 20 --rotate-n 25 --duration 90 \\ + > logs/kiwoom_ws_sub_limit_$(date +%Y%m%d_%H%M%S).log 2>&1 & + +로그: ``logs/kiwoom_ws_sub_limit_*.log`` 를 ``tail -f`` +""" +from __future__ import annotations + +import argparse +import logging +import os +import re +import subprocess +import sys +import time +from collections import deque +from pathlib import Path +from typing import Deque, List, Optional, Set + +SCRIPT_DIR = Path(__file__).resolve().parent +sys.path.insert(0, str(SCRIPT_DIR)) + +LOG_DIR = SCRIPT_DIR / "logs" + + +def setup_logging(log_path: Optional[Path], verbose: bool) -> logging.Logger: + LOG_DIR.mkdir(parents=True, exist_ok=True) + logger = logging.getLogger("kiwoom_sub_limit") + logger.handlers.clear() + logger.setLevel(logging.DEBUG if verbose else logging.INFO) + fmt = logging.Formatter("[%(asctime)s] %(levelname)s %(message)s", "%H:%M:%S") + sh = logging.StreamHandler(sys.stdout) + sh.setFormatter(fmt) + logger.addHandler(sh) + if log_path: + fh = logging.FileHandler(log_path, encoding="utf-8") + fh.setFormatter(fmt) + logger.addHandler(fh) + # 키움 WS 내부 로그도 같은 핸들로 + kw = logging.getLogger("KiwoomWebSocket") + kw.setLevel(logging.INFO) + kw.handlers.clear() + kw.addHandler(sh) + if log_path: + kw.addHandler(fh) + kw.propagate = False + return logger + + +def live_bot_may_hold_kiwoom() -> bool: + """실매 유닛이 떠 있고 WS_PROVIDER 가 키움을 쓰는 설정이면 True.""" + try: + out = subprocess.check_output( + ["systemctl", "is-active", "kis_trader_main.service"], + text=True, + stderr=subprocess.DEVNULL, + ).strip() + if out != "active": + return False + except Exception: + return False + try: + from kis_trader.utils.env import get_env_from_db + + prov = (get_env_from_db("WS_PROVIDER", "") or "").strip().lower() + # kis_only 만 키움 미사용. 그 외(kis_with_validation / kiwoom_*) 는 위험. + return prov != "kis_only" + except Exception: + return True + + +def load_kiwoom_creds(force_real: bool = True) -> tuple[str, str, bool]: + from database import TradeDB + + db = TradeDB() + try: + if force_real: + row = db.conn.execute( + "SELECT * FROM env_config ORDER BY id DESC LIMIT 1" + ).fetchone() + if not row: + return "", "", False + r = dict(row) + key = (r.get("KIWOOM_APP_KEY_REAL") or "").strip() + secret = (r.get("KIWOOM_APP_SECRET_REAL") or "").strip() + if not key or not secret: + key = (r.get("KIWOOM_APP_KEY") or "").strip() + secret = (r.get("KIWOOM_APP_SECRET") or "").strip() + return key, secret, False + from kis_trader.ws.kis_ws import _get_kiwoom_creds + + return _get_kiwoom_creds(db) + finally: + db.close() + + +def load_codes(count: int) -> List[str]: + """stock_share_meta → ws_ticks → 하드코드 순으로 6자리 종목코드 수집.""" + codes: List[str] = [] + seen: Set[str] = set() + + def _add(raw: str) -> None: + c = str(raw or "").strip() + if not re.fullmatch(r"\d{6}", c): + return + if c in seen: + return + seen.add(c) + codes.append(c) + + from database import TradeDB + + db = TradeDB() + try: + rows = db.conn.execute( + "SELECT code FROM stock_share_meta ORDER BY updated_at DESC LIMIT %s", + (max(count * 2, 300),), + ).fetchall() + for r in rows: + _add(r["code"] if isinstance(r, dict) else r[0]) + if len(codes) >= count: + break + if len(codes) < count: + rows2 = db.conn.execute( + "SELECT DISTINCT code FROM ws_ticks ORDER BY code LIMIT %s", + (count,), + ).fetchall() + for r in rows2: + _add(r["code"] if isinstance(r, dict) else r[0]) + if len(codes) >= count: + break + finally: + db.close() + + # 그래도 부족하면 대표 대형주 패딩 (한도 테스트용 — 시세 품질보다 개수) + pad = [ + "005930", "000660", "005380", "035420", "035720", "051910", "006400", + "005490", "028260", "105560", "055550", "012330", "032830", "066570", + "003550", "017670", "030200", "086790", "316140", "024110", "009150", + "034730", "018260", "011200", "010130", "009540", "010950", "011070", + "000270", "207940", "068270", "373220", "259960", "352820", "247540", + ] + for c in pad: + _add(c) + if len(codes) >= count: + break + + return codes[:count] + + +def patch_ws_for_limit_test(ws, client_cap: int) -> dict: + """ + - 클라이언트 한도를 client_cap 으로 올려 서버 한도(≈100)를 넘기게 함 + - 0B 만 REG (호가/프로그램 제외 → 메시지·유량 절약) + - REG ack 카운터 훅 + """ + stats = { + "reg_ok": 0, + "reg_fail": 0, + "reg_fail_msgs": [], + "login_ok": 0, + "login_fail": 0, + "real_ticks": 0, + } + + ws._max_subscriptions = lambda: int(client_cap) # type: ignore[method-assign] + ws._orderbook_ws_enabled = lambda: False # type: ignore[method-assign] + ws._program_ws_enabled = lambda: False # type: ignore[method-assign] + ws._reg_types = lambda: [ws.SUB_TYPE] # type: ignore[method-assign] + + orig_on_message = ws._on_message + + def _wrapped(sock, message: str): + try: + import json + + msg = json.loads(message) + trnm = msg.get("trnm", "") + if trnm == "LOGIN": + if msg.get("return_code") == 0: + stats["login_ok"] += 1 + else: + stats["login_fail"] += 1 + stats["reg_fail_msgs"].append( + f"LOGIN fail: {msg.get('return_msg')}" + ) + elif trnm == "REG": + if msg.get("return_code") == 0: + stats["reg_ok"] += 1 + else: + stats["reg_fail"] += 1 + rm = str(msg.get("return_msg") or msg) + stats["reg_fail_msgs"].append(rm[:200]) + elif trnm == "REAL": + stats["real_ticks"] += 1 + except Exception: + pass + return orig_on_message(sock, message) + + ws._on_message = _wrapped # type: ignore[method-assign] + return stats + + +def wait_login(ws, timeout: float, log: logging.Logger) -> bool: + deadline = time.time() + timeout + while time.time() < deadline: + if ws.is_authenticated(): + log.info("✅ LOGIN OK") + return True + time.sleep(0.3) + log.error("❌ LOGIN timeout %.0fs", timeout) + return False + + +def main() -> int: + p = argparse.ArgumentParser(description="키움 WS 구독 한도·로테이션 실측") + p.add_argument("--count", type=int, default=120, help="시도 구독 종목 수 (기본 120)") + p.add_argument( + "--client-cap", + type=int, + default=200, + help="클라이언트 내부 한도 일시 상향 (서버 한도 실측용, 기본 200)", + ) + p.add_argument( + "--soft-cap", + type=int, + default=100, + help="로테이션 시 유지할 목표 구독 수 (기본 100)", + ) + p.add_argument("--duration", type=int, default=90, help="전체 테스트 초 (기본 90)") + p.add_argument( + "--rotate-every", + type=int, + default=20, + help="로테이션 주기(초). 0이면 로테이션 없음", + ) + p.add_argument( + "--rotate-n", + type=int, + default=25, + help="한 번에 빼는/넣는 종목 수", + ) + p.add_argument("--force", action="store_true", help="실매 키움 세션 충돌 무시") + p.add_argument("-v", "--verbose", action="store_true") + args = p.parse_args() + + ts = time.strftime("%Y%m%d_%H%M%S") + log_path = LOG_DIR / f"kiwoom_ws_sub_limit_{ts}.log" + log = setup_logging(log_path, args.verbose) + + log.info("=" * 70) + log.info("키움 WS 구독 한도 실측 count=%d soft_cap=%d client_cap=%d", + args.count, args.soft_cap, args.client_cap) + log.info("로그: %s", log_path) + log.info("=" * 70) + + if live_bot_may_hold_kiwoom() and not args.force: + log.error( + "실매 kis_trader_main 이 키움 WS 를 쓸 수 있는 설정입니다. " + "이 테스트는 토큰당 1접속이라 실매 키움 세션을 끊을 수 있습니다. " + "장외·의도적 검증이면 --force 를 붙이세요." + ) + return 2 + + if live_bot_may_hold_kiwoom() and args.force: + log.warning("⚠️ --force: 실매 키움 WS 가 끊길 수 있음 (보통 재접속)") + + key, secret, is_mock = load_kiwoom_creds(force_real=True) + if not key or not secret: + log.error("키움 실키 없음 (KIWOOM_APP_KEY_REAL)") + return 1 + log.info("키: %s…%s mock=%s", key[:8], key[-4:], is_mock) + + all_codes = load_codes(args.count) + if len(all_codes) < args.count: + log.warning("종목 부족 %d/%d — 있는 만큼만", len(all_codes), args.count) + if len(all_codes) < 10: + log.error("종목 너무 적음") + return 1 + log.info("종목 풀 %d개 (앞5: %s)", len(all_codes), all_codes[:5]) + + from kis_trader.ws.kiwoom_ws import KiwoomWebSocketPriceCache + + ws = KiwoomWebSocketPriceCache(key, secret, is_mock=is_mock) + stats = patch_ws_for_limit_test(ws, client_cap=args.client_cap) + + if not ws.start(): + log.error("WS start 실패") + return 1 + + # Phase 1: 전부 넣기 (클라이언트는 client_cap 까지 허용 → 서버가 거절하는지 봄) + log.info("── Phase1: REG 시도 %d종목 (chunked) ──", len(all_codes)) + added = ws.subscribe_many(all_codes) + log.info("클라이언트 집합 추가: %d / 요청 %d", len(added), len(all_codes)) + + if not wait_login(ws, 20.0, log): + ws.stop() + return 1 + + # REG 청크 전송 대기 (120 / 25 * 0.18 ≈ 1초 + 여유) + wait_reg = max(5.0, (len(all_codes) / 25.0) * 0.25 + 3.0) + log.info("REG 전송·ack 대기 %.1fs …", wait_reg) + time.sleep(wait_reg) + + with ws._sub_lock: + n_sub = len(ws._subscribed) + log.info( + "Phase1 결과: subscribed=%d reg_ok=%d reg_fail=%d real_ticks=%d", + n_sub, stats["reg_ok"], stats["reg_fail"], stats["real_ticks"], + ) + for m in stats["reg_fail_msgs"][:8]: + log.warning(" REG/LOGIN msg: %s", m) + + # Phase 2: soft_cap 초과분이 있으면 로테이션 풀로 이동 + soft = max(1, int(args.soft_cap)) + rotate_n = max(1, int(args.rotate_n)) + active: Deque[str] = deque() + overflow: Deque[str] = deque() + + with ws._sub_lock: + current = list(ws._subscribed) + # 앞 soft 개는 유지, 나머지 REMOVE 후보 + keep = current[:soft] + drop = current[soft:] + for c in keep: + active.append(c) + for c in drop: + overflow.append(c) + # subscribe_many 에서 클라이언트에 못 들어간 것도 overflow + for c in all_codes: + if c not in keep and c not in drop: + overflow.append(c) + + if drop: + log.info("── Phase2: soft_cap=%d 초과 %d종 REMOVE ──", soft, len(drop)) + for c in drop: + ws.unsubscribe(c) + time.sleep(2.0) + with ws._sub_lock: + n_sub = len(ws._subscribed) + log.info("REMOVE 후 subscribed=%d", n_sub) + + # Phase 3: 시간 맞춰 로테이션 + end_ts = time.time() + max(5, int(args.duration)) + rot_every = int(args.rotate_every) + last_rot = time.time() + rot_round = 0 + + if rot_every <= 0: + log.info("로테이션 OFF — duration 동안 유지만") + else: + log.info( + "── Phase3: %ds 마다 %d종 교체 (overflow=%d) ──", + rot_every, rotate_n, len(overflow), + ) + + while time.time() < end_ts: + now = time.time() + if rot_every > 0 and (now - last_rot) >= rot_every and overflow: + rot_round += 1 + last_rot = now + out_n = min(rotate_n, len(active), len(overflow)) + if out_n <= 0: + log.info("로테이션 skip (active/overflow 부족)") + else: + leaving = [active.popleft() for _ in range(out_n)] + entering = [overflow.popleft() for _ in range(out_n)] + log.info( + "🔄 rotate#%d REMOVE %d → REG %d (active≈%d overflow=%d)", + rot_round, out_n, out_n, len(active), len(overflow), + ) + for c in leaving: + ws.unsubscribe(c) + overflow.append(c) + time.sleep(0.5) + got = ws.subscribe_many(entering) + for c in got: + active.append(c) + time.sleep(1.5) + with ws._sub_lock: + n_sub = len(ws._subscribed) + log.info( + " 후 subscribed=%d reg_ok=%d reg_fail=%d ticks=%d", + n_sub, stats["reg_ok"], stats["reg_fail"], stats["real_ticks"], + ) + + # 1초마다 상태 한 줄 + time.sleep(1.0) + if int(now) % 10 == 0: + with ws._sub_lock: + n_sub = len(ws._subscribed) + priced = 0 + for c in list(active)[:soft]: + if ws.get_price(c, max_age_sec=30.0): + priced += 1 + log.info( + "… hold subscribed=%d priced_sample≈%d/%d ticks=%d fail=%d", + n_sub, priced, min(len(active), soft), + stats["real_ticks"], stats["reg_fail"], + ) + + with ws._sub_lock: + n_sub = len(ws._subscribed) + log.info("=" * 70) + log.info("종료 요약") + log.info(" final_subscribed=%d", n_sub) + log.info(" login_ok=%d login_fail=%d", stats["login_ok"], stats["login_fail"]) + log.info(" reg_ok=%d reg_fail=%d", stats["reg_ok"], stats["reg_fail"]) + log.info(" real_ticks=%d", stats["real_ticks"]) + if stats["reg_fail_msgs"]: + log.info(" fail_msgs 샘플:") + for m in stats["reg_fail_msgs"][:10]: + log.info(" - %s", m) + log.info(" 해석:") + log.info(" · Phase1 에서 reg_fail↑ / 세션 끊김 → 서버 한도≈100 근처") + log.info(" · REMOVE 후 REG 가 다시 ok → 로테이션 운용 가능") + log.info(" · 장외면 ticks=0 이어도 LOGIN/REG 로 한도 판정 가능") + log.info("로그 파일: %s", log_path) + log.info("=" * 70) + + ws.stop() + time.sleep(1.0) + return 0 if stats["login_ok"] else 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/test_ls_ws.py b/test_ls_ws.py new file mode 100644 index 0000000..d72c495 --- /dev/null +++ b/test_ls_ws.py @@ -0,0 +1,998 @@ +#!/usr/bin/env python3 +""" +test_ls_ws.py — LS증권 OpenAPI WebSocket 실시간 구독 단독 검증 +============================================================= + +봇과 무관하게 LS 접근토큰 발급 → (해외면 REST 현재가) → WS 구독 → +**수신 body 필드 전체**를 한글로 덤프한다. + +공식 참고 +--------- +- REST 토큰: ``POST https://openapi.ls-sec.co.kr:8080/oauth2/token`` +- 실전 WS: ``wss://openapi.ls-sec.co.kr:9443/websocket`` +- 모의 WS: ``wss://openapi.ls-sec.co.kr:29443/websocket`` +- 해외 GSC ``tr_key``: ``{거래소코드}{심볼}`` 을 **18자리 공백 패딩** + (예: NASDAQ TSLA → ``\"82TSLA\" + 공백12`` = 총 18자. 공식 예: ``81SOXL ``) +- 해외 REST 현재가: ``POST /overseas-stock/market-data`` ``g3101`` + +사용법 +------ + +영구구독 KR:: + + python3 test_ls_ws.py + +해외 SPCX / TSLA / QQQM (필드 덤프 + REST 현재가):: + + python3 test_ls_ws.py --codes SPCX,TSLA,QQQM --duration 45 +""" +from __future__ import annotations + +import argparse +import json +import logging +import sys +import threading +import time +from datetime import datetime +from pathlib import Path +from typing import Any + +import requests + +SCRIPT_DIR = Path(__file__).resolve().parent +sys.path.insert(0, str(SCRIPT_DIR)) + +LS_REST_BASE = "https://openapi.ls-sec.co.kr:8080" +LS_WS_REAL = "wss://openapi.ls-sec.co.kr:9443/websocket" +LS_WS_MOCK = "wss://openapi.ls-sec.co.kr:29443/websocket" + +KR_TR_UNIFIED = "US3" +KR_TR_UNIFIED_HOGA = "UH1" +KR_TR_KOSPI = "S3_" +KR_TR_KOSDAQ = "K3_" +KR_TR_KOSPI_HOGA = "H1_" +KR_TR_KOSDAQ_HOGA = "HA_" +US_TR_TRADE = "GSC" + +# LS/xing 해외 거래소코드 (미국) +EXCHANGE_TO_LS: dict[str, str] = { + "NASD": "82", + "NASDAQ": "82", + "NQ": "82", + "NYSE": "81", + "NYS": "81", + "AMEX": "83", + "AMS": "83", + "ASE": "83", +} + +# GSC 실시간 체결 OutBlock (스펙 blocks.json) +GSC_FIELD_KO: dict[str, str] = { + "symbol": "종목코드", + "price": "현재가", + "sign": "등락부호", + "diff": "전일대비", + "rate": "등락률(%)", + "open": "시가", + "high": "고가", + "low": "저가", + "high52p": "52주최고", + "low52p": "52주최저", + "trdq": "체결수량", + "totq": "누적거래량", + "amount": "누적거래대금", + "cgubun": "체결구분", + "trdtm": "체결시각(현지)", + "kortm": "체결시각(한국)", + "ovsdate": "현지일자", + "kordate": "한국일자", + "lSeq": "시퀀스", +} + +# US3/S3_ 국내 체결 OutBlock (주요 필드) +KR_TICK_FIELD_KO: dict[str, str] = { + "shcode": "종목코드", + "price": "현재가", + "sign": "등락부호", + "change": "전일대비", + "drate": "등락률(%)", + "open": "시가", + "high": "고가", + "low": "저가", + "volume": "누적거래량", + "cvolume": "체결량", + "value": "누적거래대금", + "chetime": "체결시각", + "bidho": "매수호가", + "offerho": "매도호가", + "cpower": "체결강도", + "w_avrg": "가중평균가", + "exchname": "거래소", + "status": "상태", +} + +# g3101 REST 현재가 OutBlock +G3101_FIELD_KO: dict[str, str] = { + "symbol": "종목코드", + "korname": "한글명", + "exchcd": "거래소코드", + "exchange": "거래소명", + "currency": "통화", + "price": "현재가", + "sign": "등락부호", + "diff": "전일대비", + "rate": "등락률(%)", + "open": "시가", + "high": "고가", + "low": "저가", + "volume": "거래량", + "amount": "거래대금", + "high52p": "52주최고", + "low52p": "52주최저", + "uplimit": "상한가", + "dnlimit": "하한가", + "suspend": "거래정지", + "sellonly": "매도만가능", + "floatpoint": "소수점자리", + "induname": "업종", + "perv": "PER", + "epsv": "EPS", + "delaygb": "지연구분", + "keysymbol": "키심볼", +} + + +def setup_logging(verbose: bool, log_path: Path | None) -> logging.Logger: + logger = logging.getLogger("test_ls_ws") + logger.handlers.clear() + logger.setLevel(logging.DEBUG if verbose else logging.INFO) + fmt = logging.Formatter("[%(asctime)s] %(message)s", datefmt="%H:%M:%S") + sh = logging.StreamHandler(sys.stdout) + sh.setFormatter(fmt) + logger.addHandler(sh) + if log_path is not None: + log_path.parent.mkdir(parents=True, exist_ok=True) + fh = logging.FileHandler(log_path, encoding="utf-8") + fh.setFormatter(fmt) + logger.addHandler(fh) + return logger + + +def load_ls_creds(*, use_mock: bool) -> tuple[str, str]: + """DB env_config 에서 LS AppKey/Secret 로드.""" + from database import TradeDB + + db = TradeDB() + try: + row = db.conn.execute( + "SELECT LS_APP_KEY_REAL, LS_APP_SECRET_REAL, " + "LS_APP_KEY_MOCK, LS_APP_SECRET_MOCK " + "FROM env_config ORDER BY id DESC LIMIT 1" + ).fetchone() + if not row: + return "", "" + r = dict(row) + if use_mock: + key = (r.get("LS_APP_KEY_MOCK") or "").strip() + secret = (r.get("LS_APP_SECRET_MOCK") or "").strip() + else: + key = (r.get("LS_APP_KEY_REAL") or "").strip() + secret = (r.get("LS_APP_SECRET_REAL") or "").strip() + return key, secret + finally: + db.close() + + +def load_permanent_codes(market: str) -> list[dict[str, str]]: + """permanent_subscriptions 에서 enabled=1 종목 로드.""" + from database import TradeDB + + db = TradeDB() + try: + market_u = (market or "KR").strip().upper() + if market_u == "ALL": + sql = ( + "SELECT code, market_type, exchange, symbol " + "FROM permanent_subscriptions WHERE enabled=1 " + "ORDER BY market_type, code" + ) + rows = db.conn.execute(sql).fetchall() + else: + sql = ( + "SELECT code, market_type, exchange, symbol " + "FROM permanent_subscriptions " + "WHERE enabled=1 AND market_type=%s " + "ORDER BY code" + ) + rows = db.conn.execute(sql, (market_u,)).fetchall() + out: list[dict[str, str]] = [] + for row in rows: + r = dict(row) + out.append( + { + "code": str(r.get("code") or "").strip(), + "market_type": str(r.get("market_type") or "").strip().upper(), + "exchange": str(r.get("exchange") or "").strip().upper(), + "symbol": str(r.get("symbol") or r.get("code") or "").strip(), + } + ) + return [x for x in out if x["code"]] + finally: + db.close() + + +def fetch_access_token(app_key: str, app_secret: str, timeout: float = 15.0) -> str: + """LS OAuth2 client_credentials → access_token.""" + url = f"{LS_REST_BASE}/oauth2/token" + headers = {"Content-Type": "application/x-www-form-urlencoded"} + data = { + "grant_type": "client_credentials", + "appkey": app_key, + "appsecretkey": app_secret, + "scope": "oob", + } + resp = requests.post(url, headers=headers, data=data, timeout=timeout) + if resp.status_code >= 400: + raise RuntimeError(f"token HTTP {resp.status_code}: {resp.text[:400]}") + body = resp.json() + token = body.get("access_token") or body.get("accesstoken") + if not token: + raise RuntimeError(f"no access_token in response: {body}") + return str(token) + + +def ls_exchcd(exchange: str, default: str = "82") -> str: + """영구구독 exchange(NASD/NYSE/AMEX) → LS 2자리 코드.""" + ex = (exchange or "").strip().upper() + if ex.isdigit() and len(ex) == 2: + return ex + return EXCHANGE_TO_LS.get(ex, default) + + +def overseas_tr_key(exchcd: str, symbol: str, width: int = 18) -> str: + """GSC tr_key = 거래소코드+심볼, 오른쪽 공백 패딩 **18자리**. + + LS API 가이드([해외주식] 실시간 시세 GSC): + Length=18, 예) ``'82TSLA' + 공백 12자리`` / Request ``\"81SOXL \"`` + """ + raw = f"{exchcd}{symbol}" + if len(raw) >= width: + return raw + return raw.ljust(width) + + +def domestic_unified_tr_key(shcode: str, width: int = 10) -> str: + """US3/UH1 tr_key = ``U`` + 6자리단축코드 + 공백3 = 총 10자리. + + 공식 예: ``\"U005930 \"`` + """ + code = (shcode or "").strip() + if len(code) == 6 and code.isdigit(): + raw = f"U{code}" + else: + raw = code if code.startswith("U") else f"U{code}" + if len(raw) >= width: + return raw + return raw.ljust(width) + + +def print_field_catalog(title: str, labels: dict[str, str]) -> None: + print(f"\n📋 {title}") + for k, ko in labels.items(): + print(f" {k:12s} {ko}") + + +def dump_body_fields( + body: dict[str, Any], + labels: dict[str, str], + *, + title: str = "", + indent: str = " ", +) -> None: + """수신 dict 를 한글 라벨 + 값으로 출력 (스펙에 없는 키도 전부).""" + if title: + print(title) + if not isinstance(body, dict) or not body: + print(f"{indent}(empty body)") + return + shown: set[str] = set() + for key, ko in labels.items(): + if key in body: + print(f"{indent}{ko} ({key}): {body.get(key)!r}") + shown.add(key) + extras = [k for k in body.keys() if k not in shown] + for key in extras: + print(f"{indent}{key}: {body.get(key)!r}") + + +def _ls_rest_headers( + token: str, + app_key: str, + app_secret: str, + tr_cd: str, +) -> dict[str, str]: + """LS REST 공통 헤더. tr_cont 누락 시 IGW40010.""" + return { + "Content-Type": "application/json; charset=UTF-8", + "authorization": f"Bearer {token}", + "appkey": app_key, + "appsecretkey": app_secret, + "tr_cd": tr_cd, + "tr_cont": "N", + "tr_cont_key": "", + } + + +def fetch_overseas_quote_g3101( + token: str, + app_key: str, + app_secret: str, + *, + exchcd: str, + symbol: str, + delaygb: str = "R", + timeout: float = 15.0, +) -> dict[str, Any]: + """해외주식 REST 현재가 (g3101). delaygb: R=실시간, D=지연.""" + url = f"{LS_REST_BASE}/overseas-stock/market-data" + keysymbol = f"{exchcd}{symbol}" + headers = _ls_rest_headers(token, app_key, app_secret, "g3101") + payload = { + "g3101InBlock": { + "delaygb": delaygb, + "keysymbol": keysymbol, + "exchcd": exchcd, + "symbol": symbol, + } + } + resp = requests.post(url, headers=headers, json=payload, timeout=timeout) + try: + data = resp.json() + except Exception: + return {"_http": resp.status_code, "_raw": resp.text[:500]} + data["_http"] = resp.status_code + return data + + +def fetch_kr_quote_t1101( + token: str, + app_key: str, + app_secret: str, + *, + shcode: str = "005930", + timeout: float = 15.0, +) -> dict[str, Any]: + """국내 주식현재가 (t1101) — 해외 API 빈응답일 때 필드 덤프 검증용.""" + url = f"{LS_REST_BASE}/stock/market-data" + headers = _ls_rest_headers(token, app_key, app_secret, "t1101") + payload = {"t1101InBlock": {"shcode": shcode}} + resp = requests.post(url, headers=headers, json=payload, timeout=timeout) + try: + data = resp.json() + except Exception: + return {"_http": resp.status_code, "_raw": resp.text[:500]} + data["_http"] = resp.status_code + return data + + +# t1101 주요 필드 (호가 10단 전부는 생략, 핵심만 라벨) +T1101_FIELD_KO: dict[str, str] = { + "hname": "종목명", + "price": "현재가", + "sign": "등락부호", + "change": "전일대비", + "diff": "등락률(%)", + "volume": "누적거래량", + "jnilclose": "전일종가", + "offerho1": "매도1호가", + "bidho1": "매수1호가", + "offerrem1": "매도1잔량", + "bidrem1": "매수1잔량", + "offer": "매도총잔량", + "bid": "매수총잔량", + "uplmtprice": "상한가", + "dnlmtprice": "하한가", + "open": "시가", + "high": "고가", + "low": "저가", + "ho_yn": "관리종목", + "shcode": "종목코드", + "exchid": "거래소", +} + +# H1_/UH1 호가 잔량 (1호가만 라벨, 나머지는 키 그대로 덤프) +HOGA_FIELD_KO: dict[str, str] = { + "shcode": "종목코드", + "hotime": "호가시간", + "offerho1": "매도1호가", + "bidho1": "매수1호가", + "offerrem1": "매도1잔량", + "bidrem1": "매수1잔량", + "totofferrem": "총매도잔량", + "totbidrem": "총매수잔량", + "volume": "누적거래량", + "donsigubun": "동시호가구분", + "midprice": "중간가격", +} + + +def build_subscriptions( + items: list[dict[str, str]], + *, + kr_tr: str, + also_hoga: bool = False, +) -> list[tuple[str, str, str]]: + """(tr_cd, tr_key, label) 목록. + + 국내 통합(US3/UH1): tr_key = ``U005930 `` (U+6자리+공백3) + 국내 단독(S3_/H1_/K3_/HA_): tr_key = ``005930`` (6자리) + """ + subs: list[tuple[str, str, str]] = [] + seen: set[tuple[str, str]] = set() + + def add(tr_cd: str, tr_key: str, label: str) -> None: + key = (tr_cd, tr_key) + if key in seen: + return + seen.add(key) + subs.append((tr_cd, tr_key, label)) + + mode = (kr_tr or "unified").strip().lower() + for it in items: + code = it["code"] + mt = it["market_type"] + if mt == "US": + sym = it.get("symbol") or code + exchcd = ls_exchcd(it.get("exchange") or "NASD") + tr_key = overseas_tr_key(exchcd, sym) + add(US_TR_TRADE, tr_key, f"US:{sym} exch={exchcd}") + continue + # KR + if mode == "dual": + add(KR_TR_KOSPI, code, f"KR:{code}:S3_") + add(KR_TR_KOSDAQ, code, f"KR:{code}:K3_") + if also_hoga: + add(KR_TR_KOSPI_HOGA, code, f"KR:{code}:H1_") + add(KR_TR_KOSDAQ_HOGA, code, f"KR:{code}:HA_") + elif mode == "kospi": + add(KR_TR_KOSPI, code, f"KR:{code}:S3_") + if also_hoga: + add(KR_TR_KOSPI_HOGA, code, f"KR:{code}:H1_") + elif mode == "kosdaq": + add(KR_TR_KOSDAQ, code, f"KR:{code}:K3_") + if also_hoga: + add(KR_TR_KOSDAQ_HOGA, code, f"KR:{code}:HA_") + else: + ukey = domestic_unified_tr_key(code) + add(KR_TR_UNIFIED, ukey, f"KR:{code}:US3") + if also_hoga: + add(KR_TR_UNIFIED_HOGA, ukey, f"KR:{code}:UH1") + return subs + + +def _is_tick_body(body: Any) -> bool: + if not isinstance(body, dict) or not body: + return False + tick_keys = ( + "price", + "chetime", + "drate", + "cvolume", + "trdq", + "totq", + "rate", + "kortm", + "trdtm", + "shcode", + "symbol", + "offerho1", + "bidho1", + "offerrem1", + "bidrem1", + ) + return any(k in body for k in tick_keys) + + +class LsWsProbe: + """websocket-client 기반 짧은 구독 프로브.""" + + def __init__( + self, + ws_url: str, + token: str, + logger: logging.Logger, + *, + verbose: bool = False, + max_full_dumps: int = 3, + ) -> None: + try: + import websocket # websocket-client + except ImportError as e: + raise RuntimeError( + "websocket-client 필요: pip install websocket-client" + ) from e + self._websocket = websocket + self.ws_url = ws_url + self.token = token + self.logger = logger + self.verbose = verbose + self.max_full_dumps = max_full_dumps + + self._ws: Any = None + self._thread: threading.Thread | None = None + self.opened = threading.Event() + self._stop = threading.Event() + + self.msg_count = 0 + self.tick_count = 0 + self.reg_acks = 0 + self.errors: list[str] = [] + self.by_label: dict[str, int] = {} + self._label_by_key: dict[tuple[str, str], str] = {} + self._label_by_key_stripped: dict[tuple[str, str], str] = {} + self._last_tick: dict[str, Any] = {} + self._full_dumps_left = max_full_dumps + self._lock = threading.Lock() + + def start(self) -> None: + self._ws = self._websocket.WebSocketApp( + self.ws_url, + on_open=self._on_open, + on_message=self._on_message, + on_error=self._on_error, + on_close=self._on_close, + ) + self._thread = threading.Thread( + target=self._run, name="ls-ws-probe", daemon=True + ) + self._thread.start() + + def _run(self) -> None: + assert self._ws is not None + self._ws.run_forever(ping_interval=20, ping_timeout=10) + + def wait_open(self, timeout: float = 15.0) -> bool: + return self.opened.wait(timeout=timeout) + + def register(self, tr_cd: str, tr_key: str, label: str) -> None: + self._label_by_key[(tr_cd, tr_key)] = label + self._label_by_key_stripped[(tr_cd, tr_key.strip())] = label + payload = { + "header": {"token": self.token, "tr_type": "3"}, + "body": {"tr_cd": tr_cd, "tr_key": tr_key}, + } + if self._ws is None: + raise RuntimeError("WS not started") + self._ws.send(json.dumps(payload, ensure_ascii=False)) + self.logger.info( + "REG sent tr_cd=%s tr_key=%r (%s)", tr_cd, tr_key, label + ) + + def stop(self) -> None: + self._stop.set() + if self._ws is not None: + try: + self._ws.close() + except Exception: + pass + + def _resolve_label(self, tr_cd: str, tr_key: str) -> str: + if (tr_cd, tr_key) in self._label_by_key: + return self._label_by_key[(tr_cd, tr_key)] + stripped = tr_key.strip() + if (tr_cd, stripped) in self._label_by_key_stripped: + return self._label_by_key_stripped[(tr_cd, stripped)] + # symbol only match (GSC body.symbol) + for (tcd, tk), lab in self._label_by_key.items(): + if tcd == tr_cd and (stripped in tk or tk.strip().endswith(stripped)): + return lab + return f"{tr_cd}:{tr_key!r}" + + def _on_open(self, _ws: Any) -> None: + self.logger.info("WS OPEN %s", self.ws_url) + self.opened.set() + + def _on_close(self, _ws: Any, status: Any, msg: Any) -> None: + self.logger.info("WS CLOSE status=%s msg=%s", status, msg) + + def _on_error(self, _ws: Any, err: Any) -> None: + text = str(err) + self.errors.append(text) + self.logger.error("WS ERROR %s", text) + + def _on_message(self, _ws: Any, message: Any) -> None: + self.msg_count += 1 + try: + data = json.loads(message) if isinstance(message, str) else message + except Exception: + self.logger.warning("non-JSON msg: %s", str(message)[:200]) + return + + header = data.get("header") or {} + body = data.get("body") or {} + tr_cd = str(header.get("tr_cd") or body.get("tr_cd") or "") + tr_key = str( + header.get("tr_key") + or body.get("tr_key") + or body.get("shcode") + or body.get("symbol") + or "" + ) + rsp_cd = str(header.get("rsp_cd") or "") + rsp_msg = str(header.get("rsp_msg") or "") + + if not _is_tick_body(body): + if rsp_msg or rsp_cd: + self.reg_acks += 1 + self.logger.info( + "REG ack tr_cd=%s tr_key=%r rsp=%s %s", + tr_cd, + tr_key, + rsp_cd, + rsp_msg, + ) + return + + label = self._resolve_label(tr_cd, tr_key) + with self._lock: + self.tick_count += 1 + self.by_label[label] = self.by_label.get(label, 0) + 1 + self._last_tick[label] = dict(body) if isinstance(body, dict) else body + do_full = self._full_dumps_left > 0 + if do_full: + self._full_dumps_left -= 1 + + labels = GSC_FIELD_KO if tr_cd == "GSC" else KR_TICK_FIELD_KO + if tr_cd in ("UH1", "H1_", "HA_", "NH1", "B7_"): + labels = HOGA_FIELD_KO + px = body.get("price", body.get("offerho1", "?")) + rate = body.get("rate", body.get("drate", "?")) + tmk = ( + body.get("kortm") + or body.get("trdtm") + or body.get("chetime") + or body.get("hotime") + or "" + ) + print( + f"\n📈 TICK #{self.tick_count} {label} " + f"price/ask={px} rate={rate} time={tmk} tr={tr_cd}" + ) + if do_full or self.verbose: + dump_body_fields(body, labels, title=" [전문 body 전체]") + raw = json.dumps(body, ensure_ascii=False) + print(f" [raw JSON] {raw[:900]}{'…' if len(raw) > 900 else ''}") + else: + # 요약만 (이미 전체 dump 한도 초과) + for k in ( + "symbol", + "shcode", + "price", + "diff", + "rate", + "drate", + "trdq", + "cvolume", + "totq", + "volume", + "offerho1", + "bidho1", + "offerrem1", + "bidrem1", + ): + if k in body: + ko = labels.get(k, k) + print(f" {ko} ({k}): {body[k]!r}") + + +def main() -> int: + p = argparse.ArgumentParser(description="LS증권 WebSocket 실시간 구독 단독 검증") + p.add_argument("--codes", default="", help="콤마 구분 종목. 예: SPCX,TSLA,QQQM") + p.add_argument( + "--market", + default="KR", + choices=["KR", "US", "all", "ALL"], + help="영구구독 market_type (기본 KR). --codes 있으면 무시", + ) + p.add_argument( + "--kr-tr", + default="unified", + choices=["unified", "dual", "kospi", "kosdaq"], + help="국내 TR (기본 US3 통합). dual=S3_+K3_", + ) + p.add_argument( + "--also-hoga", + action="store_true", + help="국내 호가잔량도 구독 (unified→UH1, kospi→H1_, kosdaq→HA_)", + ) + p.add_argument("--duration", type=int, default=30, help="구독 유지 초") + p.add_argument("--mock", action="store_true", help="모의 키 + WS 29443") + p.add_argument( + "--no-rest-quote", + action="store_true", + help="해외 g3101 / 국내 t1101 REST 현재가 조회 생략", + ) + p.add_argument( + "--delaygb", + default="R", + help="g3101 delaygb (R=실시간 기본, D=지연)", + ) + p.add_argument( + "--dump-n", + type=int, + default=5, + help="WS tick 전문 전체 덤프 횟수 (기본 5)", + ) + p.add_argument("-v", "--verbose", action="store_true") + p.add_argument("--log", default="") + args = p.parse_args() + + ts = datetime.now().strftime("%Y%m%d_%H%M%S") + log_path = Path(args.log) if args.log else (SCRIPT_DIR / "logs" / f"ls_ws_{ts}.log") + logger = setup_logging(args.verbose, log_path) + + print("=" * 70) + print("🔍 LS증권 WS 실시간 구독 검증 (필드 덤프)") + print("=" * 70) + + use_mock = bool(args.mock) + try: + app_key, app_secret = load_ls_creds(use_mock=use_mock) + except Exception as e: + print(f"❌ LS 키 로드 실패: {e}") + return 1 + if not app_key or not app_secret: + cols = ( + "LS_APP_KEY_MOCK / LS_APP_SECRET_MOCK" + if use_mock + else "LS_APP_KEY_REAL / LS_APP_SECRET_REAL" + ) + print(f"❌ LS 키 비어있음 (env_config 의 {cols})") + return 1 + + ws_url = LS_WS_MOCK if use_mock else LS_WS_REAL + print(f" 모드: {'모의' if use_mock else '실전'}") + print(f" AppKey: {app_key[:8]}…{app_key[-4:]}") + print(f" WS: {ws_url}") + print(f" 로그: {log_path}") + + if args.codes.strip(): + items: list[dict[str, str]] = [] + for raw in args.codes.split(","): + c = raw.strip() + if not c: + continue + mt = "KR" if (c.isdigit() and len(c) == 6) else "US" + # 미국 티커 기본 NASDAQ(82). AMEX 등은 --codes 에 EX:SYM 형태로 가능 + exchange = "NASD" + symbol = c + if mt == "US" and ":" in c: + exchange, symbol = c.split(":", 1) + exchange, symbol = exchange.strip().upper(), symbol.strip().upper() + c = symbol + items.append( + { + "code": c, + "market_type": mt, + "exchange": exchange if mt == "US" else "", + "symbol": symbol if mt == "US" else c, + } + ) + print(f" 종목: --codes ({len(items)}개)") + else: + mkt = "ALL" if str(args.market).upper() == "ALL" else str(args.market).upper() + try: + items = load_permanent_codes(mkt) + except Exception as e: + print(f"❌ permanent_subscriptions 로드 실패: {e}") + return 1 + print(f" 종목: permanent_subscriptions enabled ({mkt}) {len(items)}개") + + if not items: + print("❌ 구독 대상 종목 없음") + return 2 + + for it in items: + print( + f" - {it['market_type']} {it['code']}" + + (f" ({it['exchange']})" if it.get("exchange") else "") + ) + + us_items = [x for x in items if x["market_type"] == "US"] + if us_items: + print_field_catalog("GSC(해외 실시간 체결) 수신 필드", GSC_FIELD_KO) + print_field_catalog("g3101(REST 현재가) 수신 필드", G3101_FIELD_KO) + if any(x["market_type"] == "KR" for x in items): + print_field_catalog("US3/S3_(국내 체결) 주요 수신 필드", KR_TICK_FIELD_KO) + if args.also_hoga: + print_field_catalog("UH1/H1_(호가잔량) 주요 수신 필드", HOGA_FIELD_KO) + print( + " ※ LS [주식] 실시간 시세 TR 약 65종 " + "(체결/호가/거래원/프로그램/VI/NXT·통합…)\n" + " → 키움·한투에서 REST로 떼오던 호가·거래원 등을 WS로 바로 구독 가능" + ) + + subs = build_subscriptions( + items, kr_tr=args.kr_tr, also_hoga=bool(args.also_hoga) + ) + print(f"\n 구독 슬롯: {len(subs)} (kr-tr={args.kr_tr})") + for tr_cd, tr_key, label in subs: + print(f" · {label} tr_cd={tr_cd} tr_key={tr_key!r}") + print(f" 유지: {args.duration}초") + print() + + try: + token = fetch_access_token(app_key, app_secret) + except Exception as e: + print(f"❌ TOKEN 실패: {e}") + logger.error("TOKEN fail: %s", e) + return 1 + print(f"✅ TOKEN OK ({token[:12]}…)") + logger.info("TOKEN OK len=%d", len(token)) + + # ── REST 현재가 (해외) — WS tick 없어도 값 확인 ───────────────────── + us_quote_ok = 0 + if us_items and not args.no_rest_quote: + print("\n" + "═" * 70) + print(f"💵 REST g3101 현재가 (delaygb={args.delaygb})") + print("═" * 70) + for it in us_items: + sym = it.get("symbol") or it["code"] + exchcd = ls_exchcd(it.get("exchange") or "NASD") + print(f"\n── {sym} exchcd={exchcd} keysymbol={exchcd}{sym}") + try: + data = fetch_overseas_quote_g3101( + token, + app_key, + app_secret, + exchcd=exchcd, + symbol=sym, + delaygb=str(args.delaygb), + ) + except Exception as e: + print(f" ❌ REST 실패: {e}") + continue + rsp_cd = str(data.get("rsp_cd") or "") + rsp_msg = str(data.get("rsp_msg") or "") + print(f" http={data.get('_http')} rsp={rsp_cd!r} msg={rsp_msg!r}") + out = data.get("g3101OutBlock") + if isinstance(out, dict) and out: + us_quote_ok += 1 + dump_body_fields(out, G3101_FIELD_KO, title=" [g3101OutBlock — 실제 수신값]") + print(f" [raw] {json.dumps(out, ensure_ascii=False)}") + else: + print(" ⚠️ g3101OutBlock 없음 (해외주식 API 미신청/권한 또는 종목키 문제)") + print(f" [raw] {json.dumps(data, ensure_ascii=False)[:600]}") + time.sleep(0.15) # TPS 여유 + + if us_quote_ok == 0: + print("\n" + "─" * 70) + print( + "ℹ️ 해외 g3101 이 비어 있음.\n" + " LS 홈페이지에서 「해외주식 API」 사용신청이 별도인지 확인.\n" + " (국내 주식 API만 된 키면 g3101/GSC 값이 안 옴)\n" + " 아래는 같은 키로 국내 t1101 을 조회한 **실제 필드 덤프 샘플**." + ) + print("─" * 70) + try: + kr = fetch_kr_quote_t1101( + token, app_key, app_secret, shcode="005930" + ) + out = kr.get("t1101OutBlock") or {} + print( + f"\n── 국내 샘플 005930 삼성전자 " + f"http={kr.get('_http')} rsp={kr.get('rsp_cd')!r}" + ) + if isinstance(out, dict) and out: + # 핵심 필드만 + 일부 호가 + dump_body_fields(out, T1101_FIELD_KO, title=" [t1101OutBlock 핵심]") + # 너무 긴 호가10단은 raw 앞부분만 + raw = json.dumps(out, ensure_ascii=False) + print(f" [raw 앞 700자] {raw[:700]}…") + else: + print(f" {json.dumps(kr, ensure_ascii=False)[:500]}") + except Exception as e: + print(f" 국내 샘플 실패: {e}") + + # ── REST 현재가 (국내 t1101) — 장외에도 스냅샷 값 확인 ─────────────── + kr_items = [x for x in items if x["market_type"] == "KR"] + if kr_items and not args.no_rest_quote: + print("\n" + "═" * 70) + print("💵 REST t1101 국내 현재가/호가 (영구구독 KR)") + print("═" * 70) + for it in kr_items: + code = it["code"] + print(f"\n── {code}") + try: + data = fetch_kr_quote_t1101( + token, app_key, app_secret, shcode=code + ) + except Exception as e: + print(f" ❌ REST 실패: {e}") + continue + out = data.get("t1101OutBlock") or {} + print( + f" http={data.get('_http')} " + f"rsp={data.get('rsp_cd')!r} msg={data.get('rsp_msg')!r}" + ) + if isinstance(out, dict) and out: + dump_body_fields(out, T1101_FIELD_KO, title=" [t1101OutBlock 핵심]") + else: + print(f" [raw] {json.dumps(data, ensure_ascii=False)[:500]}") + time.sleep(0.12) + + # ── WS ───────────────────────────────────────────────────────────── + probe = LsWsProbe( + ws_url, + token, + logger, + verbose=args.verbose, + max_full_dumps=max(1, int(args.dump_n)), + ) + probe.start() + if not probe.wait_open(timeout=15.0): + print("❌ WS OPEN timeout (15s)") + probe.stop() + return 1 + print("\n✅ WS OPEN") + + for tr_cd, tr_key, label in subs: + try: + probe.register(tr_cd, tr_key, label) + time.sleep(0.05) + except Exception as e: + print(f"❌ REG 실패 {label}: {e}") + logger.error("REG fail %s: %s", label, e) + + print() + print(f"📡 {args.duration}초간 WS 수신 (전문 필드 덤프 최대 {args.dump_n}건)...") + end_ts = time.time() + max(1, int(args.duration)) + last_summary = 0.0 + while time.time() < end_ts: + now = time.time() + if now - last_summary >= 5.0: + last_summary = now + print( + f" … msg={probe.msg_count} tick={probe.tick_count} " + f"ack={probe.reg_acks} err={len(probe.errors)}" + ) + time.sleep(0.2) + + probe.stop() + time.sleep(0.3) + + print() + print("─" * 70) + print("종료 통계") + print(f" 메시지 총합: {probe.msg_count}") + print(f" REG ack: {probe.reg_acks}") + print(f" TICK: {probe.tick_count}") + print(f" WS 에러: {len(probe.errors)}") + if probe._last_tick: + print("\n 마지막 tick 스냅샷 (종목별):") + for label, body in sorted(probe._last_tick.items()): + labels = GSC_FIELD_KO if "US:" in label else KR_TICK_FIELD_KO + print(f"\n ▸ {label}") + if isinstance(body, dict): + dump_body_fields(body, labels) + else: + print(f" {body!r}") + elif us_items: + print( + " ⚠️ WS tick 0 — 해외 실시간(GSC) 미수신.\n" + " 위 REST g3101 값이 있으면 조회 API는 정상.\n" + " tick 없으면 HTS [2007] 해외주식 실시간 시세신청 필요할 수 있음." + ) + else: + print(" ⚠️ tick 0 — 장외이거나 권한/TR 확인") + print(f"\n 로그: {log_path}") + print("─" * 70) + + if probe.errors and probe.msg_count == 0: + return 1 + return 0 + + +if __name__ == "__main__": + sys.exit(main())