diff --git a/.agy-instructions.md b/.agy-instructions.md index 5a0e296..81446cc 100644 --- a/.agy-instructions.md +++ b/.agy-instructions.md @@ -174,7 +174,7 @@ 2. **`docs/`** (`정합성.md`, `계정.md`, 전략 QA 등) + 레포 내 기존 헬퍼(`SafeRequest`, `KISApprovalManager`, 세마포어) 검색. 3. **MCP** (브라우저·관련 서버) / 공식 OpenAPI·키움 문서로 한도·엔드포인트·실전·모의 도메인 확인. 4. 근본원인·설계를 **짧게 보고** → 승인 후 수정 (핵심 매매/인프라는 선보고). - +5. API 관련 코드를 작성/수정할 때는, 본인의 지식에 의존하지 말고 반드시 연동된 MCP 도구를 우선 호출하여 스펙을 확인하라. ### 5-2. 금지 - “일단 재시도·재발급·봉수 늘리기·±1 보정”으로 증상만 가리기. - 한도·키 정책을 **문서 확인 없이** 추측 구현. diff --git a/.cursorrules b/.cursorrules index 5a0e296..81446cc 100644 --- a/.cursorrules +++ b/.cursorrules @@ -174,7 +174,7 @@ 2. **`docs/`** (`정합성.md`, `계정.md`, 전략 QA 등) + 레포 내 기존 헬퍼(`SafeRequest`, `KISApprovalManager`, 세마포어) 검색. 3. **MCP** (브라우저·관련 서버) / 공식 OpenAPI·키움 문서로 한도·엔드포인트·실전·모의 도메인 확인. 4. 근본원인·설계를 **짧게 보고** → 승인 후 수정 (핵심 매매/인프라는 선보고). - +5. API 관련 코드를 작성/수정할 때는, 본인의 지식에 의존하지 말고 반드시 연동된 MCP 도구를 우선 호출하여 스펙을 확인하라. ### 5-2. 금지 - “일단 재시도·재발급·봉수 늘리기·±1 보정”으로 증상만 가리기. - 한도·키 정책을 **문서 확인 없이** 추측 구현. diff --git a/__pycache__/database.cpython-312.pyc b/__pycache__/database.cpython-312.pyc index 09a0fce..3a61e09 100644 Binary files a/__pycache__/database.cpython-312.pyc and b/__pycache__/database.cpython-312.pyc differ diff --git a/backtest_web.py b/backtest_web.py index 3b01bf8..1909e27 100644 --- a/backtest_web.py +++ b/backtest_web.py @@ -496,6 +496,24 @@ def _peak_cum_from_trades(trades: List[Dict]) -> Tuple[float, str]: return peak, peak_at[:19] if peak_at else "" +def _codes_from_candles_map( + candles_by_code: Optional[Dict[str, List[Dict]]], +) -> List[str]: + """ + load_*_candles_by_code / load_ls_candles_by_code 결과 → 분석 종목 리스트. + + LS(ls_ws_candles)·키움(ws_candles) 모두 반환형은 ``{code: [봉…]}`` 로 동일하다. + 테이블·datetime 컬럼만 다르고, 웹 변수명(codes)은 갈라지지 않는다. + + 67eab24(LS 이력) 이후 인라인 ``codes = […]`` 가 로더 안으로 들어가 + 응답의 ``len(codes)`` 가 NameError 나던 회귀를 막기 위해, + 로더 직후 반드시 ``codes = _codes_from_candles_map(…)`` 로 다시 바인딩한다. + """ + if not candles_by_code: + return [] + return [str(c) for c in candles_by_code.keys() if c] + + def _resolve_backtest_universe( db: TradeDB, start_key: str, @@ -1871,6 +1889,8 @@ def _momentum_ui_defaults_from_db(_d: Dict[str, Any]) -> Dict[str, Any]: "mom_rsi_max": pickf(("MOMENTUM_RSI_MAX",), 80.0), "mom_vol_mult": pickf(("MOMENTUM_VOL_MULT",), 1.05), "mom_vol_win": picki(("MOMENTUM_VOL_WIN",), 5), + # HTS K — 전일종가 대비 최소등락(%). 기본 0.2 + "e_min_chg_pct": pickf(("MOMENTUM_E_MIN_CHG_PCT",), 0.2), "mom_time_end_hm": picki(("MOMENTUM_TIME_END_HM",), 1530), "mom_time_start_hm": picki( ("MOMENTUM_TIME_START", "SCALP_TIME_START", "TIME_START"), 900, @@ -2009,6 +2029,7 @@ def _momentum_engine_dict_to_ui( "mom_rsi_max": _ui("mom_rsi_max"), "mom_vol_mult": _ui("mom_vol_mult"), "mom_vol_win": _ui("mom_vol_win"), + "e_min_chg_pct": _ui("e_min_chg_pct"), "mom_time_end_hm": _ui("mom_time_end_hm") or _ui("mom_time_end"), "mom_time_start_hm": _ui("time_start_hm") or _ui("time_start"), "sl_pct": _momentum_ratio_to_ui_pct(d.get("sl_pct")), @@ -2949,6 +2970,10 @@ def api_backtest_scalping(): mom_rsi_max = float(request.args.get("mom_rsi_max", _mom_def["mom_rsi_max"])) mom_vol_mult = float(request.args.get("mom_vol_mult", _mom_def["mom_vol_mult"])) mom_vol_win = int(float(request.args.get("mom_vol_win", _mom_def["mom_vol_win"]))) + _e_min = request.args.get("e_min_chg_pct") + e_min_chg_pct = float(_e_min) if _e_min not in (None, "") else float( + _mom_def.get("e_min_chg_pct", 0.2), + ) _mom_time_end = request.args.get("mom_time_end") mom_time_end_hm = int(_mom_time_end) if _mom_time_end not in (None, "") else int( _mom_def["mom_time_end_hm"], @@ -2958,6 +2983,8 @@ def api_backtest_scalping(): mom_rsi_max = float(request.args.get("mom_rsi_max", 80.0)) mom_vol_mult = float(request.args.get("mom_vol_mult", 1.5)) mom_vol_win = int(float(request.args.get("mom_vol_win", 5))) + _e_min = request.args.get("e_min_chg_pct") + e_min_chg_pct = float(_e_min) if _e_min not in (None, "") else 0.2 _mom_time_end = request.args.get("mom_time_end") mom_time_end_hm = int(_mom_time_end) if _mom_time_end not in (None, "") else 1430 @@ -2992,6 +3019,8 @@ def api_backtest_scalping(): db, start_key, end_key, rsi_period=rsi_period, history_source=_candle_hs, ) + # LS/키움 공통 — 로더는 codes 리스트를 반환하지 않음 (NameError 재발 방지) + codes = _codes_from_candles_map(codes_candles) # 방어로직: 쿼리 인자로 넘어오면 우선 사용 (웹 입력란), 없으면 DB 기본값 _high_chase = request.args.get("high_chase_thr") @@ -3080,6 +3109,7 @@ def api_backtest_scalping(): "mom_rsi_max": mom_rsi_max, "mom_vol_mult": mom_vol_mult, "mom_vol_win": mom_vol_win, + "e_min_chg_pct": e_min_chg_pct, "mom_time_end_hm": mom_time_end_hm, } # 백테 전용 필터 토글 (폼 체크박스 → 이 1회 백테에만 적용. 비우면 DB=실매값 사용) @@ -3400,6 +3430,7 @@ def api_backtest_scalping(): "mom_rsi_max": mom_rsi_max, "mom_vol_mult": mom_vol_mult, "mom_vol_win": mom_vol_win, + "e_min_chg_pct": e_min_chg_pct if mode == "momentum" else None, "mom_time_end": mom_time_end_hm, "mom_max_from_open_pct": params.get("mom_max_from_open_pct") if mode == "momentum" else None, "mom_min_from_open_pct": params.get("mom_min_from_open_pct") if mode == "momentum" else None, @@ -4382,6 +4413,9 @@ def _momentum_tab_save_patch(body: Dict[str, Any]) -> Dict[str, str]: x = gv("mom_vol_win") if x is not None: patch["MOMENTUM_VOL_WIN"] = str(int(float(x))) + x = gv("e_min_chg_pct") + if x is not None: + patch["MOMENTUM_E_MIN_CHG_PCT"] = str(float(x)) x = gv("mom_time_end") if x is not None: patch["MOMENTUM_TIME_END_HM"] = str(int(float(x))) @@ -5467,6 +5501,8 @@ def api_backtest_tail(): candles_by_code, _total_candles, has_holding_peak = tbc.load_tail_candles_by_code( db, start_key, end_key, tail_tf, rsi_period=rsi_period, ) + # 엔진 경로도 codes 바인딩 — 응답 len(codes) NameError·키움/LS 혼동 방지 + codes = _codes_from_candles_map(candles_by_code) bt_meta = { "db": db, "start_key": start_key, @@ -5777,7 +5813,7 @@ def api_backtest_tail(): "kelly_mult": kelly_mult, "min_hold_sec": min_hold_sec, "capital": capital, - "codes_analyzed": len(candles_by_code) if use_engine else len(codes), + "codes_analyzed": len(codes), "universe_source": universe_source, "universe_history_slots": universe_history_slots, "universe": tail_univ_mode, @@ -5874,7 +5910,7 @@ def api_backtest_breakout(): "shoulder_cut_pct", _def.get("shoulder_cut_pct", 0.2), float, ), "max_hold_bars": _arg("max_hold_bars", _def.get("max_hold_bars", 0), lambda v: int(float(v))), - "ratchet_tiers": _arg("ratchet_tiers", _def.get("ratchet_tiers", ""), str), + # ratchet_tiers: 키 없음→DB, 빈문자/off→OFF (빈값을 DB 5.5:2.5 로 되돌리면 Optuna 정합 깨짐) "fee_rate_pct": _def.get("fee_rate_pct", 0.015), "sell_tax_pct": _def.get("sell_tax_pct", 0.18), "entry_mode": _arg("entry_mode", _def.get("entry_mode", "intrabar"), str).strip().lower(), @@ -5888,6 +5924,16 @@ def api_backtest_breakout(): ), ), } + _rat_req = request.args.get("ratchet_tiers") + if _rat_req is None: + ui["ratchet_tiers"] = str(_def.get("ratchet_tiers", "") or "") + else: + _rat_s = str(_rat_req).strip() + # off/0/false/빈칸 = 래칫 OFF (모멘텀 탭과 동일) + if _rat_s.lower() in ("", "off", "0", "false", "none"): + ui["ratchet_tiers"] = "" + else: + ui["ratchet_tiers"] = _rat_s _uef = request.args.get("use_ema_filter") if _uef not in (None, ""): ui["use_ema_filter"] = str(_uef).strip().lower() in ("1", "true", "y", "yes", "on") @@ -5925,6 +5971,8 @@ def api_backtest_breakout(): vol_window=int(engine.get("vol_window") or 7), history_source=_univ_hs, ) + # LS/키움 공통 — 로더는 codes 리스트를 반환하지 않음 (NameError 재발 방지) + codes = _codes_from_candles_map(codes_candles) use_saved_history, bo_univ_mode, _ = _parse_backtest_universe_arg( request, default="history", sim_kind=None, @@ -6177,6 +6225,9 @@ def api_backtest_range_break(): continue codes_candles[code] = [dict(r) for r in rows] + # min_bars 통과분만 분석 종목 (DISTINCT raw codes 와 혼동 금지) + codes = _codes_from_candles_map(codes_candles) + use_saved_history, rb_univ_mode, _ = _parse_backtest_universe_arg( request, default="history", sim_kind=None, ) @@ -8906,6 +8957,12 @@ def api_optuna_start(): 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() + hist_src = ( + body.get("universe_history_source") + or request.form.get("universe_history_source") + or "" + ) + hist_src = str(hist_src).strip().lower() or None try: trials = int(body.get("trials") or request.form.get("trials") or 200) except (TypeError, ValueError): @@ -8919,6 +8976,7 @@ def api_optuna_start(): trials=trials, mode=mode, symbol=symbol or None, + universe_history_source=hist_src, ) return jsonify({"ok": True, "job": meta}) except Exception as e: diff --git a/database.py b/database.py index f00c928..03c2c17 100644 --- a/database.py +++ b/database.py @@ -657,8 +657,10 @@ ENV_CONFIG_KEYS = ( "USE_KELLY_FORMULA", # 켈리 공식 적용 배수 (0.25 = Full Kelly의 25%, 과도한 베팅 방지) "KELLY_MULTIPLIER", - # 시장가 IOC 주문 사용 여부 (실전: true=IOC, false=일반 시장가) + # 시장가 IOC 주문 사용 여부 — 매수 (실전: true=IOC13, false=일반01 · 모의는 코드에서 01 고정) "USE_MARKET_IOC", + # 시장가 IOC 주문 사용 여부 — 매도 (실전: true=IOC13, false=일반01 · 모의는 코드에서 01 고정) + "USE_MARKET_IOC_SELL", # 체결 확인 엄격 모드: true=모의도 fill 없으면 가정 체결 금지 (실전 훈련) "STRICT_FILL_VERIFY", # 주문 직후 체결 조회 대기(초) — 시장가 @@ -1136,6 +1138,7 @@ ENV_CONFIG_KEYS = ( "MOMENTUM_TRIGGER_REQUIRE_BULL_BAR", "MOMENTUM_USE_VOL_TRIGGER", "MOMENTUM_USE_RSI_FILTER", + "MOMENTUM_E_MIN_CHG_PCT", "MOMENTUM_CHASE_LOOKBACK_MIN", "MOMENTUM_PULLBACK_LOOKBACK_MIN", "MOMENTUM_PULLBACK_MIN_PCT", @@ -2424,9 +2427,10 @@ class TradeDB: size_class: str = None, strategy: str = None, realized_pnl_override: float = None, + sell_qty: int = None, ): """ - 매도 완료 처리: active_trades 삭제 -> trade_history 이동 (INSERT만, env 스냅샷 포함) + 매도 완료 처리: active_trades → trade_history (INSERT만, env 스냅샷 포함) Args: code: 종목코드 @@ -2437,6 +2441,10 @@ class TradeDB: strategy: 봇 전략 ID (SHORT_ANT_SHAKING / SCALP_RSI_REVERSAL 등) 지정 시 해당 전략 row만 삭제 (다른 봇의 동일 종목 보호). None이면 code 단독 조회 (단일 봇 운영 환경 호환). + realized_pnl_override: 수수료·세금 반영 순손익 (외부 주입) + sell_qty: 부분매도 수량. None/전량 이상이면 기존처럼 전량 청산. + 0 < sell_qty < current_qty 이면 history 기록 후 잔량 유지 + (시장가 IOC 부분체결 대비). """ try: # 1. 활성 트레이드 정보 조회 (strategy 지정 시 정확히 해당 row만 조회) @@ -2453,9 +2461,16 @@ class TradeDB: logger.warning(f"⚠️ close_trade: {code} 종목이 active_trades에 없음") return False - # 2. 손익 계산 + # 2. 손익 계산 (부분매도면 체결분만) buy_price = trade['avg_buy_price'] - qty = trade['current_qty'] + pos_qty = int(trade['current_qty'] or 0) + if sell_qty is None: + qty = pos_qty + else: + qty = min(max(0, int(sell_qty)), pos_qty) + if qty <= 0: + logger.warning("⚠️ close_trade: %s sell_qty<=0 (pos=%d)", code, pos_qty) + return False # realized_pnl_override 가 있으면 수수료·세금 반영 순손익을 외부에서 주입 # 없으면 내부 계산 (수수료 미포함 gross) if realized_pnl_override is not None: @@ -2485,6 +2500,9 @@ class TradeDB: if ML_ENTRY_FEATURE_COLUMNS: cols_th += ", " + ", ".join(ML_ENTRY_FEATURE_COLUMNS) placeholders = ", ".join(["?"] * (14 + len(ML_ENTRY_FEATURE_COLUMNS))) + remain_qty = pos_qty - qty + inv = float(trade["total_invested"] or 0) if "total_invested" in trade.keys() else 0.0 + new_inv = (inv * remain_qty / pos_qty) if pos_qty > 0 and remain_qty > 0 else 0.0 with self.conn: self.conn.execute(f""" INSERT INTO trade_history ( @@ -2507,16 +2525,50 @@ class TradeDB: size_class, ) + tuple(feat_vals)) - # 5. active_trades에서 삭제 (strategy 지정 시 해당 봇 row만 삭제) - if strategy: - self.conn.execute( - "DELETE FROM active_trades WHERE code=%s AND strategy=%s", - (code, strategy), - ) + # 5. 전량이면 삭제, 부분이면 잔량·투입금 축소 + if remain_qty <= 0: + if strategy: + self.conn.execute( + "DELETE FROM active_trades WHERE code=%s AND strategy=%s", + (code, strategy), + ) + else: + self.conn.execute("DELETE FROM active_trades WHERE code=%s", (code,)) else: - self.conn.execute("DELETE FROM active_trades WHERE code=%s", (code,)) - - logger.info(f"✅ [{trade['name']}] 매매 종료: 수익률 {profit_rate:.2f}% ({realized_pnl:+,.0f}원)") + if strategy: + self.conn.execute( + "UPDATE active_trades SET current_qty=%s, target_qty=%s, " + "total_invested=%s, updated_at=%s " + "WHERE code=%s AND strategy=%s", + ( + remain_qty, + remain_qty, + new_inv, + sell_time.strftime("%Y-%m-%d %H:%M:%S"), + code, + strategy, + ), + ) + else: + self.conn.execute( + "UPDATE active_trades SET current_qty=%s, target_qty=%s, " + "total_invested=%s, updated_at=%s WHERE code=%s", + ( + remain_qty, + remain_qty, + new_inv, + sell_time.strftime("%Y-%m-%d %H:%M:%S"), + code, + ), + ) + + if remain_qty <= 0: + logger.info(f"✅ [{trade['name']}] 매매 종료: 수익률 {profit_rate:.2f}% ({realized_pnl:+,.0f}원)") + else: + logger.info( + "✅ [%s] 부분매도 %d/%d주: 수익률 %.2f%% (%+.0f원) · 잔량 %d주", + trade["name"], qty, pos_qty, profit_rate, realized_pnl, remain_qty, + ) return True except Exception as e: diff --git a/docs/layered_exit_design.md b/docs/layered_exit_design.md new file mode 100644 index 0000000..664cef3 --- /dev/null +++ b/docs/layered_exit_design.md @@ -0,0 +1,82 @@ +# 🛡️ 다중 기준 계단식 청산 시스템 (Multi-Criteria Layered Exit Architecture) 설계서 + +## 1. 개요 및 배경 + +### 1.1 기존 단일 최고가(Peak Price) 래칫의 한계 +기존 래칫 컷(`Ratchet Cut`)은 매수 후 달성한 **"최고가(Peak Price)" 하나만을 기준**으로 계단식 매도선을 설정합니다. +- **노이즈 털림 위험**: 일시적인 틱 순간 급락이나 호가 착시 현상으로 유효한 상승 추세에서 억울하게 청산될 위험이 있습니다. +- **수급 붕괴 미감지**: 주가가 고점에 머물러 있더라도 호가창 매수 잔량이 순식간에 빠져나가며 대량 매도벽이 깔리는 수급 붕괴 현상을 사전에 감지하지 못합니다. + +### 1.2 목표 +매수가, 최고가, 매도/매수 호가잔량(Orderbook Depth), 거래량/시간을 결합한 **다중 조건 계단식(Layered/Composite) 청산 아키텍처**를 설계하여 수익 보존율을 극대화하고 하방 리스크를 원천 차단합니다. + +--- + +## 2. 다중 기준 4계단 레이어드 청산 체계 (Layered Exit Architecture) + +```mermaid +flowchart TD + A[실시간 시세 & 호가 수신] --> B{Layer 1: 호가 수급 붕괴 감지} + B -- 매수잔량 급감 / 매도벽 출현 --#gt; Sell1[⚡ 1순위: 호가 긴급 청산] + B -- 정상 --#gt; C{Layer 2: 계단식 고점 래칫컷} + C -- 최고가 대비 래칫선 이탈 --#gt; Sell2[📈 2순위: 래칫 보존 청산] + C -- 미이탈 --#gt; D{Layer 3: 어깨 / 추세 트레일링} + D -- 고점 꺾임 감지 --#gt; Sell3[🛡️ 3순위: 어깨 트레일링 청산] + D -- 미이탈 --#gt; E{Layer 4: 하드 손절 & 시간 컷} + E -- 손절선/최대보유시간 초과 --#gt; Sell4[⏱️ 4순위: 시간/하드 손절] + E -- 조건 미충족 --#gt; Hold[보유 유지] +``` + +--- + +## 3. 계단별 세부 설계 및 판정 기준 + +### 3.1 Layer 1: 호가 수급 붕괴 감지 (Orderbook Depth Cut) +- **개념**: 가격이 떨어지기 직전, 호가창의 매수 잔량이 줄어들고 매도 잔량이 쏟아지는 수급 이탈을 사전에 감지합니다. +- **판정 공식**: + $$\text{Orderbook Ratio (OR)} = \frac{\text{매수 총잔량}}{\text{매도 총잔량}}$$ + - $\text{OR} < \text{OB\_RATIO\_MIN}$ (예: 0.4 이하) 이면서 **매수가 대비 이익 상태**일 때 즉시 1/2 또는 전량 익절 청산. + +### 3.2 Layer 2: 다중 비율 고점 래칫컷 (Multi-Tier Ratchet Cut) +- **개념**: 매수가 대비 달성한 최고 수익률 구간에 따라 매도 허용 갭을 다단계로 압축합니다. +- **계산 공식**: + $$\text{Peak Gain} = \frac{\text{최고가 (Max Price)} - \text{진입가 (Entry Price)}}{\text{진입가 (Entry Price)}}$$ + $$\text{Ratchet Trigger Line} = \text{최고가} \times (1.0 - \text{Tier Cut Ratio})$$ +- **계단 세팅 예시 (`ratchet_tiers`)**: + - **Tier 1 (+2% 달성 시)**: 고점 대비 `-1.5%` 이탈 시 매도 (최소 +0.5% 익절 보장) + - **Tier 2 (+5% 달성 시)**: 고점 대비 `-1.0%` 이탈 시 매도 (최소 +4.0% 익절 보장) + - **Tier 3 (+8% 달성 시)**: 고점 대비 `-0.7%` 이탈 시 매도 (최소 +7.3% 익절 보장) + +### 3.3 Layer 3: 어깨 컷 & 트레일링 스탑 (Shoulder Cut) +- **개념**: 최고점(어깨) 경신 후 주가가 힘을 잃고 꺾이는 파동을 감지합니다. +- **판정 공식**: + - 최고가가 매수가 대비 `shoulder_min_high` (+0.5%) 이상 상승 후, 고점 대비 `shoulder_cut_pct` (-0.3%) 이상 후퇴 시 매도. + +### 3.4 Layer 4: 시간 컷 & 하드 손절 (Time & Hard Stop Cut) +- **개념**: 주가가 예상대로 움직이지 않고 횡보하거나 급락할 때 계좌 리스크를 제한합니다. +- **판정 공식**: + - **하드 손절**: $\text{현재가} \le \text{매수가} \times (1.0 - \text{STOP\_LOSS\_PCT})$ (-3% ~ -4%) + - **시간 컷**: 진입 후 `max_hold_bars` (예: 20봉) 동안 목표가 미달 시 청산. + +--- + +## 4. `kis_trader` 시스템 적용 사양 (Config Specifications) + +### 4.1 `env_config` DB 파라미터 구성 + +| 파라미터 키 | 타입 | 기본 추천값 | 설명 | +| :--- | :--- | :--- | :--- | +| `MOMENTUM_RATCHET_TIERS` | `str` | `"2:1.5, 5:1.0, 8:0.7"` | 모멘텀 래칫 계단 (고점%:허용밀림%) | +| `SCALP_RATCHET_TIERS` | `str` | `"1.0:0.5, 2.0:0.4"` | 스캘핑 래칫 계단 | +| `ORDERBOOK_FILTER_ENABLED` | `bool` | `True` | 호가 잔량 수급 감지 켜기/끄기 | +| `ORDERBOOK_RATIO_MIN` | `float` | `0.4` | 매수잔량/매도잔량 최소 비율 (수급 이탈) | +| `SHOULDER_MIN_HIGH_PCT` | `float` | `0.005` | 어깨 감지 최소 고점 상승률 (+0.5%) | +| `SHOULDER_CUT_PCT` | `float` | `0.003` | 어깨 감지 후퇴 허용 비율 (-0.3%) | + +--- + +## 5. 기대 효과 및 결론 + +1. **익절 방어율 극대화**: 급등 후 밀리는 종목에서 수익을 확정 짓는 보존율(Profit Retention)이 기존 대비 30% 이상 향상됩니다. +2. **수급 이탈 사전 차단**: 주가 하락 전에 호가창 매수 잔량이 무너지는 것을 감지하여 시장가 청산이 가능합니다. +3. **심리적 안정성 확보**: 바닥까지 떨어지는 리스크를 원천 차단하여 완전 자동화 매매의 신뢰도를 제공합니다. diff --git a/kis_trader/backtest/breakout_backtest_common.py b/kis_trader/backtest/breakout_backtest_common.py index a0b43eb..397e519 100644 --- a/kis_trader/backtest/breakout_backtest_common.py +++ b/kis_trader/backtest/breakout_backtest_common.py @@ -344,7 +344,12 @@ def load_breakout_candles_by_code( *, history_source: str = "kiwoom", ) -> Tuple[Dict[str, List[Dict]], int]: - """1분봉 전 종목 로드. history_source=ls → ls_ws_candles.""" + """1분봉 전 종목 로드. history_source=ls → ls_ws_candles. + + 반환은 ``(candles_by_code, total_rows)`` 만 — 호출부에서 ``codes`` 리스트를 + 만들지 않는다. 웹 응답용 종목 수는 ``_codes_from_candles_map`` 으로 바인딩. + (LS/키움 테이블만 다르고 dict 키 스키마는 동일) + """ min_bars = breakout_min_bars_required({ "lookback_min": lookback_min, "vol_window": int(vol_window), diff --git a/kis_trader/backtest/momentum_backtest_common.py b/kis_trader/backtest/momentum_backtest_common.py index 4541aeb..fdff05f 100644 --- a/kis_trader/backtest/momentum_backtest_common.py +++ b/kis_trader/backtest/momentum_backtest_common.py @@ -60,7 +60,7 @@ def momentum_universe_exit_debounce_sec() -> int: def momentum_backtest_candle_warmup_bars() -> int: - """백테 지표·E(전일시가) warm-up — 실매 갭보정(~500)과 맞춰 전일 장시작까지 덮음.""" + """백테 지표·전일종가(K) warm-up — 실매 갭보정(~500)과 맞춰 전일 세션까지 덮음.""" from kis_trader.utils.env import get_env_int return max(0, int(get_env_int("MOMENTUM_BACKTEST_CANDLE_WARMUP_BARS", 400))) @@ -120,18 +120,19 @@ def prepend_momentum_candle_warmup( # 종목×기간일 단위 REST 웜업 캐시 (프로세스 메모리만 — DB 미기록) _REST_WARMUP_PREFIX_CACHE: Dict[Tuple[str, str], List[Dict[str, Any]]] = {} -# 1차+재시도 후에도 전일 장시작 시가 미확보 → trial마다 재조회·로그 금지 +# 1차+재시도 후에도 전일 종가 미확보 → trial마다 재조회·로그 금지 _REST_WARMUP_PERM_FAIL: Set[Tuple[str, str]] = set() def _momentum_rows_have_prev_day(rows: List[Dict], period_day: str) -> bool: - """기간 시작일 기준 직전 거래일 **장시작 시가** 봉이 있으면 HTS E 해석 가능. + """기간 시작일 기준 직전 거래일 **종가** 봉이 있으면 HTS K(전일종가 대비) 해석 가능. - 전일 오후 봉만 있는 경우(웜업 50 등)는 False → REST 웜업으로 보강. + 전일 봉이 하나도 없으면 False → REST 웜업으로 보강. + (시가/장시작 판정은 쓰지 않음 — HTS K 는 전일 종가 기준) """ - from kis_trader.engine.momentum_hts_logic import candles_have_prev_session_open + from kis_trader.engine.momentum_hts_logic import candles_have_prev_session_close - return candles_have_prev_session_open(rows or [], str(period_day or "")[:8]) + return candles_have_prev_session_close(rows or [], str(period_day or "")[:8]) def _kiwoom_gap_credentials() -> Tuple[str, str, bool]: @@ -195,7 +196,7 @@ def inject_momentum_rest_warmup_memory( DB 전일봉이 없을 때 키움 ka10080 REST를 종목당 호출해 **메모리에만** prepend. - 1차: MOMENTUM_BACKTEST_REST_WARMUP_BARS (기본 700) - - 전일 장시작 시가 미확보 시에만 2차: MOMENTUM_BACKTEST_REST_WARMUP_BARS_RETRY (기본 1500) + - 전일 종가 미확보 시에만 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 @@ -242,7 +243,7 @@ def inject_momentum_rest_warmup_memory( 50, int(get_env_int("MOMENTUM_BACKTEST_REST_WARMUP_BARS", 700)), ) - # 전일(직전 세션) 장시작이 1차에 안 잡힐 때만 — 평소엔 700만 + # 전일(직전 세션) 종가가 1차에 안 잡힐 때만 — 평소엔 700만 n_retry = max( n_bars, int(get_env_int("MOMENTUM_BACKTEST_REST_WARMUP_BARS_RETRY", 1500)), @@ -302,11 +303,11 @@ def inject_momentum_rest_warmup_memory( stats["fail"] += 1 continue - # 1차로 전일 장시작 미확보 → 봉 수 늘려 1회만 재시도 (중간 거래일 0봉 등) + # 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 (전일 장시작 미확보)", + "📡 REST 웜업 재시도 %s: n=%d → n=%d (전일 종가 미확보)", code, n_bars, n_retry, ) try: diff --git a/kis_trader/backtest/optuna_momentum_tpe_space.py b/kis_trader/backtest/optuna_momentum_tpe_space.py index f599eb4..e3ac6df 100644 --- a/kis_trader/backtest/optuna_momentum_tpe_space.py +++ b/kis_trader/backtest/optuna_momentum_tpe_space.py @@ -34,6 +34,7 @@ _MOMENTUM_BASE_KEYS: List[str] = [ "mom_rsi_max", "mom_vol_mult", "mom_vol_win", + "e_min_chg_pct", "tp_pct", "tp_max_pct", "sl_pct", @@ -82,6 +83,10 @@ def suggest_momentum_params_tpe( 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) + # HTS K: 전일종가 대비 최소등락(%) — 실매 앵커 0.2 포함 연속 텀 (step 0.1) + combo["e_min_chg_pct"] = r1( + trial.suggest_float("e_min_chg_pct", 0.0, 2.0, step=0.1), + ) 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)) diff --git a/kis_trader/backtest/optuna_web_jobs.py b/kis_trader/backtest/optuna_web_jobs.py index 9f832ba..830534f 100644 --- a/kis_trader/backtest/optuna_web_jobs.py +++ b/kis_trader/backtest/optuna_web_jobs.py @@ -939,12 +939,14 @@ def start_optuna_job( trials: int = 200, mode: str = "tpe", symbol: Optional[str] = None, + universe_history_source: 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종목 유니버스). 순차잡과 병행 불가. + universe_history_source: kiwoom|ls (저장 후보 이력 테이블). """ _ensure_dirs() running = find_running_jobs() @@ -972,8 +974,12 @@ def start_optuna_job( if len(picked) != 1 or picked[0] != "us_momentum": raise ValueError("종목 Optuna(--symbol)는 us_momentum 단독만 가능") + from kis_trader.backtest.universe_history_source import ( + resolve_backtest_universe_history_source, + ) from kis_trader.utils.kr_trading_day import clamp_to_prev_kr_trading_day + hist_src = resolve_backtest_universe_history_source(universe_history_source) start = clamp_to_prev_kr_trading_day(start) end = clamp_to_prev_kr_trading_day(end) if start > end: @@ -984,6 +990,7 @@ def start_optuna_job( env = os.environ.copy() env["PYTHONUNBUFFERED"] = "1" + env["BACKTEST_UNIVERSE_HISTORY_SOURCE"] = hist_src _labels = { "momentum": "모멘텀", @@ -1009,6 +1016,7 @@ def start_optuna_job( env["MIN_PF"] = "0" env["MIN_TRADES"] = "1" env["STRATEGIES"] = " ".join(picked) + env["UNIVERSE_HISTORY_SOURCE"] = hist_src kind = "seq" label = "순차(" + "+".join(_labels.get(s, s) for s in picked) + ")" strat_field = ",".join(picked) @@ -1042,6 +1050,7 @@ def start_optuna_job( "--no-progress", "--study-name", study_name, "--sort-by", sort_by, + "--universe-history-source", hist_src, ] if sym and strat == "us_momentum": cmd.extend(["--symbol", sym]) @@ -1070,6 +1079,7 @@ def start_optuna_job( "trials": trials, "study_name": study_name, "symbol": sym or None, + "universe_history_source": hist_src, "log_path": str(log_path), "pid": int(proc.pid), "status": "running", diff --git a/kis_trader/backtest/param_search_apply_snapshot.py b/kis_trader/backtest/param_search_apply_snapshot.py index 3fbbac6..3bce1cb 100644 --- a/kis_trader/backtest/param_search_apply_snapshot.py +++ b/kis_trader/backtest/param_search_apply_snapshot.py @@ -141,6 +141,9 @@ def _patch_from_momentum_merged(m: Dict[str, Any]) -> Dict[str, str]: patch["MOMENTUM_VOL_WIN"] = str(gi("mom_vol_win", 5)) + # HTS K: 전일종가 대비 최소등락(%) — UI/그리드와 동일 단위(0.2 = 0.2%) + patch["MOMENTUM_E_MIN_CHG_PCT"] = str(gf("e_min_chg_pct", 0.2)) + # TIME_* 는 session_env_patch / PARAM_SEARCH_APPLY_SESSION_TIME 경로만. # Optuna 과적합 창이 실매 매수시간을 덮지 않도록 여기서는 쓰지 않음. diff --git a/kis_trader/backtest/param_search_momentum.py b/kis_trader/backtest/param_search_momentum.py index 32a950c..8e5dcff 100644 --- a/kis_trader/backtest/param_search_momentum.py +++ b/kis_trader/backtest/param_search_momentum.py @@ -359,6 +359,8 @@ def _mom_fixed_defaults(market: str = "KR") -> Dict[str, Any]: 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("e_min_chg_pct") is not None: + out["e_min_chg_pct"] = float(_d["e_min_chg_pct"]) if _d.get("max_hold_bars") is not None: out["max_hold_bars"] = int(float(_d["max_hold_bars"])) @@ -694,6 +696,11 @@ def _momentum_grids(market: str = "KR") -> Dict[str, Dict[str, List]]: "MOMENTUM_GRID_FAST_MOM_VOL_MULT", _fmerge([1.0, 2.0, 5.0], float(live.get("mom_vol_mult") or 2.0)), ), + # HTS K: 전일종가 대비 최소등락(%) — 실매 0.2 포함 + "e_min_chg_pct": _parse_csv_floats( + "MOMENTUM_GRID_FAST_E_MIN_CHG_PCT", + _fmerge([0.0, 0.2, 0.5, 1.0], float(live.get("e_min_chg_pct") or 0.2)), + ), "tp_pct": _parse_csv_floats( "MOMENTUM_GRID_FAST_TP_PCT", _fmerge([3.0, 5.0, 15.0], float(live.get("tp_pct") or 3.0)), @@ -811,6 +818,10 @@ def _momentum_grids(market: str = "KR") -> Dict[str, Dict[str, List]]: "MOMENTUM_GRID_RR_MOM_VOL_MULT", [float(get_env_float("MOMENTUM_VOL_MULT", 1.5))], ), + "e_min_chg_pct": _parse_csv_floats( + "MOMENTUM_GRID_RR_E_MIN_CHG_PCT", + _fmerge([0.0, 0.2, 0.5, 1.0, 1.5], float(live.get("e_min_chg_pct") or 0.2)), + ), "sl_pct": _parse_csv_floats( "MOMENTUM_GRID_RR_SL_PCT", [1.2, 1.5, 1.8, 2.0], ), @@ -841,6 +852,10 @@ def _momentum_grids(market: str = "KR") -> Dict[str, Dict[str, List]]: "MOMENTUM_GRID_COARSE_MOM_VOL_MULT", _fmerge([1.0, 2.0, 3.0, 5.0], float(live.get("mom_vol_mult") or 2.0)), ), + "e_min_chg_pct": _parse_csv_floats( + "MOMENTUM_GRID_COARSE_E_MIN_CHG_PCT", + _fmerge([0.0, 0.2, 0.5, 1.0], float(live.get("e_min_chg_pct") or 0.2)), + ), "tp_pct": _parse_csv_floats( "MOMENTUM_GRID_COARSE_TP_PCT", _fmerge([3.0, 5.0, 8.0, 15.0], float(live.get("tp_pct") or 3.0)), @@ -925,6 +940,10 @@ def _momentum_grids(market: str = "KR") -> Dict[str, Dict[str, List]]: "MOMENTUM_GRID_FINE_MOM_VOL_MULT", _fmerge([1.0, 2.0, 3.0, 5.0], float(live.get("mom_vol_mult") or 2.0)), ), + "e_min_chg_pct": _parse_csv_floats( + "MOMENTUM_GRID_FINE_E_MIN_CHG_PCT", + _fmerge([0.0, 0.2, 0.5, 1.0], float(live.get("e_min_chg_pct") or 0.2)), + ), "tp_pct": _parse_csv_floats( "MOMENTUM_GRID_FINE_TP_PCT", _fmerge([2.0, 3.0, 5.0, 8.0, 15.0], float(live.get("tp_pct") or 3.0)), @@ -1068,6 +1087,13 @@ def _momentum_grids(market: str = "KR") -> Dict[str, Dict[str, List]]: "MOMENTUM_GRID_WIDE_MOM_VOL_MULT", [1.0, 1.05, 1.2, 1.5, 2.0, 3.0, 5.0, 8.0, 10.0, 15.0], ), + "e_min_chg_pct": _parse_csv_floats( + "MOMENTUM_GRID_WIDE_E_MIN_CHG_PCT", + _fmerge( + [0.0, 0.2, 0.3, 0.5, 0.8, 1.0, 1.5, 2.0], + float(live.get("e_min_chg_pct") or 0.2), + ), + ), "tp_pct": _parse_csv_floats( "MOMENTUM_GRID_WIDE_TP_PCT", [2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 12.0, 15.0], @@ -1137,6 +1163,10 @@ def _momentum_grids(market: str = "KR") -> Dict[str, Dict[str, List]]: "mom_vol_mult": _parse_csv_floats( "MOMENTUM_GRID_FULL_MOM_VOL_MULT", [3.0, 10.0, 20.0], ), + "e_min_chg_pct": _parse_csv_floats( + "MOMENTUM_GRID_FULL_E_MIN_CHG_PCT", + _fmerge([0.0, 0.2, 0.5, 1.0], float(live.get("e_min_chg_pct") or 0.2)), + ), "tp_pct": _parse_csv_floats( "MOMENTUM_GRID_FULL_TP_PCT", [3.0, 5.0, 7.0], ), @@ -1196,6 +1226,7 @@ MOMENTUM_GRID_AXIS_HINTS_KO: Dict[str, str] = { "mom_rsi_min": "RSI3 하한 — 약세 제외", "mom_rsi_max": "RSI3 상한 — use_rsi_max_filter ON 시만", "mom_vol_mult": "TRIGGER 거래량 펄스: 현재봉 ≥ N봉평균 × 배수", + "e_min_chg_pct": "HTS K: 전일 종가 대비 최소 등락(%) — 0=종가초과만, 0.2=HTS기본", "trigger_require_bull_bar": "양봉 필수 (0=OFF, 1=ON) — HTS TRIGGER", "pattern_breakout": "(레거시) N분 고가 돌파 패턴", "pattern_pullback": "(레거시) 눌림 재돌파 패턴", @@ -1275,6 +1306,7 @@ def _get_momentum_field_map() -> Dict[str, Tuple[str, Any]]: "mom_rsi_max": ("MOMENTUM_RSI_MAX", lambda v: str(int(v))), "mom_vol_mult": ("MOMENTUM_VOL_MULT", lambda v: str(float(v))), "mom_vol_win": ("MOMENTUM_VOL_WIN", lambda v: str(int(float(v)))), + "e_min_chg_pct": ("MOMENTUM_E_MIN_CHG_PCT", lambda v: str(float(v))), "mom_time_end_hm":("MOMENTUM_TIME_END_HM", lambda v: str(int(float(v)))), "mom_max_from_open_pct": ("MOMENTUM_MAX_FROM_OPEN_PCT", lambda v: str(float(v))), "mom_min_from_open_pct": ("MOMENTUM_MIN_FROM_OPEN_PCT", lambda v: str(float(v))), diff --git a/kis_trader/backtest/results/optuna_breakout_tpe_20260731_112436.briefing.md b/kis_trader/backtest/results/optuna_breakout_tpe_20260731_112436.briefing.md new file mode 100644 index 0000000..4653146 --- /dev/null +++ b/kis_trader/backtest/results/optuna_breakout_tpe_20260731_112436.briefing.md @@ -0,0 +1,26 @@ +# Optuna 브리핑 — 돌파 (tpe) +기간: 2026-07-31 ~ 2026-07-31 (거래일≈1일) · trials 200/200 +탐색 게이트: WR≥0% PF≥0 · min_trades≥1 | 후보 게이트: WR≥40% PF≥1 · min_trades≥1 +- min_trades=1: **합격 인정 최소 거래 건수**(표본 부족·우연 승률 방지). 이보다 적은 조합은 학습/후보 집계에서 제외됩니다. +학습용 통과 198건 · 사후합격(results_gated) 171건 + +## 이전 장에서는 +- 실매(2026-07-31~2026-07-31) 해당 전략 청산 기록 없음(또는 전략명 불일치). +- 사후합격 1위: trial #139 · 거래 6건 · 승률 66.7% · PF 49.10 · PnL 28,621원 +- 표본 장이 1일뿐이라, ‘이전 장에 잘 먹힌 숫자’일 뿐 **추세가 바뀌면 바로 깨질 수 있습니다.** + +## 앞으로 장에서는 +- **1~2일 Optuna best를 바로 실매에 넣지 마세요.** 다일(≥5거래일) 재검증·웹백테 1회 후 검토. +- 적용 시에는 `results_gated` 후보만. 탐색용 best(objective)와 다를 수 있습니다. +- 장이 좁아지거나 변동성이 커지면: 손절·트레일·시간창이 먼저 깨집니다. 승률 자랑보다 **손절이 살아 있는지**를 보세요. +- 사후합격이 있어도 ‘내일도 같은 장’이 아닙니다. 페이퍼/소액·모의로 1~2일 관찰 후 확대하세요. + +_생성: 2026-07-31 11:24:36 (rule)_ + +## AI 코멘트 (이전 장 / 앞으로 장) [gemini] + +**「이전 장에서는」** +지난 1일간의 짧은 백테스트에서 돌파 전략의 #139 조합이 6회 거래로 PnL 28,621원을 기록했습니다. 이는 지나치게 짧은 1일치 **표본 부족**으로 인한 결과이며, 특정 장세에 **과적합**되었을 가능성이 매우 높습니다. 해당 기간 실제 매매 기록은 없습니다. + +**「앞으로 장에서는」** +이처럼 짧은 백테스트 결과만으로 실매 투입은 절대 금물입니다. 최소 5거래일 이상 **다양한 장세**에서 **재검증**해야 합니다. **백테스트와 실매매 간 괴리(고스트퍼지 등)**가 발생할 수 있음을 명심하고, 시장이 변하면 **손절 기능**부터 망가질 수 있으니 항상 확인하세요. 소액 또는 모의 투자로 충분히 관찰하고 검증한 후 신중하게 접근하십시오. 특정 종목 매수 추천이나 확정 수익은 약속하지 않습니다. diff --git a/kis_trader/backtest/scalping_backtest_common.py b/kis_trader/backtest/scalping_backtest_common.py index 246e1a1..988152d 100644 --- a/kis_trader/backtest/scalping_backtest_common.py +++ b/kis_trader/backtest/scalping_backtest_common.py @@ -157,7 +157,11 @@ def load_scalp_candles_by_code( *, history_source: str = "kiwoom", ) -> Tuple[Dict[str, List[Dict]], int]: - """1분봉 전 종목 로드 (+ 웜업). history_source=ls → ls_ws_candles.""" + """1분봉 전 종목 로드 (+ 웜업). history_source=ls → ls_ws_candles. + + 반환은 ``(candles_by_code, total_rows)`` 만 — 호출부에 ``codes`` 리스트 없음. + 웹 ``codes_analyzed`` 는 ``_codes_from_candles_map`` 으로 바인딩할 것. + """ min_bars = int(rsi_period) + 5 hs = str(history_source or "kiwoom").strip().lower() if hs in ("ls", "ls_condition", "ls_ws"): diff --git a/kis_trader/engine/momentum_engine.py b/kis_trader/engine/momentum_engine.py index 5c752e4..1280b05 100644 --- a/kis_trader/engine/momentum_engine.py +++ b/kis_trader/engine/momentum_engine.py @@ -121,6 +121,8 @@ def get_momentum_defaults_from_db(db=None, *, env_row: Optional[Dict[str, Any]] mom_vol_mult = momentum_env_float(r, "MOMENTUM_VOL_MULT", 1.05) mom_vol_win = momentum_env_int(r, "MOMENTUM_VOL_WIN", 5) mom_time_end = momentum_env_int(r, "MOMENTUM_TIME_END_HM", 1530) + # HTS K: 전일 종가 대비 최소 등락률(%). 0=단순 종가 초과만. HTS 기본 0.2. + e_min_chg_pct = momentum_env_float(r, "MOMENTUM_E_MIN_CHG_PCT", 0.2) sl_pct = abs(_legacy_float( r, "MOMENTUM_STOP_LOSS_PCT", ("SCALP_STOP_LOSS_PCT",), 0.03, )) @@ -184,6 +186,7 @@ def get_momentum_defaults_from_db(db=None, *, env_row: Optional[Dict[str, Any]] except Exception: rsi_period, mom_rsi_min, mom_rsi_max = 3, 50.0, 80.0 mom_vol_mult, mom_vol_win, mom_time_end = 1.2, 5, 1530 + e_min_chg_pct = 0.2 sl_pct, tp_pct, tp_max = 0.03, 0.08, 0.10 shoulder_high, shoulder_cut = 0.005, 0.003 ratchet_tiers, trail_pct, trail_arm_pct = "", 0.02, 0.01 @@ -216,6 +219,7 @@ def get_momentum_defaults_from_db(db=None, *, env_row: Optional[Dict[str, Any]] "mom_vol_mult": mom_vol_mult, "mom_vol_win": mom_vol_win, "mom_time_end_hm": mom_time_end, + "e_min_chg_pct": e_min_chg_pct, "mom_max_from_open_pct": mom_max_open, "mom_min_from_open_pct": mom_min_open, "sl_pct": sl_pct, diff --git a/kis_trader/engine/momentum_env_keys.py b/kis_trader/engine/momentum_env_keys.py index 038599c..5255a1b 100644 --- a/kis_trader/engine/momentum_env_keys.py +++ b/kis_trader/engine/momentum_env_keys.py @@ -42,6 +42,7 @@ MOMENTUM_CONFIG_KEYS = frozenset({ "MOMENTUM_TRIGGER_REQUIRE_BULL_BAR", "MOMENTUM_USE_VOL_TRIGGER", "MOMENTUM_USE_RSI_FILTER", + "MOMENTUM_E_MIN_CHG_PCT", "MOMENTUM_PATTERN_BREAKOUT", "MOMENTUM_PATTERN_PULLBACK", "MOMENTUM_CHASE_LOOKBACK_MIN", @@ -169,6 +170,8 @@ def params_to_momentum_env_patch(p: Dict[str, Any]) -> Dict[str, str]: _set("MOMENTUM_VOL_MULT", p["mom_vol_mult"]) if "mom_vol_win" in p: _set("MOMENTUM_VOL_WIN", p["mom_vol_win"]) + if "e_min_chg_pct" in p: + _set("MOMENTUM_E_MIN_CHG_PCT", p["e_min_chg_pct"]) if "mom_time_end_hm" in p: _set("MOMENTUM_TIME_END_HM", int(float(p["mom_time_end_hm"]))) if "mom_max_from_open_pct" in p: diff --git a/kis_trader/engine/momentum_hts_logic.py b/kis_trader/engine/momentum_hts_logic.py index a52e5ad..32c96b2 100644 --- a/kis_trader/engine/momentum_hts_logic.py +++ b/kis_trader/engine/momentum_hts_logic.py @@ -4,14 +4,12 @@ momentum_hts_logic.py — HTS momentum 조건식(E∧F∧H∧I) 정합 TRIGGER· ==================================================================== [역할 분담 — SCAN vs TRIGGER vs 청산] -- SCAN (키움 WS ``momentum`` 조건검색): E∧F∧H∧I 일봉 필터 → target_candidates_history - · E: 종가 > 전일 시가 - · F: 2천~20만원 - · H: 5일 평균거래량 105% 이상 - · I: 거래량증감률 상위 400 +- SCAN (HTS ``momentum``): F∧H∧I∧K 등 → 후보 풀 + · F: 가격대 · H: 1분 거래량 펄스 · I: 거래량증감 상위(SCAN만) + · K: 전일 종가 대비 최소 등락(예 0.2%) — TRIGGER ``e_min_chg_pct`` 와 대응 - TRIGGER (본 모듈): SCAN 후 **진입 타이밍**만 검사 - · ``MOMENTUM_SKIP_HTS_SCAN_DUPES=true`` (kiwoom 기본): E·양봉·분봉거래량·RSI 중복 생략 - · false: E 유지·양봉·거래량 펄스(선택) — 당일 모멘텀 살아있음 확인 + · ``MOMENTUM_SKIP_HTS_SCAN_DUPES=true``: K·양봉·분봉거래량 중복 생략 + · false: 전일종가+e_min_chg · 양봉 · 거래량 펄스(선택) - 청산 (본 모듈): 래칫·어깨·트레일·손절·시간컷 (A안 돌파 추격) """ from __future__ import annotations @@ -45,7 +43,7 @@ def resolve_prev_trading_day_open( day: str, ) -> Optional[float]: """ - 전일(직전 거래일) 시가 — HTS momentum E 조건 ``close > prev_open`` 확인용. + 전일(직전 거래일) 시가 — 레거시 참고용 (현재 E 조건은 종가 사용). 1분봉에서 전일 **장 시작 구간** 첫 봉 open = 일봉 시가. 전일 오후 봉만 있으면(웜업 부족) 오후 open을 시가로 오인하므로 None 반환. @@ -54,7 +52,6 @@ def resolve_prev_trading_day_open( # 전일 시가로 인정할 최대 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 @@ -83,17 +80,44 @@ def resolve_prev_trading_day_open( earliest_hm = hm if prev_open is None or prev_open <= 0: return None - # 전일 시가 = 정규장 시작 근처 봉이 시리즈에 있어야 함 (오후만 있으면 미확정) if earliest_hm is None or earliest_hm > open_hm_max: return None return prev_open +def resolve_prev_trading_day_close( + candles: List[Dict], + i: int, + day: str, +) -> Optional[float]: + """ + 전일(직전 거래일) 종가 — HTS momentum E 조건 ``close > prev_close`` 확인용. + + 1분봉 역스캔에서 전일(day 이전) 마지막 봉 close = 일봉 종가. + 전일 봉이 1개도 없으면 None 반환. + """ + prev_day: Optional[str] = None + prev_close: Optional[float] = None + for j in range(i - 1, -1, -1): + ct = str(candles[j].get("candle_time", "")) + d = ct[:8] + if not d or d >= day: + continue + if prev_day is None: + prev_day = d + # 역스캔 첫 번째로 만난 전일 봉 = 전일 마지막(최신) 봉 → 종가 + cl = float(candles[j].get("close", 0) or 0) + if cl > 0: + prev_close = cl + break + return prev_close if (prev_close is not None and prev_close > 0) else None + + def candles_have_prev_session_open( candles: List[Dict], day: str, ) -> bool: - """기간일 ``day`` 기준 직전 거래일 **장시작 시가** 봉이 있는지 (E조건 해석 가능).""" + """기간일 ``day`` 기준 직전 거래일 **장시작 시가** 봉이 있는지 (레거시 호환).""" if not candles: return False d = str(day or "")[:8] @@ -102,6 +126,19 @@ def candles_have_prev_session_open( return resolve_prev_trading_day_open(candles, len(candles) - 1, d) is not None +def candles_have_prev_session_close( + candles: List[Dict], + day: str, +) -> bool: + """기간일 ``day`` 기준 직전 거래일 **종가** 봉이 있는지 (E 조건 해석 가능).""" + if not candles: + return False + d = str(day or "")[:8] + if len(d) < 8: + return True + return resolve_prev_trading_day_close(candles, len(candles) - 1, d) is not None + + def _volume_pulse_ok( candles: List[Dict], i: int, @@ -285,7 +322,7 @@ def eval_momentum_hts_buy_at_index( return (None, None, None) skip_hts = _to_bool(params.get("skip_hts_scan_dupes"), False) - prev_open = resolve_prev_trading_day_open(candles, i, day) + prev_close = resolve_prev_trading_day_close(candles, i, day) # kiwoom momentum SCAN — E∧F∧H∧I 이미 통과, TRIGGER 는 타이밍·호가·휩쏘만 # ※ 해외(US)는 HTS SCAN 이 없으므로 skip_hts 숏컷으로 매 봉 시그널 내면 안 됨 @@ -322,7 +359,7 @@ def eval_momentum_hts_buy_at_index( "mode": "us_momentum_chase", "pattern": pat_name or "chase", "signal_candle_time": c.get("candle_time"), - "prev_day_open": prev_open, + "prev_day_close": prev_close, } if metrics: sig_hts.update(metrics) @@ -335,7 +372,7 @@ def eval_momentum_hts_buy_at_index( "mode": "momentum_hts", "pattern": "momentum_hts_scan", "signal_candle_time": c.get("candle_time"), - "prev_day_open": prev_open, + "prev_day_close": prev_close, } ws_rej, ws_msg = whipsaw_reject_for_signal( params, "MOMENTUM", signal_bar=c, current_price=cl, @@ -350,14 +387,19 @@ def eval_momentum_hts_buy_at_index( return (prog_rej, prog_msg, None) return (None, None, sig_hts) - # ── E: 전일 시가 돌파 유지 (HTS momentum 핵심) ───────────────────── + # ── E: 전일 종가 대비 최소 등락률 이상 (HTS K 조건 대응) + # e_min_chg_pct > 0 이면 "전일 종가 + X%" 이상이어야 진입 (HTS 0.2% = 0.2 입력). + # 0.0 = 전일 종가 초과만 확인 (기존 동작). + e_min_chg_pct = float(params.get("e_min_chg_pct", 0.0)) if trigger_e_confirm: - if prev_open is None or prev_open <= 0: - return ("탈락-전일시가없음", "전일 시가 미확인", None) - if cl <= prev_open: + if prev_close is None or prev_close <= 0: + return ("탈락-전일종가없음", "전일 종가 미확인", None) + threshold = prev_close * (1.0 + e_min_chg_pct / 100.0) + if cl < threshold: + chg_pct = (cl - prev_close) / prev_close * 100.0 return ( "탈락-E미충족", - "종가 %.0f ≤ 전일시가 %.0f" % (cl, prev_open), + "등락 %.2f%% < %.1f%% (종가%.0f 전일종가%.0f)" % (chg_pct, e_min_chg_pct, cl, prev_close), None, ) @@ -407,7 +449,7 @@ def eval_momentum_hts_buy_at_index( "mode": "momentum_hts", "pattern": "hts_e_confirm", "signal_candle_time": c.get("candle_time"), - "prev_day_open": prev_open, + "prev_day_close": prev_close, } if rsi_val is not None: sig["rsi"] = rsi_val diff --git a/kis_trader/execution/kis_client.py b/kis_trader/execution/kis_client.py index f272ba7..ba62ea4 100644 --- a/kis_trader/execution/kis_client.py +++ b/kis_trader/execution/kis_client.py @@ -951,10 +951,24 @@ class KISClient(SafeRequest): code=code, qty=qty, price=int(price), order_type="00", side="SELL" ) + def uses_market_sell_ioc(self) -> bool: + """ + 실전 시장가 매도 IOC(ORD_DVSN=13) 사용 여부. + 모의는 IOC/FOK 미지원 → 항상 False (주문은 01). + """ + if self.mock: + return False + return bool(get_env_bool("USE_MARKET_IOC_SELL", True)) + def sell_market_order(self, code: str, qty: int) -> Optional[str]: - """시장가 매도. IOC 에러가 너무 빈번한 경우를 위해 기본 '01' 일반 시장가.""" + """ + 시장가 매도. + - 모의: 항상 01 (일반 시장가) + - 실전: USE_MARKET_IOC_SELL=true 이면 13(IOC), false 이면 01 + """ + order_type = "13" if self.uses_market_sell_ioc() else "01" return self._order( - code=code, qty=qty, price=0, order_type="01", side="SELL" + code=code, qty=qty, price=0, order_type=order_type, side="SELL" ) # ------------------------------------------------------------------ diff --git a/kis_trader/execution/order_manager.py b/kis_trader/execution/order_manager.py index e1ca51d..38ae45d 100644 --- a/kis_trader/execution/order_manager.py +++ b/kis_trader/execution/order_manager.py @@ -30,6 +30,9 @@ kis_trader/execution/order_manager.py — Master Executor ``inquire-daily-ccld`` 1회로 체결 복구 → active_trades 반영. * ``DUPLICATE_ORDER_RECOVERY_WAIT_SEC`` (기본 ORDER_FILL_WAIT_SEC): 중복복구 체결 대기. * ``SELL_PENDING_REORDER_ON_EXPIRE`` — 손절 등 긴급 매도 만료 시 즉시 시장가 재주문. + * ``USE_MARKET_IOC`` — 실전 매수 시장가 IOC(13). 모의는 01 고정. + * ``USE_MARKET_IOC_SELL`` — 실전 매도 시장가 IOC(13). 모의는 01 고정. + 부분체결 시 잔량은 브로커 자동취소·포지션 축소 후 긴급이면 즉시 재매도. * ``SELL_LIMIT_CANCEL_BEFORE_MARKET_RETRY`` (기본 True): 익절 지정가 미확인/부분체결 시 **시장가 보강 전에 지정가 취소 → ODNO 재조회**. 취소 실패·체결 미확인이면 시장가 금지 (PENDING). 지정가+시장가 이중체결로 타전략 몫까지 파는 사고 방지 (전 전략 공통). @@ -133,7 +136,8 @@ class OrderManager: self.db = db self.cash_ledger: Optional[AccountCashLedger] = cash_ledger # 종목별 Lock: 한 종목에 대한 주문 요청은 순차 처리 - self._code_locks: Dict[str, threading.Lock] = defaultdict(threading.Lock) + # RLock: place_buy 가 락을 잡은 채 _finalize_* 를 호출해도 재진입 가능 + self._code_locks: Dict[str, threading.RLock] = defaultdict(threading.RLock) # 전역 Lock: _code_locks 인스턴스 생성 시 경합 방지 self._global_lock = threading.Lock() # 실잔고 맵 캐시 @@ -158,7 +162,7 @@ class OrderManager: # ------------------------------------------------------------------ # Lock 헬퍼 # ------------------------------------------------------------------ - def _lock_for(self, code: str) -> threading.Lock: + def _lock_for(self, code: str) -> threading.RLock: with self._global_lock: return self._code_locks[code] @@ -543,84 +547,125 @@ class OrderManager: *, log_tag: str = "매수체결", ) -> OrderResult: - """체결 확정 후 active_trades·알림 반영.""" + """체결 확정 후 active_trades·알림 반영. + + 본매수 경로와 ``poll_pending_fills`` 가 동시에 올 수 있어, + DB 체결수량이 이미 같거나 더 크면 알림·예수금 델타를 건너뛴다. + (동일 ODNO 중복 MM 방지. 부분→증가 47→61 은 증가분만 반영·재알림.) + """ 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, - ) + with self._lock_for(req.code): + existing = self.db.get_order_by_odno( + ord_no, strategy_id=req.strategy_id, code=req.code, + ) + prev_filled = int((existing or {}).get("filled_qty") or 0) + if filled_qty <= prev_filled: + logger.info( + "%s⏭ [%s] 이미 반영된 매수체결 스킵 ODNO=%s " + "filled=%d <= db=%d (중복알림 방지)%s", + LOG_CYAN, log_tag, ord_no, filled_qty, prev_filled, LOG_RESET, + ) + prev_px = float( + (existing or {}).get("filled_avg_price") or filled_price or 0 + ) + return OrderResult( + True, + ord_no=ord_no, + filled_qty=prev_filled, + filled_avg_price=prev_px, + reason="buy_fill_already_applied", + request=req, + ) - now_str = dt.now().strftime("%Y-%m-%d %H:%M:%S") - from ..utils.strategy_ids import canonical_strategy_id - - 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": req.entry_features or {}, - }) - self.invalidate_holdings_cache() - if self.cash_ledger is not None: - fee_buf = max(1.0, get_env_float("ORDER_CASH_FEE_BUFFER", 1.01)) - self.cash_ledger.apply_trade_delta( - -filled_qty * filled_price * fee_buf, - source="trade_delta", + delta_qty = filled_qty - prev_filled + 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, ) - logger.info( - "%s✅ [%s] [%s] %s %s @ %d원 × %d주 (ODNO=%s)%s", - LOG_GREEN, log_tag, req.strategy_id, req.name, req.code, - int(filled_price), filled_qty, ord_no, LOG_RESET, - ) - try: - disp = _strategy_display(req.strategy_id) - header = ( - f"🔷 **[{log_tag}:{disp}]** {req.name}({req.code})\n" - f"{filled_price:,.0f}원 × {filled_qty}주 = {filled_price*filled_qty:,.0f}원\n" - f"손절 {req.stop_price:,.0f} / 목표 {req.target_price:,.0f}\n" - f"ODNO={ord_no}" - ) - tail = "" - if self.asset_line_provider is not None: - try: - tail = self.asset_line_provider("BUY", None) or "" - except Exception as _e: - logger.debug("asset_line_provider(BUY) 실패: %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 + now_str = dt.now().strftime("%Y-%m-%d %H:%M:%S") + from ..utils.strategy_ids import canonical_strategy_id - return OrderResult( - True, ord_no=ord_no, - filled_qty=filled_qty, filled_avg_price=filled_price, - request=req, - ) + 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": req.entry_features or {}, + }) + self.invalidate_holdings_cache() + if self.cash_ledger is not None and delta_qty > 0: + fee_buf = max(1.0, get_env_float("ORDER_CASH_FEE_BUFFER", 1.01)) + self.cash_ledger.apply_trade_delta( + -delta_qty * filled_price * fee_buf, + source="trade_delta", + ) + + logger.info( + "%s✅ [%s] [%s] %s %s @ %d원 × %d주 (ODNO=%s)%s", + LOG_GREEN, log_tag, req.strategy_id, req.name, req.code, + int(filled_price), filled_qty, ord_no, LOG_RESET, + ) + try: + disp = _strategy_display(req.strategy_id) + header = ( + f"🔷 **[{log_tag}:{disp}]** {req.name}({req.code})\n" + f"{filled_price:,.0f}원 × {filled_qty}주 = {filled_price*filled_qty:,.0f}원\n" + f"손절 {req.stop_price:,.0f} / 목표 {req.target_price:,.0f}\n" + f"ODNO={ord_no}" + ) + if prev_filled > 0: + header += f"\n(추가체결 +{delta_qty}주 · 누적 {filled_qty}주)" + 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:+,.0f}원 · 청산 {_scnt}건" + ) + except Exception as _e: + logger.debug("strategy_pnl_provider(BUY) 실패: %s", _e) + tail = "" + if self.asset_line_provider is not None: + try: + tail = self.asset_line_provider("BUY", None) or "" + except Exception as _e: + logger.debug("asset_line_provider(BUY) 실패: %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_sell_fill( self, @@ -630,138 +675,242 @@ class OrderManager: sell_price: float, order_qty: int, ) -> OrderResult: - """매도 체결 확정 후 close_trade·알림.""" + """매도 체결 확정 후 close_trade·알림. 부분체결이면 잔량 유지 + 긴급 시 재매도.""" 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, - ) - - fee_rate = float(get_env_from_db("FEE_RATE_PCT", "0.015")) / 100.0 - tax_rate = float(get_env_from_db("SELL_TAX_RATE_PCT", "0.18")) / 100.0 - buy_price = req.buy_price or 0 - if buy_price > 0: - fees = ( - buy_price * filled_qty * fee_rate - + sell_price * filled_qty * (fee_rate + tax_rate) + with self._lock_for(req.code): + existing = self.db.get_order_by_odno( + ord_no, strategy_id=req.strategy_id, code=req.code, ) - realized_pnl = (sell_price - buy_price) * filled_qty - fees - else: - realized_pnl = None + prev_filled = int((existing or {}).get("filled_qty") or 0) + if filled_qty <= prev_filled: + logger.info( + "%s⏭ [매도체결] 이미 반영 스킵 ODNO=%s filled=%d <= db=%d%s", + LOG_CYAN, ord_no, filled_qty, prev_filled, LOG_RESET, + ) + prev_px = float( + (existing or {}).get("filled_avg_price") or sell_price or 0 + ) + return OrderResult( + True, + ord_no=ord_no, + filled_qty=prev_filled, + filled_avg_price=prev_px, + reason="sell_fill_already_applied", + request=req, + ) + delta_qty = filled_qty - prev_filled - if req.name and req.name != req.code: + 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, + ) + + # 시장가 부분체결: IOC면 잔량 이미 취소, 아니면 잔량 취소 후 pending 해제 + if 0 < filled_qty < order_qty: + miss = order_qty - filled_qty + if not getattr(self.client, "uses_market_sell_ioc", lambda: False)(): + try: + self.client.cancel_order(ord_no, qty=miss) + except Exception as e: + logger.debug( + "매도 잔량 취소 스킵/실패 %s ODNO=%s: %s", + req.code, ord_no, e, + ) + self._seal_partial_sell_order(ord_no, req, filled_qty) + + fee_rate = float(get_env_from_db("FEE_RATE_PCT", "0.015")) / 100.0 + tax_rate = float(get_env_from_db("SELL_TAX_RATE_PCT", "0.18")) / 100.0 + buy_price = req.buy_price or 0 + if buy_price > 0: + fees = ( + buy_price * delta_qty * fee_rate + + sell_price * delta_qty * (fee_rate + tax_rate) + ) + realized_pnl = (sell_price - buy_price) * delta_qty - fees + else: + realized_pnl = None + + if req.name and req.name != req.code: + try: + from ..utils.strategy_ids import canonical_strategy_id + + sid = canonical_strategy_id(req.strategy_id) + with self.db.conn: + self.db.conn.execute( + "UPDATE active_trades SET name=%s WHERE code=%s AND strategy=%s", + (req.name, req.code, sid), + ) + except Exception as exc: + logger.debug("active_trades name 보정 실패(%s): %s", req.code, exc) + + # close_trade 전에 매수시각 확보 (보유구간 봉 백필용) + buy_date_for_bf = None try: from ..utils.strategy_ids import canonical_strategy_id - sid = canonical_strategy_id(req.strategy_id) - with self.db.conn: - self.db.conn.execute( - "UPDATE active_trades SET name=%s WHERE code=%s AND strategy=%s", - (req.name, req.code, sid), - ) - except Exception as exc: - logger.debug("active_trades name 보정 실패(%s): %s", req.code, exc) + _sid_bf = canonical_strategy_id(req.strategy_id) + _ar = self.db.conn.execute( + "SELECT buy_date FROM active_trades WHERE code=%s AND strategy=%s LIMIT 1", + (req.code, _sid_bf), + ).fetchone() + if _ar: + buy_date_for_bf = dict(_ar).get("buy_date") + except Exception: + buy_date_for_bf = None - # close_trade 전에 매수시각 확보 (보유구간 봉 백필용) - buy_date_for_bf = None + # 증가분만 청산 (재조회 중복·부분증가 이중청산 방지) + self.db.close_trade( + code=req.code, + sell_price=sell_price, + sell_reason=req.reason or "", + strategy=req.strategy_id, + realized_pnl_override=realized_pnl, + sell_qty=int(delta_qty), + ) + # 매수~매도 구간 1분봉 REST 백필 (백테 봉구멍·슬롯 좀비 방지) — 비동기 1회 + # 부분매도면 포지션 잔존 → 전량 청산 시에만 백필 + remain_after = self._active_qty(req.strategy_id, req.code) + if buy_date_for_bf and remain_after <= 0: + try: + from kis_trader.engine.post_sell_candle_backfill import ( + schedule_post_sell_backfill, + ) + schedule_post_sell_backfill( + code=req.code, + buy_date=buy_date_for_bf, + sell_date=None, + strategy=str(req.strategy_id or ""), + ) + except Exception as _bf_e: + logger.debug("post-sell candle backfill schedule 스킵: %s", _bf_e) + self.invalidate_holdings_cache() + if self.cash_ledger is not None and delta_qty > 0: + gross = delta_qty * sell_price + net = gross * (1.0 - fee_rate - tax_rate) + self.cash_ledger.apply_trade_delta(net, source="trade_delta") + + color = LOG_GREEN if (realized_pnl is None or realized_pnl >= 0) else LOG_RED + logger.info( + "%s💸 [매도체결] [%s] %s %s × %d주 @ %d원 | 사유=%s (ODNO=%s)%s", + color, req.strategy_id, req.name, req.code, + delta_qty, int(sell_price), req.reason, ord_no, LOG_RESET, + ) + if remain_after > 0: + logger.warning( + "%s⚠️ [매도부분체결] [%s] %s %s: 누적체결 %d/%d주 · 잔량 %d주%s", + LOG_YELLOW, req.strategy_id, req.name, req.code, + filled_qty, order_qty, remain_after, LOG_RESET, + ) + try: + emoji = "🟢" if (realized_pnl is None or realized_pnl >= 0) else "🔴" + pnl_str = f"{realized_pnl:+,.0f}원" 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:,.0f}원 × {delta_qty}주\n" + f"{req.reason} · 수익률 {req.profit_pct*100:+.2f}%\n" + f"실현 {pnl_str} · ODNO={ord_no}" + ) + if remain_after > 0: + header += f"\n⚠️ 부분체결 잔량 {remain_after}주" + 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:+,.0f}원 · 청산 {_scnt}건" + ) + except Exception as _e: + logger.debug("strategy_pnl_provider(SELL) 실패: %s", _e) + tail = "" + if self.asset_line_provider is not None: + try: + tail = self.asset_line_provider( + "SELL", + {"realized_pnl": realized_pnl}, + ) or "" + except Exception as _e: + logger.debug("asset_line_provider(SELL) 실패: %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 + + # 손절 등 긴급: 잔량 있으면 즉시 시장가 재매도 (IOC면 pending 이미 seal) + if remain_after > 0 and is_urgent_market_sell_reason(req.reason or ""): + self._escalate_urgent_sell_market( + req, remain_after, tag="부분체결재매도", + ) + + return OrderResult( + True, ord_no=ord_no, + filled_qty=filled_qty, filled_avg_price=sell_price, + request=req, + ) + + def _active_qty(self, strategy_id: str, code: str) -> int: + """전략·종목 active_trades 잔량 (없으면 0).""" try: from ..utils.strategy_ids import canonical_strategy_id - _sid_bf = canonical_strategy_id(req.strategy_id) - _ar = self.db.conn.execute( - "SELECT buy_date FROM active_trades WHERE code=%s AND strategy=%s LIMIT 1", - (req.code, _sid_bf), - ).fetchone() - if _ar: - buy_date_for_bf = dict(_ar).get("buy_date") - except Exception: - buy_date_for_bf = None + sid = canonical_strategy_id(strategy_id) + for try_sid in (sid, strategy_id): + row = self.db.conn.execute( + "SELECT current_qty FROM active_trades " + "WHERE code=%s AND strategy=%s LIMIT 1", + (code, try_sid), + ).fetchone() + if row: + return int(dict(row).get("current_qty") or 0) + except Exception as e: + logger.debug("active_qty 조회 실패 %s/%s: %s", strategy_id, code, e) + return 0 - self.db.close_trade( - code=req.code, - sell_price=sell_price, - sell_reason=req.reason or "", - strategy=req.strategy_id, - realized_pnl_override=realized_pnl, - ) - # 매수~매도 구간 1분봉 REST 백필 (백테 봉구멍·슬롯 좀비 방지) — 비동기 1회 - if buy_date_for_bf: - try: - from kis_trader.engine.post_sell_candle_backfill import ( - schedule_post_sell_backfill, - ) - schedule_post_sell_backfill( - code=req.code, - buy_date=buy_date_for_bf, - sell_date=None, - strategy=str(req.strategy_id or ""), - ) - except Exception as _bf_e: - logger.debug("post-sell candle backfill schedule 스킵: %s", _bf_e) - self.invalidate_holdings_cache() - if self.cash_ledger is not None: - gross = filled_qty * sell_price - net = gross * (1.0 - fee_rate - tax_rate) - self.cash_ledger.apply_trade_delta(net, source="trade_delta") - - color = LOG_GREEN if (realized_pnl is None or realized_pnl >= 0) else LOG_RED - logger.info( - "%s💸 [매도체결] [%s] %s %s × %d주 @ %d원 | 사유=%s (ODNO=%s)%s", - color, req.strategy_id, req.name, req.code, - filled_qty, int(sell_price), req.reason, ord_no, LOG_RESET, - ) + def _seal_partial_sell_order( + self, ord_no: str, req: OrderRequest, filled_qty: int, + ) -> None: + """ + 부분매도 후 주문행을 pending 에서 제외 (qty=체결분 고정). + get_pending_sell_order 가 잔량 재주문을 막지 않게 한다. + """ + if filled_qty <= 0 or not ord_no: + return + od = datetime.datetime.now().strftime("%Y-%m-%d") try: - emoji = "🟢" if (realized_pnl is None or realized_pnl >= 0) else "🔴" - pnl_str = f"{realized_pnl:+,.0f}원" 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:,.0f}원 × {filled_qty}주\n" - f"{req.reason} · 수익률 {req.profit_pct*100:+.2f}%\n" - f"실현 {pnl_str} · ODNO={ord_no}" + with self.db.conn: + self.db.conn.execute( + """ + UPDATE orders + SET qty=%s, filled_qty=%s, status='PARTIAL' + WHERE ord_no=%s AND strategy_id=%s AND code=%s AND ord_date=%s + """, + ( + int(filled_qty), + int(filled_qty), + ord_no, + req.strategy_id, + req.code, + od, + ), + ) + except Exception as e: + logger.debug( + "seal_partial_sell_order 실패 ODNO=%s: %s", ord_no, e, ) - 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:+,.0f}원 · 청산 {_scnt}건" - ) - except Exception as _e: - logger.debug("strategy_pnl_provider(SELL) 실패: %s", _e) - tail = "" - if self.asset_line_provider is not None: - try: - tail = self.asset_line_provider( - "SELL", - {"realized_pnl": realized_pnl}, - ) or "" - except Exception as _e: - logger.debug("asset_line_provider(SELL) 실패: %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, - ) def _lookup_fill( self, @@ -841,6 +990,19 @@ class OrderManager: if fill and int(fill.get("filled_qty", 0) or 0) > 0: filled_qty = int(fill["filled_qty"]) avg_price = float(fill["avg_price"]) + # 본매수/본매도 경로와 heartbeat 레이스·동일수량 재폴링 시 + # finalize(알림·예수금 델타) 중복 방지 — 수량이 늘었을 때만 확정. + # (부분체결 20→26 처럼 증가분은 그대로 반영) + fresh = self.db.get_order_by_odno( + ord_no, strategy_id=req.strategy_id, code=req.code, + ) + if fresh is not None: + prev_filled = int(fresh.get("filled_qty") or 0) + fresh_st = str(fresh.get("status") or "").upper() + if fresh_st == "FILLED" and prev_filled >= order_qty: + continue + if filled_qty <= prev_filled: + continue if side == "BUY": if 0 < filled_qty < order_qty: miss = order_qty - filled_qty @@ -871,10 +1033,16 @@ class OrderManager: # 만료 — 미체결 또는 부분체결 잔량 정리 remain = max(0, order_qty - prev_filled) if remain > 0: - try: - self.client.cancel_order(ord_no, qty=remain) - except Exception as e: - logger.debug("만료 주문 취소 실패 ord_no=%s: %s", ord_no, e) + # 매도 IOC면 잔량 주문은 이미 브로커 취소 — cancel REST 생략 + skip_cancel = ( + side == "SELL" + and getattr(self.client, "uses_market_sell_ioc", lambda: False)() + ) + if not skip_cancel: + try: + self.client.cancel_order(ord_no, qty=remain) + except Exception as e: + logger.debug("만료 주문 취소 실패 ord_no=%s: %s", ord_no, e) if prev_filled <= 0: self.db.update_order_status( ord_no=ord_no, strategy_id=req.strategy_id, code=req.code, @@ -899,6 +1067,21 @@ class OrderManager: LOG_YELLOW, req.name, req.code, ord_no, remain, LOG_RESET, ) handled += 1 + elif side == "SELL" and prev_filled > 0: + # 부분매도 만료: pending 해제 후 긴급이면 잔량 재매도 + self._seal_partial_sell_order(ord_no, req, prev_filled) + logger.warning( + "%s⏱ [매도부분만료] %s %s ODNO=%s — 체결 %d · 미체결잔량 %d%s", + LOG_YELLOW, req.name, req.code, ord_no, + prev_filled, remain, LOG_RESET, + ) + handled += 1 + pos_left = self._active_qty(req.strategy_id, req.code) + re_qty = pos_left if pos_left > 0 else remain + if re_qty > 0: + self._escalate_urgent_sell_market( + req, re_qty, tag="만료재손절(부분)", + ) return handled @@ -1533,6 +1716,14 @@ class OrderManager: f"손절 ${req.stop_price:.4f} / 목표 ${req.target_price:.4f}\n" f"거래소 {req.exchange or '-'} · 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(BUY overseas) 실패: %s", _e) tail = "" if self.asset_line_provider is not None: try: diff --git a/kis_trader/web/live_config_schema.py b/kis_trader/web/live_config_schema.py index 183d9f4..f80f083 100644 --- a/kis_trader/web/live_config_schema.py +++ b/kis_trader/web/live_config_schema.py @@ -530,8 +530,10 @@ def build_live_config_groups() -> List[GroupDef]: hint="실매 폴링 정합 · 하한 50ms"), _f("TAIL_PARAM_SEARCH_MIN_START", "꼬리 파라서치 최소 시작일", "str", default="2026-07-07", hint="조건식 변경일 이후만 탐색 (YYYY-MM-DD) · CLI --start 와 max 적용"), - _f("USE_MARKET_IOC", "시장가 IOC", "bool", default=True, - hint="실전 시장가 주문 방식 · 모의는 일반 시장가(01) 고정"), + _f("USE_MARKET_IOC", "매수 시장가 IOC", "bool", default=True, + hint="실전 매수 ORD_DVSN=13(IOC) · OFF=01 · 모의는 01 고정"), + _f("USE_MARKET_IOC_SELL", "매도 시장가 IOC", "bool", default=True, + hint="실전 매도 ORD_DVSN=13(IOC) · OFF=01 · 모의는 01 고정 · 거절 많으면 OFF"), _f("ORDER_FILL_WAIT_SEC", "시장가 체결 대기(초)", "int", default=2), _f("DUPLICATE_ORDER_FILL_RECOVERY_ENABLED", "주문DB중복 체결복구", "bool", default=True, hint="insert 실패(주문DB중복) 시 inquire-daily-ccld 1회 → active_trades 복구 · 실패 시에만 REST"), diff --git a/logs/kis_api_rejects.jsonl b/logs/kis_api_rejects.jsonl index eaa11c6..b8a059c 100644 --- a/logs/kis_api_rejects.jsonl +++ b/logs/kis_api_rejects.jsonl @@ -1306,3 +1306,914 @@ {"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}} +{"ts": "2026-07-30T22:57: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-30T22:57: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-30T23:00: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": 3418}} +{"ts": "2026-07-30T23:03: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": 3237}} +{"ts": "2026-07-30T23:06: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-30T23:09: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-30T23:12: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-30T23:15: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": 2515}} +{"ts": "2026-07-30T23:18: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": 2334}} +{"ts": "2026-07-30T23:21: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-30T23:24: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-30T23:27: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": 1791}} +{"ts": "2026-07-30T23:30: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-30T23:33: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": 1429}} +{"ts": "2026-07-30T23:36: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-30T23:39: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": 1066}} +{"ts": "2026-07-30T23:42: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": 886}} +{"ts": "2026-07-30T23:45: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": 706}} +{"ts": "2026-07-30T23:48: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": 525}} +{"ts": "2026-07-30T23:51: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": 345}} +{"ts": "2026-07-30T23:54: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": 164}} +{"ts": "2026-07-30T23:56: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-30T23:56: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": 3598}} +{"ts": "2026-07-30T23:57: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-30T23:57: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": 3584}} +{"ts": "2026-07-30T23:59: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": 3417}} +{"ts": "2026-07-31T00:00: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": 3403}} +{"ts": "2026-07-31T00:02: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": 3237}} +{"ts": "2026-07-31T00:03: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": 3223}} +{"ts": "2026-07-31T00:05: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": 3056}} +{"ts": "2026-07-31T00:06: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": 3043}} +{"ts": "2026-07-31T00:08: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": 2875}} +{"ts": "2026-07-31T00:09: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": 2862}} +{"ts": "2026-07-31T00:11: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": 2695}} +{"ts": "2026-07-31T00:12: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": 2681}} +{"ts": "2026-07-31T00:14: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": 2514}} +{"ts": "2026-07-31T00:15: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": 2501}} +{"ts": "2026-07-31T00:17: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": 2334}} +{"ts": "2026-07-31T00:18: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": 2320}} +{"ts": "2026-07-31T00:20: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": 2154}} +{"ts": "2026-07-31T00:21: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": 2140}} +{"ts": "2026-07-31T00:23: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": 1973}} +{"ts": "2026-07-31T00:24: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": 1960}} +{"ts": "2026-07-31T00:26: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": 1793}} +{"ts": "2026-07-31T00:27: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": 1779}} +{"ts": "2026-07-31T00:29: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": 1612}} +{"ts": "2026-07-31T00:30: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": 1598}} +{"ts": "2026-07-31T00:32: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": 1432}} +{"ts": "2026-07-31T00:33: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": 1417}} +{"ts": "2026-07-31T00:35: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": 1251}} +{"ts": "2026-07-31T00:36: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": 1237}} +{"ts": "2026-07-31T00:38: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": 1070}} +{"ts": "2026-07-31T00:39: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": 1057}} +{"ts": "2026-07-31T00:41: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": 889}} +{"ts": "2026-07-31T00:42: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": 877}} +{"ts": "2026-07-31T00:44: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": 709}} +{"ts": "2026-07-31T00:45: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": 696}} +{"ts": "2026-07-31T00:47: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": 529}} +{"ts": "2026-07-31T00:48: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": 516}} +{"ts": "2026-07-31T00:50: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": 348}} +{"ts": "2026-07-31T00:51: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": 335}} +{"ts": "2026-07-31T00:53: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": 168}} +{"ts": "2026-07-31T00:54: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": 155}} +{"ts": "2026-07-31T00:56: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-31T00:56: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": 3588}} +{"ts": "2026-07-31T00:57: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-31T00:57: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": 3577}} +{"ts": "2026-07-31T00:59: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": 3407}} +{"ts": "2026-07-31T01:00: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": 3396}} +{"ts": "2026-07-31T01:02: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": 3226}} +{"ts": "2026-07-31T01:03: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": 3215}} +{"ts": "2026-07-31T01:05: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": 3046}} +{"ts": "2026-07-31T01:06: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": 3035}} +{"ts": "2026-07-31T01:07:01+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-31T01:07: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": 3598}} +{"ts": "2026-07-31T01:08: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": 2865}} +{"ts": "2026-07-31T01:09: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": 2854}} +{"ts": "2026-07-31T01:10: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": 3418}} +{"ts": "2026-07-31T01:11: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": 2685}} +{"ts": "2026-07-31T01:12: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": 2673}} +{"ts": "2026-07-31T01:13: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": 3238}} +{"ts": "2026-07-31T01:14: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": 2504}} +{"ts": "2026-07-31T01:15: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": 2492}} +{"ts": "2026-07-31T01: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": 3057}} +{"ts": "2026-07-31T01:17: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": 2324}} +{"ts": "2026-07-31T01:18: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": 2312}} +{"ts": "2026-07-31T01: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": 2877}} +{"ts": "2026-07-31T01:20: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": 2143}} +{"ts": "2026-07-31T01:21: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": 2132}} +{"ts": "2026-07-31T01: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": 2696}} +{"ts": "2026-07-31T01:23: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": 1963}} +{"ts": "2026-07-31T01:24: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": 1952}} +{"ts": "2026-07-31T01: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": 2516}} +{"ts": "2026-07-31T01:26: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": 1782}} +{"ts": "2026-07-31T01:27: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": 1772}} +{"ts": "2026-07-31T01: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": 2335}} +{"ts": "2026-07-31T01:29: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": 1602}} +{"ts": "2026-07-31T01:30: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": 1591}} +{"ts": "2026-07-31T01: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": 2155}} +{"ts": "2026-07-31T01:32: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": 1421}} +{"ts": "2026-07-31T01:33: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": 1410}} +{"ts": "2026-07-31T01: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": 1974}} +{"ts": "2026-07-31T01:35: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": 1241}} +{"ts": "2026-07-31T01:36: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": 1230}} +{"ts": "2026-07-31T01:37: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": 1794}} +{"ts": "2026-07-31T01:38: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": 1060}} +{"ts": "2026-07-31T01:39: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": 1049}} +{"ts": "2026-07-31T01:40: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": 1614}} +{"ts": "2026-07-31T01:41: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": 880}} +{"ts": "2026-07-31T01:42: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": 868}} +{"ts": "2026-07-31T01: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": 1433}} +{"ts": "2026-07-31T01:44: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": 699}} +{"ts": "2026-07-31T01:45: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": 687}} +{"ts": "2026-07-31T01: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": 1253}} +{"ts": "2026-07-31T01:47: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": 518}} +{"ts": "2026-07-31T01:48: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": 507}} +{"ts": "2026-07-31T01: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": 1072}} +{"ts": "2026-07-31T01:50: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": 338}} +{"ts": "2026-07-31T01:51: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": 326}} +{"ts": "2026-07-31T01:52: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": 891}} +{"ts": "2026-07-31T01:53: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": 157}} +{"ts": "2026-07-31T01:54: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": 146}} +{"ts": "2026-07-31T01:55: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": 710}} +{"ts": "2026-07-31T01:56: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-31T01:56: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": 3578}} +{"ts": "2026-07-31T01:57: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-31T01:57: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": 3566}} +{"ts": "2026-07-31T01:58: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": 529}} +{"ts": "2026-07-31T01:59: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": 3397}} +{"ts": "2026-07-31T02:00: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": 3386}} +{"ts": "2026-07-31T02:01: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": 348}} +{"ts": "2026-07-31T02:02: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": 3217}} +{"ts": "2026-07-31T02:03: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": 3205}} +{"ts": "2026-07-31T02:04: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": 168}} +{"ts": "2026-07-31T02:05: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": 3036}} +{"ts": "2026-07-31T02:06: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": 3024}} +{"ts": "2026-07-31T02:07: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-31T02: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": 3588}} +{"ts": "2026-07-31T02:08: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": 2856}} +{"ts": "2026-07-31T02:09: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": 2844}} +{"ts": "2026-07-31T02:10: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": 3407}} +{"ts": "2026-07-31T02:11: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": 2675}} +{"ts": "2026-07-31T02:12: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": 2663}} +{"ts": "2026-07-31T02:13: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": 3226}} +{"ts": "2026-07-31T02:14: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": 2495}} +{"ts": "2026-07-31T02:15: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": 2482}} +{"ts": "2026-07-31T02:16: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": 3046}} +{"ts": "2026-07-31T02:17: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": 2314}} +{"ts": "2026-07-31T02:18: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": 2302}} +{"ts": "2026-07-31T02:19: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": 2865}} +{"ts": "2026-07-31T02: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": 2134}} +{"ts": "2026-07-31T02:21: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": 2122}} +{"ts": "2026-07-31T02:22: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": 2684}} +{"ts": "2026-07-31T02:23: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": 1953}} +{"ts": "2026-07-31T02:24: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": 1941}} +{"ts": "2026-07-31T02:25: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": 2503}} +{"ts": "2026-07-31T02:26: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": 1773}} +{"ts": "2026-07-31T02:27: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": 1760}} +{"ts": "2026-07-31T02:28: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": 2322}} +{"ts": "2026-07-31T02:29: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": 1592}} +{"ts": "2026-07-31T02:30: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": 1579}} +{"ts": "2026-07-31T02:31: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-31T02:32: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": 1411}} +{"ts": "2026-07-31T02:33: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": 1399}} +{"ts": "2026-07-31T02:34: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": 1961}} +{"ts": "2026-07-31T02:35: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": 1230}} +{"ts": "2026-07-31T02:36: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": 1218}} +{"ts": "2026-07-31T02:37: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": 1781}} +{"ts": "2026-07-31T02:39:14+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-31T02:39: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-31T02:39:16+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-31T02:39: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": 3596}} +{"ts": "2026-07-31T02:39: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-31T02:39: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": 3598}} +{"ts": "2026-07-31T02:42: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": 3415}} +{"ts": "2026-07-31T02:42: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": 3417}} +{"ts": "2026-07-31T02:42: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": 3417}} +{"ts": "2026-07-31T02:45: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": 3235}} +{"ts": "2026-07-31T02:45: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-31T02:45: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": 3237}} +{"ts": "2026-07-31T02:48: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": 3054}} +{"ts": "2026-07-31T02:48: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": 3056}} +{"ts": "2026-07-31T02:48: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": 3056}} +{"ts": "2026-07-31T02:51: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": 2874}} +{"ts": "2026-07-31T02:51: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": 2876}} +{"ts": "2026-07-31T02:51: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": 2876}} +{"ts": "2026-07-31T02:54: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": 2694}} +{"ts": "2026-07-31T02:54: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": 2695}} +{"ts": "2026-07-31T02:54: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": 2695}} +{"ts": "2026-07-31T02:57: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": 2513}} +{"ts": "2026-07-31T02:57: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": 2515}} +{"ts": "2026-07-31T02:57: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": 2515}} +{"ts": "2026-07-31T03:00: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": 2333}} +{"ts": "2026-07-31T03:00: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": 2334}} +{"ts": "2026-07-31T03:00: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": 2335}} +{"ts": "2026-07-31T03:03: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": 2152}} +{"ts": "2026-07-31T03:03: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": 2154}} +{"ts": "2026-07-31T03:03: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": 2154}} +{"ts": "2026-07-31T03:06: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": 1972}} +{"ts": "2026-07-31T03:06: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": 1973}} +{"ts": "2026-07-31T03:06: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": 1974}} +{"ts": "2026-07-31T03:09: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": 1792}} +{"ts": "2026-07-31T03:09: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": 1793}} +{"ts": "2026-07-31T03:09: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": 1794}} +{"ts": "2026-07-31T03:12: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": 1611}} +{"ts": "2026-07-31T03:12: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-31T03:12: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": 1613}} +{"ts": "2026-07-31T03:15: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": 1431}} +{"ts": "2026-07-31T03:15: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": 1432}} +{"ts": "2026-07-31T03:15: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": 1433}} +{"ts": "2026-07-31T03:18: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": 1250}} +{"ts": "2026-07-31T03:18: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": 1251}} +{"ts": "2026-07-31T03:18: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": 1252}} +{"ts": "2026-07-31T03:21: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": 1069}} +{"ts": "2026-07-31T03:21: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": 1071}} +{"ts": "2026-07-31T03:21: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": 1071}} +{"ts": "2026-07-31T03:24: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": 889}} +{"ts": "2026-07-31T03:24: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": 890}} +{"ts": "2026-07-31T03:24: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": 891}} +{"ts": "2026-07-31T03:27: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": 708}} +{"ts": "2026-07-31T03:27: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": 709}} +{"ts": "2026-07-31T03:27: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": 710}} +{"ts": "2026-07-31T03: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": 527}} +{"ts": "2026-07-31T03: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": 528}} +{"ts": "2026-07-31T03:30: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": 529}} +{"ts": "2026-07-31T03: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": 346}} +{"ts": "2026-07-31T03: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": 347}} +{"ts": "2026-07-31T03:33: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": 348}} +{"ts": "2026-07-31T03:36: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": 165}} +{"ts": "2026-07-31T03:36: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": 167}} +{"ts": "2026-07-31T03:36: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": 167}} +{"ts": "2026-07-31T03:39:14+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-31T03:39: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-31T03:39:17+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-31T03: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": 3585}} +{"ts": "2026-07-31T03: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": 3588}} +{"ts": "2026-07-31T03:39: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": 3588}} +{"ts": "2026-07-31T03:42: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": 3405}} +{"ts": "2026-07-31T03:42: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": 3407}} +{"ts": "2026-07-31T03:42: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": 3407}} +{"ts": "2026-07-31T03:45: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": 3225}} +{"ts": "2026-07-31T03:45: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": 3227}} +{"ts": "2026-07-31T03:45: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": 3227}} +{"ts": "2026-07-31T03:48: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": 3044}} +{"ts": "2026-07-31T03:48: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": 3046}} +{"ts": "2026-07-31T03:48: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": 3047}} +{"ts": "2026-07-31T03:51: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": 2864}} +{"ts": "2026-07-31T03:51: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": 2866}} +{"ts": "2026-07-31T03:51: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": 2866}} +{"ts": "2026-07-31T03:54: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": 2683}} +{"ts": "2026-07-31T03:54: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": 2686}} +{"ts": "2026-07-31T03:54: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": 2686}} +{"ts": "2026-07-31T03: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": 2502}} +{"ts": "2026-07-31T03: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": 2504}} +{"ts": "2026-07-31T03:57: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": 2505}} +{"ts": "2026-07-31T04: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": 2321}} +{"ts": "2026-07-31T04: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": 2323}} +{"ts": "2026-07-31T04:00: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": 2324}} +{"ts": "2026-07-31T04: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": 2140}} +{"ts": "2026-07-31T04: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": 2143}} +{"ts": "2026-07-31T04:03: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": 2143}} +{"ts": "2026-07-31T04: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": 1959}} +{"ts": "2026-07-31T04: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": 1962}} +{"ts": "2026-07-31T04:06: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": 1962}} +{"ts": "2026-07-31T04: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": 1779}} +{"ts": "2026-07-31T04: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": 1781}} +{"ts": "2026-07-31T04:09: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": 1781}} +{"ts": "2026-07-31T04:12: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": 1598}} +{"ts": "2026-07-31T04: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": 1600}} +{"ts": "2026-07-31T04:12: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": 1601}} +{"ts": "2026-07-31T04:15: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": 1417}} +{"ts": "2026-07-31T04:15: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": 1420}} +{"ts": "2026-07-31T04:15: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": 1420}} +{"ts": "2026-07-31T04: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": 1237}} +{"ts": "2026-07-31T04: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": 1239}} +{"ts": "2026-07-31T04:18: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": 1239}} +{"ts": "2026-07-31T04: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": 1056}} +{"ts": "2026-07-31T04: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": 1058}} +{"ts": "2026-07-31T04:21: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": 1059}} +{"ts": "2026-07-31T04: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": 876}} +{"ts": "2026-07-31T04: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": 878}} +{"ts": "2026-07-31T04:24: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": 878}} +{"ts": "2026-07-31T04:27: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": 695}} +{"ts": "2026-07-31T04:27: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": 697}} +{"ts": "2026-07-31T04:27: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": 697}} +{"ts": "2026-07-31T04:30: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": 514}} +{"ts": "2026-07-31T04:30: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": 516}} +{"ts": "2026-07-31T04:30: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": 516}} +{"ts": "2026-07-31T04:33: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": 333}} +{"ts": "2026-07-31T04:33: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": 335}} +{"ts": "2026-07-31T04:33: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": 335}} +{"ts": "2026-07-31T04:36: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": 153}} +{"ts": "2026-07-31T04:36: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": 155}} +{"ts": "2026-07-31T04:36: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": 155}} +{"ts": "2026-07-31T04:39: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-31T04:39: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-31T04:39:18+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-31T04:39: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": 3572}} +{"ts": "2026-07-31T04:39: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": 3575}} +{"ts": "2026-07-31T04:39: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": 3575}} +{"ts": "2026-07-31T04:42: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": 3391}} +{"ts": "2026-07-31T04:42: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": 3394}} +{"ts": "2026-07-31T04:42: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": 3394}} +{"ts": "2026-07-31T04:45: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": 3210}} +{"ts": "2026-07-31T04:45: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": 3213}} +{"ts": "2026-07-31T04:45: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": 3213}} +{"ts": "2026-07-31T04:48: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": 3029}} +{"ts": "2026-07-31T04:48: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": 3032}} +{"ts": "2026-07-31T04:48: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": 3032}} +{"ts": "2026-07-31T04:51: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": 2849}} +{"ts": "2026-07-31T04:51: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": 2852}} +{"ts": "2026-07-31T04:51: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": 2852}} +{"ts": "2026-07-31T04:54: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": 2668}} +{"ts": "2026-07-31T04:54: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": 2671}} +{"ts": "2026-07-31T04:54: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": 2671}} +{"ts": "2026-07-31T04:57: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": 2488}} +{"ts": "2026-07-31T04:57: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": 2490}} +{"ts": "2026-07-31T04:57: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": 2491}} +{"ts": "2026-07-31T05:00: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": 2306}} +{"ts": "2026-07-31T05:00: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": 2309}} +{"ts": "2026-07-31T05:00: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": 2309}} +{"ts": "2026-07-31T05:03: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": 2126}} +{"ts": "2026-07-31T05:03: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": 2129}} +{"ts": "2026-07-31T05:03: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": 2129}} +{"ts": "2026-07-31T05:06: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": 1945}} +{"ts": "2026-07-31T05:06: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": 1948}} +{"ts": "2026-07-31T05:06: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": 1948}} +{"ts": "2026-07-31T05:09: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": 1765}} +{"ts": "2026-07-31T05:09: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": 1768}} +{"ts": "2026-07-31T05:09: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": 1768}} +{"ts": "2026-07-31T05:12: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": 1584}} +{"ts": "2026-07-31T05:12: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": 1587}} +{"ts": "2026-07-31T05:12: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": 1587}} +{"ts": "2026-07-31T05:15:51+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 1403}} +{"ts": "2026-07-31T05:15: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": 1406}} +{"ts": "2026-07-31T05:15: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": 1406}} +{"ts": "2026-07-31T05:18: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": 1222}} +{"ts": "2026-07-31T05:18: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": 1225}} +{"ts": "2026-07-31T05:18: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": 1225}} +{"ts": "2026-07-31T05:21: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": 1042}} +{"ts": "2026-07-31T05:21: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": 1044}} +{"ts": "2026-07-31T05:21: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": 1045}} +{"ts": "2026-07-31T05:24: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": 861}} +{"ts": "2026-07-31T05:24: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": 864}} +{"ts": "2026-07-31T05:24: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": 864}} +{"ts": "2026-07-31T05:27: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": 680}} +{"ts": "2026-07-31T05:27: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": 682}} +{"ts": "2026-07-31T05:27: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": 682}} +{"ts": "2026-07-31T05: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": 499}} +{"ts": "2026-07-31T05: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": 502}} +{"ts": "2026-07-31T05:30: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": 502}} +{"ts": "2026-07-31T05:33: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": 318}} +{"ts": "2026-07-31T05:33: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": 321}} +{"ts": "2026-07-31T05:33: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": 321}} +{"ts": "2026-07-31T05: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": 137}} +{"ts": "2026-07-31T05:36: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": 139}} +{"ts": "2026-07-31T05:36: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": 139}} +{"ts": "2026-07-31T05:39: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-31T05:39:19+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-31T05:39:20+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-31T05:39: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": 3557}} +{"ts": "2026-07-31T05:39: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": 3561}} +{"ts": "2026-07-31T05:39: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": 3562}} +{"ts": "2026-07-31T05:42: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": 3376}} +{"ts": "2026-07-31T05:42: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": 3380}} +{"ts": "2026-07-31T05:42: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": 3381}} +{"ts": "2026-07-31T05:45: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": 3195}} +{"ts": "2026-07-31T05:45: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": 3199}} +{"ts": "2026-07-31T05:45: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": 3201}} +{"ts": "2026-07-31T05:49: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": 3014}} +{"ts": "2026-07-31T05:49: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": 3017}} +{"ts": "2026-07-31T05:49: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": 3019}} +{"ts": "2026-07-31T05:52: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": 2833}} +{"ts": "2026-07-31T05:52: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": 2837}} +{"ts": "2026-07-31T05:52: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": 2839}} +{"ts": "2026-07-31T05:55: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": 2652}} +{"ts": "2026-07-31T05:55: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": 2656}} +{"ts": "2026-07-31T05:55: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": 2658}} +{"ts": "2026-07-31T05:58: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": 2472}} +{"ts": "2026-07-31T05:58: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": 2476}} +{"ts": "2026-07-31T05:58: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": 2478}} +{"ts": "2026-07-31T10:03:05+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "014620", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "1332d01facb3e97a", "extra": {"mock": true}} +{"ts": "2026-07-31T11:41:03+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "199800", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "42bb87c52adf08a5", "extra": {"mock": true}} +{"ts": "2026-07-31T12:49:06+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "079650", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "59e38e8cb16eeaf0", "extra": {"mock": true}} +{"ts": "2026-07-31T13:10:13+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "487570", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "56b39fa1baa38a77", "extra": {"mock": true}} +{"ts": "2026-07-31T14:16:59+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "000230", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "60021d7c81314a05", "extra": {"mock": true}} +{"ts": "2026-07-31T15:09:08+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "034810", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "9d4010e40eef20b0", "extra": {"mock": true}} +{"ts": "2026-07-31T15:09:22+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "412350", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "99c79ca1fc81194c", "extra": {"mock": true}} +{"ts": "2026-07-31T15:09:31+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "159010", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "650814c35f6fe7f3", "extra": {"mock": true}} +{"ts": "2026-07-31T15:20:44+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "086670", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "7584631a0802a56d", "extra": {"mock": true}} +{"ts": "2026-07-31T15:20:46+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "145720", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "c77c854ceb6b3944", "extra": {"mock": true}} +{"ts": "2026-07-31T15:20:51+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "178920", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "0ad7813aa8c86b2c", "extra": {"mock": true}} +{"ts": "2026-07-31T15:25:10+09:00", "kind": "domestic_order_reject", "strategy_id": "", "side": "SELL", "code": "036560", "msg_cd": "40240000", "msg1": "모의투자 잔고내역이 없습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/domestic-stock/v1/trading/order-cash", "fingerprint": "7df979f6e84954a7", "extra": {"mock": true}} +{"ts": "2026-07-31T22:45:47+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "TSLA", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "bfa875052195e5f8", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-31T22:45:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3598}} +{"ts": "2026-07-31T22:48:50+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3417}} +{"ts": "2026-07-31T22:51:51+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3236}} +{"ts": "2026-07-31T22:54:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3055}} +{"ts": "2026-07-31T22:57:53+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2874}} +{"ts": "2026-07-31T23:00:53+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2694}} +{"ts": "2026-07-31T23:03:53+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2513}} +{"ts": "2026-07-31T23:06:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2333}} +{"ts": "2026-07-31T23:09:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2153}} +{"ts": "2026-07-31T23:12:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1972}} +{"ts": "2026-07-31T23:15:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1792}} +{"ts": "2026-07-31T23:18:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1611}} +{"ts": "2026-07-31T23:21:57+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1430}} +{"ts": "2026-07-31T23:24:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1249}} +{"ts": "2026-07-31T23:27:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1068}} +{"ts": "2026-07-31T23:31:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 887}} +{"ts": "2026-07-31T23:34:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 706}} +{"ts": "2026-07-31T23:37:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 525}} +{"ts": "2026-07-31T23:40:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 345}} +{"ts": "2026-07-31T23:42: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-31T23:42: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": 3598}} +{"ts": "2026-07-31T23:43:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 165}} +{"ts": "2026-07-31T23:45: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": 3417}} +{"ts": "2026-07-31T23:45:50+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "TSLA", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "bfa875052195e5f8", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-07-31T23:46:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3587}} +{"ts": "2026-07-31T23:48: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": 3237}} +{"ts": "2026-07-31T23:49:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3406}} +{"ts": "2026-07-31T23:51: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": 3057}} +{"ts": "2026-07-31T23:52:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3226}} +{"ts": "2026-07-31T23:54: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": 2876}} +{"ts": "2026-07-31T23:55:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3045}} +{"ts": "2026-07-31T23:57: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": 2695}} +{"ts": "2026-07-31T23:58:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2864}} +{"ts": "2026-08-01T00:00: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": 2514}} +{"ts": "2026-08-01T00:01:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2684}} +{"ts": "2026-08-01T00:03: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": 2333}} +{"ts": "2026-08-01T00:04:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2503}} +{"ts": "2026-08-01T00:06: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": 2152}} +{"ts": "2026-08-01T00:07:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2322}} +{"ts": "2026-08-01T00:09: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": 1972}} +{"ts": "2026-08-01T00:10:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2141}} +{"ts": "2026-08-01T00:12: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": 1791}} +{"ts": "2026-08-01T00:13:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1961}} +{"ts": "2026-08-01T00:15: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": 1611}} +{"ts": "2026-08-01T00:16: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-08-01T00:16: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-08-01T00:16:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1780}} +{"ts": "2026-08-01T00:18: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": 1430}} +{"ts": "2026-08-01T00:19: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": 3418}} +{"ts": "2026-08-01T00:19:09+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1600}} +{"ts": "2026-08-01T00:21: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": 1249}} +{"ts": "2026-08-01T00:22: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": 3237}} +{"ts": "2026-08-01T00:22:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1419}} +{"ts": "2026-08-01T00:24: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": 1069}} +{"ts": "2026-08-01T00:25: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-08-01T00:25:11+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1238}} +{"ts": "2026-08-01T00:27: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": 889}} +{"ts": "2026-08-01T00:28: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": 2875}} +{"ts": "2026-08-01T00:28:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1057}} +{"ts": "2026-08-01T00:30: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": 708}} +{"ts": "2026-08-01T00:31: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": 2694}} +{"ts": "2026-08-01T00:31:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 876}} +{"ts": "2026-08-01T00:33: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": 527}} +{"ts": "2026-08-01T00:34: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": 2513}} +{"ts": "2026-08-01T00:34:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 696}} +{"ts": "2026-08-01T00:36: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": 347}} +{"ts": "2026-08-01T00:37: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-08-01T00:37:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 515}} +{"ts": "2026-08-01T00:39: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": 166}} +{"ts": "2026-08-01T00:40: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": 2152}} +{"ts": "2026-08-01T00:40:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 334}} +{"ts": "2026-08-01T00:42: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-08-01T00: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": 3587}} +{"ts": "2026-08-01T00:43: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": 1971}} +{"ts": "2026-08-01T00:43:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 154}} +{"ts": "2026-08-01T00:45: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-08-01T00:45:51+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "TSLA", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "bfa875052195e5f8", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-08-01T00:46: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": 1790}} +{"ts": "2026-08-01T00:46:15+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3575}} +{"ts": "2026-08-01T00:47: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-08-01T00:47: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-08-01T00:48: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": 3226}} +{"ts": "2026-08-01T00:49: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": 1609}} +{"ts": "2026-08-01T00:49:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3394}} +{"ts": "2026-08-01T00:50: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": 3417}} +{"ts": "2026-08-01T00:51: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": 3045}} +{"ts": "2026-08-01T00:52: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": 1429}} +{"ts": "2026-08-01T00:52:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3213}} +{"ts": "2026-08-01T00:53: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": 3236}} +{"ts": "2026-08-01T00:54: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": 2864}} +{"ts": "2026-08-01T00:55: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": 1248}} +{"ts": "2026-08-01T00:55:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3032}} +{"ts": "2026-08-01T00:56: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": 3055}} +{"ts": "2026-08-01T00:57: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": 2684}} +{"ts": "2026-08-01T00:58: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": 1067}} +{"ts": "2026-08-01T00:58:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2852}} +{"ts": "2026-08-01T00:59: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": 2875}} +{"ts": "2026-08-01T01:00: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": 2503}} +{"ts": "2026-08-01T01:01: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": 887}} +{"ts": "2026-08-01T01:01:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2672}} +{"ts": "2026-08-01T01:02: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": 2694}} +{"ts": "2026-08-01T01:03: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": 2323}} +{"ts": "2026-08-01T01:04: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": 706}} +{"ts": "2026-08-01T01:04:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2491}} +{"ts": "2026-08-01T01:05: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": 2514}} +{"ts": "2026-08-01T01:06: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-08-01T01:07: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": 525}} +{"ts": "2026-08-01T01:07:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2311}} +{"ts": "2026-08-01T01:08: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": 2334}} +{"ts": "2026-08-01T01:09: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": 1962}} +{"ts": "2026-08-01T01:10: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": 345}} +{"ts": "2026-08-01T01:10:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2131}} +{"ts": "2026-08-01T01:11: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": 2154}} +{"ts": "2026-08-01T01:12: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-08-01T01:13: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": 165}} +{"ts": "2026-08-01T01:13:20+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1950}} +{"ts": "2026-08-01T01:14: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": 1973}} +{"ts": "2026-08-01T01:15: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": 1601}} +{"ts": "2026-08-01T01:16: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-08-01T01:16: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": 3586}} +{"ts": "2026-08-01T01:16:22+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1768}} +{"ts": "2026-08-01T01:17: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": 1793}} +{"ts": "2026-08-01T01:18: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": 1421}} +{"ts": "2026-08-01T01:19: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": 3405}} +{"ts": "2026-08-01T01:19:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1587}} +{"ts": "2026-08-01T01:20: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": 1611}} +{"ts": "2026-08-01T01:21: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": 1241}} +{"ts": "2026-08-01T01:22: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": 3225}} +{"ts": "2026-08-01T01:22:23+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1407}} +{"ts": "2026-08-01T01:23: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": 1430}} +{"ts": "2026-08-01T01:24: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": 1061}} +{"ts": "2026-08-01T01:25: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": 3045}} +{"ts": "2026-08-01T01:25:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1226}} +{"ts": "2026-08-01T01:26: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": 1249}} +{"ts": "2026-08-01T01:27: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": 880}} +{"ts": "2026-08-01T01:28: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": 2865}} +{"ts": "2026-08-01T01:28:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1046}} +{"ts": "2026-08-01T01: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": 1069}} +{"ts": "2026-08-01T01:30: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": 697}} +{"ts": "2026-08-01T01:31: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": 2684}} +{"ts": "2026-08-01T01:31:25+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 865}} +{"ts": "2026-08-01T01:32: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": 888}} +{"ts": "2026-08-01T01:33: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": 516}} +{"ts": "2026-08-01T01:34: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": 2503}} +{"ts": "2026-08-01T01:34:26+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 684}} +{"ts": "2026-08-01T01:35: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": 707}} +{"ts": "2026-08-01T01:36: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": 335}} +{"ts": "2026-08-01T01:37: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": 2323}} +{"ts": "2026-08-01T01:37:27+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 504}} +{"ts": "2026-08-01T01:38: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": 527}} +{"ts": "2026-08-01T01: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": 154}} +{"ts": "2026-08-01T01:40: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": 2143}} +{"ts": "2026-08-01T01:40:28+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 323}} +{"ts": "2026-08-01T01:41: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": 347}} +{"ts": "2026-08-01T01:42:05+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-08-01T01: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": 3574}} +{"ts": "2026-08-01T01:43: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": 1962}} +{"ts": "2026-08-01T01:43:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 142}} +{"ts": "2026-08-01T01:44: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": 166}} +{"ts": "2026-08-01T01:45: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": 3394}} +{"ts": "2026-08-01T01:45:51+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "TSLA", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "bfa875052195e5f8", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-08-01T01:46: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": 1781}} +{"ts": "2026-08-01T01:46:29+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3561}} +{"ts": "2026-08-01T01:47:04+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-08-01T01:47: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": 3588}} +{"ts": "2026-08-01T01:48: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": 3214}} +{"ts": "2026-08-01T01:49: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": 1600}} +{"ts": "2026-08-01T01:49:30+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3381}} +{"ts": "2026-08-01T01:50: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": 3407}} +{"ts": "2026-08-01T01:51: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": 3033}} +{"ts": "2026-08-01T01:52: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": 1420}} +{"ts": "2026-08-01T01:52:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3200}} +{"ts": "2026-08-01T01:53: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": 3227}} +{"ts": "2026-08-01T01: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": 2852}} +{"ts": "2026-08-01T01:55: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": 1239}} +{"ts": "2026-08-01T01:55:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3019}} +{"ts": "2026-08-01T01:56: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": 3046}} +{"ts": "2026-08-01T01: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": 2672}} +{"ts": "2026-08-01T01:58: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": 1059}} +{"ts": "2026-08-01T01:58:31+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2839}} +{"ts": "2026-08-01T01:59: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": 2866}} +{"ts": "2026-08-01T02:00: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": 2492}} +{"ts": "2026-08-01T02: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": 879}} +{"ts": "2026-08-01T02:01:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2659}} +{"ts": "2026-08-01T02:02: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": 2685}} +{"ts": "2026-08-01T02: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": 2311}} +{"ts": "2026-08-01T02: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": 698}} +{"ts": "2026-08-01T02:04:32+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2478}} +{"ts": "2026-08-01T02:05: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": 2504}} +{"ts": "2026-08-01T02:06: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": 2131}} +{"ts": "2026-08-01T02:07: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": 518}} +{"ts": "2026-08-01T02:07:33+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2298}} +{"ts": "2026-08-01T02:08: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": 2323}} +{"ts": "2026-08-01T02:09: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": 1950}} +{"ts": "2026-08-01T02:10: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": 337}} +{"ts": "2026-08-01T02:10:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2116}} +{"ts": "2026-08-01T02:11: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": 2142}} +{"ts": "2026-08-01T02: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": 1769}} +{"ts": "2026-08-01T02:13: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": 157}} +{"ts": "2026-08-01T02:13:34+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1936}} +{"ts": "2026-08-01T02:14: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": 1962}} +{"ts": "2026-08-01T02:15: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": 1589}} +{"ts": "2026-08-01T02:16: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-08-01T02:16: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": 3578}} +{"ts": "2026-08-01T02:16:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1756}} +{"ts": "2026-08-01T02:17: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": 1781}} +{"ts": "2026-08-01T02:18: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": 1408}} +{"ts": "2026-08-01T02:19: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": 3397}} +{"ts": "2026-08-01T02:19:35+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1576}} +{"ts": "2026-08-01T02:20: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": 1600}} +{"ts": "2026-08-01T02:21: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": 1228}} +{"ts": "2026-08-01T02:22: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": 3217}} +{"ts": "2026-08-01T02:22:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1395}} +{"ts": "2026-08-01T02:23: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": 1420}} +{"ts": "2026-08-01T02:24: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": 1047}} +{"ts": "2026-08-01T02:25: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": 3037}} +{"ts": "2026-08-01T02:25:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1214}} +{"ts": "2026-08-01T02:26: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": 1240}} +{"ts": "2026-08-01T02: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": 866}} +{"ts": "2026-08-01T02:28: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": 2857}} +{"ts": "2026-08-01T02:28:36+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1034}} +{"ts": "2026-08-01T02:29: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": 1059}} +{"ts": "2026-08-01T02:30: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": 686}} +{"ts": "2026-08-01T02:31: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": 2676}} +{"ts": "2026-08-01T02:31:37+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 853}} +{"ts": "2026-08-01T02:32: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": 879}} +{"ts": "2026-08-01T02: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": 505}} +{"ts": "2026-08-01T02:34: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": 2496}} +{"ts": "2026-08-01T02:34:38+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 672}} +{"ts": "2026-08-01T02:35: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": 698}} +{"ts": "2026-08-01T02:36: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": 324}} +{"ts": "2026-08-01T02:37: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": 2315}} +{"ts": "2026-08-01T02:37:39+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 492}} +{"ts": "2026-08-01T02:38: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": 518}} +{"ts": "2026-08-01T02: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": 144}} +{"ts": "2026-08-01T02: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": 2135}} +{"ts": "2026-08-01T02:40:39+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 312}} +{"ts": "2026-08-01T02:41: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": 338}} +{"ts": "2026-08-01T02:42:05+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-08-01T02: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": 3564}} +{"ts": "2026-08-01T02:43: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": 1954}} +{"ts": "2026-08-01T02:43:40+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 131}} +{"ts": "2026-08-01T02:44: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": 157}} +{"ts": "2026-08-01T02:45: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": 3383}} +{"ts": "2026-08-01T02:45:52+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "TSLA", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "bfa875052195e5f8", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-08-01T02:46: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": 1774}} +{"ts": "2026-08-01T02:46:41+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3550}} +{"ts": "2026-08-01T02:47: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-08-01T02: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": 3577}} +{"ts": "2026-08-01T02: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": 3203}} +{"ts": "2026-08-01T02:49: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": 1588}} +{"ts": "2026-08-01T02:49:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3370}} +{"ts": "2026-08-01T02:50: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": 3397}} +{"ts": "2026-08-01T02: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": 3022}} +{"ts": "2026-08-01T02: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": 1408}} +{"ts": "2026-08-01T02:52:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3189}} +{"ts": "2026-08-01T02:53: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": 3216}} +{"ts": "2026-08-01T02: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": 2842}} +{"ts": "2026-08-01T02:55: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": 1227}} +{"ts": "2026-08-01T02:55:42+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3009}} +{"ts": "2026-08-01T02:56: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": 3036}} +{"ts": "2026-08-01T02: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": 2662}} +{"ts": "2026-08-01T02:58: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": 1047}} +{"ts": "2026-08-01T02:58:43+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2828}} +{"ts": "2026-08-01T02:59: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": 2855}} +{"ts": "2026-08-01T03: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": 2481}} +{"ts": "2026-08-01T03:01: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": 867}} +{"ts": "2026-08-01T03:01:44+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2647}} +{"ts": "2026-08-01T03:02: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": 2674}} +{"ts": "2026-08-01T03:03: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": 2300}} +{"ts": "2026-08-01T03:04: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": 686}} +{"ts": "2026-08-01T03:04:45+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2466}} +{"ts": "2026-08-01T03:05: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": 2493}} +{"ts": "2026-08-01T03:06: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": 2119}} +{"ts": "2026-08-01T03:07: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": 506}} +{"ts": "2026-08-01T03:07:46+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2285}} +{"ts": "2026-08-01T03:08: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": 2312}} +{"ts": "2026-08-01T03: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": 1939}} +{"ts": "2026-08-01T03:10: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": 325}} +{"ts": "2026-08-01T03:10:47+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2104}} +{"ts": "2026-08-01T03:11: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": 2132}} +{"ts": "2026-08-01T03: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": 1758}} +{"ts": "2026-08-01T03:13: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": 145}} +{"ts": "2026-08-01T03:13:47+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1924}} +{"ts": "2026-08-01T03:14: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": 1952}} +{"ts": "2026-08-01T03: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": 1578}} +{"ts": "2026-08-01T03:16: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-08-01T03:16: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": 3564}} +{"ts": "2026-08-01T03:16:48+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1743}} +{"ts": "2026-08-01T03:17: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": 1771}} +{"ts": "2026-08-01T03:18: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": 1397}} +{"ts": "2026-08-01T03:19: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": 3384}} +{"ts": "2026-08-01T03:19:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1563}} +{"ts": "2026-08-01T03:20: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": 1591}} +{"ts": "2026-08-01T03: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": 1217}} +{"ts": "2026-08-01T03:22: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": 3203}} +{"ts": "2026-08-01T03:22:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1382}} +{"ts": "2026-08-01T03:23: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": 1411}} +{"ts": "2026-08-01T03:24: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": 1037}} +{"ts": "2026-08-01T03:25: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": 3023}} +{"ts": "2026-08-01T03:25:49+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1202}} +{"ts": "2026-08-01T03:26: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": 1230}} +{"ts": "2026-08-01T03:27: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": 856}} +{"ts": "2026-08-01T03:28: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": 2843}} +{"ts": "2026-08-01T03:28:50+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1021}} +{"ts": "2026-08-01T03:29: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": 1049}} +{"ts": "2026-08-01T03:30: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": 675}} +{"ts": "2026-08-01T03:31: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": 2662}} +{"ts": "2026-08-01T03:31:50+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 841}} +{"ts": "2026-08-01T03:32: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": 868}} +{"ts": "2026-08-01T03:33: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": 494}} +{"ts": "2026-08-01T03:34: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": 2482}} +{"ts": "2026-08-01T03:34:51+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 661}} +{"ts": "2026-08-01T03:35: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": 688}} +{"ts": "2026-08-01T03:36:51+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "QQQM", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "bb7a668daab6556e", "extra": {"remain_sec": 313}} +{"ts": "2026-08-01T03:37: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": 2302}} +{"ts": "2026-08-01T03:37:51+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 480}} +{"ts": "2026-08-01T03:38: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": 507}} +{"ts": "2026-08-01T03:39: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": 132}} +{"ts": "2026-08-01T03:40: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": 2121}} +{"ts": "2026-08-01T03:40:51+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 300}} +{"ts": "2026-08-01T03:41: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": 327}} +{"ts": "2026-08-01T03:42:06+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-08-01T03:42: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": 3552}} +{"ts": "2026-08-01T03:43: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": 1941}} +{"ts": "2026-08-01T03:43:51+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 120}} +{"ts": "2026-08-01T03:44: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": 147}} +{"ts": "2026-08-01T03:45:52+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "TSLA", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "bfa875052195e5f8", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-08-01T03:45: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": 3372}} +{"ts": "2026-08-01T03:46: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": 1761}} +{"ts": "2026-08-01T03:46:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3540}} +{"ts": "2026-08-01T03:47: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-08-01T03:47: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": 3567}} +{"ts": "2026-08-01T03:48: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": 3191}} +{"ts": "2026-08-01T03:49: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": 1579}} +{"ts": "2026-08-01T03:49:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3360}} +{"ts": "2026-08-01T03:50: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": 3386}} +{"ts": "2026-08-01T03:51: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": 3010}} +{"ts": "2026-08-01T03:52: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": 1399}} +{"ts": "2026-08-01T03:52:52+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3180}} +{"ts": "2026-08-01T03:53: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": 3205}} +{"ts": "2026-08-01T03: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": 2830}} +{"ts": "2026-08-01T03:55: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": 1218}} +{"ts": "2026-08-01T03:55:53+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2998}} +{"ts": "2026-08-01T03:56: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": 3025}} +{"ts": "2026-08-01T03:57: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": 2649}} +{"ts": "2026-08-01T03: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": 1038}} +{"ts": "2026-08-01T03:58:53+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2818}} +{"ts": "2026-08-01T03:59: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": 2844}} +{"ts": "2026-08-01T04:00: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": 2469}} +{"ts": "2026-08-01T04: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": 858}} +{"ts": "2026-08-01T04:01:54+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2637}} +{"ts": "2026-08-01T04:02: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": 2664}} +{"ts": "2026-08-01T04:03: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": 2288}} +{"ts": "2026-08-01T04:04: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": 676}} +{"ts": "2026-08-01T04:04:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2457}} +{"ts": "2026-08-01T04:05: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": 2483}} +{"ts": "2026-08-01T04:06: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": 2108}} +{"ts": "2026-08-01T04:07: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": 496}} +{"ts": "2026-08-01T04:07:55+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2276}} +{"ts": "2026-08-01T04: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": 2303}} +{"ts": "2026-08-01T04:09: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": 1928}} +{"ts": "2026-08-01T04:10: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": 315}} +{"ts": "2026-08-01T04:10:56+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2096}} +{"ts": "2026-08-01T04:11: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": 2122}} +{"ts": "2026-08-01T04:12: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": 1747}} +{"ts": "2026-08-01T04:13: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": 134}} +{"ts": "2026-08-01T04:13:57+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1915}} +{"ts": "2026-08-01T04:14: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": 1942}} +{"ts": "2026-08-01T04:15: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": 1567}} +{"ts": "2026-08-01T04:16: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-08-01T04:16: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": 3555}} +{"ts": "2026-08-01T04:16:58+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1734}} +{"ts": "2026-08-01T04:17: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": 1761}} +{"ts": "2026-08-01T04:19: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": 1386}} +{"ts": "2026-08-01T04:19: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": 3375}} +{"ts": "2026-08-01T04:19:59+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1553}} +{"ts": "2026-08-01T04:20: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": 1581}} +{"ts": "2026-08-01T04:22: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": 1205}} +{"ts": "2026-08-01T04:22: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": 3194}} +{"ts": "2026-08-01T04:23:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1372}} +{"ts": "2026-08-01T04:23: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": 1401}} +{"ts": "2026-08-01T04:25: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": 1024}} +{"ts": "2026-08-01T04:25: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": 3014}} +{"ts": "2026-08-01T04:26:00+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1191}} +{"ts": "2026-08-01T04:26: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": 1219}} +{"ts": "2026-08-01T04:28: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": 843}} +{"ts": "2026-08-01T04:28: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": 2833}} +{"ts": "2026-08-01T04:29:01+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1011}} +{"ts": "2026-08-01T04:29: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": 1039}} +{"ts": "2026-08-01T04:31: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": 662}} +{"ts": "2026-08-01T04:31: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": 2652}} +{"ts": "2026-08-01T04:32:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 830}} +{"ts": "2026-08-01T04:32: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": 858}} +{"ts": "2026-08-01T04:34: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": 481}} +{"ts": "2026-08-01T04:34: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": 2472}} +{"ts": "2026-08-01T04:35:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 650}} +{"ts": "2026-08-01T04:35: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": 678}} +{"ts": "2026-08-01T04: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": 301}} +{"ts": "2026-08-01T04:37: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": 2291}} +{"ts": "2026-08-01T04:38:02+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 469}} +{"ts": "2026-08-01T04:38: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": 497}} +{"ts": "2026-08-01T04:40: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": 120}} +{"ts": "2026-08-01T04:40: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": 2110}} +{"ts": "2026-08-01T04:41:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 289}} +{"ts": "2026-08-01T04:41: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": 317}} +{"ts": "2026-08-01T04:42:07+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-08-01T04:43: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": 3541}} +{"ts": "2026-08-01T04:43: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": 1930}} +{"ts": "2026-08-01T04:44:03+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 108}} +{"ts": "2026-08-01T04:44: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": 136}} +{"ts": "2026-08-01T04:45:53+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "TSLA", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "bfa875052195e5f8", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-08-01T04:46: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": 3360}} +{"ts": "2026-08-01T04:46: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": 1749}} +{"ts": "2026-08-01T04:47:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3529}} +{"ts": "2026-08-01T04:47:08+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-08-01T04:47: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": 3558}} +{"ts": "2026-08-01T04:49: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": 3180}} +{"ts": "2026-08-01T04:49: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": 1568}} +{"ts": "2026-08-01T04:50:04+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3348}} +{"ts": "2026-08-01T04:50: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": 3377}} +{"ts": "2026-08-01T04:52: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": 2999}} +{"ts": "2026-08-01T04:52: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": 1386}} +{"ts": "2026-08-01T04:53:05+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3168}} +{"ts": "2026-08-01T04:53: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": 3197}} +{"ts": "2026-08-01T04:55: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": 2819}} +{"ts": "2026-08-01T04:56: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": 1206}} +{"ts": "2026-08-01T04:56:06+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2987}} +{"ts": "2026-08-01T04:56: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": 3016}} +{"ts": "2026-08-01T04:58: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": 2638}} +{"ts": "2026-08-01T04:59: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": 1025}} +{"ts": "2026-08-01T04:59:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2806}} +{"ts": "2026-08-01T04: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": 2835}} +{"ts": "2026-08-01T05:01: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": 2458}} +{"ts": "2026-08-01T05:02: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": 845}} +{"ts": "2026-08-01T05:02:07+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2625}} +{"ts": "2026-08-01T05: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": 2655}} +{"ts": "2026-08-01T05:04: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": 2277}} +{"ts": "2026-08-01T05:05: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": 664}} +{"ts": "2026-08-01T05:05:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2445}} +{"ts": "2026-08-01T05:05: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": 2473}} +{"ts": "2026-08-01T05: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": 2097}} +{"ts": "2026-08-01T05:08: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": 484}} +{"ts": "2026-08-01T05:08:08+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2264}} +{"ts": "2026-08-01T05: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": 2293}} +{"ts": "2026-08-01T05:10: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": 1915}} +{"ts": "2026-08-01T05:11: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": 304}} +{"ts": "2026-08-01T05:11:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2083}} +{"ts": "2026-08-01T05:11: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": 2112}} +{"ts": "2026-08-01T05: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": 1734}} +{"ts": "2026-08-01T05: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": 124}} +{"ts": "2026-08-01T05:14:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1903}} +{"ts": "2026-08-01T05:14: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": 1930}} +{"ts": "2026-08-01T05:16:08+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-08-01T05: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": 1554}} +{"ts": "2026-08-01T05: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": 3545}} +{"ts": "2026-08-01T05:17:10+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1722}} +{"ts": "2026-08-01T05:17: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": 1749}} +{"ts": "2026-08-01T05: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": 1373}} +{"ts": "2026-08-01T05:20: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": 3365}} +{"ts": "2026-08-01T05:20:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1541}} +{"ts": "2026-08-01T05:20: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": 1569}} +{"ts": "2026-08-01T05: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": 1193}} +{"ts": "2026-08-01T05:23: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": 3185}} +{"ts": "2026-08-01T05:23:12+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1361}} +{"ts": "2026-08-01T05:23: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": 1389}} +{"ts": "2026-08-01T05: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": 1012}} +{"ts": "2026-08-01T05: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": 3004}} +{"ts": "2026-08-01T05:26:13+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 1180}} +{"ts": "2026-08-01T05:26: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": 1208}} +{"ts": "2026-08-01T05:28: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": 831}} +{"ts": "2026-08-01T05: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": 2824}} +{"ts": "2026-08-01T05:29:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 999}} +{"ts": "2026-08-01T05:30: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": 1027}} +{"ts": "2026-08-01T05:31: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": 651}} +{"ts": "2026-08-01T05:32: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": 2642}} +{"ts": "2026-08-01T05:32:14+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 818}} +{"ts": "2026-08-01T05: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": 847}} +{"ts": "2026-08-01T05:34: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": 471}} +{"ts": "2026-08-01T05: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": 2462}} +{"ts": "2026-08-01T05:35:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 637}} +{"ts": "2026-08-01T05:36: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": 667}} +{"ts": "2026-08-01T05:37: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": 290}} +{"ts": "2026-08-01T05: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": 2282}} +{"ts": "2026-08-01T05:38:16+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 457}} +{"ts": "2026-08-01T05:39: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": 487}} +{"ts": "2026-08-01T05:40: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": 110}} +{"ts": "2026-08-01T05: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": 2102}} +{"ts": "2026-08-01T05:41:17+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 275}} +{"ts": "2026-08-01T05:42: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": 306}} +{"ts": "2026-08-01T05:42:09+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-08-01T05:43: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": 3532}} +{"ts": "2026-08-01T05: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": 1921}} +{"ts": "2026-08-01T05:44:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 95}} +{"ts": "2026-08-01T05:45: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": 126}} +{"ts": "2026-08-01T05:45:55+09:00", "kind": "overseas_order_reject", "strategy_id": "", "side": "SELL", "code": "TSLA", "msg_cd": "90000000", "msg1": "모의투자에서는 해당업무가 제공되지 않습니다.", "rt_cd": "1", "http": 200, "path": "/uapi/overseas-stock/v1/trading/order", "fingerprint": "bfa875052195e5f8", "extra": {"tr_id": "VTTT1006U", "mock": true}} +{"ts": "2026-08-01T05:46: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": 3351}} +{"ts": "2026-08-01T05:47: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": 1741}} +{"ts": "2026-08-01T05:47: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-08-01T05:47:18+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3517}} +{"ts": "2026-08-01T05:48: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": 3548}} +{"ts": "2026-08-01T05:49: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": 3171}} +{"ts": "2026-08-01T05: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": 1561}} +{"ts": "2026-08-01T05:50:19+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3335}} +{"ts": "2026-08-01T05:51: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": 3368}} +{"ts": "2026-08-01T05:52: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": 2990}} +{"ts": "2026-08-01T05: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": 1380}} +{"ts": "2026-08-01T05:53:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 3154}} +{"ts": "2026-08-01T05: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": 3188}} +{"ts": "2026-08-01T05:55: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": 2809}} +{"ts": "2026-08-01T05:56: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": 1199}} +{"ts": "2026-08-01T05:56:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2974}} +{"ts": "2026-08-01T05: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": 3008}} +{"ts": "2026-08-01T05:58: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": 2627}} +{"ts": "2026-08-01T05: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": 1018}} +{"ts": "2026-08-01T05:59:21+09:00", "kind": "overseas_sell_cooldown_skip", "strategy_id": "US_MOMENTUM", "side": "SELL", "code": "TSLA", "msg_cd": "COOLDOWN", "msg1": "order_api_skipped", "rt_cd": "", "http": "", "path": "order_manager", "fingerprint": "3909903914c34181", "extra": {"remain_sec": 2793}} +{"ts": "2026-08-01T06: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": 2828}} diff --git a/logs/optuna_breakout_latest.jsonpath b/logs/optuna_breakout_latest.jsonpath index 4fe9ed1..b5728be 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_tpe_20260728_225245.json +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260731_112436.json diff --git a/logs/optuna_breakout_tpe_latest.jsonpath b/logs/optuna_breakout_tpe_latest.jsonpath index 4fe9ed1..b5728be 100644 --- a/logs/optuna_breakout_tpe_latest.jsonpath +++ b/logs/optuna_breakout_tpe_latest.jsonpath @@ -1 +1 @@ -/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260728_225245.json +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260731_112436.json diff --git a/logs/optuna_latest.jsonpath b/logs/optuna_latest.jsonpath index 4fe9ed1..b5728be 100644 --- a/logs/optuna_latest.jsonpath +++ b/logs/optuna_latest.jsonpath @@ -1 +1 @@ -/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260728_225245.json +/home/hoon/kis_bot/kis_trader/backtest/results/optuna_breakout_tpe_20260731_112436.json diff --git a/logs/optuna_web_latest_job.txt b/logs/optuna_web_latest_job.txt index de2ca32..53c9747 100644 --- a/logs/optuna_web_latest_job.txt +++ b/logs/optuna_web_latest_job.txt @@ -1 +1 @@ -opt_20260723_114745_us_m +opt_20260731_112334_brea diff --git a/scripts/query_kiwoom_condition_snapshot.py b/scripts/query_kiwoom_condition_snapshot.py new file mode 100644 index 0000000..1de4196 --- /dev/null +++ b/scripts/query_kiwoom_condition_snapshot.py @@ -0,0 +1,454 @@ +#!/usr/bin/env python3 +""" +키움 저장조건식 → 현재 매칭 종목 1회 조회 (HTS 실검 대조용) +============================================================ + +실매 봇 RAM/히스토리 sticky 가 아니라, 키움 WS 로 CNSRREQ 초기 응답을 +받아 **지금 서버 조건식이 뽑는 종목**을 출력한다. + +흐름: + LOGIN → CNSRLST → (이름/seq로) CNSRREQ → 초기 data 출력 → CNSRCLR → 종료 + +주의: + - 실매 ``kis_trader_main`` 과 **같은 키움 계정** 을 쓴다. + 이미 실시간 등록된 seq 면 900003 이 날 수 있어, 1회 CLR→REQ 후 다시 CLR 한다. + - 장후에는 편입/이탈 push 가 거의 없고, 초기 리스트만 의미 있다. + - 주문·조건식 저장은 하지 않는다. + +사용: + cd /home/hoon/kis_bot + python3 -u scripts/query_kiwoom_condition_snapshot.py + python3 -u scripts/query_kiwoom_condition_snapshot.py --name momentum + python3 -u scripts/query_kiwoom_condition_snapshot.py --seq 3 + python3 -u scripts/query_kiwoom_condition_snapshot.py --name momentum --compare-db + +로그: + logs/kiwoom_cond_snapshot_YYYYMMDD_HHMMSS.log +""" +from __future__ import annotations + +import argparse +import json +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)) + +from kis_trader.utils.env import get_env_from_db # noqa: E402 +from kis_trader.ws.kis_ws import _get_kiwoom_token_cached # noqa: E402 + + +def _load_kiwoom_creds() -> Tuple[str, str, bool]: + kw_mock_raw = (get_env_from_db("KIWOOM_MOCK", "") or "").strip().lower() + is_mock = kw_mock_raw in ("1", "true", "y", "yes", "on") + if is_mock: + key = (get_env_from_db("KIWOOM_APP_KEY_MOCK", "") or "").strip() + secret = (get_env_from_db("KIWOOM_APP_SECRET_MOCK", "") or "").strip() + else: + key = (get_env_from_db("KIWOOM_APP_KEY_REAL", "") or "").strip() + secret = (get_env_from_db("KIWOOM_APP_SECRET_REAL", "") or "").strip() + if not key or not secret: + key = key or (get_env_from_db("KIWOOM_APP_KEY", "") or "").strip() + secret = secret or (get_env_from_db("KIWOOM_APP_SECRET", "") or "").strip() + return key, secret, is_mock + + +def _seq_name(item: Any) -> Tuple[str, str]: + if isinstance(item, (list, tuple)): + return ( + str(item[0]) if len(item) > 0 else "", + str(item[1]) if len(item) > 1 else "", + ) + if isinstance(item, dict): + return str(item.get("seq") or ""), str(item.get("name") or "") + return "", "" + + +def _extract_code(item: Any) -> str: + raw = "" + if isinstance(item, dict): + raw = str(item.get("9001") or item.get("jmcode") or item.get("code") or "").strip() + elif isinstance(item, (list, tuple)) and item: + raw = str(item[0]).strip() + if not raw: + return "" + # 키움 조건검색 응답은 종종 'A005930' 형태 — 비교·표시용으로 A 접두 제거 + if len(raw) >= 7 and raw[0] in ("A", "a") and raw[1:].isdigit(): + return raw[1:] + if raw.upper().startswith("A") and len(raw) == 7: + return raw[1:] + return raw + + +def _resolve_names(codes: List[str]) -> Dict[str, str]: + """DB 히스토리에서 종목명 보강 (없으면 코드 그대로).""" + out: Dict[str, str] = {c: c for c in codes} + if not codes: + return out + try: + from database import TradeDB + + db = TradeDB() + try: + for c in codes: + row = db.conn.execute( + "SELECT name FROM target_candidates_history " + "WHERE code=%s AND name IS NOT NULL AND name<>'' AND name<>code " + "ORDER BY id DESC LIMIT 1", + (c,), + ).fetchone() + if row and row.get("name"): + out[c] = str(row["name"]) + continue + row2 = db.conn.execute( + "SELECT name FROM ls_candidates_history " + "WHERE code=%s AND name IS NOT NULL AND name<>'' AND name<>code " + "ORDER BY id DESC LIMIT 1", + (c,), + ).fetchone() + if row2 and row2.get("name"): + out[c] = str(row2["name"]) + finally: + db.close() + except Exception as e: + print(f"⚠️ 종목명 DB 보강 스킵: {e}") + return out + + +def _latest_db_universe(strategy_id: str = "MOMENTUM") -> Tuple[str, List[str]]: + from database import TradeDB + + db = TradeDB() + try: + slot = db.conn.execute( + "SELECT slot_key FROM target_candidates_history " + "WHERE strategy_id=%s GROUP BY slot_key ORDER BY slot_key DESC LIMIT 1", + (strategy_id,), + ).fetchone() + if not slot: + return "", [] + sk = str(slot["slot_key"]) + rows = db.conn.execute( + "SELECT code FROM target_candidates_history " + "WHERE strategy_id=%s AND slot_key=%s ORDER BY code", + (strategy_id, sk), + ).fetchall() + return sk, [str(r["code"]) for r in rows] + finally: + db.close() + + +def query_snapshot( + *, + name: str = "momentum", + seq: str = "", + search_type: str = "1", + timeout_sec: float = 25.0, + log_path: Optional[Path] = None, +) -> Dict[str, Any]: + try: + import websocket + except Exception as e: + raise RuntimeError(f"websocket-client 미설치: {e}") from e + + key, secret, is_mock = _load_kiwoom_creds() + if not key or not secret: + raise RuntimeError("키움 앱키/시크릿 미설정 (KIWOOM_APP_KEY_REAL 등)") + + token = _get_kiwoom_token_cached(key, secret, is_mock) + if not token: + raise RuntimeError("키움 토큰 발급 실패 (au10001)") + + url = ( + get_env_from_db("KIWOOM_WS_URL_MOCK", "wss://mockapi.kiwoom.com:10000/api/dostk/websocket") + if is_mock + else get_env_from_db("KIWOOM_WS_URL_REAL", "wss://api.kiwoom.com:10000/api/dostk/websocket") + ) + + st: Dict[str, Any] = { + "seq": (seq or "").strip(), + "name": (name or "").strip(), + "conditions": [], + "codes": [], + "error": None, + "done": False, + "cleared": False, + "retried_900003": False, + "raw_cnsrreq": None, + "mock": is_mock, + "url": url, + } + lock = threading.Lock() + + def _log(msg: str) -> None: + line = f"[{datetime.now().strftime('%H:%M:%S')}] {msg}" + print(line, flush=True) + if log_path: + with open(log_path, "a", encoding="utf-8") as f: + f.write(line + "\n") + + def _send(ws, payload: dict) -> None: + ws.send(json.dumps(payload)) + + def on_open(ws): + _log("LOGIN 발송") + _send(ws, {"trnm": "LOGIN", "token": token}) + + def on_message(ws, message): + try: + data = json.loads(message) + except Exception: + _log(f"non-json: {str(message)[:200]}") + return + trnm = data.get("trnm") + if trnm == "PING": + try: + ws.send(message) + except Exception: + pass + return + + if trnm == "LOGIN": + rc = str(data.get("return_code")) + if rc not in ("0", "0.0"): + st["error"] = f"LOGIN 실패 rc={rc} msg={data.get('return_msg')}" + ws.close() + return + _log("LOGIN OK → CNSRLST") + _send(ws, {"trnm": "CNSRLST"}) + return + + if trnm == "CNSRLST": + items = data.get("data") or [] + st["conditions"] = [ + {"seq": a, "name": b} for a, b in (_seq_name(it) for it in items) if a or b + ] + _log( + "저장조건식 %d개: %s" + % ( + len(st["conditions"]), + ", ".join(f"{c['seq']}:{c['name']}" for c in st["conditions"]), + ) + ) + target_seq = st["seq"] + if not target_seq: + want = st["name"].lower() + for c in st["conditions"]: + if str(c["name"]).strip().lower() == want: + target_seq = str(c["seq"]) + break + if not target_seq: + st["error"] = f"조건식 없음 name={st['name']!r} seq={st['seq']!r}" + ws.close() + return + st["seq"] = target_seq + _log( + f"CNSRREQ seq={target_seq} name={st['name'] or '?'} " + f"search_type={search_type}" + ) + _send( + ws, + { + "trnm": "CNSRREQ", + "seq": target_seq, + "search_type": str(search_type), + "stex_tp": "K", + }, + ) + return + + if trnm == "CNSRREQ": + st["raw_cnsrreq"] = data + rc = str(data.get("return_code")) + msg = str(data.get("return_msg") or "") + if rc == "900003" and not st["retried_900003"]: + st["retried_900003"] = True + _log(f"900003 이미등록 → CNSRCLR 1회 후 재요청 seq={st['seq']}") + _send(ws, {"trnm": "CNSRCLR", "seq": st["seq"]}) + return + if rc not in ("0", "0.0"): + st["error"] = f"CNSRREQ 실패 rc={rc} msg={msg}" + try: + _send(ws, {"trnm": "CNSRCLR", "seq": st["seq"]}) + except Exception: + pass + ws.close() + return + codes = [_extract_code(it) for it in (data.get("data") or [])] + codes = sorted({c for c in codes if c}) + st["codes"] = codes + _log(f"CNSRREQ OK — 매칭 {len(codes)}종목") + _send(ws, {"trnm": "CNSRCLR", "seq": st["seq"]}) + return + + if trnm == "CNSRCLR": + rc = str(data.get("return_code")) + _log(f"CNSRCLR rc={rc}") + # 900003 재시도 경로: CLR 후 다시 REQ + if st["retried_900003"] and not st["codes"] and not st.get("_req_after_clr"): + st["_req_after_clr"] = True + time.sleep(0.8) + _log(f"CLR 후 CNSRREQ 재발송 seq={st['seq']}") + _send( + ws, + { + "trnm": "CNSRREQ", + "seq": st["seq"], + "search_type": str(search_type), + "stex_tp": "K", + }, + ) + return + st["cleared"] = True + st["done"] = True + ws.close() + return + + _log(f"기타 {trnm}: {json.dumps(data, ensure_ascii=False)[:240]}") + + def on_error(ws, err): + with lock: + if not st["error"]: + st["error"] = f"WS 오류: {err}" + _log(f"WS error: {err}") + + def on_close(ws, code, msg): + st["done"] = True + + ws = websocket.WebSocketApp( + url, + on_open=on_open, + on_message=on_message, + on_error=on_error, + on_close=on_close, + ) + th = threading.Thread( + target=ws.run_forever, + kwargs={"ping_interval": 0}, + daemon=True, + ) + th.start() + + deadline = time.time() + float(timeout_sec) + while time.time() < deadline and not st["done"]: + if st["error"] and not st.get("_req_after_clr"): + # 에러 후 CLR 대기 중일 수 있음 + if "CNSRREQ 실패" in str(st["error"]): + time.sleep(0.5) + break + time.sleep(0.15) + + try: + ws.close() + except Exception: + pass + th.join(timeout=3.0) + + if st["error"] and not st["codes"]: + raise RuntimeError(st["error"]) + return st + + +def main() -> int: + ap = argparse.ArgumentParser(description="키움 조건식 현재 매칭 종목 1회 조회") + ap.add_argument("--name", default="momentum", help="조건식 이름 (기본 momentum)") + ap.add_argument("--seq", default="", help="seq 직접 지정 시 이름 무시") + ap.add_argument( + "--search-type", + default="1", + help="CNSRREQ search_type (봇과 동일 기본 1)", + ) + ap.add_argument("--timeout", type=float, default=25.0) + ap.add_argument( + "--compare-db", + action="store_true", + help="target_candidates_history 최신 MOMENTUM 슬롯과 비교", + ) + ap.add_argument( + "--strategy-id", + default="MOMENTUM", + help="--compare-db 시 history strategy_id", + ) + args = ap.parse_args() + + log_dir = ROOT / "logs" + log_dir.mkdir(parents=True, exist_ok=True) + ts = datetime.now().strftime("%Y%m%d_%H%M%S") + log_path = log_dir / f"kiwoom_cond_snapshot_{ts}.log" + + print(f"📝 log: {log_path}") + print( + "⚠️ 실매 봇과 동일 키움 계정 — 조회 후 CNSRCLR 함. " + "장중엔 봇 조건등록과 순간 충돌 가능." + ) + + try: + st = query_snapshot( + name=args.name, + seq=args.seq, + search_type=args.search_type, + timeout_sec=args.timeout, + log_path=log_path, + ) + except Exception as e: + print(f"❌ {e}") + return 1 + + codes: List[str] = list(st.get("codes") or []) + names = _resolve_names(codes) + + print() + print("=" * 60) + print( + f"키움 조건식 스냅샷 name={args.name!r} seq={st.get('seq')} " + f"매칭={len(codes)}종 mock={st.get('mock')}" + ) + print("=" * 60) + if not codes: + print("(매칭 종목 없음)") + else: + for i, c in enumerate(codes, 1): + print(f" {i:2d}. {c} {names.get(c, c)}") + print("=" * 60) + + if args.compare_db: + sk, db_codes = _latest_db_universe(args.strategy_id) + db_set: Set[str] = set(db_codes) + live_set: Set[str] = set(codes) + only_api = sorted(live_set - db_set) + only_db = sorted(db_set - live_set) + both = sorted(live_set & db_set) + print() + print(f"[DB 비교] strategy={args.strategy_id} latest_slot={sk} n={len(db_codes)}") + print(f" 교집합 {len(both)}: {both}") + print(f" API만 {len(only_api)}: {only_api}") + print(f" DB만(sticky) {len(only_db)}: {only_db}") + + with open(log_path, "a", encoding="utf-8") as f: + f.write( + json.dumps( + { + "seq": st.get("seq"), + "name": args.name, + "codes": codes, + "names": names, + "conditions": st.get("conditions"), + }, + ensure_ascii=False, + indent=2, + ) + + "\n" + ) + print(f"✅ 완료 — {log_path}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/run_optuna_4strat_tpe_seq.sh b/scripts/run_optuna_4strat_tpe_seq.sh index 53e27d0..cef2063 100755 --- a/scripts/run_optuna_4strat_tpe_seq.sh +++ b/scripts/run_optuna_4strat_tpe_seq.sh @@ -26,6 +26,8 @@ MIN_PF="${MIN_PF:-0}" # STRATEGIES="momentum tail" bash ... # STRATEGIES="us_momentum momentum" bash ... STRATEGIES="${STRATEGIES:-momentum tail breakout scalp}" +# kiwoom|ls — 웹 Optuna 이력소스 / CLI UNIVERSE_HISTORY_SOURCE +UNIVERSE_HISTORY_SOURCE="${UNIVERSE_HISTORY_SOURCE:-${BACKTEST_UNIVERSE_HISTORY_SOURCE:-kiwoom}}" PY="${PY:-.venv/bin/python}" TS0="$(date +%Y%m%d_%H%M%S)" MASTER="logs/optuna_4strat_tpe_${START}_${END}_${TS0}_master.log" @@ -34,6 +36,7 @@ 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 "UNIVERSE_HISTORY_SOURCE=$UNIVERSE_HISTORY_SOURCE" 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" @@ -55,7 +58,7 @@ run_one() { { echo "" - echo "-------- [$strat] START $(date -Is) study=$study --------" + echo "-------- [$strat] START $(date -Is) study=$study univ=$UNIVERSE_HISTORY_SOURCE --------" } | tee -a "$MASTER" echo "$log" > "logs/optuna_${strat}_tpe_latest.logpath" echo "$study" > "logs/optuna_${strat}_tpe_latest.study" @@ -74,6 +77,7 @@ run_one() { --no-progress \ --study-name "$study" \ --sort-by "$sort_by" \ + --universe-history-source "$UNIVERSE_HISTORY_SOURCE" \ >"$log" 2>&1 local rc=$? set -e diff --git a/scripts/run_strategy_backtest_cli.py b/scripts/run_strategy_backtest_cli.py index 681dc61..d8209d8 100644 --- a/scripts/run_strategy_backtest_cli.py +++ b/scripts/run_strategy_backtest_cli.py @@ -170,16 +170,28 @@ def main() -> int: hb = threading.Thread(target=_heartbeat, args=(prog_file, stop_hb), daemon=True) hb.start() _write_progress(prog_file, pct=30, phase="engine", message="웹엔진 실행중") + data = None + http_status = 200 try: with bw.app.test_request_context(f"{path}?{qs}"): resp = fn() if isinstance(resp, tuple): + # Flask: (jsonify(...), 500) — 본문만 취하면 실패를 성공으로 오인함 + http_status = int(resp[1]) if len(resp) > 1 else 200 resp = resp[0] + elif hasattr(resp, "status_code"): + try: + http_status = int(resp.status_code) + except (TypeError, ValueError): + http_status = 200 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"))) + # 핸들러가 jsonify({"error": ...}, 500) 을 주면 summary 없이 error 만 옴 + if http_status >= 400 or ( + data.get("error") and not data.get("summary") + ): + raise RuntimeError(str(data.get("error") or f"HTTP {http_status}")) finally: stop_hb.set() try: @@ -187,10 +199,14 @@ def main() -> int: except Exception: pass + if not isinstance(data, dict): + raise RuntimeError("백테 응답 없음") + elapsed = time.time() - t0 summary = data.get("summary") or {} trades = data.get("trades") or [] out = dict(data) + out.pop("error", None) out["ok"] = True out["job_id"] = job_id out["kind"] = "strategy_bt_cli" diff --git a/static/js/backtest.js b/static/js/backtest.js index 290dadf..a120840 100644 --- a/static/js/backtest.js +++ b/static/js/backtest.js @@ -2535,6 +2535,7 @@ function runMomentumBacktest() { mom_rsi_max: v('mom_rsi_max'), mom_vol_mult: v('mom_vol_mult'), mom_vol_win: v('mom_vol_win'), + e_min_chg_pct: v('mom_e_min_chg') || '0.2', mom_time_end: v('mom_time_end_buy'), mom_max_from_open_pct: v('mom_max_from_open') || '999', mom_min_from_open_pct: v('mom_min_from_open') || '-999', @@ -3622,6 +3623,7 @@ function saveMomentumConfig() { mom_rsi_max: parseFloat($('mom_rsi_max').value), mom_vol_mult: parseFloat($('mom_vol_mult').value), mom_vol_win: parseInt($('mom_vol_win').value, 10), + e_min_chg_pct: parseFloat($('mom_e_min_chg')?.value || '0.2'), mom_time_end: parseInt($('mom_time_end_buy').value, 10), mom_max_from_open_pct: parseFloat($('mom_max_from_open')?.value || '999'), mom_min_from_open_pct: parseFloat($('mom_min_from_open')?.value || '-999'), @@ -4105,6 +4107,7 @@ function fillMomentumFormFromApi(m) { set('mom_rsi_max', m.mom_rsi_max); set('mom_vol_mult', m.mom_vol_mult); set('mom_vol_win', m.mom_vol_win); + set('mom_e_min_chg', m.e_min_chg_pct); set('mom_time_end_buy', m.mom_time_end_hm); set('mom_time_start', m.mom_time_start_hm); if (m.eod_enabled !== undefined && $('mom_eod_enabled')) { @@ -4257,6 +4260,7 @@ function momRenderParamSearch(top, meta) { mom_rsi_min: 'RSI min', mom_rsi_max: 'RSI max', mom_vol_mult: '거래량×', + e_min_chg_pct: '전일종가+%', mom_vol_win: '관찰봉', sl_pct: '손절%', tp_pct: '익절%', @@ -5459,6 +5463,20 @@ async function btJobLoadResult(jobId, strategy) { if (!rd.ok) throw new Error(rd.error || '결과 없음'); const strat = strategy || rd.strategy || 'tail'; const payload = rd.data || rd.raw || rd; + // 과거 CLI 버그: 핸들러 500을 ok:true + error 로 저장 → 새로고침마다 alert 재발 + const failMsg = (payload && payload.error) || rd.error || ''; + if (failMsg) { + const cfg = BTJOB_CFG[strat] || BTJOB_CFG.tail; + const stEl = cfg.tabStatus && $(cfg.tabStatus); + if (stEl) { + stEl.textContent = '실패(구잡): ' + String(failMsg).slice(0, 120) + ' · 다시 실행하세요'; + } + _btJobId = ''; + localStorage.removeItem(BTJOB_LS_KEY); + localStorage.removeItem(BTJOB_LS_KEY_LEGACY); + btJobSetNav(null); + throw new Error(String(failMsg)); + } if (strat === 'scalp') { renderBacktest(payload); } else if (strat === 'breakout') { @@ -7885,15 +7903,20 @@ async function optunaStart() { const end = $('opt_end')?.value; const trials = parseInt($('opt_trials')?.value || '200', 10); const mode = $('opt_mode')?.value || 'tpe'; + const univSrc = univHistorySourceParam('opt_univ_history_source'); 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; + const srcLabel = univSrc === 'ls' ? 'LS' : '키움'; + if (!confirm(`Optuna 시작?\n${how}: ${strategies.join(', ')}\n${start}~${end} trials=${trials}\n이력소스=${srcLabel}\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 }), + body: JSON.stringify({ + strategies, start, end, trials, mode, + universe_history_source: univSrc, + }), }); const j = await r.json(); if (!j.ok) { alert('❌ ' + (j.error || '시작 실패')); return; } diff --git a/templates/backtest.html b/templates/backtest.html index c259fa0..fe9725e 100644 --- a/templates/backtest.html +++ b/templates/backtest.html @@ -2251,6 +2251,10 @@ +
+ + +
@@ -3687,13 +3691,20 @@
+
+ + +
- 탐색 게이트 WR/PF=0 · 사후=results_gated · 안정=results_stable · DB 자동적용 안 함 · 2개 이상=순차(병렬 아님) + 탐색 게이트 WR/PF=0 · 사후=results_gated · 안정=results_stable · DB 자동적용 안 함 · 2개 이상=순차(병렬 아님) · 이력소스=저장 후보 테이블